forked from Mirrorlandia_minetest/minetest
Check for out-of-bounds breath when setting breath_max (#8493)
This commit is contained in:
parent
920bd3b16f
commit
a90f2efb12
@ -750,17 +750,26 @@ int ObjectRef::l_set_properties(lua_State *L)
|
|||||||
NO_MAP_LOCK_REQUIRED;
|
NO_MAP_LOCK_REQUIRED;
|
||||||
ObjectRef *ref = checkobject(L, 1);
|
ObjectRef *ref = checkobject(L, 1);
|
||||||
ServerActiveObject *co = getobject(ref);
|
ServerActiveObject *co = getobject(ref);
|
||||||
if (co == NULL) return 0;
|
if (!co)
|
||||||
|
return 0;
|
||||||
|
|
||||||
ObjectProperties *prop = co->accessObjectProperties();
|
ObjectProperties *prop = co->accessObjectProperties();
|
||||||
if (!prop)
|
if (!prop)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
read_object_properties(L, 2, prop, getServer(L)->idef());
|
read_object_properties(L, 2, prop, getServer(L)->idef());
|
||||||
|
|
||||||
if (prop->hp_max < co->getHP()) {
|
if (prop->hp_max < co->getHP()) {
|
||||||
PlayerHPChangeReason reason(PlayerHPChangeReason::SET_HP);
|
PlayerHPChangeReason reason(PlayerHPChangeReason::SET_HP);
|
||||||
co->setHP(prop->hp_max, reason);
|
co->setHP(prop->hp_max, reason);
|
||||||
if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER)
|
if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER)
|
||||||
getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co, reason);
|
getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER &&
|
||||||
|
prop->breath_max < co->getBreath())
|
||||||
|
co->setBreath(prop->breath_max);
|
||||||
|
|
||||||
co->notifyObjectPropertiesModified();
|
co->notifyObjectPropertiesModified();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user