From cbeed93374ee08dfddb2320d8b309027c374ecee Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 2 Mar 2023 18:31:11 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 5 ++++- server/gameserver/frag_mitask.h | 1 - server/gameserver/human.cc | 2 +- server/gameserver/microtask.cc | 6 ++++++ server/gameserver/microtask.h | 3 +++ server/gameserver/pbutils.cc | 4 +++- 6 files changed, 17 insertions(+), 4 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 3f2cd824..08ecb604 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -335,6 +335,7 @@ void Bullet::ProcSmokeBomb() task->bomb_pos = GetPos(); task->buff_meta = buff_meta; task->gun_meta = gun_meta; + task->Initialize(); auto task_wp = std::weak_ptr(task); room->xtimer.SetIntervalEx (SERVER_FRAME_RATE / 2, @@ -508,7 +509,7 @@ void Bullet::Check(float distance) void Bullet::ProcFragBomb(int delay_time) { if (sender.Get()) { - std::shared_ptr task = std::shared_ptr(); + std::shared_ptr task = std::make_shared(); task->room = room; task->sender.Attach(sender.Get()); task->bomb_pos = GetPos(); @@ -516,6 +517,7 @@ void Bullet::ProcFragBomb(int delay_time) task->meta = meta; task->atk = GetAtk(); task->explosion_range = GetExplosionRange(); + task->Initialize(); room->xtimer.SetTimeoutEx (std::max(1, (int)(delay_time / FRAME_RATE_MS)), [task] (int event, const a8::Args* args) @@ -563,6 +565,7 @@ void Bullet::ProcC4Bomb(Car* target, int delay_time) task->gun_meta = gun_meta; task->meta = meta; task->atk = GetAtk(); + task->Initialize(); room->xtimer.SetTimeoutEx (std::max(1, (int)(delay_time / FRAME_RATE_MS)), [task] (int event, const a8::Args* args) diff --git a/server/gameserver/frag_mitask.h b/server/gameserver/frag_mitask.h index f1b55f73..a99ae928 100644 --- a/server/gameserver/frag_mitask.h +++ b/server/gameserver/frag_mitask.h @@ -7,7 +7,6 @@ class Player; class FragMiTask : public MicroTask { public: - Room* room = nullptr; Position bomb_pos; CreatureWeakPtr sender; CreatureWeakPtr follow_target; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index bb2f124f..bcb84367 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -431,7 +431,7 @@ void PlayerStats::AdjustRewardData() Human::Human():Creature() { default_weapon.weapon_idx = 0; - default_weapon.weapon_id = 30101; + default_weapon.weapon_id = 30102; default_weapon.ammo = 1; default_weapon.meta = mt::Equip::GetById(default_weapon.weapon_id); default_weapon.Recalc(); diff --git a/server/gameserver/microtask.cc b/server/gameserver/microtask.cc index b8b6737c..3ab01ba6 100644 --- a/server/gameserver/microtask.cc +++ b/server/gameserver/microtask.cc @@ -1,3 +1,9 @@ #include "precompile.h" #include "microtask.h" +#include "room.h" + +void MicroTask::Initialize() +{ + xtimer_attacher.SetOwner(&room->xtimer); +} diff --git a/server/gameserver/microtask.h b/server/gameserver/microtask.h index c34a5d7a..f4f35af3 100644 --- a/server/gameserver/microtask.h +++ b/server/gameserver/microtask.h @@ -5,5 +5,8 @@ class MicroTask { public: + Room* room = nullptr; a8::Attacher xtimer_attacher; + + virtual void Initialize(); }; diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index a8c16636..9e4c91d7 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1106,7 +1106,7 @@ void Human::ProcThrowDmg(int throw_uniid) auto proc_frag_func = [this, equip_meta, context, bomb_pos, bomb_dir, target_pos] () { - std::shared_ptr task = std::shared_ptr(); + std::shared_ptr task = std::make_shared(); task->room = room; task->sender.Attach(this); task->bomb_pos.FromGlmVec3(target_pos); @@ -1114,6 +1114,7 @@ void Human::ProcThrowDmg(int throw_uniid) task->meta = equip_meta; task->atk = equip_meta->atk(); task->explosion_range = equip_meta->explosion_range(); + task->Initialize(); int delay_time = equip_meta->missiles_time();; room->xtimer.SetTimeoutEx (std::max(1, (int)(delay_time / FRAME_RATE_MS)), @@ -1137,6 +1138,7 @@ void Human::ProcThrowDmg(int throw_uniid) task->bomb_pos.FromGlmVec3(target_pos); task->buff_meta = buff_meta; task->gun_meta = equip_meta; + task->Initialize(); auto task_wp = std::weak_ptr(task); room->xtimer.SetIntervalEx (SERVER_FRAME_RATE / 2,