Skip to content

Commit ffb17f1

Browse files
SmallJokerparamat
authored andcommittedFeb 10, 2019
Consistent HP and damage types (#8167)
Remove deprecated HUDs and chat message handling. Remove unused m_damage variable (compat break). HP: s32 for setter/calculations, u16 for getter.
1 parent ba5a9f2 commit ffb17f1

25 files changed

+67
-136
lines changed
 

Diff for: ‎src/client/client.cpp

+3-14
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ void Client::step(float dtime)
437437
ClientEnvEvent envEvent = m_env.getClientEnvEvent();
438438

439439
if (envEvent.type == CEE_PLAYER_DAMAGE) {
440-
u8 damage = envEvent.player_damage.amount;
440+
u16 damage = envEvent.player_damage.amount;
441441

442442
if (envEvent.player_damage.send_to_server)
443443
sendDamage(damage);
@@ -1213,9 +1213,9 @@ void Client::sendChangePassword(const std::string &oldpassword,
12131213
}
12141214

12151215

1216-
void Client::sendDamage(u8 damage)
1216+
void Client::sendDamage(u16 damage)
12171217
{
1218-
NetworkPacket pkt(TOSERVER_DAMAGE, sizeof(u8));
1218+
NetworkPacket pkt(TOSERVER_DAMAGE, sizeof(u16));
12191219
pkt << damage;
12201220
Send(&pkt);
12211221
}
@@ -1515,17 +1515,6 @@ void Client::typeChatMessage(const std::wstring &message)
15151515

15161516
// Send to others
15171517
sendChatMessage(message);
1518-
1519-
// Show locally
1520-
if (message[0] != L'/') {
1521-
// compatibility code
1522-
if (m_proto_ver < 29) {
1523-
LocalPlayer *player = m_env.getLocalPlayer();
1524-
assert(player);
1525-
std::wstring name = narrow_to_wide(player->getName());
1526-
pushToChatQueue(new ChatMessage(CHATMESSAGE_TYPE_NORMAL, message, name));
1527-
}
1528-
}
15291518
}
15301519

15311520
void Client::addUpdateMeshTask(v3s16 p, bool ack_to_server, bool urgent)

Diff for: ‎src/client/client.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
243243
void clearOutChatQueue();
244244
void sendChangePassword(const std::string &oldpassword,
245245
const std::string &newpassword);
246-
void sendDamage(u8 damage);
246+
void sendDamage(u16 damage);
247247
void sendRespawn();
248248
void sendReady();
249249

@@ -342,7 +342,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
342342
bool mediaReceived()
343343
{ return !m_media_downloader; }
344344

345-
u8 getProtoVersion()
345+
u16 getProtoVersion()
346346
{ return m_proto_ver; }
347347

348348
bool connectedToServer();
@@ -504,7 +504,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
504504
// and aren't accurate. We simply just don't know, because
505505
// the server didn't send the version back then.
506506
// If 0, server init hasn't been received yet.
507-
u8 m_proto_ver = 0;
507+
u16 m_proto_ver = 0;
508508

509509
u16 m_playeritem = 0;
510510
bool m_inventory_updated = false;

Diff for: ‎src/client/clientenvironment.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ void ClientEnvironment::step(float dtime)
228228
float speed = pre_factor * speed_diff.getLength();
229229
if (speed > tolerance && !player_immortal) {
230230
f32 damage_f = (speed - tolerance) / BS * post_factor;
231-
u8 damage = (u8)MYMIN(damage_f + 0.5, 255);
231+
u16 damage = (u16)MYMIN(damage_f + 0.5, U16_MAX);
232232
if (damage != 0) {
233233
damageLocalPlayer(damage, true);
234234
m_client->getEventManager()->put(
@@ -419,7 +419,7 @@ void ClientEnvironment::processActiveObjectMessage(u16 id, const std::string &da
419419
Callbacks for activeobjects
420420
*/
421421

422-
void ClientEnvironment::damageLocalPlayer(u8 damage, bool handle_hp)
422+
void ClientEnvironment::damageLocalPlayer(u16 damage, bool handle_hp)
423423
{
424424
LocalPlayer *lplayer = getLocalPlayer();
425425
assert(lplayer);

Diff for: ‎src/client/clientenvironment.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ struct ClientEnvEvent
5353
//struct{
5454
//} none;
5555
struct{
56-
u8 amount;
56+
u16 amount;
5757
bool send_to_server;
5858
} player_damage;
5959
};
@@ -115,7 +115,7 @@ class ClientEnvironment : public Environment
115115
Callbacks for activeobjects
116116
*/
117117

118-
void damageLocalPlayer(u8 damage, bool handle_hp=true);
118+
void damageLocalPlayer(u16 damage, bool handle_hp=true);
119119

120120
/*
121121
Client likes to call these

Diff for: ‎src/client/content_cao.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ void GenericCAO::processInitData(const std::string &data)
371371
m_id = readU16(is);
372372
m_position = readV3F32(is);
373373
m_rotation = readV3F32(is);
374-
m_hp = readS16(is);
374+
m_hp = readU16(is);
375375
const u8 num_messages = readU8(is);
376376

377377
for (int i = 0; i < num_messages; i++) {
@@ -1508,11 +1508,10 @@ void GenericCAO::processMessage(const std::string &data)
15081508

15091509
updateAttachments();
15101510
} else if (cmd == GENERIC_CMD_PUNCHED) {
1511-
/*s16 damage =*/ readS16(is);
1512-
s16 result_hp = readS16(is);
1511+
u16 result_hp = readU16(is);
15131512

15141513
// Use this instead of the send damage to not interfere with prediction
1515-
s16 damage = m_hp - result_hp;
1514+
s32 damage = (s32)m_hp - (s32)result_hp;
15161515

15171516
m_hp = result_hp;
15181517

Diff for: ‎src/client/content_cao.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class GenericCAO : public ClientActiveObject
8888
v3f m_velocity;
8989
v3f m_acceleration;
9090
v3f m_rotation;
91-
s16 m_hp = 1;
91+
u16 m_hp = 1;
9292
SmoothTranslator<v3f> pos_translator;
9393
SmoothTranslatorWrappedv3f rot_translator;
9494
// Spritesheet/animation stuff

Diff for: ‎src/client/hud.cpp

-19
Original file line numberDiff line numberDiff line change
@@ -475,25 +475,6 @@ void Hud::drawHotbar(u16 playeritem) {
475475
hotbar_itemcount / 2, mainlist, playeritem + 1, 0);
476476
}
477477
}
478-
479-
//////////////////////////// compatibility code to be removed //////////////
480-
// this is ugly as hell but there's no other way to keep compatibility to
481-
// old servers
482-
if ((player->hud_flags & HUD_FLAG_HEALTHBAR_VISIBLE)) {
483-
drawStatbar(v2s32(floor(0.5 * (float)m_screensize.X + 0.5),
484-
floor(1 * (float) m_screensize.Y + 0.5)),
485-
HUD_CORNER_UPPER, 0, "heart.png",
486-
player->hp, v2s32((-10*24)-25,-(48+24+10)), v2s32(24,24));
487-
}
488-
489-
if ((player->hud_flags & HUD_FLAG_BREATHBAR_VISIBLE) &&
490-
(player->getBreath() < 11)) {
491-
drawStatbar(v2s32(floor(0.5 * (float)m_screensize.X + 0.5),
492-
floor(1 * (float) m_screensize.Y + 0.5)),
493-
HUD_CORNER_UPPER, 0, "bubble.png",
494-
player->getBreath(), v2s32(25,-(48+24+10)), v2s32(24,24));
495-
}
496-
////////////////////////////////////////////////////////////////////////////
497478
}
498479

499480

Diff for: ‎src/content_sao.cpp

+20-37
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ ServerActiveObject* LuaEntitySAO::create(ServerEnvironment *env, v3f pos,
347347
{
348348
std::string name;
349349
std::string state;
350-
s16 hp = 1;
350+
u16 hp = 1;
351351
v3f velocity;
352352
v3f rotation;
353353

@@ -364,7 +364,7 @@ ServerActiveObject* LuaEntitySAO::create(ServerEnvironment *env, v3f pos,
364364
if (version < 1)
365365
break;
366366

367-
hp = readS16(is);
367+
hp = readU16(is);
368368
velocity = readV3F1000(is);
369369
// yaw must be yaw to be backwards-compatible
370370
rotation.Y = readF1000(is);
@@ -548,10 +548,10 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
548548
writeU8(os, 1); // version
549549
os << serializeString(""); // name
550550
writeU8(os, 0); // is_player
551-
writeS16(os, getId()); //id
551+
writeU16(os, getId()); //id
552552
writeV3F32(os, m_base_position);
553553
writeV3F32(os, m_rotation);
554-
writeS16(os, m_hp);
554+
writeU16(os, m_hp);
555555

556556
std::ostringstream msg_os(std::ios::binary);
557557
msg_os << serializeLongString(getPropertyPacket()); // message 1
@@ -601,7 +601,7 @@ void LuaEntitySAO::getStaticData(std::string *result) const
601601
} else {
602602
os<<serializeLongString(m_init_state);
603603
}
604-
writeS16(os, m_hp);
604+
writeU16(os, m_hp);
605605
writeV3F1000(os, m_velocity);
606606
// yaw
607607
writeF1000(os, m_rotation.Y);
@@ -646,7 +646,7 @@ int LuaEntitySAO::punch(v3f dir,
646646

647647
if (!damage_handled) {
648648
if (result.did_punch) {
649-
setHP(getHP() - result.damage,
649+
setHP((s32)getHP() - result.damage,
650650
PlayerHPChangeReason(PlayerHPChangeReason::SET_HP));
651651

652652
if (result.damage > 0) {
@@ -657,7 +657,7 @@ int LuaEntitySAO::punch(v3f dir,
657657
<< " hp, health now " << getHP() << " hp" << std::endl;
658658
}
659659

660-
std::string str = gob_cmd_punched(result.damage, getHP());
660+
std::string str = gob_cmd_punched(getHP());
661661
// create message and add to list
662662
ActiveObjectMessage aom(getId(), true, str);
663663
m_messages_out.push(aom);
@@ -715,14 +715,12 @@ std::string LuaEntitySAO::getDescription()
715715
return os.str();
716716
}
717717

718-
void LuaEntitySAO::setHP(s16 hp, const PlayerHPChangeReason &reason)
718+
void LuaEntitySAO::setHP(s32 hp, const PlayerHPChangeReason &reason)
719719
{
720-
if (hp < 0)
721-
hp = 0;
722-
m_hp = hp;
720+
m_hp = rangelim(hp, 0, U16_MAX);
723721
}
724722

725-
s16 LuaEntitySAO::getHP() const
723+
u16 LuaEntitySAO::getHP() const
726724
{
727725
return m_hp;
728726
}
@@ -949,7 +947,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
949947
writeS16(os, getId()); // id
950948
writeV3F32(os, m_base_position);
951949
writeV3F32(os, m_rotation);
952-
writeS16(os, getHP());
950+
writeU16(os, getHP());
953951

954952
std::ostringstream msg_os(std::ios::binary);
955953
msg_os << serializeLongString(getPropertyPacket()); // message 1
@@ -1044,7 +1042,7 @@ void PlayerSAO::step(float dtime, bool send_recommended)
10441042
m_env->getGameDef()->ndef()->get(ntop).damage_per_second);
10451043

10461044
if (damage_per_second != 0 && m_hp > 0) {
1047-
s16 newhp = ((s32) damage_per_second > m_hp ? 0 : m_hp - damage_per_second);
1045+
s32 newhp = (s32)m_hp - (s32)damage_per_second;
10481046
PlayerHPChangeReason reason(PlayerHPChangeReason::NODE_DAMAGE);
10491047
setHP(newhp, reason);
10501048
m_env->getGameDef()->SendPlayerHPOrDie(this, reason);
@@ -1272,7 +1270,7 @@ int PlayerSAO::punch(v3f dir,
12721270
// No effect if PvP disabled
12731271
if (!g_settings->getBool("enable_pvp")) {
12741272
if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
1275-
std::string str = gob_cmd_punched(0, getHP());
1273+
std::string str = gob_cmd_punched(getHP());
12761274
// create message and add to list
12771275
ActiveObjectMessage aom(getId(), true, str);
12781276
m_messages_out.push(aom);
@@ -1295,11 +1293,11 @@ int PlayerSAO::punch(v3f dir,
12951293
hitparams.hp);
12961294

12971295
if (!damage_handled) {
1298-
setHP(getHP() - hitparams.hp,
1296+
setHP((s32)getHP() - (s32)hitparams.hp,
12991297
PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher));
13001298
} else { // override client prediction
13011299
if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
1302-
std::string str = gob_cmd_punched(0, getHP());
1300+
std::string str = gob_cmd_punched(getHP());
13031301
// create message and add to list
13041302
ActiveObjectMessage aom(getId(), true, str);
13051303
m_messages_out.push(aom);
@@ -1319,36 +1317,21 @@ int PlayerSAO::punch(v3f dir,
13191317
return hitparams.wear;
13201318
}
13211319

1322-
s16 PlayerSAO::readDamage()
1323-
{
1324-
s16 damage = m_damage;
1325-
m_damage = 0;
1326-
return damage;
1327-
}
1328-
1329-
void PlayerSAO::setHP(s16 hp, const PlayerHPChangeReason &reason)
1320+
void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason)
13301321
{
1331-
s16 oldhp = m_hp;
1322+
s32 oldhp = m_hp;
13321323

1333-
s16 hp_change = m_env->getScriptIface()->on_player_hpchange(this, hp - oldhp, reason);
1324+
s32 hp_change = m_env->getScriptIface()->on_player_hpchange(this, hp - oldhp, reason);
13341325
if (hp_change == 0)
13351326
return;
1336-
hp = oldhp + hp_change;
13371327

1338-
if (hp < 0)
1339-
hp = 0;
1340-
else if (hp > m_prop.hp_max)
1341-
hp = m_prop.hp_max;
1328+
hp = rangelim(oldhp + hp_change, 0, m_prop.hp_max);
13421329

1343-
if (hp < oldhp && !g_settings->getBool("enable_damage")) {
1330+
if (hp < oldhp && !g_settings->getBool("enable_damage"))
13441331
return;
1345-
}
13461332

13471333
m_hp = hp;
13481334

1349-
if (oldhp > hp)
1350-
m_damage += (oldhp - hp);
1351-
13521335
// Update properties on death
13531336
if ((hp == 0) != (oldhp == 0))
13541337
m_properties_sent = false;

Diff for: ‎src/content_sao.h

+6-7
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class UnitSAO: public ServerActiveObject
3939
// Deprecated
4040
f32 getRadYawDep() const { return (m_rotation.Y + 90.) * core::DEGTORAD; }
4141

42-
s16 getHP() const { return m_hp; }
42+
u16 getHP() const { return m_hp; }
4343
// Use a function, if isDead can be defined by other conditions
4444
bool isDead() const { return m_hp == 0; }
4545

@@ -64,7 +64,7 @@ class UnitSAO: public ServerActiveObject
6464
ObjectProperties* accessObjectProperties();
6565
void notifyObjectPropertiesModified();
6666
protected:
67-
s16 m_hp = -1;
67+
u16 m_hp = 1;
6868

6969
v3f m_rotation;
7070

@@ -127,8 +127,8 @@ class LuaEntitySAO : public UnitSAO
127127
void moveTo(v3f pos, bool continuous);
128128
float getMinimumSavedMovement();
129129
std::string getDescription();
130-
void setHP(s16 hp, const PlayerHPChangeReason &reason);
131-
s16 getHP() const;
130+
void setHP(s32 hp, const PlayerHPChangeReason &reason);
131+
u16 getHP() const;
132132
/* LuaEntitySAO-specific */
133133
void setVelocity(v3f velocity);
134134
void addVelocity(v3f velocity)
@@ -258,8 +258,8 @@ class PlayerSAO : public UnitSAO
258258
ServerActiveObject *puncher,
259259
float time_from_last_punch);
260260
void rightClick(ServerActiveObject *clicker) {}
261-
void setHP(s16 hp, const PlayerHPChangeReason &reason);
262-
void setHPRaw(s16 hp) { m_hp = hp; }
261+
void setHP(s32 hp, const PlayerHPChangeReason &reason);
262+
void setHPRaw(u16 hp) { m_hp = hp; }
263263
s16 readDamage();
264264
u16 getBreath() const { return m_breath; }
265265
void setBreath(const u16 breath, bool send = true);
@@ -351,7 +351,6 @@ class PlayerSAO : public UnitSAO
351351
RemotePlayer *m_player = nullptr;
352352
session_t m_peer_id = 0;
353353
Inventory *m_inventory = nullptr;
354-
s16 m_damage = 0;
355354

356355
// Cheat prevention
357356
LagPool m_dig_pool;

Diff for: ‎src/database/database-files.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ void PlayerDatabaseFiles::serialize(std::ostringstream &os, RemotePlayer *player
4444
args.set("name", player->getName());
4545

4646
sanity_check(player->getPlayerSAO());
47-
args.setS32("hp", player->getPlayerSAO()->getHP());
47+
args.setU16("hp", player->getPlayerSAO()->getHP());
4848
args.setV3F("position", player->getPlayerSAO()->getBasePosition());
4949
args.setFloat("pitch", player->getPlayerSAO()->getLookPitch());
5050
args.setFloat("yaw", player->getPlayerSAO()->getRotation().Y);
51-
args.setS32("breath", player->getPlayerSAO()->getBreath());
51+
args.setU16("breath", player->getPlayerSAO()->getBreath());
5252

5353
std::string extended_attrs;
5454
player->serializeExtraAttributes(extended_attrs);

Diff for: ‎src/database/database-postgresql.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ bool PlayerDatabasePostgreSQL::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
553553
pg_to_float(results, 0, 3),
554554
pg_to_float(results, 0, 4))
555555
);
556-
sao->setHPRaw((s16) pg_to_int(results, 0, 5));
556+
sao->setHPRaw((u16) pg_to_int(results, 0, 5));
557557
sao->setBreath((u16) pg_to_int(results, 0, 6), false);
558558

559559
PQclear(results);

Diff for: ‎src/database/database-sqlite3.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ bool PlayerDatabaseSQLite3::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
546546
sao->setLookPitch(sqlite_to_float(m_stmt_player_load, 0));
547547
sao->setPlayerYaw(sqlite_to_float(m_stmt_player_load, 1));
548548
sao->setBasePosition(sqlite_to_v3f(m_stmt_player_load, 2));
549-
sao->setHPRaw((s16) MYMIN(sqlite_to_int(m_stmt_player_load, 5), S16_MAX));
549+
sao->setHPRaw((u16) MYMIN(sqlite_to_int(m_stmt_player_load, 5), U16_MAX));
550550
sao->setBreath((u16) MYMIN(sqlite_to_int(m_stmt_player_load, 6), U16_MAX), false);
551551
sqlite3_reset(m_stmt_player_load);
552552

0 commit comments

Comments
 (0)
Please sign in to comment.