diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 29483f0..7214b47 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -46,17 +46,17 @@ void Buff::FillMFBuff(cs::MFBuff* buff_pb) } } -void Buff::ProcDelayAddBuff(Creature* caster) +void Buff::ProcDelayAddBuff() { - InternalTimerAddBuff(caster); + InternalTimerAddBuff(); } -void Buff::ProcIntervalAddBuff(Creature* caster) +void Buff::ProcIntervalAddBuff() { - InternalTimerAddBuff(caster); + InternalTimerAddBuff(); } -void Buff::ProcBatchAddBuff(Creature* caster) +void Buff::ProcBatchAddBuff() { for (auto& tuple : meta->batch_add_list) { int rand_space = std::get<0>(tuple); @@ -71,7 +71,7 @@ void Buff::ProcBatchAddBuff(Creature* caster) if (rnd < std::get<1>(items[0])){ MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(std::get<0>(items[0])); if (buff_meta) { - owner->AddBuff(caster, buff_meta, 1, nullptr); + owner->AddBuff(caster_.Get(), buff_meta, 1, nullptr); } } } else { @@ -81,7 +81,7 @@ void Buff::ProcBatchAddBuff(Creature* caster) if (rnd <= std::get<1>(item)) { MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(std::get<0>(item)); if (buff_meta) { - owner->AddBuff(caster, buff_meta, 1, nullptr); + owner->AddBuff(caster_.Get(), buff_meta, 1, nullptr); } break; } @@ -90,9 +90,9 @@ void Buff::ProcBatchAddBuff(Creature* caster) } } -void Buff::InternalTimerAddBuff(Creature* caster) +void Buff::InternalTimerAddBuff() { - if (!caster) { + if (!caster_.Get()) { return; } auto timer_func = @@ -121,13 +121,13 @@ void Buff::InternalTimerAddBuff(Creature* caster) }; SkillCasterState* caster_state = new SkillCasterState; - caster->FillSkillCasterState(caster_state); + caster_.Get()->FillSkillCasterState(caster_state); a8::XParams param; param.SetSender(owner); param.SetParam1(caster_state); param.SetParam2(meta->i->buff_param2()); - param.SetParam3(caster->CurrentSkill() ? caster->CurrentSkill()->meta : nullptr); + param.SetParam3(caster_.Get()->CurrentSkill() ? caster_.Get()->CurrentSkill()->meta : nullptr); switch (meta->i->buff_effect() ) { case kBET_DelayAddBuff: @@ -159,14 +159,14 @@ void Buff::InternalTimerAddBuff(Creature* caster) } } -void Buff::ProcSummonHero(Creature* caster) +void Buff::ProcSummonHero() { - if (!caster->IsHuman()) { + if (!caster_.Get()->IsHuman()) { return; } } -void Buff::ProcBeRecycle(Creature* caster) +void Buff::ProcBeRecycle() { owner->room->xtimer.AddRepeatTimerAndAttach ( @@ -194,19 +194,19 @@ bool Buff::FreezeOperate() return meta->i->buff_effect() == kBET_Become && !hold_weapons_.empty(); } -void Buff::ProcBecome(Creature* caster) +void Buff::ProcBecome() { - hold_curr_weapon_idx_ = caster->GetCurrWeapon()->weapon_idx; - if (caster->IsHuman() && meta->param2 > 0.01) { + hold_curr_weapon_idx_ = caster_.Get()->GetCurrWeapon()->weapon_idx; + if (caster_.Get()->IsHuman() && meta->param2 > 0.01) { std::vector strings; a8::Split(meta->i->buff_param2(), strings, ':'); for (size_t i = 0; i < strings.size(); ++i) { int weapon_id = a8::XValue(strings[i]); MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(weapon_id); - if (weapon_meta && i < caster->weapons.size()) { + if (weapon_meta && i < caster_.Get()->weapons.size()) { int weapon_idx = weapon_meta->GetWeaponIdx(); - if (weapon_idx >= 0 && weapon_idx < caster->weapons.size()) { - Weapon* weapon = &caster->weapons[weapon_idx]; + if (weapon_idx >= 0 && weapon_idx < caster_.Get()->weapons.size()) { + Weapon* weapon = &caster_.Get()->weapons[weapon_idx]; hold_weapons_.push_back(*weapon); weapon->weapon_id = weapon_meta->i->id(); @@ -215,26 +215,26 @@ void Buff::ProcBecome(Creature* caster) weapon->Recalc(); weapon->ammo = weapon->GetClipVolume(); if (i == 0) { - caster->SetCurrWeapon(weapon); + caster_.Get()->SetCurrWeapon(weapon); } } } } - caster->need_sync_active_player = true; - caster->SyncAroundPlayers(__FILE__, __LINE__, __func__); + caster_.Get()->need_sync_active_player = true; + caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__); } } -void Buff::ProcRemoveBecome(Creature* caster) +void Buff::ProcRemoveBecome() { - RecoverHoldWeapons(caster); + RecoverHoldWeapons(); } -void Buff::ProcDriver(Creature* caster) +void Buff::ProcDriver() { - hold_curr_weapon_idx_ = caster->GetCurrWeapon()->weapon_idx; - if (caster->IsHuman()) { - Human* hum = (Human*)caster; + hold_curr_weapon_idx_ = caster_.Get()->GetCurrWeapon()->weapon_idx; + if (caster_.Get()->IsHuman()) { + Human* hum = (Human*)caster_.Get(); if (hum->GetCar() && hum->GetCar()->GetCurrWeapon()) { hold_weapons_.push_back(hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx]); hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx] = *hum->GetCar()->GetCurrWeapon(); @@ -247,21 +247,21 @@ void Buff::ProcDriver(Creature* caster) } } } - caster->need_sync_active_player = true; - caster->SyncAroundPlayers(__FILE__, __LINE__, __func__); + caster_.Get()->need_sync_active_player = true; + caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__); } -void Buff::ProcRemoveDriver(Creature* caster) +void Buff::ProcRemoveDriver() { - RecoverHoldWeapons(caster); - caster->shoot_offset = a8::Vec2(); + RecoverHoldWeapons(); + caster_.Get()->shoot_offset = a8::Vec2(); } -void Buff::ProcPassenger(Creature* caster) +void Buff::ProcPassenger() { - hold_curr_weapon_idx_ = caster->GetCurrWeapon()->weapon_idx; - if (caster->IsHuman()) { - Human* hum = (Human*)caster; + hold_curr_weapon_idx_ = caster_.Get()->GetCurrWeapon()->weapon_idx; + if (caster_.Get()->IsHuman()) { + Human* hum = (Human*)caster_.Get(); if (hum->GetCar() && hum->GetCar()->GetCurrWeapon()) { hold_weapons_.push_back(hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx]); hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx] = *hum->GetCar()->GetCurrWeapon(); @@ -274,46 +274,46 @@ void Buff::ProcPassenger(Creature* caster) } } } - caster->need_sync_active_player = true; - caster->SyncAroundPlayers(__FILE__, __LINE__, __func__); + caster_.Get()->need_sync_active_player = true; + caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__); } -void Buff::ProcRemovePassenger(Creature* caster) +void Buff::ProcRemovePassenger() { - RecoverHoldWeapons(caster); - caster->shoot_offset = a8::Vec2(); + RecoverHoldWeapons(); + caster_.Get()->shoot_offset = a8::Vec2(); } -void Buff::RecoverHoldWeapons(Creature* caster) +void Buff::RecoverHoldWeapons() { for (auto& weapon : hold_weapons_) { if (weapon.weapon_idx >= 0 && - weapon.weapon_idx < caster->weapons.size()) { - caster->weapons[weapon.weapon_idx] = weapon; + weapon.weapon_idx < caster_.Get()->weapons.size()) { + caster_.Get()->weapons[weapon.weapon_idx] = weapon; } } if (hold_curr_weapon_idx_ >=0 && - hold_curr_weapon_idx_ <= caster->weapons.size() && - caster->weapons[hold_curr_weapon_idx_].weapon_id != 0) { - Weapon* next_weapon = &caster->weapons[hold_curr_weapon_idx_]; - caster->SetCurrWeapon(next_weapon); + hold_curr_weapon_idx_ <= caster_.Get()->weapons.size() && + caster_.Get()->weapons[hold_curr_weapon_idx_].weapon_id != 0) { + Weapon* next_weapon = &caster_.Get()->weapons[hold_curr_weapon_idx_]; + caster_.Get()->SetCurrWeapon(next_weapon); } else { if (!hold_weapons_.empty()) { - Weapon* next_weapon = caster->AutoChgWeapon(); + Weapon* next_weapon = caster_.Get()->AutoChgWeapon(); if (next_weapon) { - caster->SetCurrWeapon(next_weapon); + caster_.Get()->SetCurrWeapon(next_weapon); } } } hold_weapons_.clear(); - caster->need_sync_active_player = true; - caster->SyncAroundPlayers(__FILE__, __LINE__, __func__); + caster_.Get()->need_sync_active_player = true; + caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__); } -void Buff::ProcSprint(Creature* caster) +void Buff::ProcSprint() { - if (caster->IsPlayer()) { - Player* hum = (Player*)caster; + if (caster_.Get()->IsPlayer()) { + Player* hum = (Player*)caster_.Get(); std::set* hited_objects = new std::set; owner->room->xtimer.AddRepeatTimerAndAttach ( @@ -345,7 +345,7 @@ void Buff::ProcSprint(Creature* caster) } } -void Buff::ProcSeletTargetWithSelfPos(Creature* caster) +void Buff::ProcSeletTargetWithSelfPos() { std::vector targets; owner->TraverseCreatures @@ -402,12 +402,12 @@ void Buff::ProcSeletTargetWithSelfPos(Creature* caster) ); for (auto& target : targets) { for (int buff_id : meta->param2_int_list) { - target->TryAddBuff(caster, buff_id); + target->TryAddBuff(caster_.Get(), buff_id); } } } -void Buff::ProcTurnOver(Creature* caster) +void Buff::ProcTurnOver() { Skill* skill = owner->CurrentSkill(); if (!skill) { @@ -491,3 +491,8 @@ void Buff::ProcPullToWalkable() owner->FindLocation(); } } + +void Buff::ProcCondAddBuff() +{ + +} diff --git a/server/gameserver/buff.h b/server/gameserver/buff.h index 0794c49..6a9c60d 100644 --- a/server/gameserver/buff.h +++ b/server/gameserver/buff.h @@ -41,25 +41,26 @@ class Buff CreatureWeakPtr& GetCaster(); void SetCaster(Creature* caster); - void ProcDelayAddBuff(Creature* caster); - void ProcIntervalAddBuff(Creature* caster); - void ProcBatchAddBuff(Creature* caster); - void ProcSummonHero(Creature* caster); - void ProcBeRecycle(Creature* caster); - void ProcBecome(Creature* caster); - void ProcRemoveBecome(Creature* caster); - void ProcDriver(Creature* caster); - void ProcRemoveDriver(Creature* caster); - void ProcPassenger(Creature* caster); - void ProcRemovePassenger(Creature* caster); - void ProcSprint(Creature* caster); - void ProcSeletTargetWithSelfPos(Creature* caster); - void ProcTurnOver(Creature* caster); + void ProcDelayAddBuff(); + void ProcIntervalAddBuff(); + void ProcBatchAddBuff(); + void ProcSummonHero(); + void ProcBeRecycle(); + void ProcBecome(); + void ProcRemoveBecome(); + void ProcDriver(); + void ProcRemoveDriver(); + void ProcPassenger(); + void ProcRemovePassenger(); + void ProcSprint(); + void ProcSeletTargetWithSelfPos(); + void ProcTurnOver(); void ProcPullToWalkable(); + void ProcCondAddBuff(); private: - void InternalTimerAddBuff(Creature* caster); - void RecoverHoldWeapons(Creature* caster); + void InternalTimerAddBuff(); + void RecoverHoldWeapons(); private: int hold_curr_weapon_idx_ = 0; diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 98d5a5a..9567693 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -796,7 +796,7 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff) break; case kBET_TurnOver: { - buff->ProcTurnOver(caster); + buff->ProcTurnOver(); } break; case kBET_Camouflage: @@ -909,12 +909,12 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff) break; case kBET_DelayAddBuff: { - buff->ProcDelayAddBuff(caster); + buff->ProcDelayAddBuff(); } break; case kBET_IntervalAddBuff: { - buff->ProcIntervalAddBuff(caster); + buff->ProcIntervalAddBuff(); } break; case kBET_OnceAddHp: @@ -948,7 +948,7 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff) break; case kBET_Sprint: { - buff->ProcSprint(caster); + buff->ProcSprint(); } break; case kBET_FlashMove: @@ -965,32 +965,32 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff) break; case kBET_BatchAddBuff: { - buff->ProcBatchAddBuff(caster); + buff->ProcBatchAddBuff(); } break; case kBET_BeRecycle: { - buff->ProcBeRecycle(caster); + buff->ProcBeRecycle(); } break; case kBET_Become: { - buff->ProcBecome(caster); + buff->ProcBecome(); } break; case kBET_SelectTargetWithSelfPos: { - buff->ProcSeletTargetWithSelfPos(caster); + buff->ProcSeletTargetWithSelfPos(); } break; case kBET_Driver: { - buff->ProcDriver(caster); + buff->ProcDriver(); } break; case kBET_Passenger: { - buff->ProcPassenger(caster); + buff->ProcPassenger(); } break; case kBET_PullToWalkable: diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 064427e..c10a494 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3127,17 +3127,17 @@ void Human::OnBuffRemove(Buff& buff) break; case kBET_Become: { - buff.ProcRemoveBecome(this); + buff.ProcRemoveBecome(); } break; case kBET_Driver: { - buff.ProcRemoveDriver(this); + buff.ProcRemoveDriver(); } break; case kBET_Passenger: { - buff.ProcRemovePassenger(this); + buff.ProcRemovePassenger(); } break; default: