diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 3445376a..c770fb59 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -385,58 +385,36 @@ void InternalShot(Creature* c, } } { - BulletInfo* bullet_info = new BulletInfo(); - bullet_info->c = c->GetWeakPtrRef(); - bullet_info->weapon_uniid = weapon_uniid; - bullet_info->weapon_meta = weapon_meta; - bullet_info->skill_meta = skill_meta; - bullet_info->bullet_meta = bullet_meta; - bullet_info->bullet_born_pos = bullet_born_pos; - bullet_info->bullet_dir = bullet_dir; - bullet_info->fly_distance = fly_distance; - bullet_info->delay_time = std::get<3>(tuple); - bullet_info->recoil_force = std::get<4>(tuple); - bullet_info->invincible_buff_uniid = invincible_buff_uniid; - bullet_info->trace_target_uniid = trace_target_uniid; - bullet_info->keep_shot_animi_timer_ptr = keep_shot_animi_timer_ptr; - bullet_info->shot_animi_time = shot_animi_time; + BulletInfo bullet_info; + bullet_info.c = c->GetWeakPtrRef(); + bullet_info.weapon_uniid = weapon_uniid; + bullet_info.weapon_meta = weapon_meta; + bullet_info.skill_meta = skill_meta; + bullet_info.bullet_meta = bullet_meta; + bullet_info.bullet_born_pos = bullet_born_pos; + bullet_info.bullet_dir = bullet_dir; + bullet_info.fly_distance = fly_distance; + bullet_info.delay_time = std::get<3>(tuple); + bullet_info.recoil_force = std::get<4>(tuple); + bullet_info.invincible_buff_uniid = invincible_buff_uniid; + bullet_info.trace_target_uniid = trace_target_uniid; + bullet_info.keep_shot_animi_timer_ptr = keep_shot_animi_timer_ptr; + bullet_info.shot_animi_time = shot_animi_time; if (skill_meta && (skill_meta->GetMagicId() == MAGIC_AXXF || skill_meta->GetMagicId() == MAGIC_HJHX)) { - bullet_info->trace_target_uniid = c->GetSkillTargetId(); + bullet_info.trace_target_uniid = c->GetSkillTargetId(); } if (weapon_meta->i->double_gun() && bulletIdx > (int)(bulletNum / 2)) { - bullet_info->hand = 1; + bullet_info.hand = 1; } #ifdef DEBUG - if (bullet_info->trace_target_uniid) { - a8::XPrintf("bullet trace_target_uniid:%d\n", {bullet_info->trace_target_uniid}); + if (bullet_info.trace_target_uniid) { + a8::XPrintf("bullet trace_target_uniid:%d\n", {bullet_info.trace_target_uniid}); } #endif - #if 1 - InternalCreateBullet(*bullet_info); - delete bullet_info; - bullet_info = nullptr; - #else - c->room->xtimer.AddDeadLineTimerAndAttach - ( - shot_animi_time / FRAME_RATE_MS, - a8::XParams() - .SetSender(bullet_info), - [] (const a8::XParams& param) - { - BulletInfo* bullet_info = (BulletInfo*)param.sender.GetUserData(); - InternalCreateBullet(*bullet_info); - }, - &c->xtimer_attacher.timer_list_, - [] (const a8::XParams& param) - { - BulletInfo* bullet_info = (BulletInfo*)param.sender.GetUserData(); - delete bullet_info; - } - ); - #endif + InternalCreateBullet(bullet_info); } } c->GetTrigger()->Shot(weapon_meta);