mirror of
https://github.com/minetest/minetest.git
synced 2024-11-23 08:03:45 +01:00
Add set_breath and get_breath to lua API.
This commit is contained in:
parent
ab145c8827
commit
d19c8b815d
@ -1547,6 +1547,11 @@ Player-only: (no-op for other objects)
|
|||||||
- get_look_yaw(): yaw in radians (wraps around pretty randomly as of now)
|
- get_look_yaw(): yaw in radians (wraps around pretty randomly as of now)
|
||||||
- set_look_pitch(radians): sets look pitch
|
- set_look_pitch(radians): sets look pitch
|
||||||
- set_look_yaw(radians): sets look yaw
|
- set_look_yaw(radians): sets look yaw
|
||||||
|
- get_breath() : returns players breath
|
||||||
|
- set_breath(value) : sets players breath
|
||||||
|
values: 0 player is drowning,
|
||||||
|
1-10 number of bubbles remain,
|
||||||
|
11 bubbles bar is not shown
|
||||||
- set_inventory_formspec(formspec)
|
- set_inventory_formspec(formspec)
|
||||||
^ Redefine player's inventory form
|
^ Redefine player's inventory form
|
||||||
^ Should usually be called in on_joinplayer
|
^ Should usually be called in on_joinplayer
|
||||||
|
@ -692,9 +692,14 @@ void Client::step(float dtime)
|
|||||||
m_client_event_queue.push_back(event);
|
m_client_event_queue.push_back(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(event.type == CEE_PLAYER_BREATH)
|
||||||
|
{
|
||||||
|
u16 breath = event.player_breath.amount;
|
||||||
|
sendBreath(breath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Print some info
|
Print some info
|
||||||
*/
|
*/
|
||||||
@ -1579,6 +1584,15 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
|
|||||||
m_client_event_queue.push_back(event);
|
m_client_event_queue.push_back(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(command == TOCLIENT_BREATH)
|
||||||
|
{
|
||||||
|
std::string datastring((char*)&data[2], datasize-2);
|
||||||
|
std::istringstream is(datastring, std::ios_base::binary);
|
||||||
|
Player *player = m_env.getLocalPlayer();
|
||||||
|
assert(player != NULL);
|
||||||
|
u16 breath = readU16(is);
|
||||||
|
player->setBreath(breath) ;
|
||||||
|
}
|
||||||
else if(command == TOCLIENT_MOVE_PLAYER)
|
else if(command == TOCLIENT_MOVE_PLAYER)
|
||||||
{
|
{
|
||||||
std::string datastring((char*)&data[2], datasize-2);
|
std::string datastring((char*)&data[2], datasize-2);
|
||||||
@ -2359,6 +2373,20 @@ void Client::sendDamage(u8 damage)
|
|||||||
Send(0, data, true);
|
Send(0, data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Client::sendBreath(u16 breath)
|
||||||
|
{
|
||||||
|
DSTACK(__FUNCTION_NAME);
|
||||||
|
std::ostringstream os(std::ios_base::binary);
|
||||||
|
|
||||||
|
writeU16(os, TOSERVER_BREATH);
|
||||||
|
writeU16(os, breath);
|
||||||
|
// Make data buffer
|
||||||
|
std::string s = os.str();
|
||||||
|
SharedBuffer<u8> data((u8*)s.c_str(), s.size());
|
||||||
|
// Send as reliable
|
||||||
|
Send(0, data, true);
|
||||||
|
}
|
||||||
|
|
||||||
void Client::sendRespawn()
|
void Client::sendRespawn()
|
||||||
{
|
{
|
||||||
DSTACK(__FUNCTION_NAME);
|
DSTACK(__FUNCTION_NAME);
|
||||||
@ -2694,7 +2722,7 @@ u16 Client::getBreath()
|
|||||||
{
|
{
|
||||||
Player *player = m_env.getLocalPlayer();
|
Player *player = m_env.getLocalPlayer();
|
||||||
assert(player != NULL);
|
assert(player != NULL);
|
||||||
return player->breath;
|
return player->getBreath();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::getChatMessage(std::wstring &message)
|
bool Client::getChatMessage(std::wstring &message)
|
||||||
|
@ -306,6 +306,7 @@ public:
|
|||||||
void sendChangePassword(const std::wstring oldpassword,
|
void sendChangePassword(const std::wstring oldpassword,
|
||||||
const std::wstring newpassword);
|
const std::wstring newpassword);
|
||||||
void sendDamage(u8 damage);
|
void sendDamage(u8 damage);
|
||||||
|
void sendBreath(u16 breath);
|
||||||
void sendRespawn();
|
void sendRespawn();
|
||||||
|
|
||||||
ClientEnvironment& getEnv()
|
ClientEnvironment& getEnv()
|
||||||
|
@ -488,6 +488,12 @@ enum ToClientCommand
|
|||||||
u16 len
|
u16 len
|
||||||
u8[len] value
|
u8[len] value
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
TOCLIENT_BREATH = 0x4e,
|
||||||
|
/*
|
||||||
|
u16 command
|
||||||
|
u16 breath
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ToServerCommand
|
enum ToServerCommand
|
||||||
@ -711,6 +717,12 @@ enum ToServerCommand
|
|||||||
/*
|
/*
|
||||||
u16 command
|
u16 command
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
TOSERVER_BREATH = 0x42,
|
||||||
|
/*
|
||||||
|
u16 command
|
||||||
|
u16 breath
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -935,6 +935,7 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
|
|||||||
m_moved(false),
|
m_moved(false),
|
||||||
m_inventory_not_sent(false),
|
m_inventory_not_sent(false),
|
||||||
m_hp_not_sent(false),
|
m_hp_not_sent(false),
|
||||||
|
m_breath_not_sent(false),
|
||||||
m_wielded_item_not_sent(false),
|
m_wielded_item_not_sent(false),
|
||||||
m_physics_override_speed(1),
|
m_physics_override_speed(1),
|
||||||
m_physics_override_jump(1),
|
m_physics_override_jump(1),
|
||||||
@ -1370,6 +1371,16 @@ void PlayerSAO::setHP(s16 hp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u16 PlayerSAO::getBreath() const
|
||||||
|
{
|
||||||
|
return m_player->getBreath();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerSAO::setBreath(u16 breath)
|
||||||
|
{
|
||||||
|
m_player->setBreath(breath);
|
||||||
|
}
|
||||||
|
|
||||||
void PlayerSAO::setArmorGroups(const ItemGroupList &armor_groups)
|
void PlayerSAO::setArmorGroups(const ItemGroupList &armor_groups)
|
||||||
{
|
{
|
||||||
m_armor_groups = armor_groups;
|
m_armor_groups = armor_groups;
|
||||||
|
@ -162,7 +162,8 @@ public:
|
|||||||
void rightClick(ServerActiveObject *clicker);
|
void rightClick(ServerActiveObject *clicker);
|
||||||
s16 getHP() const;
|
s16 getHP() const;
|
||||||
void setHP(s16 hp);
|
void setHP(s16 hp);
|
||||||
|
u16 getBreath() const;
|
||||||
|
void setBreath(u16 breath);
|
||||||
void setArmorGroups(const ItemGroupList &armor_groups);
|
void setArmorGroups(const ItemGroupList &armor_groups);
|
||||||
void setAnimation(v2f frame_range, float frame_speed, float frame_blend);
|
void setAnimation(v2f frame_range, float frame_speed, float frame_blend);
|
||||||
void setBonePosition(std::string bone, v3f position, v3f rotation);
|
void setBonePosition(std::string bone, v3f position, v3f rotation);
|
||||||
@ -282,6 +283,7 @@ public:
|
|||||||
bool m_moved;
|
bool m_moved;
|
||||||
bool m_inventory_not_sent;
|
bool m_inventory_not_sent;
|
||||||
bool m_hp_not_sent;
|
bool m_hp_not_sent;
|
||||||
|
bool m_breath_not_sent;
|
||||||
bool m_wielded_item_not_sent;
|
bool m_wielded_item_not_sent;
|
||||||
|
|
||||||
float m_physics_override_speed;
|
float m_physics_override_speed;
|
||||||
|
@ -2242,15 +2242,19 @@ void ClientEnvironment::step(float dtime)
|
|||||||
v3s16 p = floatToInt(pf + v3f(0, BS*1.6, 0), BS);
|
v3s16 p = floatToInt(pf + v3f(0, BS*1.6, 0), BS);
|
||||||
MapNode n = m_map->getNodeNoEx(p);
|
MapNode n = m_map->getNodeNoEx(p);
|
||||||
ContentFeatures c = m_gamedef->ndef()->get(n);
|
ContentFeatures c = m_gamedef->ndef()->get(n);
|
||||||
|
if(c.isLiquid() && c.drowning && lplayer->hp > 0){
|
||||||
if(c.isLiquid() && c.drowning){
|
u16 breath = lplayer->getBreath();
|
||||||
if(lplayer->breath > 10)
|
if(breath > 10){
|
||||||
lplayer->breath = 11;
|
breath = 11;
|
||||||
if(lplayer->breath > 0)
|
}
|
||||||
lplayer->breath -= 1;
|
if(breath > 0){
|
||||||
|
breath -= 1;
|
||||||
|
}
|
||||||
|
lplayer->setBreath(breath);
|
||||||
|
updateLocalPlayerBreath(breath);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lplayer->breath == 0){
|
if(lplayer->getBreath() == 0){
|
||||||
damageLocalPlayer(1, true);
|
damageLocalPlayer(1, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2262,10 +2266,16 @@ void ClientEnvironment::step(float dtime)
|
|||||||
v3s16 p = floatToInt(pf + v3f(0, BS*1.6, 0), BS);
|
v3s16 p = floatToInt(pf + v3f(0, BS*1.6, 0), BS);
|
||||||
MapNode n = m_map->getNodeNoEx(p);
|
MapNode n = m_map->getNodeNoEx(p);
|
||||||
ContentFeatures c = m_gamedef->ndef()->get(n);
|
ContentFeatures c = m_gamedef->ndef()->get(n);
|
||||||
|
if (!lplayer->hp){
|
||||||
if(!c.isLiquid() || !c.drowning){
|
lplayer->setBreath(11);
|
||||||
if(lplayer->breath <= 10)
|
}
|
||||||
lplayer->breath += 1;
|
else if(!c.isLiquid() || !c.drowning){
|
||||||
|
u16 breath = lplayer->getBreath();
|
||||||
|
if(breath <= 10){
|
||||||
|
breath += 1;
|
||||||
|
lplayer->setBreath(breath);
|
||||||
|
updateLocalPlayerBreath(breath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2528,6 +2538,14 @@ void ClientEnvironment::damageLocalPlayer(u8 damage, bool handle_hp)
|
|||||||
m_client_event_queue.push_back(event);
|
m_client_event_queue.push_back(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClientEnvironment::updateLocalPlayerBreath(u16 breath)
|
||||||
|
{
|
||||||
|
ClientEnvEvent event;
|
||||||
|
event.type = CEE_PLAYER_BREATH;
|
||||||
|
event.player_breath.amount = breath;
|
||||||
|
m_client_event_queue.push_back(event);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Client likes to call these
|
Client likes to call these
|
||||||
*/
|
*/
|
||||||
|
@ -395,7 +395,8 @@ class ClientSimpleObject;
|
|||||||
enum ClientEnvEventType
|
enum ClientEnvEventType
|
||||||
{
|
{
|
||||||
CEE_NONE,
|
CEE_NONE,
|
||||||
CEE_PLAYER_DAMAGE
|
CEE_PLAYER_DAMAGE,
|
||||||
|
CEE_PLAYER_BREATH
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ClientEnvEvent
|
struct ClientEnvEvent
|
||||||
@ -408,6 +409,9 @@ struct ClientEnvEvent
|
|||||||
u8 amount;
|
u8 amount;
|
||||||
bool send_to_server;
|
bool send_to_server;
|
||||||
} player_damage;
|
} player_damage;
|
||||||
|
struct{
|
||||||
|
u16 amount;
|
||||||
|
} player_breath;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -462,6 +466,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void damageLocalPlayer(u8 damage, bool handle_hp=true);
|
void damageLocalPlayer(u8 damage, bool handle_hp=true);
|
||||||
|
void updateLocalPlayerBreath(u16 breath);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Client likes to call these
|
Client likes to call these
|
||||||
|
@ -36,10 +36,10 @@ Player::Player(IGameDef *gamedef):
|
|||||||
camera_barely_in_ceiling(false),
|
camera_barely_in_ceiling(false),
|
||||||
inventory(gamedef->idef()),
|
inventory(gamedef->idef()),
|
||||||
hp(PLAYER_MAX_HP),
|
hp(PLAYER_MAX_HP),
|
||||||
breath(-1),
|
|
||||||
peer_id(PEER_ID_INEXISTENT),
|
peer_id(PEER_ID_INEXISTENT),
|
||||||
// protected
|
// protected
|
||||||
m_gamedef(gamedef),
|
m_gamedef(gamedef),
|
||||||
|
m_breath(-1),
|
||||||
m_pitch(0),
|
m_pitch(0),
|
||||||
m_yaw(0),
|
m_yaw(0),
|
||||||
m_speed(0,0,0),
|
m_speed(0,0,0),
|
||||||
@ -177,11 +177,12 @@ void Player::serialize(std::ostream &os)
|
|||||||
args.setFloat("yaw", m_yaw);
|
args.setFloat("yaw", m_yaw);
|
||||||
args.setV3F("position", m_position);
|
args.setV3F("position", m_position);
|
||||||
args.setS32("hp", hp);
|
args.setS32("hp", hp);
|
||||||
|
args.setS32("breath", m_breath);
|
||||||
|
|
||||||
args.writeLines(os);
|
args.writeLines(os);
|
||||||
|
|
||||||
os<<"PlayerArgsEnd\n";
|
os<<"PlayerArgsEnd\n";
|
||||||
|
|
||||||
inventory.serialize(os);
|
inventory.serialize(os);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,6 +214,11 @@ void Player::deSerialize(std::istream &is, std::string playername)
|
|||||||
}catch(SettingNotFoundException &e){
|
}catch(SettingNotFoundException &e){
|
||||||
hp = 20;
|
hp = 20;
|
||||||
}
|
}
|
||||||
|
try{
|
||||||
|
m_breath = args.getS32("breath");
|
||||||
|
}catch(SettingNotFoundException &e){
|
||||||
|
m_breath = 11;
|
||||||
|
}
|
||||||
|
|
||||||
inventory.deSerialize(is);
|
inventory.deSerialize(is);
|
||||||
|
|
||||||
|
14
src/player.h
14
src/player.h
@ -160,6 +160,16 @@ public:
|
|||||||
return m_yaw;
|
return m_yaw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u16 getBreath()
|
||||||
|
{
|
||||||
|
return m_breath;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void setBreath(u16 breath)
|
||||||
|
{
|
||||||
|
m_breath = breath;
|
||||||
|
}
|
||||||
|
|
||||||
f32 getRadPitch()
|
f32 getRadPitch()
|
||||||
{
|
{
|
||||||
return -1.0 * m_pitch * core::DEGTORAD;
|
return -1.0 * m_pitch * core::DEGTORAD;
|
||||||
@ -249,13 +259,12 @@ public:
|
|||||||
float physics_override_gravity;
|
float physics_override_gravity;
|
||||||
|
|
||||||
u16 hp;
|
u16 hp;
|
||||||
u16 breath;
|
|
||||||
|
|
||||||
float hurt_tilt_timer;
|
float hurt_tilt_timer;
|
||||||
float hurt_tilt_strength;
|
float hurt_tilt_strength;
|
||||||
|
|
||||||
u16 peer_id;
|
u16 peer_id;
|
||||||
|
|
||||||
std::string inventory_formspec;
|
std::string inventory_formspec;
|
||||||
|
|
||||||
PlayerControl control;
|
PlayerControl control;
|
||||||
@ -274,6 +283,7 @@ protected:
|
|||||||
IGameDef *m_gamedef;
|
IGameDef *m_gamedef;
|
||||||
|
|
||||||
char m_name[PLAYERNAME_SIZE];
|
char m_name[PLAYERNAME_SIZE];
|
||||||
|
u16 m_breath;
|
||||||
f32 m_pitch;
|
f32 m_pitch;
|
||||||
f32 m_yaw;
|
f32 m_yaw;
|
||||||
v3f m_speed;
|
v3f m_speed;
|
||||||
|
@ -702,6 +702,33 @@ int ObjectRef::l_set_look_yaw(lua_State *L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set_breath(self, breath)
|
||||||
|
int ObjectRef::l_set_breath(lua_State *L)
|
||||||
|
{
|
||||||
|
NO_MAP_LOCK_REQUIRED;
|
||||||
|
ObjectRef *ref = checkobject(L, 1);
|
||||||
|
PlayerSAO* co = getplayersao(ref);
|
||||||
|
if(co == NULL) return 0;
|
||||||
|
u16 breath = luaL_checknumber(L, 2);
|
||||||
|
// Do it
|
||||||
|
co->setBreath(breath);
|
||||||
|
co->m_breath_not_sent = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get_breath(self)
|
||||||
|
int ObjectRef::l_get_breath(lua_State *L)
|
||||||
|
{
|
||||||
|
NO_MAP_LOCK_REQUIRED;
|
||||||
|
ObjectRef *ref = checkobject(L, 1);
|
||||||
|
PlayerSAO* co = getplayersao(ref);
|
||||||
|
if(co == NULL) return 0;
|
||||||
|
// Do it
|
||||||
|
u16 breath = co->getBreath();
|
||||||
|
lua_pushinteger (L, breath);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
// set_inventory_formspec(self, formspec)
|
// set_inventory_formspec(self, formspec)
|
||||||
int ObjectRef::l_set_inventory_formspec(lua_State *L)
|
int ObjectRef::l_set_inventory_formspec(lua_State *L)
|
||||||
{
|
{
|
||||||
@ -1098,6 +1125,8 @@ const luaL_reg ObjectRef::methods[] = {
|
|||||||
luamethod(ObjectRef, get_look_yaw),
|
luamethod(ObjectRef, get_look_yaw),
|
||||||
luamethod(ObjectRef, set_look_yaw),
|
luamethod(ObjectRef, set_look_yaw),
|
||||||
luamethod(ObjectRef, set_look_pitch),
|
luamethod(ObjectRef, set_look_pitch),
|
||||||
|
luamethod(ObjectRef, get_breath),
|
||||||
|
luamethod(ObjectRef, set_breath),
|
||||||
luamethod(ObjectRef, set_inventory_formspec),
|
luamethod(ObjectRef, set_inventory_formspec),
|
||||||
luamethod(ObjectRef, get_inventory_formspec),
|
luamethod(ObjectRef, get_inventory_formspec),
|
||||||
luamethod(ObjectRef, get_player_control),
|
luamethod(ObjectRef, get_player_control),
|
||||||
|
@ -179,6 +179,12 @@ private:
|
|||||||
// set_look_yaw(self, radians)
|
// set_look_yaw(self, radians)
|
||||||
static int l_set_look_yaw(lua_State *L);
|
static int l_set_look_yaw(lua_State *L);
|
||||||
|
|
||||||
|
// set_breath(self, breath)
|
||||||
|
static int l_set_breath(lua_State *L);
|
||||||
|
|
||||||
|
// get_breath(self, breath)
|
||||||
|
static int l_get_breath(lua_State *L);
|
||||||
|
|
||||||
// set_inventory_formspec(self, formspec)
|
// set_inventory_formspec(self, formspec)
|
||||||
static int l_set_inventory_formspec(lua_State *L);
|
static int l_set_inventory_formspec(lua_State *L);
|
||||||
|
|
||||||
|
@ -1139,6 +1139,13 @@ void Server::AsyncRunStep()
|
|||||||
SendPlayerHP(client->peer_id);
|
SendPlayerHP(client->peer_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Send player breath if changed
|
||||||
|
*/
|
||||||
|
if(playersao->m_breath_not_sent){
|
||||||
|
SendPlayerBreath(client->peer_id);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Send player inventories if necessary
|
Send player inventories if necessary
|
||||||
*/
|
*/
|
||||||
@ -2105,6 +2112,9 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||||||
if(g_settings->getBool("enable_damage"))
|
if(g_settings->getBool("enable_damage"))
|
||||||
SendPlayerHP(peer_id);
|
SendPlayerHP(peer_id);
|
||||||
|
|
||||||
|
// Send Breath
|
||||||
|
SendPlayerBreath(peer_id);
|
||||||
|
|
||||||
// Send detached inventories
|
// Send detached inventories
|
||||||
sendDetachedInventories(peer_id);
|
sendDetachedInventories(peer_id);
|
||||||
|
|
||||||
@ -2583,6 +2593,13 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||||||
SendPlayerHP(peer_id);
|
SendPlayerHP(peer_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(command == TOSERVER_BREATH)
|
||||||
|
{
|
||||||
|
std::string datastring((char*)&data[2], datasize-2);
|
||||||
|
std::istringstream is(datastring, std::ios_base::binary);
|
||||||
|
u16 breath = readU16(is);
|
||||||
|
playersao->setBreath(breath);
|
||||||
|
}
|
||||||
else if(command == TOSERVER_PASSWORD)
|
else if(command == TOSERVER_PASSWORD)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -3326,6 +3343,21 @@ void Server::SendHP(con::Connection &con, u16 peer_id, u8 hp)
|
|||||||
con.Send(peer_id, 0, data, true);
|
con.Send(peer_id, 0, data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Server::SendBreath(con::Connection &con, u16 peer_id, u16 breath)
|
||||||
|
{
|
||||||
|
DSTACK(__FUNCTION_NAME);
|
||||||
|
std::ostringstream os(std::ios_base::binary);
|
||||||
|
|
||||||
|
writeU16(os, TOCLIENT_BREATH);
|
||||||
|
writeU16(os, breath);
|
||||||
|
|
||||||
|
// Make data buffer
|
||||||
|
std::string s = os.str();
|
||||||
|
SharedBuffer<u8> data((u8*)s.c_str(), s.size());
|
||||||
|
// Send as reliable
|
||||||
|
con.Send(peer_id, 0, data, true);
|
||||||
|
}
|
||||||
|
|
||||||
void Server::SendAccessDenied(con::Connection &con, u16 peer_id,
|
void Server::SendAccessDenied(con::Connection &con, u16 peer_id,
|
||||||
const std::wstring &reason)
|
const std::wstring &reason)
|
||||||
{
|
{
|
||||||
@ -3755,6 +3787,15 @@ void Server::SendPlayerHP(u16 peer_id)
|
|||||||
SendHP(m_con, peer_id, playersao->getHP());
|
SendHP(m_con, peer_id, playersao->getHP());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Server::SendPlayerBreath(u16 peer_id)
|
||||||
|
{
|
||||||
|
DSTACK(__FUNCTION_NAME);
|
||||||
|
PlayerSAO *playersao = getPlayerSAO(peer_id);
|
||||||
|
assert(playersao);
|
||||||
|
playersao->m_breath_not_sent = false;
|
||||||
|
SendBreath(m_con, peer_id, playersao->getBreath());
|
||||||
|
}
|
||||||
|
|
||||||
void Server::SendMovePlayer(u16 peer_id)
|
void Server::SendMovePlayer(u16 peer_id)
|
||||||
{
|
{
|
||||||
DSTACK(__FUNCTION_NAME);
|
DSTACK(__FUNCTION_NAME);
|
||||||
|
@ -557,6 +557,7 @@ private:
|
|||||||
|
|
||||||
static void SendMovement(con::Connection &con, u16 peer_id);
|
static void SendMovement(con::Connection &con, u16 peer_id);
|
||||||
static void SendHP(con::Connection &con, u16 peer_id, u8 hp);
|
static void SendHP(con::Connection &con, u16 peer_id, u8 hp);
|
||||||
|
static void SendBreath(con::Connection &con, u16 peer_id, u16 breath);
|
||||||
static void SendAccessDenied(con::Connection &con, u16 peer_id,
|
static void SendAccessDenied(con::Connection &con, u16 peer_id,
|
||||||
const std::wstring &reason);
|
const std::wstring &reason);
|
||||||
static void SendDeathscreen(con::Connection &con, u16 peer_id,
|
static void SendDeathscreen(con::Connection &con, u16 peer_id,
|
||||||
@ -578,6 +579,7 @@ private:
|
|||||||
void SendChatMessage(u16 peer_id, const std::wstring &message);
|
void SendChatMessage(u16 peer_id, const std::wstring &message);
|
||||||
void BroadcastChatMessage(const std::wstring &message);
|
void BroadcastChatMessage(const std::wstring &message);
|
||||||
void SendPlayerHP(u16 peer_id);
|
void SendPlayerHP(u16 peer_id);
|
||||||
|
void SendPlayerBreath(u16 peer_id);
|
||||||
void SendMovePlayer(u16 peer_id);
|
void SendMovePlayer(u16 peer_id);
|
||||||
void SendPlayerPrivileges(u16 peer_id);
|
void SendPlayerPrivileges(u16 peer_id);
|
||||||
void SendPlayerInventoryFormspec(u16 peer_id);
|
void SendPlayerInventoryFormspec(u16 peer_id);
|
||||||
|
Loading…
Reference in New Issue
Block a user