From 0b3da99ac4a08c2ecce36a772d3115566b139672 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 13:25:39 +0800 Subject: [PATCH 1/7] 1 --- server/gameserver/creature.cc | 2 +- server/gameserver/hero.h | 2 +- server/gameserver/incubator.cc | 18 ++++++++++++++++++ server/gameserver/pvedata.cc | 3 +++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 52135bcd..d185fa40 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -326,7 +326,7 @@ void InternalShot(Creature* c, bullet_born_offset = a8::Vec2(v.z *10*1, v.x*10*-1); bullet_born_pos = c->GetPos() + bullet_born_offset; if (c->IsPlayer() || c->IsCar()) { -#ifdef DEBUG +#ifdef DEBUG1 a8::XPrintf("idx:%d offset:%f,%f angle:%f old_angle:%f angle_xy:%f,%f %f %f gun_muzzle_position:%f,%f,%f pos:%f,%f gun_id:%d\n", { i, diff --git a/server/gameserver/hero.h b/server/gameserver/hero.h index cf289c7b..0fbd8643 100644 --- a/server/gameserver/hero.h +++ b/server/gameserver/hero.h @@ -43,12 +43,12 @@ public: virtual void OnRemoveFromTargetPartObject(Entity* target) override; virtual void OnBattleStart(Room* room) override; void Destory(); + void BeKill(int killer_id, const std::string& killer_name, int weapon_id); protected: virtual void _UpdateMove(int speed) override; void InternalUpdateMove(float speed); virtual void RecalcSelfCollider() override; - void BeKill(int killer_id, const std::string& killer_name, int weapon_id); void InitAI(); void DetachFromMaster(); diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 1a483c1e..b40a96e0 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -326,8 +326,26 @@ void Incubator::SpawnWaveMon(int wave) if (!hero) { A8_ABORT(); } +#ifdef DEBUG1 + { + room->xtimer.AddDeadLineTimerAndAttach + ( + SERVER_FRAME_RATE * (rand() % 3), + a8::XParams() + .SetSender(hero), + [] (const a8::XParams& param) + { + Hero* hero = (Hero*)param.sender.GetUserData(); + hero->BeKill(VP_Gas, TEXT("battle_server_killer_gas", "毒圈"), VW_Gas); + }, + &hero->xtimer_attacher.timer_list_); + } +#endif if (wave + 1 == room->pve_mode_meta->waves.size()) { hero->is_pve_boss = true; +#ifdef DEBGU + a8::XPrintf("pve_boss appear\n", {}); +#endif } ++room->pve_data.mon_num; diff --git a/server/gameserver/pvedata.cc b/server/gameserver/pvedata.cc index 1f66eb58..c95b194a 100644 --- a/server/gameserver/pvedata.cc +++ b/server/gameserver/pvedata.cc @@ -63,6 +63,9 @@ void PveData::OnBeKill(Hero* hero) } ); pve_kill_boss = true; +#ifdef DEBUG + a8::XPrintf("onKill pve_boss\n", {}); +#endif } #ifdef DEBUG From c29956f6dc677dc06d6efbf67f3ff3b6ec31a8b7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 14:45:52 +0800 Subject: [PATCH 2/7] 1 --- server/gameserver/buff.cc | 2 +- server/gameserver/creature.h | 2 ++ server/gameserver/framedata.cc | 3 +++ server/gameserver/framedata.h | 1 + server/gameserver/framemaker.cc | 11 +++++++++++ server/gameserver/framemaker.h | 1 + server/gameserver/human.cc | 12 ++++++++++++ server/gameserver/human.h | 2 ++ server/gameserver/moveableentity.cc | 13 +++++++++++++ server/gameserver/moveableentity.h | 1 + server/tools/protobuild/cs_proto.proto | 10 ++++++++++ 11 files changed, 57 insertions(+), 1 deletion(-) diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index f7d7254f..0b0b58d2 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -945,7 +945,7 @@ void Buff::ProcMachineGun() } } caster_.Get()->need_sync_active_player = true; - caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__); + caster_.Get()->UpdateCharImage(__FILE__, __LINE__, __func__); } } diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 86c81018..be5ec490 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -112,6 +112,7 @@ class Creature : public MoveableEntity virtual void AddToNewObjects(Entity* entity) {}; virtual void AddToPartObjects(Entity* entity) {}; virtual void RemovePartObjects(Entity* entity) {}; + virtual void AddToImageObjects(Creature* c) {}; virtual bool InNewObjects(Entity* target) { return false; }; virtual bool InPartObjects(Entity* target) { return false; }; virtual int GetPartObjectsCount() { return 0; }; @@ -123,6 +124,7 @@ class Creature : public MoveableEntity virtual bool IsCreature(Room* room) override { return true;}; virtual void OnBattleStart(Room* room) override; virtual MetaData::Player* GetHeroMeta() { return nullptr; }; + virtual void FillMFObjectImage(Room* room, Human* hum, cs::MFCharacterImage* image_data) {}; bool HasBuffEffect(int buff_effect_id); Buff* GetBuffByEffectId(int effect_id); Buff* GetBuffById(int buff_id); diff --git a/server/gameserver/framedata.cc b/server/gameserver/framedata.cc index 384d3df9..ef770eb0 100644 --- a/server/gameserver/framedata.cc +++ b/server/gameserver/framedata.cc @@ -9,6 +9,9 @@ void FrameData::ClearFrameData(Human* hum) if (!new_objects.empty()) { new_objects.clear(); } + if (!image_objects.empty()) { + image_objects.clear(); + } if (!block_objects.empty()) { if (hum->IsAndroid() && !hum->HasObserver()) { block_objects.clear(); diff --git a/server/gameserver/framedata.h b/server/gameserver/framedata.h index 67897d0f..c104f70a 100644 --- a/server/gameserver/framedata.h +++ b/server/gameserver/framedata.h @@ -19,6 +19,7 @@ class FrameData private: std::map new_objects; + std::map image_objects; std::map block_objects; std::map loot_objects; std::map part_objects; diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index c9e975f5..16b2f96e 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -98,6 +98,7 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum) SerializeLootObjects(msg, room, hum, framedata); SerializeMapBlockObjects(msg, room, hum, framedata); SerializeNewObjects(msg, room, hum, framedata); + SerializeImageObjects(msg, room, hum, framedata); SerializePartObjects(msg, room, hum, framedata); SerializeDelObjects(msg, room, hum, framedata); SerializeOutObjects(msg, room, hum, framedata); @@ -225,6 +226,16 @@ void FrameMaker::SerializeNewObjects(cs::SMUpdate* msg, Room* room, Human* hum, } } +void FrameMaker::SerializeImageObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata) +{ + for (auto& pair : framedata->image_objects) { + Creature* c = pair.second.Get(); + if (c) { + c->FillMFObjectImage(room, (Human*)hum, msg->add_image_objects()); + } + } +} + void FrameMaker::SerializePartObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata) { if (!framedata->part_objects.empty()) { diff --git a/server/gameserver/framemaker.h b/server/gameserver/framemaker.h index 5ad0e684..05b7bf10 100644 --- a/server/gameserver/framemaker.h +++ b/server/gameserver/framemaker.h @@ -20,6 +20,7 @@ private: void SerializeLootObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeMapBlockObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeNewObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); + void SerializeImageObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializePartObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeDelObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeOutObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 944851df..6d03e242 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -577,6 +577,13 @@ void Human::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data } } +void Human::FillMFObjectImage(Room* room, Human* hum, cs::MFCharacterImage* image_data) +{ + image_data->set_obj_uniid(GetUniId()); + image_data->set_cur_weapon_idx(GetCurrWeapon()->weapon_idx); + GetCurrWeapon()->ToPB(this, image_data->mutable_weapon()); +} + void Human::FillMFPlayerStats(cs::MFPlayerStats* stats_pb) { stats_pb->set_player_id(GetUniId()); @@ -1246,6 +1253,11 @@ void Human::AddToNewObjects(Entity* entity) } } +void Human::AddToImageObjects(Creature* c) +{ + framedata_.image_objects[c->GetUniId()] = c->GetWeakPtrRef(); +} + void Human::AddToPartObjects(Entity* entity) { #ifdef DEBUG1 diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 2e46158c..e09bf58a 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -239,6 +239,7 @@ class Human : public Creature virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; void FillMFObjectLess(Room* room, Human* hum, cs::MFPlayerFull* full_data); virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; + virtual void FillMFObjectImage(Room* room, Human* hum, cs::MFCharacterImage* image_data) override; virtual void FillMFPlayerStats(cs::MFPlayerStats* stats); virtual float GetRadius() override; virtual float GetHitRadius() override; @@ -258,6 +259,7 @@ class Human : public Creature virtual void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override; virtual void AddToNewObjects(Entity* entity) override; virtual void AddToPartObjects(Entity* entity) override; + virtual void AddToImageObjects(Creature* c) override; virtual void RemovePartObjects(Entity* entity) override; virtual bool InNewObjects(Entity* target) override; virtual bool InPartObjects(Entity* target) override; diff --git a/server/gameserver/moveableentity.cc b/server/gameserver/moveableentity.cc index c3e834f2..1ae22fa6 100644 --- a/server/gameserver/moveableentity.cc +++ b/server/gameserver/moveableentity.cc @@ -64,6 +64,19 @@ void MoveableEntity::SyncAroundPlayers(const char* file, int line, const char* f }); } +void MoveableEntity::UpdateCharImage(const char* file, int line, const char* func) +{ + if (IsCreature(room)) { + Creature* c = (Creature*)this; + TraverseAllLayerHumanList + ( + [c, file, line, func] (Human* hum, bool& stop) + { + hum->AddToImageObjects(c); + }); + } +} + void MoveableEntity::TraverseCreatures(std::function func) { room->grid_service->TraverseCreatures(room->GetRoomIdx(), diff --git a/server/gameserver/moveableentity.h b/server/gameserver/moveableentity.h index b7b4c6fc..9bfbe646 100644 --- a/server/gameserver/moveableentity.h +++ b/server/gameserver/moveableentity.h @@ -23,6 +23,7 @@ class MoveableEntity : public RoomEntity std::set& dec_grids ); virtual void SyncAroundPlayers(const char* file, int line, const char* func); + virtual void UpdateCharImage(const char* file, int line, const char* func); virtual const a8::Vec2& GetMoveDir() { return move_dir_; }; virtual void SetMoveDir(const a8::Vec2& move_dir); virtual const a8::Vec2& GetAttackDir() { return attack_dir_; }; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index d89b9f7f..cf7e587c 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -219,6 +219,14 @@ message MFAttrAddition optional float rate_val = 3; //百分比 } +//角色形象-本地如果没有full信息则忽略 +message MFCharacterImage +{ + optional int32 obj_uniid = 1; //唯一id + optional int32 cur_weapon_idx = 2; //当前武器索引 0-4 + optional MFWeapon weapon = 3; //武器 +} + //玩家信息-全量 message MFPlayerFull { @@ -1129,6 +1137,8 @@ message SMUpdate optional int32 game_left_time = 45; //游戏剩余时间(毫秒, 战斗开始后字段才有意义) optional int32 frameno = 46; repeated int32 del_bullets = 47; //子弹删除 + + repeated MFCharacterImage image_objects = 50; //角色形象-本地如果没有full信息则忽略 } //滚动消息 From d9e380ddf5b0f6508ce38abe59bbff0264a0a6a4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 14:53:55 +0800 Subject: [PATCH 3/7] 1 --- server/gameserver/incubator.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index b40a96e0..a8fcd1d6 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -297,7 +297,7 @@ void Incubator::SpawnWaveMon(int wave) .SetSender(this) .SetParam1(content) .SetParam2(room) - .SetParam3(i), + .SetParam3(wave), [] (const a8::XParams& param) { MetaData::PveGeminiContent* content = (MetaData::PveGeminiContent*)param.param1.GetUserData(); @@ -326,7 +326,7 @@ void Incubator::SpawnWaveMon(int wave) if (!hero) { A8_ABORT(); } -#ifdef DEBUG1 +#ifdef DEBUG { room->xtimer.AddDeadLineTimerAndAttach ( From b7f0aae4facedd60d593ac8a2978352d7cbf968b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 15:13:49 +0800 Subject: [PATCH 4/7] 1 --- server/gameserver/incubator.cc | 14 ++++++++------ server/tools/protobuild/cs_proto.proto | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index a8fcd1d6..f2349977 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -296,18 +296,20 @@ void Incubator::SpawnWaveMon(int wave) a8::XParams() .SetSender(this) .SetParam1(content) - .SetParam2(room) - .SetParam3(wave), + .SetParam2(wave) + .SetParam3(i), [] (const a8::XParams& param) { + Incubator* incubator = (Incubator*)param.sender.GetUserData(); MetaData::PveGeminiContent* content = (MetaData::PveGeminiContent*)param.param1.GetUserData(); - Room* room = (Room*)param.param2.GetUserData(); - int wave = param.param3.GetInt(); + Room* room = incubator->room; + int wave = param.param2.GetInt(); + int idx = param.param3.GetInt(); #ifdef DEBUG a8::XPrintf("wave i:%d enemys_size:%d\n", {wave, content->enemys.size()}); #endif - if (param.param3.GetInt() < content->enemys.size()) { - int enemy_id = content->enemys[param.param3.GetInt()]; + if (idx < content->enemys.size()) { + int enemy_id = content->enemys[idx]; MetaData::Player* hero_meta = MetaMgr::Instance()->GetPlayer(enemy_id); if (hero_meta) { a8::Vec2 hero_pos = content->spawn_point; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index cf7e587c..4fcbe5cf 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -494,7 +494,23 @@ message MFActivePlayerData repeated int32 inventory = 11; //库存 optional int32 cur_weapon_idx = 15; //当前武器索引 0-4 - repeated MFWeapon weapons = 16; //武器列表1-4 0:拳头 1:枪 2:枪 3:手雷 4:烟雾弹 + /* + 武器列表1-4 + 0:拳头 + 1:枪1 + 2:枪2 + 3:手雷 + 4:烟雾弹 + 5: 毒气弹 + 6: 燃烧瓶 + 7: 陷阱 + 8: 地雷 + 9: c4 + 10: 盾墙 + 11: 信号抢 + 12: 汽油桶 + */ + repeated MFWeapon weapons = 16; optional int32 energy_shield = 40; //能量护盾 optional int32 max_energy_shield = 41; //最大能量护盾 From 411b5865063ae7ef37280f809a24f088cd45177f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 15:19:25 +0800 Subject: [PATCH 5/7] 1 --- server/gameserver/incubator.cc | 116 +++++++++++++++++---------------- 1 file changed, 59 insertions(+), 57 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index f2349977..557a207a 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -287,6 +287,64 @@ void Incubator::SpawnWaveMon(int wave) #ifdef DEBUG a8::XPrintf("SpawnWaveMon wave:%d \n", {wave}); #endif + auto cb = + [] (const a8::XParams& param) + { + Incubator* incubator = (Incubator*)param.sender.GetUserData(); + MetaData::PveGeminiContent* content = (MetaData::PveGeminiContent*)param.param1.GetUserData(); + Room* room = incubator->room; + int wave = param.param2.GetInt(); + int monIdx = param.param3.GetInt(); +#ifdef DEBUG + a8::XPrintf("wave i:%d enemys_size:%d\n", {wave, content->enemys.size()}); +#endif + if (monIdx < content->enemys.size()) { + int enemy_id = content->enemys[monIdx]; + MetaData::Player* hero_meta = MetaMgr::Instance()->GetPlayer(enemy_id); + if (hero_meta) { + a8::Vec2 hero_pos = content->spawn_point; + + int team_id = 666; + Creature* master = nullptr; + + a8::Vec2 dir = hero_pos; + dir.Normalize(); + + Hero* hero = room->CreateHero(master, + hero_meta, + hero_pos, + dir, + team_id); + if (!hero) { + A8_ABORT(); + } +#ifdef DEBUG + { + room->xtimer.AddDeadLineTimerAndAttach + ( + SERVER_FRAME_RATE * (rand() % 3), + a8::XParams() + .SetSender(hero), + [] (const a8::XParams& param) + { + Hero* hero = (Hero*)param.sender.GetUserData(); + hero->BeKill(VP_Gas, TEXT("battle_server_killer_gas", "毒圈"), VW_Gas); + }, + &hero->xtimer_attacher.timer_list_); + } +#endif + if (wave + 1 == room->pve_mode_meta->waves.size()) { + hero->is_pve_boss = true; +#ifdef DEBGU + a8::XPrintf("pve_boss appear\n", {}); +#endif + } + + ++room->pve_data.mon_num; + room->NotifyUiUpdate(); + } + } + }; auto& mons = room->pve_mode_meta->waves[wave]; for (MetaData::PveGeminiContent* content : mons) { for (int i = 0; i < content->enemys.size(); ++i) { @@ -298,63 +356,7 @@ void Incubator::SpawnWaveMon(int wave) .SetParam1(content) .SetParam2(wave) .SetParam3(i), - [] (const a8::XParams& param) - { - Incubator* incubator = (Incubator*)param.sender.GetUserData(); - MetaData::PveGeminiContent* content = (MetaData::PveGeminiContent*)param.param1.GetUserData(); - Room* room = incubator->room; - int wave = param.param2.GetInt(); - int idx = param.param3.GetInt(); -#ifdef DEBUG - a8::XPrintf("wave i:%d enemys_size:%d\n", {wave, content->enemys.size()}); -#endif - if (idx < content->enemys.size()) { - int enemy_id = content->enemys[idx]; - MetaData::Player* hero_meta = MetaMgr::Instance()->GetPlayer(enemy_id); - if (hero_meta) { - a8::Vec2 hero_pos = content->spawn_point; - - int team_id = 666; - Creature* master = nullptr; - - a8::Vec2 dir = hero_pos; - dir.Normalize(); - - Hero* hero = room->CreateHero(master, - hero_meta, - hero_pos, - dir, - team_id); - if (!hero) { - A8_ABORT(); - } -#ifdef DEBUG - { - room->xtimer.AddDeadLineTimerAndAttach - ( - SERVER_FRAME_RATE * (rand() % 3), - a8::XParams() - .SetSender(hero), - [] (const a8::XParams& param) - { - Hero* hero = (Hero*)param.sender.GetUserData(); - hero->BeKill(VP_Gas, TEXT("battle_server_killer_gas", "毒圈"), VW_Gas); - }, - &hero->xtimer_attacher.timer_list_); - } -#endif - if (wave + 1 == room->pve_mode_meta->waves.size()) { - hero->is_pve_boss = true; -#ifdef DEBGU - a8::XPrintf("pve_boss appear\n", {}); -#endif - } - - ++room->pve_data.mon_num; - room->NotifyUiUpdate(); - } - } - }, + cb, &xtimer_attacher_.timer_list_); } room->pve_data.refreshed_mon += content->enemys.size(); From 63d92ce2d7be342a1ade0f354b30c7a3bc4fd795 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 15:22:43 +0800 Subject: [PATCH 6/7] 1 --- server/gameserver/incubator.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 557a207a..0312c5cd 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -5,6 +5,7 @@ #include "human.h" #include "metamgr.h" #include "hero.h" +#include "player.h" void Incubator::Init() { @@ -328,7 +329,12 @@ void Incubator::SpawnWaveMon(int wave) [] (const a8::XParams& param) { Hero* hero = (Hero*)param.sender.GetUserData(); - hero->BeKill(VP_Gas, TEXT("battle_server_killer_gas", "毒圈"), VW_Gas); + Human* hum = hero->room->GetOneAlivePlayer(); + if (hum) { + hero->BeKill(hum->GetUniId(), hum->name, hum->GetCurrWeapon()->weapon_id); + } else { + hero->BeKill(VP_Gas, TEXT("battle_server_killer_gas", "毒圈"), VW_Gas); + } }, &hero->xtimer_attacher.timer_list_); } From 5db7ceb9e8fb6fb80fd94ed91f6505a9fd1b8561 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 15:38:22 +0800 Subject: [PATCH 7/7] 1 --- server/gameserver/moveableentity.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/server/gameserver/moveableentity.cc b/server/gameserver/moveableentity.cc index 1ae22fa6..cc1f0a1f 100644 --- a/server/gameserver/moveableentity.cc +++ b/server/gameserver/moveableentity.cc @@ -94,6 +94,19 @@ void MoveableEntity::SetAttackDir(const a8::Vec2& attack_dir) { attack_dir_ = attack_dir; ++chg_attack_dir_times_; +#ifdef DEBUG + if (IsCreature(room) && ((Creature*)this)->IsPlayer()) { + Creature* c = (Creature*)this; + c->SendDebugMsg( + a8::Format("SetAttackDir:%f,%f angle:%f\n", + { + attack_dir.x, + attack_dir.y, + GetAttackDirRotate() + }) + ); + } +#endif } float MoveableEntity::GetAttackDirRotate()