forked from Mirrorlandia_minetest/minetest
Partial damage cheat fix: node damages server side (#4981)
* Damage cheat fix: server side * Lava/Node damages overtime server side * lava hurt interval is only for old protocol
This commit is contained in:
parent
b1e6c2a9b8
commit
a9aad4d061
@ -252,19 +252,17 @@ void ClientEnvironment::step(float dtime)
|
|||||||
m_script->environment_step(dtime);
|
m_script->environment_step(dtime);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Protocol v29 make this behaviour obsolete
|
||||||
A quick draft of lava damage
|
if (getGameDef()->getProtoVersion() < 29) {
|
||||||
*/
|
if (m_lava_hurt_interval.step(dtime, 1.0)) {
|
||||||
if(m_lava_hurt_interval.step(dtime, 1.0))
|
|
||||||
{
|
|
||||||
v3f pf = lplayer->getPosition();
|
v3f pf = lplayer->getPosition();
|
||||||
|
|
||||||
// Feet, middle and head
|
// Feet, middle and head
|
||||||
v3s16 p1 = floatToInt(pf + v3f(0, BS*0.1, 0), BS);
|
v3s16 p1 = floatToInt(pf + v3f(0, BS * 0.1, 0), BS);
|
||||||
MapNode n1 = m_map->getNodeNoEx(p1);
|
MapNode n1 = m_map->getNodeNoEx(p1);
|
||||||
v3s16 p2 = floatToInt(pf + v3f(0, BS*0.8, 0), BS);
|
v3s16 p2 = floatToInt(pf + v3f(0, BS * 0.8, 0), BS);
|
||||||
MapNode n2 = m_map->getNodeNoEx(p2);
|
MapNode n2 = m_map->getNodeNoEx(p2);
|
||||||
v3s16 p3 = floatToInt(pf + v3f(0, BS*1.6, 0), BS);
|
v3s16 p3 = floatToInt(pf + v3f(0, BS * 1.6, 0), BS);
|
||||||
MapNode n3 = m_map->getNodeNoEx(p3);
|
MapNode n3 = m_map->getNodeNoEx(p3);
|
||||||
|
|
||||||
u32 damage_per_second = 0;
|
u32 damage_per_second = 0;
|
||||||
@ -275,14 +273,10 @@ void ClientEnvironment::step(float dtime)
|
|||||||
damage_per_second = MYMAX(damage_per_second,
|
damage_per_second = MYMAX(damage_per_second,
|
||||||
m_client->ndef()->get(n3).damage_per_second);
|
m_client->ndef()->get(n3).damage_per_second);
|
||||||
|
|
||||||
if(damage_per_second != 0)
|
if (damage_per_second != 0)
|
||||||
{
|
|
||||||
damageLocalPlayer(damage_per_second, true);
|
damageLocalPlayer(damage_per_second, true);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Protocol v29 make this behaviour obsolete
|
|
||||||
if (getGameDef()->getProtoVersion() < 29) {
|
|
||||||
/*
|
/*
|
||||||
Drowning
|
Drowning
|
||||||
*/
|
*/
|
||||||
|
@ -941,6 +941,30 @@ void PlayerSAO::step(float dtime, bool send_recommended)
|
|||||||
setBreath(m_breath + 1);
|
setBreath(m_breath + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_node_hurt_interval.step(dtime, 1.0)) {
|
||||||
|
// Feet, middle and head
|
||||||
|
v3s16 p1 = floatToInt(m_base_position + v3f(0, BS*0.1, 0), BS);
|
||||||
|
MapNode n1 = m_env->getMap().getNodeNoEx(p1);
|
||||||
|
v3s16 p2 = floatToInt(m_base_position + v3f(0, BS*0.8, 0), BS);
|
||||||
|
MapNode n2 = m_env->getMap().getNodeNoEx(p2);
|
||||||
|
v3s16 p3 = floatToInt(m_base_position + v3f(0, BS*1.6, 0), BS);
|
||||||
|
MapNode n3 = m_env->getMap().getNodeNoEx(p3);
|
||||||
|
|
||||||
|
u32 damage_per_second = 0;
|
||||||
|
damage_per_second = MYMAX(damage_per_second,
|
||||||
|
m_env->getGameDef()->ndef()->get(n1).damage_per_second);
|
||||||
|
damage_per_second = MYMAX(damage_per_second,
|
||||||
|
m_env->getGameDef()->ndef()->get(n2).damage_per_second);
|
||||||
|
damage_per_second = MYMAX(damage_per_second,
|
||||||
|
m_env->getGameDef()->ndef()->get(n3).damage_per_second);
|
||||||
|
|
||||||
|
if (damage_per_second != 0 && m_hp > 0) {
|
||||||
|
s16 newhp = ((s32) damage_per_second > m_hp ? 0 : m_hp - damage_per_second);
|
||||||
|
setHP(newhp);
|
||||||
|
m_env->getGameDef()->SendPlayerHPOrDie(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_properties_sent) {
|
if (!m_properties_sent) {
|
||||||
m_properties_sent = true;
|
m_properties_sent = true;
|
||||||
std::string str = getPropertyPacket();
|
std::string str = getPropertyPacket();
|
||||||
|
@ -375,6 +375,7 @@ private:
|
|||||||
// Timers
|
// Timers
|
||||||
IntervalLimiter m_breathing_interval;
|
IntervalLimiter m_breathing_interval;
|
||||||
IntervalLimiter m_drowning_interval;
|
IntervalLimiter m_drowning_interval;
|
||||||
|
IntervalLimiter m_node_hurt_interval;
|
||||||
|
|
||||||
int m_wield_index;
|
int m_wield_index;
|
||||||
bool m_position_not_sent;
|
bool m_position_not_sent;
|
||||||
|
Loading…
Reference in New Issue
Block a user