From 1dec9d2c26bc655e7dd44fc2bc940d2142ef4a31 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 6 Apr 2021 14:35:36 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 59 +++++++------------- server/gameserver/molotor_cocktail_mitask.cc | 57 +++++++++++++++++-- server/gameserver/molotor_cocktail_mitask.h | 2 +- server/gameserver/posiongas_mitask.cc | 41 ++++++++++++-- server/gameserver/posiongas_mitask.h | 2 +- 5 files changed, 110 insertions(+), 51 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index e0a1183..4f9a3e6 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -379,33 +379,23 @@ void Bullet::ProcPosionGasBomb(int delay_time) task->meta = meta; task->Initialzie(); - room->xtimer.AddRepeatTimerAndAttach - (SERVER_FRAME_RATE / 2, - a8::XParams() - .SetSender(task), - [] (const a8::XParams& param) - { - PosionGasMiTask* task = (PosionGasMiTask*)param.sender.GetUserData(); - task->Check(); - }, - &task->timer_attacher.timer_list_); - room->xtimer.AddDeadLineTimerAndAttach - (SERVER_FRAME_RATE * MetaMgr::Instance()->GetSysParamAsInt("smoke_duration", 10), + (delay_time / FRAME_RATE_MS, a8::XParams() .SetSender(task), [] (const a8::XParams& param) - { - }, - &room->timer_attacher.timer_list_, - [] (const a8::XParams& param) { PosionGasMiTask* task = (PosionGasMiTask*)param.sender.GetUserData(); - task->Done(); - delete task; - } - ); + task->room->frame_event.AddExplosionEx + (task->sender, + task->meta->i->id(), + task->bomb_pos, + task->gun_meta->i->explosion_effect()); + task->Active(); + }, + &room->timer_attacher.timer_list_ + ); } } @@ -420,31 +410,22 @@ void Bullet::ProcMolotorCocktailBomb(int delay_time) task->meta = meta; task->Initialzie(); - room->xtimer.AddRepeatTimerAndAttach - (SERVER_FRAME_RATE / 2, - a8::XParams() - .SetSender(task), - [] (const a8::XParams& param) - { - MolotorCocktailMiTask* task = (MolotorCocktailMiTask*)param.sender.GetUserData(); - task->Check(); - }, - &task->timer_attacher.timer_list_); - room->xtimer.AddDeadLineTimerAndAttach - (SERVER_FRAME_RATE * MetaMgr::Instance()->GetSysParamAsInt("smoke_duration", 10), + (delay_time / FRAME_RATE_MS, a8::XParams() .SetSender(task), [] (const a8::XParams& param) - { - }, - &room->timer_attacher.timer_list_, - [] (const a8::XParams& param) { MolotorCocktailMiTask* task = (MolotorCocktailMiTask*)param.sender.GetUserData(); - task->Done(); - delete task; - } + task->room->frame_event.AddExplosionEx + (task->sender, + task->meta->i->id(), + task->bomb_pos, + task->gun_meta->i->explosion_effect()); + task->Active(); + + }, + &room->timer_attacher.timer_list_ ); } } diff --git a/server/gameserver/molotor_cocktail_mitask.cc b/server/gameserver/molotor_cocktail_mitask.cc index a0ec864..60d472b 100644 --- a/server/gameserver/molotor_cocktail_mitask.cc +++ b/server/gameserver/molotor_cocktail_mitask.cc @@ -16,15 +16,62 @@ void MolotorCocktailMiTask::Initialzie() ); } +void MolotorCocktailMiTask::Active() +{ + room->xtimer.AddRepeatTimerAndAttach + (SERVER_FRAME_RATE / 2, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + MolotorCocktailMiTask* task = (MolotorCocktailMiTask*)param.sender.GetUserData(); + task->Check(); + }, + &timer_attacher.timer_list_); + + room->xtimer.AddDeadLineTimerAndAttach + (SERVER_FRAME_RATE * meta->i->time(), + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + }, + &timer_attacher.timer_list_, + [] (const a8::XParams& param) + { + MolotorCocktailMiTask* task = (MolotorCocktailMiTask*)param.sender.GetUserData(); + task->Done(); + delete task; + } + ); + +} + void MolotorCocktailMiTask::Check() { + if (sender.Get()) { + std::set objects; + sender.Get()->room->grid_service->TouchCreatures + ( + sender.Get()->room->GetRoomIdx(), + grid_list, + [this, &objects] (Creature* c, bool& stop) + { + if (sender.Get()->IsProperTarget(c)) { + if (bomb_pos.Distance(c->GetPos()) < meta->i->explosion_range()) { + objects.insert(c); + } + } + } + ); + for (Creature* target : objects) { + if (!target->GetBuffById(meta->i->buffid())) { + target->MustBeAddBuff(sender.Get(), meta->i->buffid()); + } + } + } } void MolotorCocktailMiTask::Done() { - for (auto& pair : targets) { - if (pair.second.Get()) { - - } - } } diff --git a/server/gameserver/molotor_cocktail_mitask.h b/server/gameserver/molotor_cocktail_mitask.h index 4082edc..fa5f134 100644 --- a/server/gameserver/molotor_cocktail_mitask.h +++ b/server/gameserver/molotor_cocktail_mitask.h @@ -19,10 +19,10 @@ class MolotorCocktailMiTask : public MicroTask CreatureWeakPtr sender; MetaData::Equip* gun_meta = nullptr; MetaData::Equip* meta = nullptr; - std::map targets; std::set grid_list; void Initialzie(); + void Active(); void Check(); void Done(); }; diff --git a/server/gameserver/posiongas_mitask.cc b/server/gameserver/posiongas_mitask.cc index cf9c652..f580c25 100644 --- a/server/gameserver/posiongas_mitask.cc +++ b/server/gameserver/posiongas_mitask.cc @@ -16,6 +16,37 @@ void PosionGasMiTask::Initialzie() ); } +void PosionGasMiTask::Active() +{ + room->xtimer.AddRepeatTimerAndAttach + (SERVER_FRAME_RATE / 2, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + PosionGasMiTask* task = (PosionGasMiTask*)param.sender.GetUserData(); + task->Check(); + }, + &timer_attacher.timer_list_); + + room->xtimer.AddDeadLineTimerAndAttach + (SERVER_FRAME_RATE * meta->i->time(), + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + }, + &timer_attacher.timer_list_, + [] (const a8::XParams& param) + { + PosionGasMiTask* task = (PosionGasMiTask*)param.sender.GetUserData(); + task->Done(); + delete task; + } + ); + +} + void PosionGasMiTask::Check() { if (sender.Get()) { @@ -33,14 +64,14 @@ void PosionGasMiTask::Check() } } ); + for (Creature* target : objects) { + if (!target->GetBuffById(meta->i->buffid())) { + target->MustBeAddBuff(sender.Get(), meta->i->buffid()); + } + } } } void PosionGasMiTask::Done() { - for (auto& pair : targets) { - if (pair.second.Get()) { - - } - } } diff --git a/server/gameserver/posiongas_mitask.h b/server/gameserver/posiongas_mitask.h index 4933adf..79dc6c2 100644 --- a/server/gameserver/posiongas_mitask.h +++ b/server/gameserver/posiongas_mitask.h @@ -19,10 +19,10 @@ class PosionGasMiTask : public MicroTask CreatureWeakPtr sender; MetaData::Equip* gun_meta = nullptr; MetaData::Equip* meta = nullptr; - std::map targets; std::set grid_list; void Initialzie(); + void Active(); void Check(); void Done(); };