Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Disable fall damage when "immortal" group set (#6946)
- Loading branch information
Showing
with
15 additions
and
2 deletions.
-
+4
−1
src/clientenvironment.cpp
-
+5
−0
src/content_cao.cpp
-
+6
−1
src/content_cao.h
|
@@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc., |
|
|
#include "raycast.h" |
|
|
#include "voxelalgorithms.h" |
|
|
#include "settings.h" |
|
|
#include "content_cao.h" |
|
|
#include <algorithm> |
|
|
#include "client/renderingengine.h" |
|
|
|
|
@@ -207,6 +208,8 @@ void ClientEnvironment::step(float dtime) |
|
|
|
|
|
//std::cout<<"Looped "<<loopcount<<" times."<<std::endl; |
|
|
|
|
|
bool player_immortal = lplayer->getCAO() && lplayer->getCAO()->isImmortal(); |
|
|
|
|
|
for (const CollisionInfo &info : player_collisions) { |
|
|
v3f speed_diff = info.new_speed - info.old_speed;; |
|
|
// Handle only fall damage |
|
@@ -227,7 +230,7 @@ void ClientEnvironment::step(float dtime) |
|
|
pre_factor = 1.0 + (float)addp/100.0; |
|
|
} |
|
|
float speed = pre_factor * speed_diff.getLength(); |
|
|
if (speed > tolerance) { |
|
|
if (speed > tolerance && !player_immortal) { |
|
|
f32 damage_f = (speed - tolerance) / BS * post_factor; |
|
|
u8 damage = (u8)MYMIN(damage_f + 0.5, 255); |
|
|
if (damage != 0) { |
|
|
|
@@ -360,6 +360,11 @@ v3f GenericCAO::getPosition() |
|
|
return pos_translator.vect_show; |
|
|
} |
|
|
|
|
|
const bool GenericCAO::isImmortal() |
|
|
{ |
|
|
return itemgroup_get(getGroups(), "immortal"); |
|
|
} |
|
|
|
|
|
scene::ISceneNode* GenericCAO::getSceneNode() |
|
|
{ |
|
|
if (m_meshnode) { |
|
|
|
@@ -124,7 +124,10 @@ class GenericCAO : public ClientActiveObject |
|
|
{ |
|
|
return ACTIVEOBJECT_TYPE_GENERIC; |
|
|
} |
|
|
|
|
|
inline const ItemGroupList &getGroups() const |
|
|
{ |
|
|
return m_armor_groups; |
|
|
} |
|
|
void initialize(const std::string &data); |
|
|
|
|
|
void processInitData(const std::string &data); |
|
@@ -143,6 +146,8 @@ class GenericCAO : public ClientActiveObject |
|
|
return m_yaw; |
|
|
} |
|
|
|
|
|
const bool isImmortal(); |
|
|
|
|
|
scene::ISceneNode *getSceneNode(); |
|
|
|
|
|
scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode(); |
|
|