diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 49495d13..50e81b66 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2478,26 +2478,6 @@ void Creature::AutoNavigation(const glm::vec3& target_pos, float speed, &xtimer_attacher); } -void Creature::AddTraceBullet(int bullet_uniid, int target_uniid, int gun_id) -{ - trace_bullet_hash_[bullet_uniid] = std::make_tuple(target_uniid, gun_id); - room->xtimer.SetTimeoutEx - ( - SERVER_FRAME_RATE * 10, - [this, bullet_uniid] (int event, const a8::Args* args) - { - if (a8::TIMER_EXEC_EVENT == event) { - trace_bullet_hash_.erase(bullet_uniid); - Entity* entity = room->GetEntityByUniId(bullet_uniid); - if (entity && entity->GetEntityType() == ET_Bullet) { - Bullet* bullet = (Bullet*)entity; - bullet->ForceRemove(); - } - } - }, - &xtimer_attacher); -} - void Creature::LockAttackDir(int time) { IncDisableAttackDirTimes(); diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 595e0935..46250959 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -329,7 +329,6 @@ class Creature : public MoveableEntity void RecalcDtoAttr(); void AutoNavigation(const glm::vec3& target_pos, float speed, std::function cb); - void AddTraceBullet(int bullet_uniid, int target_uniid, int gun_id); void LockAttackDir(int time); void PullTarget(const glm::vec3& target_pos); void MarkSyncActivePlayer(const char* file, int line, const char* func); @@ -383,8 +382,6 @@ protected: long long last_follow_move_frameno_ = 0; int follow_target_last_chg_move_dir_times_ = -1; a8::XTimerWp follow_target_timer_; - //target_uniid, gun_id - std::map> trace_bullet_hash_; private: CreatureWeakPtr weak_ptr_; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index afef0ab0..5ba0c108 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1196,6 +1196,7 @@ void Player::_CMCancelRevive(f8::MsgHdr& hdr, const cs::CMCancelRevive& msg) void Player::_CMRequestBulletDmg(f8::MsgHdr& hdr, const cs::CMRequestBulletDmg& msg) { + #if 0 auto itr = trace_bullet_hash_.find(msg.bullet_uniid()); #ifdef DEBUG a8::XPrintf("CMRequestBulletDmg bullet_uniid:%d shield_hit:%d strengthen_wall_uniid:%d target_uniid:%d found:%d\n", @@ -1262,6 +1263,7 @@ void Player::_CMRequestBulletDmg(f8::MsgHdr& hdr, const cs::CMRequestBulletDmg& } } trace_bullet_hash_.erase(itr); + #endif } void Player::_CMRequestThrowDmg(f8::MsgHdr& hdr, const cs::CMRequestThrowDmg& msg) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index fe103ff9..9b1b7335 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3571,3 +3571,8 @@ bool Room::FindWalkablePointWithOutHouse(const glm::vec3& center, int try_count, out_point = point; return true; } + +void Room::AddReportBullet(int bullet_uniid) +{ + report_bullet_hash[bullet_uniid] = GetFrameNo(); +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 089471a4..8c0323b7 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -73,6 +73,8 @@ public: int pve_human_num = 0; PveData pve_data; bool stop_world = false; + //target_uniid, frameno + std::map report_bullet_hash; ~Room(); void InitData(RoomInitInfo& init_info); @@ -219,6 +221,7 @@ public: size_t GetRoomMaxPlayerNum(); bool RandomSafeAreaPoint(glm::vec3& point); bool FindWalkablePointWithOutHouse(const glm::vec3& center, int try_count, int step, glm::vec3& out_point); + void AddReportBullet(int bullet_uniid); private: void ShuaAndroid(); diff --git a/server/gameserver/shot.cc b/server/gameserver/shot.cc index f4f0ca2b..23aaa584 100644 --- a/server/gameserver/shot.cc +++ b/server/gameserver/shot.cc @@ -266,11 +266,9 @@ static void InternalCreateBullet(BulletInfo& bullet_info) bullet_info.trace_target_uniid, bullet_info.hand); if (bullet_uniid && bullet_info.trace_target_uniid) { - c->AddTraceBullet( - bullet_uniid, - bullet_info.trace_target_uniid, - bullet_info.weapon_meta->id() - ); + c->room->AddReportBullet( + bullet_uniid + ); } } else { std::shared_ptr info_copy = std::make_shared();