This commit is contained in:
aozhiwei 2023-03-02 18:31:11 +08:00
parent 4f64659756
commit cbeed93374
6 changed files with 17 additions and 4 deletions

View File

@ -335,6 +335,7 @@ void Bullet::ProcSmokeBomb()
task->bomb_pos = GetPos(); task->bomb_pos = GetPos();
task->buff_meta = buff_meta; task->buff_meta = buff_meta;
task->gun_meta = gun_meta; task->gun_meta = gun_meta;
task->Initialize();
auto task_wp = std::weak_ptr<SmokeMiTask>(task); auto task_wp = std::weak_ptr<SmokeMiTask>(task);
room->xtimer.SetIntervalEx room->xtimer.SetIntervalEx
(SERVER_FRAME_RATE / 2, (SERVER_FRAME_RATE / 2,
@ -508,7 +509,7 @@ void Bullet::Check(float distance)
void Bullet::ProcFragBomb(int delay_time) void Bullet::ProcFragBomb(int delay_time)
{ {
if (sender.Get()) { if (sender.Get()) {
std::shared_ptr<FragMiTask> task = std::shared_ptr<FragMiTask>(); std::shared_ptr<FragMiTask> task = std::make_shared<FragMiTask>();
task->room = room; task->room = room;
task->sender.Attach(sender.Get()); task->sender.Attach(sender.Get());
task->bomb_pos = GetPos(); task->bomb_pos = GetPos();
@ -516,6 +517,7 @@ void Bullet::ProcFragBomb(int delay_time)
task->meta = meta; task->meta = meta;
task->atk = GetAtk(); task->atk = GetAtk();
task->explosion_range = GetExplosionRange(); task->explosion_range = GetExplosionRange();
task->Initialize();
room->xtimer.SetTimeoutEx room->xtimer.SetTimeoutEx
(std::max(1, (int)(delay_time / FRAME_RATE_MS)), (std::max(1, (int)(delay_time / FRAME_RATE_MS)),
[task] (int event, const a8::Args* args) [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->gun_meta = gun_meta;
task->meta = meta; task->meta = meta;
task->atk = GetAtk(); task->atk = GetAtk();
task->Initialize();
room->xtimer.SetTimeoutEx room->xtimer.SetTimeoutEx
(std::max(1, (int)(delay_time / FRAME_RATE_MS)), (std::max(1, (int)(delay_time / FRAME_RATE_MS)),
[task] (int event, const a8::Args* args) [task] (int event, const a8::Args* args)

View File

@ -7,7 +7,6 @@ class Player;
class FragMiTask : public MicroTask class FragMiTask : public MicroTask
{ {
public: public:
Room* room = nullptr;
Position bomb_pos; Position bomb_pos;
CreatureWeakPtr sender; CreatureWeakPtr sender;
CreatureWeakPtr follow_target; CreatureWeakPtr follow_target;

View File

@ -431,7 +431,7 @@ void PlayerStats::AdjustRewardData()
Human::Human():Creature() Human::Human():Creature()
{ {
default_weapon.weapon_idx = 0; default_weapon.weapon_idx = 0;
default_weapon.weapon_id = 30101; default_weapon.weapon_id = 30102;
default_weapon.ammo = 1; default_weapon.ammo = 1;
default_weapon.meta = mt::Equip::GetById(default_weapon.weapon_id); default_weapon.meta = mt::Equip::GetById(default_weapon.weapon_id);
default_weapon.Recalc(); default_weapon.Recalc();

View File

@ -1,3 +1,9 @@
#include "precompile.h" #include "precompile.h"
#include "microtask.h" #include "microtask.h"
#include "room.h"
void MicroTask::Initialize()
{
xtimer_attacher.SetOwner(&room->xtimer);
}

View File

@ -5,5 +5,8 @@
class MicroTask class MicroTask
{ {
public: public:
Room* room = nullptr;
a8::Attacher xtimer_attacher; a8::Attacher xtimer_attacher;
virtual void Initialize();
}; };

View File

@ -1106,7 +1106,7 @@ void Human::ProcThrowDmg(int throw_uniid)
auto proc_frag_func = auto proc_frag_func =
[this, equip_meta, context, bomb_pos, bomb_dir, target_pos] () [this, equip_meta, context, bomb_pos, bomb_dir, target_pos] ()
{ {
std::shared_ptr<FragMiTask> task = std::shared_ptr<FragMiTask>(); std::shared_ptr<FragMiTask> task = std::make_shared<FragMiTask>();
task->room = room; task->room = room;
task->sender.Attach(this); task->sender.Attach(this);
task->bomb_pos.FromGlmVec3(target_pos); task->bomb_pos.FromGlmVec3(target_pos);
@ -1114,6 +1114,7 @@ void Human::ProcThrowDmg(int throw_uniid)
task->meta = equip_meta; task->meta = equip_meta;
task->atk = equip_meta->atk(); task->atk = equip_meta->atk();
task->explosion_range = equip_meta->explosion_range(); task->explosion_range = equip_meta->explosion_range();
task->Initialize();
int delay_time = equip_meta->missiles_time();; int delay_time = equip_meta->missiles_time();;
room->xtimer.SetTimeoutEx room->xtimer.SetTimeoutEx
(std::max(1, (int)(delay_time / FRAME_RATE_MS)), (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->bomb_pos.FromGlmVec3(target_pos);
task->buff_meta = buff_meta; task->buff_meta = buff_meta;
task->gun_meta = equip_meta; task->gun_meta = equip_meta;
task->Initialize();
auto task_wp = std::weak_ptr<SmokeMiTask>(task); auto task_wp = std::weak_ptr<SmokeMiTask>(task);
room->xtimer.SetIntervalEx room->xtimer.SetIntervalEx
(SERVER_FRAME_RATE / 2, (SERVER_FRAME_RATE / 2,