From 6525b795f5342d283b1157e1d9c37306fe77c9be Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 31 Jul 2024 11:34:41 +0800 Subject: [PATCH] 1 --- server/gameserver/boxdrop.cc | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/server/gameserver/boxdrop.cc b/server/gameserver/boxdrop.cc index 791afc99..3ec5aa23 100644 --- a/server/gameserver/boxdrop.cc +++ b/server/gameserver/boxdrop.cc @@ -1,5 +1,7 @@ #include "precompile.h" +#include + #include #include @@ -226,23 +228,45 @@ void BoxDrop::AllocBoxToRoom() if (alloc_box_num_ <= 0) { return; } + std::vector all_list; std::vector hero_list; std::vector box_list; room_->TraverseEntityList ( - [this, &hero_list, &box_list] (Entity* e) -> bool + [this, &all_list, &hero_list, &box_list] (Entity* e) -> bool { if (e->IsCreature(room_) && ((Creature*)e)->IsHero()) { Hero* hero = (Hero*)e; if (hero->meta->HasDrop()) { hero_list.push_back(hero); + all_list.push_back(e); } } else if (e->IsRoomObstacle()) { RoomObstacle* ob = (RoomObstacle*)e; if (ob->meta->HasDrop()) { box_list.push_back(ob); + all_list.push_back(e); } } return true; }); + std::shuffle(all_list.begin(), + all_list.end(), + std::default_random_engine(a8::XGetTickCount())); + std::shuffle(hero_list.begin(), + hero_list.end(), + std::default_random_engine(a8::XGetTickCount())); + std::shuffle(box_list.begin(), + box_list.end(), + std::default_random_engine(a8::XGetTickCount())); +#ifdef MYDEBUG + f8::UdpLog::Instance()->Info + ("AllocBoxToRoom room_uuid:%s all:%d hero:%d box:%d", + { + room_->GetRoomUuid(), + all_list.size(), + hero_list.size(), + box_list.size() + }); +#endif }