diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 42ff3c9..1bd9157 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -235,6 +235,7 @@ void Human::Shot() void Human::DirectShot(MetaData::Equip* bullet_meta, int skill_id) { + #if 0 for (auto& tuple : bullet_meta->bullet_born_offset) { a8::Vec2 bullet_born_offset = a8::Vec2(std::get<0>(tuple), std::get<1>(tuple)); bullet_born_offset.Rotate(attack_dir.CalcAngle(a8::Vec2::UP)); @@ -284,6 +285,7 @@ void Human::DirectShot(MetaData::Equip* bullet_meta, int skill_id) } } OnAttack(); + #endif } void Human::RecalcSelfCollider() diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 3e98d40..b1878a8 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -48,38 +48,25 @@ namespace MetaData void Equip::Init() { { - std::vector strings; - a8::Split(i->bullet_born_offset(), strings, '|'); - for (auto& str : strings) { - std::vector strings2; - a8::Split(str, strings2, ':'); - assert(strings2.size() >= 2); - bullet_born_offset.push_back(std::make_tuple( - a8::XValue(strings2[0]).GetDouble(), - a8::XValue(strings2[1]).GetDouble(), - strings2.size() > 2 ? a8::XValue(strings2[2]).GetDouble() : 0 - ) - ); - } - } - #if 0 - { - std::vector strings; - a8::Split(i->volume(), strings, '|'); - for (auto& str : strings) { - std::vector strings2; - a8::Split(str, strings2, ':'); - assert(strings2.size() == 2); - if (strings2.size() >= 2) { - int slot = a8::XValue(strings2[0]); - int num = a8::XValue(strings2[1]); - if (slot >= 0 && slot < volume.size()){ - volume[slot] = num; - } + std::vector strings0; + a8::Split(i->bullet_born_offset(), strings0, '$'); + for (auto& str0 : strings0) { + std::vector strings; + a8::Split(str0, strings, '|'); + auto& p = a8::FastAppend(bullet_born_offset); + std::get<0>(p) = i->bullet_delay() * (bullet_born_offset.size() - 1); + for (auto& str : strings) { + std::vector strings2; + a8::Split(str, strings2, ':'); + assert(strings2.size() >= 2); + auto& born_point = a8::FastAppend(std::get<1>(p)); + born_point.born_offset = a8::Vec2(a8::XValue(strings2[0]).GetDouble(), + a8::XValue(strings2[1]).GetDouble() + ); + born_point.angle = strings2.size() > 2 ? a8::XValue(strings2[2]).GetDouble() : 0; } } } - #endif } bool Equip::CanDrop() diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index bda26f2..16c6b31 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -47,11 +47,17 @@ namespace MetaData const metatable::Item* i = nullptr; }; + struct BulletBornPoint + { + a8::Vec2 born_offset; + float angle = 0.0f; + }; + struct Equip { const metatable::Equip* i = nullptr; - std::vector> bullet_born_offset; + std::vector>> bullet_born_offset; std::array volume = {}; void Init(); diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 31d97c5..0553673 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -85,6 +85,7 @@ message Equip //required string inventory_slot = 31; //库存槽位 //required int32 _inventory_slot = 32; //库存槽位 + required int32 bullet_delay = 33; } message EquipUpgrade