From 7ed5aa8fa7d8068bd168d0262a7d7bac339e6076 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 1 Apr 2024 20:35:57 +0800 Subject: [PATCH] 1 --- server/gameserver/hero.cc | 54 +++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index 86ccc9d4..93628f6b 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -332,13 +332,14 @@ void Hero::DecHP(float dec_hp, int killer_id, const std::string killer_name, int void Hero::BeKill(int killer_id, const std::string& killer_name, int weapon_id) { + std::vector items; dead = true; if (meta->HasDrop() && !room->IsPveRoom()) { - room->ScatterDrop(GetPos().ToGlmVec3(), meta->RandDrop()); + room->ScatterDrop(GetPos().ToGlmVec3(), meta->RandDrop(), false, &items); } if (!room->IsPveRoom()) { for (int id : meta->_drop_list) { - room->ScatterDrop(GetPos().ToGlmVec3(), id); + room->ScatterDrop(GetPos().ToGlmVec3(), id, false, &items); } } room->frame_event.AddDead(GetWeakPtrRef(), 0); @@ -370,23 +371,38 @@ void Hero::BeKill(int killer_id, const std::string& killer_name, int weapon_id) AllocDeadExp(killer_id); GetTrigger()->Die(killer_id, weapon_id); if (room->IsMobaModeRoom() && !room->IsGameOver()) { - int revive_time = room->GetMapMeta()->GetMobaRoomMeta()->GetMonsterReviveTime(GetHeroMeta()->id()); - if (revive_time >= 0) { - room->xtimer.SetTimeoutEx - (revive_time * SERVER_FRAME_RATE, - [room = room, hero_meta = GetHeroMeta(), pos = src_pos] (int event, const a8::Args* args) - { - if (a8::TIMER_EXEC_EVENT == event) { - Hero* hero = room->CreateHero - (nullptr, - hero_meta, - pos, - GlmHelper::UP, - 666, - 0); - } - }, - &room->xtimer_attacher_); + { + int revive_time = room->GetMapMeta()->GetMobaRoomMeta()->GetMonsterReviveTime(GetHeroMeta()->id()); + if (revive_time >= 0) { + room->xtimer.SetTimeoutEx + (revive_time * SERVER_FRAME_RATE, + [room = room, hero_meta = GetHeroMeta(), pos = src_pos] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + Hero* hero = room->CreateHero + (nullptr, + hero_meta, + pos, + GlmHelper::UP, + 666, + 0); + } + }, + &room->xtimer_attacher_); + } + } + { + int life_time = room->GetMapMeta()->GetMobaRoomMeta()->GetMonsterLootLifeTime(GetHeroMeta()->id()); + if (life_time >= 0) { + room->xtimer.SetTimeoutEx + (life_time * SERVER_FRAME_RATE, + [room = room, items] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + } + }, + &room->xtimer_attacher_); + } } } }