From 6a2355c7309c999f5f502e19d5cb148748d2c4e8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 16 Dec 2021 16:34:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A9=E8=B5=8B=E5=8A=9F=E8=83=BDok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/creature.cc | 20 ++++++++++++++++++++ server/gameserver/creature.h | 2 ++ server/gameserver/playermgr.cc | 5 +++++ 3 files changed, 27 insertions(+) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index c50a702..403d987 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -648,6 +648,26 @@ void Creature::RecalcBuffAttr() } } } + for (auto& tuple : talent_list) { + auto talent_meta = MetaMgr::Instance()->GetTalent(std::get<0>(tuple), std::get<1>(tuple)); + if (talent_meta) { + for (auto& tuple1 : talent_meta->addattr) { + int attr_type = std::get<0>(tuple1); + int attr_val = std::get<1>(tuple1); + if (talent_meta->i->addtype() == 0) { + float* p = ability_->GetBuffAttrAbsPtr(attr_type); + if (p) { + *p += attr_val; + } + } else if (talent_meta->i->addtype() == 1) { + float* p = ability_->GetBuffAttrRatePtr(attr_type); + if (p) { + *p += attr_val; + } + } + } + } + } if (need_refresh_hp) { SetHP(GetMaxHP()); GetTrigger()->HpChg(); diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 2e6e8bf..b034631 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -94,6 +94,8 @@ class Creature : public MoveableEntity a8::Vec2 context_dir; std::shared_ptr context_ability; + std::vector> talent_list; + bool need_sync_active_player = false; std::function on_loading_bullet; CreatureWeakPtr follow_target; diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index a022daf..48a30d9 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -127,6 +127,11 @@ Player* PlayerMgr::CreatePlayerByCMJoin(Player* hum, #else hum->SetSkinInfo(msg.baseskin()); #endif + for (auto& pair : msg.talent_list()) { + hum->talent_list.push_back( + std::make_tuple(pair.key(), pair.value()) + ); + } socket_hash_[socket] = hum; return hum; }