From d18195c5a5ca8a01e06507f7c6ddba0d86a070e0 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 24 May 2022 08:50:58 +0800 Subject: [PATCH] 1 --- server/gameserver/CMakeLists.txt | 5 ++--- server/gameserver/creature.cc | 24 ++++++++++++++++++++++++ server/gameserver/creature.h | 3 +++ server/gameserver/human.cc | 5 +++++ 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/server/gameserver/CMakeLists.txt b/server/gameserver/CMakeLists.txt index e3e9897e..a317486d 100644 --- a/server/gameserver/CMakeLists.txt +++ b/server/gameserver/CMakeLists.txt @@ -18,9 +18,8 @@ else() message(LIB_DIR: ${LIB_DIR} ) endif() -set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DNDEBUG") -#set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DNDEBUG -fsanitize=address -fno-omit-frame-pointer") -set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DDEBUG -fsanitize=address -fno-omit-frame-pointer") +set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DNDEBUG -DNEWGS") +set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DDEBUG -fsanitize=address -fno-omit-frame-pointer -DNEWGS") include_directories( AFTER diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 5cc9b19c..1224ddb8 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3025,3 +3025,27 @@ void Creature::WinSkillExp(int win_exp) return; } } + +float Creature::GetAttrAbs(int attr_id) +{ + float val = 0; + if (GetAbility()){ + val += GetAbility()->GetAttrAbs(attr_id); + } + if (GetBattleContext()) { + val += GetBattleContext()->GetAttrAbs(attr_id); + } + return val; +} + +float Creature::GetAttrRate(int attr_id) +{ + float val = 0; + if (GetAbility()){ + val += GetAbility()->GetAttrRate(attr_id); + } + if (GetBattleContext()) { + val += GetBattleContext()->GetAttrRate(attr_id); + } + return val; +} diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index b14eed84..e76b974e 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -238,6 +238,7 @@ class Creature : public MoveableEntity bool CheckCollision(); Trigger* GetTrigger() { return trigger_; }; std::shared_ptr& GetAbility() { return ability_; }; + std::shared_ptr& GetBattleContext() { return battle_context_; }; void RefreshHP(); void TraverseBuff(std::function func); long long GetCollisionTimes() { return collision_times_; }; @@ -252,6 +253,8 @@ class Creature : public MoveableEntity void SetDisableMoveDirTimes(int times) { disable_move_dir_times_ = times; }; void DoRecoilForce(int distance); void WinSkillExp(int win_exp); + float GetAttrAbs(int attr_id); + float GetAttrRate(int attr_id); protected: virtual void OnBuffRemove(Buff& buff); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 51da7d0a..421f5310 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3283,11 +3283,16 @@ void Human::OnBulletHit(Bullet* bullet) if (!dead && (bullet->IsBomb() || bullet->sender.Get()->team_id != team_id)) { float old_hp = GetHP(); float old_max_hp = GetMaxHP(); + #ifdef NEWGS + float def = 0; + float finaly_dmg = 0; + #else float dmg = bullet->GetAtk(); float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) + GetAbility()->GetAttrAbs(kHAT_Def); float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); finaly_dmg = std::max(finaly_dmg, 0.0f); + #endif if (bullet->sender.Get()->IsHuman()) { bullet->sender.Get()->AsHuman()->stats.damage_amount_out += finaly_dmg; }