diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index ada3ecb2..9a2df34b 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -13,6 +13,17 @@ #include "trigger.h" #include "car.h" +#include +#include +#include + +static const auto hero_transform = + glm::rotate( + glm::mat4(1.0), + glm::radians(65.0f), + glm::vec3(0.0, 0.0, 1.0) + ); + struct BulletInfo { CreatureWeakPtr c; @@ -200,6 +211,37 @@ void InternalShot(Creature* c, } } bullet_dir.Rotate(bullet_angle / 180.0f); + #if 1 + { + auto transform = glm::rotate(hero_transform, + bullet_born_angle * A8_PI, + glm::vec3(0.0, 1.0, 0.0)); + glm::vec4 gun_muzzle_position(0.0, 0.0, 0.0, 0.0); + if (weapon_meta->gun_muzzle_position) { + gun_muzzle_position = + glm::vec4( + std::get<0>(*weapon_meta->gun_muzzle_position.get()), + std::get<1>(*weapon_meta->gun_muzzle_position.get()), + std::get<2>(*weapon_meta->gun_muzzle_position.get()), + 0 + ); + } + glm::vec4 v = transform * gun_muzzle_position; + bullet_born_offset = a8::Vec2(v.x *10*1, v.z*10*1); + bullet_born_pos = c->GetPos() + bullet_born_offset; + if (c->IsPlayer()) { + a8::XPrintf("offset:%f,%f angle:%f angle_xy:%f,%f %f %f\n", + {bullet_born_offset.x, + bullet_born_offset.y, + bullet_born_angle, + c->GetAttackDir().x, + c->GetAttackDir().y, + (bullet_born_angle * A8_PI) / 3.14 *180, + (bullet_born_angle * A8_PI - glm::radians(90.0f)) / 3.14 *180 + }); + } + } + #endif { BulletInfo bullet_info; bullet_info.c = c->GetWeakPtrRef(); diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 0521fad7..a371d993 100644 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -99,6 +99,7 @@ namespace MetaData //0,0,0,0,后座力 std::vector> bullet_born_offset; std::vector> shoot_offsets; + std::shared_ptr> gun_muzzle_position; std::array volume = {}; int int_param1 = 0; float float_param1 = 0; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 8623b276..dcf92e24 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -462,6 +462,9 @@ Human* Room::FindEnemy(Human* hum) void Room::FillSMJoinedNotify(Player* self_hum, cs::SMJoinedNotify& msg) { msg.set_team_mode(msg.team_mode()); + #if 0 + msg.set_adjust_bullet(1); + #endif } void Room::ScatterDrop(a8::Vec2 center, int drop_id)