diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 3c8476c..e0a1183 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -377,6 +377,7 @@ void Bullet::ProcPosionGasBomb(int delay_time) task->bomb_pos = GetPos(); task->gun_meta = gun_meta; task->meta = meta; + task->Initialzie(); room->xtimer.AddRepeatTimerAndAttach (SERVER_FRAME_RATE / 2, @@ -417,6 +418,7 @@ void Bullet::ProcMolotorCocktailBomb(int delay_time) task->bomb_pos = GetPos(); task->gun_meta = gun_meta; task->meta = meta; + task->Initialzie(); room->xtimer.AddRepeatTimerAndAttach (SERVER_FRAME_RATE / 2, diff --git a/server/gameserver/molotor_cocktail_mitask.cc b/server/gameserver/molotor_cocktail_mitask.cc index d5da782..a0ec864 100644 --- a/server/gameserver/molotor_cocktail_mitask.cc +++ b/server/gameserver/molotor_cocktail_mitask.cc @@ -5,10 +5,26 @@ #include "player.h" #include "metadata.h" +void MolotorCocktailMiTask::Initialzie() +{ + sender.Get()->room->grid_service->GetAllCellsByXy + ( + sender.Get()->room, + bomb_pos.x, + bomb_pos.y, + grid_list + ); +} + void MolotorCocktailMiTask::Check() { } 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 ea1a1e8..4082edc 100644 --- a/server/gameserver/molotor_cocktail_mitask.h +++ b/server/gameserver/molotor_cocktail_mitask.h @@ -1,6 +1,7 @@ #pragma once #include "microtask.h" +#include "gridcell.h" namespace MetaData { @@ -18,7 +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 Check(); void Done(); }; diff --git a/server/gameserver/posiongas_mitask.cc b/server/gameserver/posiongas_mitask.cc index 2e90a9d..cf9c652 100644 --- a/server/gameserver/posiongas_mitask.cc +++ b/server/gameserver/posiongas_mitask.cc @@ -5,12 +5,42 @@ #include "player.h" #include "metadata.h" +void PosionGasMiTask::Initialzie() +{ + sender.Get()->room->grid_service->GetAllCellsByXy + ( + sender.Get()->room, + bomb_pos.x, + bomb_pos.y, + grid_list + ); +} + void PosionGasMiTask::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); + } + } + } + ); + } } 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 a6acab3..4933adf 100644 --- a/server/gameserver/posiongas_mitask.h +++ b/server/gameserver/posiongas_mitask.h @@ -1,6 +1,7 @@ #pragma once #include "microtask.h" +#include "gridcell.h" namespace MetaData { @@ -18,7 +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 Check(); void Done(); };