From eca4f8f95ed43ead9f3b4b564b4875fe7a0a6a6d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 8 Mar 2021 17:12:46 +0800 Subject: [PATCH] 1 --- server/gameserver/constant.h | 4 ---- server/gameserver/human.cc | 25 ++++++++++++++------- server/gameserver/metamgr.cc | 42 ++++++++++++++++++++++++++++++++++++ server/gameserver/metamgr.h | 3 +++ 4 files changed, 62 insertions(+), 12 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index f62d0a1..541a693 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -408,8 +408,4 @@ const int HUNLUAN_BUFFID = 6001; const int DRIVER_BUFFID = 6003; const int PASSENGER_BUFFID = 6004; -const int GRASS_HIDE_BUFF_ID = 6005; -const int WATER_BUFF_ID = 6006; -const int ICE_BUFF_ID = 6007; - const long long SPEC_MAP_OBJECT_FLAGS = A8_DEFINE_RANGE_BIT(long long, kColliderSpecTag_Begin, kColliderSpecTag_End); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 4598b3f..96f6460 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -4322,13 +4322,16 @@ void Human::OnEnterSpecMapArea(int tag, SpecMapObject& map_obj) { ClearSpecMapAreaTimer(map_obj); map_obj.enter_timer = room->xtimer.AddDeadLineTimerAndAttach - (MetaMgr::Instance()->ice_invisible_time * SERVER_FRAME_RATE, + (MetaMgr::Instance()->GetSpecMapAreaEnterTime(tag) * SERVER_FRAME_RATE, a8::XParams() - .SetSender(this), + .SetSender(this) + .SetParam1(&map_obj) + .SetParam2(tag), [] (const a8::XParams& param) { Human* hum = (Human*)param.sender.GetUserData(); - MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(ICE_BUFF_ID); + MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff + (MetaMgr::Instance()->GetSpecMapAreaBuffId(param.param2)); if (buff_meta) { hum->AddBuff(hum, buff_meta, 1); } @@ -4336,27 +4339,33 @@ void Human::OnEnterSpecMapArea(int tag, SpecMapObject& map_obj) &xtimer_attacher.timer_list_, [] (const a8::XParams& param) { - Human* hum = (Human*)param.sender.GetUserData(); + SpecMapObject* map_obj = (SpecMapObject*)param.param1.GetUserData(); + map_obj->enter_timer = nullptr; }); + } void Human::OnLeaveSpecMapArea(int tag, SpecMapObject& map_obj) { ClearSpecMapAreaTimer(map_obj); map_obj.leave_timer = room->xtimer.AddDeadLineTimerAndAttach - (MetaMgr::Instance()->ice_show_time * SERVER_FRAME_RATE, + (MetaMgr::Instance()->GetSpecMapAreaLeaveTime(tag) * SERVER_FRAME_RATE, a8::XParams() - .SetSender(this), + .SetSender(this) + .SetParam1(&map_obj) + .SetParam2(tag), [] (const a8::XParams& param) { Human* hum = (Human*)param.sender.GetUserData(); - hum->RemoveBuffById(ICE_BUFF_ID); + hum->RemoveBuffById((MetaMgr::Instance()->GetSpecMapAreaBuffId(param.param2))); }, &xtimer_attacher.timer_list_, [] (const a8::XParams& param) { - Human* hum = (Human*)param.sender.GetUserData(); + SpecMapObject* map_obj = (SpecMapObject*)param.param1.GetUserData(); + map_obj->leave_timer = nullptr; }); + } void Human::ClearSpecMapAreaTimer(SpecMapObject& map_obj) diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 37f55ce..ecc599a 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -871,3 +871,45 @@ std::string MetaMgr::GetText(const std::string& textid, const std::string& def_t auto itr = loader_->text_hash.find(textid); return itr != loader_->text_hash.end() ? itr->second : def_text; } + +int MetaMgr::GetSpecMapAreaBuffId(int tag) +{ + switch (tag) { + case kColliderTag_Grass: + return 6005; + case kColliderTag_Water: + return 6006; + case kColliderTag_Ice: + return 6007; + default: + return 0; + } +} + +int MetaMgr::GetSpecMapAreaEnterTime(int tag) +{ + switch (tag) { + case kColliderTag_Grass: + return grass_invisible_time; + case kColliderTag_Water: + return water_invisible_time; + case kColliderTag_Ice: + return ice_invisible_time; + default: + return 0; + } +} + +int MetaMgr::GetSpecMapAreaLeaveTime(int tag) +{ + switch (tag) { + case kColliderTag_Grass: + return grass_show_time; + case kColliderTag_Water: + return water_show_time; + case kColliderTag_Ice: + return ice_show_time; + default: + return 0; + } +} diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 17b7195..a281536 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -52,6 +52,9 @@ class MetaMgr : public a8::Singleton MetaData::Robot* RandRobot(std::set& refreshed_robot_set); MetaData::AI* GetAI(int ai_level, int ai_mode); std::string GetText(const std::string& textid, const std::string& def_text=""); + int GetSpecMapAreaBuffId(int tag); + int GetSpecMapAreaEnterTime(int tag); + int GetSpecMapAreaLeaveTime(int tag); int gas_inactive_time = 10; int newbie_gas_inactive_time = 5;