From a0754e877de2a3e1080c738d400eef9c54bb2639 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 22 Jan 2024 16:02:45 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/callfunc.cc | 3 ++- server/gameserver/room.cc | 4 +++- server/gameserver/room.h | 3 ++- server/gameserver/shot.cc | 5 ++++- server/gameserver/skill.cc | 4 +++- 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index 7babfebd..af6ab6fb 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -1505,7 +1505,8 @@ void CallFuncBuff::Shot() fly_distance = GlmHelper::Norm2D(target_pos - owner->GetPos().ToGlmVec3()); owner->SetAttackDir(attack_dir); } - fly_distance = std::max(500.0f, fly_distance); + fly_distance = std::max(200.0f, fly_distance); + fly_distance = std::min(400.0f, fly_distance); InternalShot(owner, owner->GetCurrWeapon()->meta, bullet_meta, diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 89be63bd..eabf95fd 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -724,7 +724,8 @@ int Room::CreateBullet(Creature* sender, float shot_animi_time, int weapon_buff_id, std::shared_ptr> reporter_list, - int shot_uniid) + int shot_uniid, + std::function on_bullet_exit) { int bullet_uniid = 0; if (grid_service->CanAdd(pos.x, pos.z)) { @@ -750,6 +751,7 @@ int Room::CreateBullet(Creature* sender, bullet->spec_gun_buff_id = weapon_buff_id; bullet->reporter_list = reporter_list; bullet->shot_uniid = shot_uniid; + bullet->on_bullet_exit = on_bullet_exit; bullet->Initialize(); #ifdef MYDEBUG1 a8::XPrintf("xxxxxxx born_pos:%f,%f,%f curr_pos:%f,%f,%f\n", diff --git a/server/gameserver/room.h b/server/gameserver/room.h index b50e5d68..11b3c426 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -179,7 +179,8 @@ public: float shot_animi_time, int weapon_buff_id, std::shared_ptr> reporter_list, - int shot_uniid); + int shot_uniid, + std::function on_bullet_exit); Car* CreateCar(Human* driver, int car_uniid, const mt::Equip* meta, diff --git a/server/gameserver/shot.cc b/server/gameserver/shot.cc index 11259455..d5fd2f4b 100644 --- a/server/gameserver/shot.cc +++ b/server/gameserver/shot.cc @@ -56,6 +56,7 @@ struct BulletInfo int shot_uniid = 0; a8::XTimerWp keep_shot_animi_timer_ptr; bool ignore_original_dmg = false; + std::function on_bullet_exit; }; static void CalcGunMuzzlePosition(Creature* c, @@ -250,7 +251,8 @@ static void InternalCreateBullet(BulletInfo& bullet_info) bullet_info.shot_animi_time, bullet_info.weapon_buff_id, bullet_info.reporter_list, - bullet_info.shot_uniid); + bullet_info.shot_uniid, + bullet_info.on_bullet_exit); #ifdef MYDEBUG1 if (bullet_info.c.Get()->IsPlayer()) { bullet_info.c.Get()->SendDebugMsg(a8::Format("CreateBullet id:%d", @@ -503,6 +505,7 @@ void InternalShot(Creature* c, bullet_info.weapon_buff_id = weapon_buff_id; bullet_info.reporter_list = c->CalcReporterList(trace_target_uniid, weapon_meta, bullet_meta); bullet_info.ignore_original_dmg = c->GetAbility()->GetSwitchTimes(kIgnoreOriginalDmg) > 0; + bullet_info.on_bullet_exit = on_bullet_exit; if (weapon_meta->double_gun() && bulletIdx > (int)(bulletNum / 2)) { bullet_info.hand = 1; diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index e97940a6..6a5a4871 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -238,7 +238,9 @@ void Skill::DoMinorMode() if (!minor_mode_timer_.expired()) { owner->room->xtimer.Delete(minor_mode_timer_); } - old_cb(kSmaClick); + if (old_cb) { + old_cb(kSmaClick); + } } }