From cc02ded2c370b1fee9bdc3ae4c8ea885800387d6 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 26 Oct 2022 11:29:25 +0800 Subject: [PATCH] 1 --- server/gameserver/battledatacontext.cc | 38 +++++++++++++------------- server/gameserver/battledatacontext.h | 21 +++++++------- server/gameserver/bullet.h | 7 ++++- server/gameserver/types.h | 10 +++++++ 4 files changed, 45 insertions(+), 31 deletions(-) diff --git a/server/gameserver/battledatacontext.cc b/server/gameserver/battledatacontext.cc index 42c220c4..c0f178cb 100644 --- a/server/gameserver/battledatacontext.cc +++ b/server/gameserver/battledatacontext.cc @@ -487,11 +487,11 @@ void BattleDataContext::CalcBattleStat(struct PlayerStats* stats) } } -float BattleDataContext::CalcDmg(Creature* target, Bullet* bullet) +float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet) { float total_atk = GetTotalAtk(bullet); float normal_dmg = total_atk * (1 - target->GetBattleContext()->GetDef() / 1000); - if (bullet->strengthen_wall) { + if (bullet->GetStrengthenWall()) { normal_dmg *= 1.2f; } float crit = IsCrit(bullet) ? GetCritRate(bullet) : 0; @@ -500,7 +500,7 @@ float BattleDataContext::CalcDmg(Creature* target, Bullet* bullet) finaly_dmg *= (1 + target->GetAbility()->GetDmgAddition()); finaly_dmg *= (1 - target->GetAbility()->GetDmgRuduce()); #if 1 - finaly_dmg *= (1 + bullet->strengthen_wall); + finaly_dmg *= (1 + bullet->GetStrengthenWall()); #endif #ifdef DEBUG if (owner_.Get()->IsPlayer()) { @@ -521,7 +521,7 @@ float BattleDataContext::CalcDmg(Creature* target, Bullet* bullet) return finaly_dmg; } -float BattleDataContext::CalcDmg(Obstacle* target, Bullet* bullet) +float BattleDataContext::CalcDmg(Obstacle* target, IBullet* bullet) { float total_atk = GetTotalAtk(bullet); float normal_dmg = total_atk * (1 - 0 / 1000); @@ -563,7 +563,7 @@ float BattleDataContext::CalcDmg(Explosion* e) return finaly_dmg; } -float BattleDataContext::GetTotalAtk(Bullet* bullet) +float BattleDataContext::GetTotalAtk(IBullet* bullet) { float total_atk = (GetHeroTotalAtk() / 100 + 1) * GetWeaponAtk(bullet); return total_atk; @@ -589,18 +589,18 @@ float BattleDataContext::GetHeroTotalAtk() return hero_ability_->GetAtk(); } -float BattleDataContext::GetWeaponAtk(Bullet* bullet) +float BattleDataContext::GetWeaponAtk(IBullet* bullet) { - auto weapon = GetWeaponByUniId(bullet->weapon_uniid); + auto weapon = GetWeaponByUniId(bullet->GetWeaponUniId()); if (weapon) { return weapon->GetAtk(); } - if (bullet->skill_meta && bullet->skill_meta->number_meta) { - switch (bullet->skill_meta->GetMagicId()) { + if (bullet->GetSkillMeta() && bullet->GetSkillMeta()->number_meta) { + switch (bullet->GetSkillMeta()->GetMagicId()) { case MAGIC_HLYZ: case MAGIC_HJHX: { - return bullet->skill_meta->number_meta->float_ratio; + return bullet->GetSkillMeta()->number_meta->float_ratio; } break; default: @@ -609,28 +609,28 @@ float BattleDataContext::GetWeaponAtk(Bullet* bullet) break; } } - return bullet->gun_meta->i->atk(); + return bullet->GetGunMeta()->i->atk(); } -bool BattleDataContext::IsCrit(Bullet* bullet) +bool BattleDataContext::IsCrit(IBullet* bullet) { int rnd = a8::RandEx(0, 1000 - 1); return GetCrit(bullet) > rnd;; } -bool BattleDataContext::IsDodge(Bullet* bullet) +bool BattleDataContext::IsDodge(IBullet* bullet) { int rnd = a8::RandEx(0, 1000 - 1); return GetDodge(bullet) > rnd;; } -float BattleDataContext::GetCritRate(Bullet* bullet) +float BattleDataContext::GetCritRate(IBullet* bullet) { - auto weapon = GetWeaponByUniId(bullet ? bullet->weapon_uniid : 0); + auto weapon = GetWeaponByUniId(bullet ? bullet->GetWeaponUniId() : 0); return hero_ability_->GetCritAtkRatio() + (weapon ? weapon->GetCritAtkRatio() : 0); } -float BattleDataContext::GetDodgeRuduce(Bullet* bullet) +float BattleDataContext::GetDodgeRuduce(IBullet* bullet) { return hero_ability_->GetDodgeDamageRuduce(); } @@ -712,13 +712,13 @@ void BattleDataContext::GetSkillList(std::vector& skill_list) } } -float BattleDataContext::GetCrit(Bullet* bullet) +float BattleDataContext::GetCrit(IBullet* bullet) { - auto weapon = GetWeaponByUniId(bullet ? bullet->weapon_uniid : 0); + auto weapon = GetWeaponByUniId(bullet ? bullet->GetWeaponUniId() : 0); return hero_ability_->GetCritAtk() + (weapon ? weapon->GetCritAtk() : 0); } -float BattleDataContext::GetDodge(Bullet* bullet) +float BattleDataContext::GetDodge(IBullet* bullet) { return hero_ability_->GetDodge(); } diff --git a/server/gameserver/battledatacontext.h b/server/gameserver/battledatacontext.h index c0484c05..cd420b6a 100644 --- a/server/gameserver/battledatacontext.h +++ b/server/gameserver/battledatacontext.h @@ -21,7 +21,6 @@ namespace MetaData } class Creature; -class Bullet; class Obstacle; class Explosion; class Weapon; @@ -50,8 +49,8 @@ struct BattleDataContext void CalcBattleStat(struct PlayerStats* stats); - float CalcDmg(Creature* target, Bullet* bullet); - float CalcDmg(Obstacle* target, Bullet* bullet); + float CalcDmg(Creature* target, IBullet* bullet); + float CalcDmg(Obstacle* target, IBullet* bullet); float CalcDmg(Explosion* e); float GetHP(); @@ -74,14 +73,14 @@ struct BattleDataContext private: void Clear(); - float GetTotalAtk(Bullet* bullet); - float GetWeaponAtk(Bullet* bullet); - bool IsCrit(Bullet* bullet); - float GetCrit(Bullet* bullet); - float GetCritRate(Bullet* bullet); - bool IsDodge(Bullet* bullet); - float GetDodge(Bullet* bullet); - float GetDodgeRuduce(Bullet* bullet); + float GetTotalAtk(IBullet* bullet); + float GetWeaponAtk(IBullet* bullet); + bool IsCrit(IBullet* bullet); + float GetCrit(IBullet* bullet); + float GetCritRate(IBullet* bullet); + bool IsDodge(IBullet* bullet); + float GetDodge(IBullet* bullet); + float GetDodgeRuduce(IBullet* bullet); std::shared_ptr GetWeaponByUniId(long long weapon_uniid); private: diff --git a/server/gameserver/bullet.h b/server/gameserver/bullet.h index 022eefef..2d6419f5 100644 --- a/server/gameserver/bullet.h +++ b/server/gameserver/bullet.h @@ -17,7 +17,7 @@ class CircleCollider; class MovementComponent; class Car; class Ability; -class Bullet : public MoveableEntity +class Bullet : public MoveableEntity, public IBullet { public: long long weapon_uniid = 0; @@ -55,6 +55,11 @@ class Bullet : public MoveableEntity protected: Bullet(); + virtual float GetStrengthenWall() override { return strengthen_wall; }; + virtual long long GetWeaponUniId() override { return weapon_uniid; }; + virtual MetaData::Skill* GetSkillMeta() override {return skill_meta; }; + virtual MetaData::Equip* GetGunMeta() override { return gun_meta; }; + private: void ProcBomb(); diff --git a/server/gameserver/types.h b/server/gameserver/types.h index 387680a5..1d12af21 100644 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -3,6 +3,7 @@ namespace MetaData { struct Equip; + struct Skill; } namespace cs @@ -19,3 +20,12 @@ struct AddItemDTO MetaData::Equip* item_meta = nullptr; bool handled = false; }; + +class IBullet +{ + public: + virtual float GetStrengthenWall() = 0; + virtual long long GetWeaponUniId() = 0; + virtual MetaData::Skill* GetSkillMeta() = 0; + virtual MetaData::Equip* GetGunMeta() = 0; +};