diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 949c19af..02f8c0a1 100644 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -583,15 +583,27 @@ private: for (auto& key2 : keys2) { auto anim_xobj = hero_xobj->At(key2); int id = a8::XValue(key2); - float r_t = anim_xobj->At("t")->AsXValue().GetDouble(); - float r_x = anim_xobj->At("r")->At("x")->AsXValue().GetDouble(); - float r_y = anim_xobj->At("r")->At("y")->AsXValue().GetDouble(); - float r_z = anim_xobj->At("r")->At("z")->AsXValue().GetDouble(); + float r_t = 0; + float r_x = 0; + float r_y = 0; + float r_z = 0; + if (anim_xobj->At("r") && anim_xobj->At("r")->IsObject()) { + r_t = anim_xobj->At("t")->AsXValue().GetDouble(); + r_x = anim_xobj->At("r")->At("x")->AsXValue().GetDouble(); + r_y = anim_xobj->At("r")->At("y")->AsXValue().GetDouble(); + r_z = anim_xobj->At("r")->At("z")->AsXValue().GetDouble(); + } - float l_t = anim_xobj->At("t")->AsXValue().GetDouble(); - float l_x = anim_xobj->At("l")->At("x")->AsXValue().GetDouble(); - float l_y = anim_xobj->At("l")->At("y")->AsXValue().GetDouble(); - float l_z = anim_xobj->At("l")->At("z")->AsXValue().GetDouble(); + float l_t = 0; + float l_x = 0; + float l_y = 0; + float l_z = 0; + if (anim_xobj->At("l") && anim_xobj->At("l")->IsObject()) { + l_t = anim_xobj->At("t")->AsXValue().GetDouble(); + l_x = anim_xobj->At("l")->At("x")->AsXValue().GetDouble(); + l_y = anim_xobj->At("l")->At("y")->AsXValue().GetDouble(); + l_z = anim_xobj->At("l")->At("z")->AsXValue().GetDouble(); + } float p3_t = 0; float p3_x = 0; diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index ad8c85d2..b03dffb0 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -59,6 +59,7 @@ message MapThing optional string buff_list = 14; optional int32 explosion_effect = 15; optional int32 explosion_interval = 18; + optional int32 explosion_dmg_delay = 37; optional int32 explosion_times = 19; optional int32 explosion_float = 20; optional string preexplosion_summon = 35;