From cacfc2e11bef56301fab792e5ab4f765a6722383 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 16 Sep 2022 21:01:41 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 2 +- server/gameserver/metamgr.cc | 51 ++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 9a66fdf0..8a61acfe 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -310,7 +310,7 @@ void InternalShot(Creature* c, glm::vec4 v = transform * gun_muzzle_position; bullet_born_offset = a8::Vec2(v.z *10*1, v.x*10*-1); bullet_born_pos = c->GetPos() + bullet_born_offset; - if (c->IsPlayer()) { + if (c->IsPlayer() || c->IsCar()) { #ifdef DEBUG a8::XPrintf("offset:%f,%f angle:%f old_angle:%f angle_xy:%f,%f %f %f gun_muzzle_position:%f,%f,%f pos:%f,%f\n", {bullet_born_offset.x, diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index a468c1f6..52af2723 100644 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -590,20 +590,38 @@ private: float l_y = anim_xobj->At("l")->At("y")->AsXValue().GetDouble(); float l_z = anim_xobj->At("l")->At("z")->AsXValue().GetDouble(); - float p3_t = anim_xobj->At("t")->AsXValue().GetDouble(); - float p3_x = anim_xobj->At("p3")->At("x")->AsXValue().GetDouble(); - float p3_y = anim_xobj->At("p3")->At("y")->AsXValue().GetDouble(); - float p3_z = anim_xobj->At("p3")->At("z")->AsXValue().GetDouble(); + float p3_t = 0; + float p3_x = 0; + float p3_y = 0; + float p3_z = 0; + if (anim_xobj->At("p3") && anim_xobj->At("p3")->IsObject()) { + p3_t = anim_xobj->At("t")->AsXValue().GetDouble(); + p3_x = anim_xobj->At("p3")->At("x")->AsXValue().GetDouble(); + p3_y = anim_xobj->At("p3")->At("y")->AsXValue().GetDouble(); + p3_z = anim_xobj->At("p3")->At("z")->AsXValue().GetDouble(); + } - float p4_t = anim_xobj->At("t")->AsXValue().GetDouble(); - float p4_x = anim_xobj->At("p4")->At("x")->AsXValue().GetDouble(); - float p4_y = anim_xobj->At("p4")->At("y")->AsXValue().GetDouble(); - float p4_z = anim_xobj->At("p4")->At("z")->AsXValue().GetDouble(); + float p4_t = 0; + float p4_x = 0; + float p4_y = 0; + float p4_z = 0; + if (anim_xobj->At("p4") && anim_xobj->At("p4")->IsObject()) { + p4_t = anim_xobj->At("t")->AsXValue().GetDouble(); + p4_x = anim_xobj->At("p4")->At("x")->AsXValue().GetDouble(); + p4_y = anim_xobj->At("p4")->At("y")->AsXValue().GetDouble(); + p4_z = anim_xobj->At("p4")->At("z")->AsXValue().GetDouble(); + } - float p5_t = anim_xobj->At("t")->AsXValue().GetDouble(); - float p5_x = anim_xobj->At("p5")->At("x")->AsXValue().GetDouble(); - float p5_y = anim_xobj->At("p5")->At("y")->AsXValue().GetDouble(); - float p5_z = anim_xobj->At("p5")->At("z")->AsXValue().GetDouble(); + float p5_t = 0; + float p5_x = 0; + float p5_y = 0; + float p5_z = 0; + if (anim_xobj->At("p5") && anim_xobj->At("p5")->IsObject()) { + p5_t = anim_xobj->At("t")->AsXValue().GetDouble(); + p5_x = anim_xobj->At("p5")->At("x")->AsXValue().GetDouble(); + p5_y = anim_xobj->At("p5")->At("y")->AsXValue().GetDouble(); + p5_z = anim_xobj->At("p5")->At("z")->AsXValue().GetDouble(); + } { MetaData::Player* hero_meta = MetaMgr::Instance()->GetPlayer(hero_id); @@ -668,9 +686,12 @@ private: float y = equip_xobj->At("y")->AsXValue().GetDouble(); float z = equip_xobj->At("z")->AsXValue().GetDouble(); - float movex = equip_xobj->At("movex")->AsXValue().GetDouble(); - float movey = equip_xobj->At("movey")->AsXValue().GetDouble(); - float movez = equip_xobj->At("movez")->AsXValue().GetDouble(); + float movex = equip_xobj->At("movex") ? + equip_xobj->At("movex")->AsXValue().GetDouble() : 0; + float movey = equip_xobj->At("movey") ? + equip_xobj->At("movey")->AsXValue().GetDouble() : 0; + float movez = equip_xobj->At("movez") ? + equip_xobj->At("movez")->AsXValue().GetDouble() : 0; MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(equip_id); if (equip_meta) {