From 5c1d6b38dfdd11176584a64b072e13601b4acd8e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 7 Apr 2023 23:07:41 +0800 Subject: [PATCH] 1 --- server/gameserver/mt/Param.cc | 2 ++ server/gameserver/mt/Param.h | 2 ++ server/gameserver/obstacle.cc | 18 +++++++++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/server/gameserver/mt/Param.cc b/server/gameserver/mt/Param.cc index b4b1e04e..1ddb5542 100644 --- a/server/gameserver/mt/Param.cc +++ b/server/gameserver/mt/Param.cc @@ -99,6 +99,8 @@ namespace mt METAMGR_READ(move_step_len, 80); METAMGR_READ(early_parachute_jump, 0); + + METAMGR_READ(box_open_delay, 0); } #if 0 { diff --git a/server/gameserver/mt/Param.h b/server/gameserver/mt/Param.h index 4eac9619..2432912c 100644 --- a/server/gameserver/mt/Param.h +++ b/server/gameserver/mt/Param.h @@ -88,6 +88,8 @@ namespace mt int revive_time = 15; int move_step_len = 80; + + int box_open_delay = 0; }; static void StaticPostInit(); static const S& s() { return s_; }; diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index d7d49b4e..17a30869 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -21,6 +21,7 @@ #include "mt/Buff.h" #include "mt/Hero.h" #include "mt/Skill.h" +#include "mt/Param.h" Obstacle::Obstacle():Entity() { @@ -296,8 +297,23 @@ bool Obstacle::DoInteraction(Human* sender) if (!IsDead(sender->room) && IsOpenInteraction()) { dead_reason = 1; Die(sender->room); - sender->DropItems(this); BroadcastFullState(sender->room); + sender->room->xtimer.SetTimeoutEx + (mt::Param::s().box_open_delay / FRAME_RATE_MS, + [sender, obj_uniid = GetUniId()] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + Entity* entity = sender->room->GetEntityByUniId(obj_uniid); + if (entity && entity->IsEntityType(ET_Obstacle)) { + Obstacle* ob = (Obstacle*)entity; + if (ob->IsRoomObstacle()) { + sender->DropItems(ob); + } + } + return; + } + }, + &sender->xtimer_attacher); if (meta->delay_destroy() > 0) { sender->room->xtimer.SetTimeoutEx (meta->delay_destroy() / FRAME_RATE_MS,