From bbfe9c0376cb7e96318d08464bf460f8a8d42e0d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 10 Apr 2024 14:24:15 +0800 Subject: [PATCH] 1 --- server/gameserver/commands.cc | 35 +++++++++++++++++++++++++++++++++++ server/gameserver/creature.cc | 17 ++++++++++++++++- server/gameserver/creature.h | 3 +++ server/gameserver/mt/Param.h | 3 +++ server/gameserver/player.cc | 2 ++ server/gameserver/player.h | 5 +++++ 6 files changed, 64 insertions(+), 1 deletion(-) diff --git a/server/gameserver/commands.cc b/server/gameserver/commands.cc index 86920222..cf0187ef 100644 --- a/server/gameserver/commands.cc +++ b/server/gameserver/commands.cc @@ -13,6 +13,7 @@ #include "incubator.h" #include "mapinstance.h" #include "team.h" +#include "loot.h" #include "cs_proto.pb.h" @@ -410,6 +411,40 @@ void Player::_CMExecCommand(f8::MsgHdr* hdr, const cs::CMExecCommand& msg) &xtimer_attacher); } else if (cmd == "fast_forward") { room->GMFastForward(); + } else if (cmd == "last_pickup") { + SendDebugMsg(a8::Format("拾取道具: 距离当前时间(毫秒):%d 数量:%d", + { + (room->GetFrameNo() - last_interaction_frameno_) * FRAME_RATE_MS, + last_interaction_objids_.size() + })); + SendDebugMsg("道具拾取: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); + for (int obj_uniid : last_interaction_objids_) { + std::string obj_type = "?"; + std::string obj_name = "?"; + int item_id = 0; + int entity_type = 0; + Entity* entity = room->GetEntityByUniId(obj_uniid); + if (entity) { + entity_type = entity->GetEntityType(); + switch (entity->GetEntityType()) { + case ET_Loot: + { + item_id = ((Loot*)entity)->item_id; + } + break; + default: + { + } + break; + } + } + SendDebugMsg(a8::Format("拾取道具: obj_uniid:%d item_id:%s", + { + obj_uniid, + item_id, + })); + } + SendDebugMsg("道具拾取: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"); } else if (cmd == "winexp" && cmds.size() >= 1) { float exp = a8::XValue(cmds[1]).GetDouble(); if (exp > 0) { diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 802a0b84..d410aa34 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1716,8 +1716,23 @@ void Creature::CheckSpecObject(int new_poly_flags) RemoveBuffById(8058); RemoveBuffById(kInGrassBuffId); } else { - TryAddBuffAndSetTime(this, 8058, 9999999); TryAddBuffAndSetTime(this, kInGrassBuffId, 9999999); + if ((room->GetFrameNo() - last_battling_frameno) * FRAME_RATE_MS < + mt::Param::s().battling_grass_hide_delay_time) { + #if 0 + battling_grass_hide_delay_timer = room->xtimer.SetTimeoutWpEx + ( + dur_time * SERVER_FRAME_RATE, + [] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + } + }, + &xtimer_attacher); + #endif + } else { + TryAddBuffAndSetTime(this, 8058, 9999999); + } } } } diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 6724e010..7be2aa73 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -134,6 +134,9 @@ class Creature : public MoveableEntity int point_idx = 0; int path_dir = 0; + long long last_battling_frameno = 0; + a8::XTimerWp battling_grass_hide_delay_timer; + Creature(); virtual ~Creature() override; virtual void Initialize() override; diff --git a/server/gameserver/mt/Param.h b/server/gameserver/mt/Param.h index 62ed5901..aa998320 100644 --- a/server/gameserver/mt/Param.h +++ b/server/gameserver/mt/Param.h @@ -142,6 +142,9 @@ namespace mt int battle_auto_ready_min_time = 0; int battle_auto_ready_max_time = 0; + int battling_detection_range = 0; + int battling_grass_hide_delay_time = 0; + std::vector block_effect_range; std::vector crit_effect_range; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index d71df473..09433716 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -832,6 +832,8 @@ void Player::ProcInteraction() #endif } } + last_interaction_objids_ = std::move(interaction_objids); + last_interaction_frameno_ = room->GetFrameNo(); interaction_objids.clear(); if (notify_msg.items().size() > 0) { SendNotifyMsg(notify_msg); diff --git a/server/gameserver/player.h b/server/gameserver/player.h index 19dbf60a..08cc5f44 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -166,6 +166,11 @@ private: long long last_cmmove_frameno_ = 0; a8::XTimerWp watch_war_req_timer_; +#ifdef MYDEBUG + std::vector last_interaction_objids_; + long long last_interaction_frameno_ = 0; +#endif + friend class EntityFactory; friend class PBUtils; };