diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 3d2b215..83f8cf1 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -59,6 +59,9 @@ void Bullet::OnHit(std::set& objects) void Bullet::ProcBomb() { self_collider_->rad = gun_meta->i->explosion_range(); + if (IsCurrWeapon()) { + self_collider_->rad *= (1 + sender.Get()->GetAttrRate(kHAT_WeaponExplosionRange)); + } std::set objects; Car* c4_target = nullptr; TraverseCreatures @@ -480,5 +483,5 @@ void Bullet::ProcOilBucketBomb(int delay_time) bool Bullet::IsCurrWeapon() { - return false; + return sender.Get()->GetCurrWeapon()->meta == gun_meta; } diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 0158e81..acdb517 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1462,7 +1462,7 @@ void Creature::AutoLoadingBullet(bool manual) on_loading_bullet(); } StartAction(AT_Reload, - p_weapon->GetAttrValue(kHAT_ReloadTime), + p_weapon->GetAttrValue(kHAT_ReloadTime) * (1 + GetAttrRate(kHAT_WeaponReloadTime)), p_weapon->weapon_id, p_weapon->weapon_idx); } diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 76c4485..0a0cac5 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -107,7 +107,7 @@ float Human::GetSpeed() if (GetCurrWeapon()->weapon_idx == GUN_SLOT1 || GetCurrWeapon()->weapon_idx == GUN_SLOT2) { if (action_type != AT_Reload) { - return meta->i->shot_speed(); + return meta->i->shot_speed() * (1 + GetAttrRate(kHAT_ShotSpeed)); } } } else if (aiming) {