From 1f58b56efba9ae225299f4f82e39b90d10f2a212 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 26 Dec 2022 12:14:17 +0800 Subject: [PATCH] 1 --- server/gameserver/mt/Hero.cc | 172 ++++++++++++++++++++++++++++++++++- server/gameserver/mt/Hero.h | 2 + 2 files changed, 172 insertions(+), 2 deletions(-) diff --git a/server/gameserver/mt/Hero.cc b/server/gameserver/mt/Hero.cc index 32cf0811..6ae56a9b 100644 --- a/server/gameserver/mt/Hero.cc +++ b/server/gameserver/mt/Hero.cc @@ -1,6 +1,9 @@ #include "precompile.h" +#include + #include "mt/Hero.h" +#include "mt/Equip.h" IMPL_TABLE(mt::Hero) @@ -53,9 +56,9 @@ namespace mt { std::vector strings; a8::Split(pre_appear_effect(), strings, '|'); - #if 0 +#if 0 a8::XPrintf("%d,pre_appear_effect:%s\n", {i->id(), pre_appear_effect()}); - #endif +#endif for (auto& str : strings) { std::vector strings2; a8::Split(str, strings2, ':'); @@ -116,4 +119,169 @@ namespace mt return itr != shot_animations.end() ? &itr->second : nullptr; } + void Hero::LoadHeroAndEquipShotData() + { + a8::XObject xobj; +#if 0 + xobj.ReadFromFile(res_path + "shot_animation.json"); +#endif + { + auto hero_list_xobj = xobj.At("hero"); + std::vector keys; + hero_list_xobj->GetKeys(keys); + for (auto& key : keys) { + auto hero_xobj = hero_list_xobj->At(key); + int hero_id = a8::XValue(key); + std::vector keys2; + hero_xobj->GetKeys(keys2); + + for (auto& key2 : keys2) { + auto anim_xobj = hero_xobj->At(key2); + int id = a8::XValue(key2); + int t = anim_xobj->At("t") ? anim_xobj->At("t")->AsXValue().GetInt() : 0; + + float r_x = 0; + float r_y = 0; + float r_z = 0; + if (anim_xobj->At("r") && anim_xobj->At("r")->IsObject()) { + 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_x = 0; + float l_y = 0; + float l_z = 0; + if (anim_xobj->At("l") && anim_xobj->At("l")->IsObject()) { + 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_x = 0; + float p3_y = 0; + float p3_z = 0; + if (anim_xobj->At("p3") && anim_xobj->At("p3")->IsObject()) { + 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_x = 0; + float p4_y = 0; + float p4_z = 0; + if (anim_xobj->At("p4") && anim_xobj->At("p4")->IsObject()) { + + 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_x = 0; + float p5_y = 0; + float p5_z = 0; + if (anim_xobj->At("p5") && anim_xobj->At("p5")->IsObject()) { + 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(); + } + + { + const mt::Hero* hero_meta = mt::Hero::GetById(hero_id); + if (hero_meta) { + mt::HeroShotAnimation anim; + anim.id = id; + anim.t = t; + + anim.r_x = r_x; + anim.r_y = r_y; + anim.r_z = r_z; + + anim.l_x = l_x; +anim.l_y = l_y; + anim.l_z = l_z; + + anim.p3_x = p3_x; + anim.p3_y = p3_y; + anim.p3_z = p3_z; + + anim.p4_x = p4_x; + anim.p4_y = p4_y; + anim.p4_z = p4_z; + + anim.p5_x = p5_x; + anim.p5_y = p5_y; + anim.p5_z = p5_z; + + #if 0 + hero_meta->shot_animations[id] = anim; + #endif + } + } + f8::UdpLog::Instance()->Info + ("shot animation hero_id:%d anim_id:%d t:%f r_x:%f r_y:%f r_z:%f l_x:%f l_y:%f l_z:%f", + { + hero_id, + id, + t, + r_x, + r_y, + r_z, + l_x, + l_y, + l_z + }); + } + } + } + { + auto equip_list_xobj = xobj.At("equip"); + std::vector keys; + equip_list_xobj->GetKeys(keys); + for (auto& key : keys) { + auto equip_xobj = equip_list_xobj->At(key); + int equip_id = a8::XValue(key); + + float x = equip_xobj->At("x")->AsXValue().GetDouble(); + float y = equip_xobj->At("y")->AsXValue().GetDouble(); + float z = equip_xobj->At("z")->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; + + #if 0 + const mt::Equip* equip_meta = mt::Equip::GetById(equip_id); + if (equip_meta) { + equip_meta->gun_muzzle_position = std::make_shared> + ( + x, + y, + z + ); + equip_meta->movex_position = std::make_shared> + ( + movex, + movey, + movez + ); + } + #endif + f8::UdpLog::Instance()->Info + ("weapon animation equip_id:%d x:%f y:%f z:%f movex:%f lmovey:%f movez:%f", + { + equip_id, + x, + y, + z, + movex, + movey, + movez + }); + } + } + } } diff --git a/server/gameserver/mt/Hero.h b/server/gameserver/mt/Hero.h index 1f701b07..3208d383 100644 --- a/server/gameserver/mt/Hero.h +++ b/server/gameserver/mt/Hero.h @@ -50,6 +50,8 @@ namespace mt int RandDrop() const; const HeroShotAnimation* GetShotAnimi(int shotfire) const; + private: + static void LoadHeroAndEquipShotData(); }; }