移除buff代码里多余的caster

This commit is contained in:
aozhiwei 2021-06-28 03:11:32 +00:00
parent bebb081ba1
commit 1f8eb998fb
4 changed files with 95 additions and 89 deletions

View File

@ -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) { for (auto& tuple : meta->batch_add_list) {
int rand_space = std::get<0>(tuple); int rand_space = std::get<0>(tuple);
@ -71,7 +71,7 @@ void Buff::ProcBatchAddBuff(Creature* caster)
if (rnd < std::get<1>(items[0])){ if (rnd < std::get<1>(items[0])){
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(std::get<0>(items[0])); MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(std::get<0>(items[0]));
if (buff_meta) { if (buff_meta) {
owner->AddBuff(caster, buff_meta, 1, nullptr); owner->AddBuff(caster_.Get(), buff_meta, 1, nullptr);
} }
} }
} else { } else {
@ -81,7 +81,7 @@ void Buff::ProcBatchAddBuff(Creature* caster)
if (rnd <= std::get<1>(item)) { if (rnd <= std::get<1>(item)) {
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(std::get<0>(item)); MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(std::get<0>(item));
if (buff_meta) { if (buff_meta) {
owner->AddBuff(caster, buff_meta, 1, nullptr); owner->AddBuff(caster_.Get(), buff_meta, 1, nullptr);
} }
break; break;
} }
@ -90,9 +90,9 @@ void Buff::ProcBatchAddBuff(Creature* caster)
} }
} }
void Buff::InternalTimerAddBuff(Creature* caster) void Buff::InternalTimerAddBuff()
{ {
if (!caster) { if (!caster_.Get()) {
return; return;
} }
auto timer_func = auto timer_func =
@ -121,13 +121,13 @@ void Buff::InternalTimerAddBuff(Creature* caster)
}; };
SkillCasterState* caster_state = new SkillCasterState; SkillCasterState* caster_state = new SkillCasterState;
caster->FillSkillCasterState(caster_state); caster_.Get()->FillSkillCasterState(caster_state);
a8::XParams param; a8::XParams param;
param.SetSender(owner); param.SetSender(owner);
param.SetParam1(caster_state); param.SetParam1(caster_state);
param.SetParam2(meta->i->buff_param2()); 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() ) { switch (meta->i->buff_effect() ) {
case kBET_DelayAddBuff: 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; return;
} }
} }
void Buff::ProcBeRecycle(Creature* caster) void Buff::ProcBeRecycle()
{ {
owner->room->xtimer.AddRepeatTimerAndAttach owner->room->xtimer.AddRepeatTimerAndAttach
( (
@ -194,19 +194,19 @@ bool Buff::FreezeOperate()
return meta->i->buff_effect() == kBET_Become && !hold_weapons_.empty(); 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; hold_curr_weapon_idx_ = caster_.Get()->GetCurrWeapon()->weapon_idx;
if (caster->IsHuman() && meta->param2 > 0.01) { if (caster_.Get()->IsHuman() && meta->param2 > 0.01) {
std::vector<std::string> strings; std::vector<std::string> strings;
a8::Split(meta->i->buff_param2(), strings, ':'); a8::Split(meta->i->buff_param2(), strings, ':');
for (size_t i = 0; i < strings.size(); ++i) { for (size_t i = 0; i < strings.size(); ++i) {
int weapon_id = a8::XValue(strings[i]); int weapon_id = a8::XValue(strings[i]);
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(weapon_id); 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(); int weapon_idx = weapon_meta->GetWeaponIdx();
if (weapon_idx >= 0 && weapon_idx < caster->weapons.size()) { if (weapon_idx >= 0 && weapon_idx < caster_.Get()->weapons.size()) {
Weapon* weapon = &caster->weapons[weapon_idx]; Weapon* weapon = &caster_.Get()->weapons[weapon_idx];
hold_weapons_.push_back(*weapon); hold_weapons_.push_back(*weapon);
weapon->weapon_id = weapon_meta->i->id(); weapon->weapon_id = weapon_meta->i->id();
@ -215,26 +215,26 @@ void Buff::ProcBecome(Creature* caster)
weapon->Recalc(); weapon->Recalc();
weapon->ammo = weapon->GetClipVolume(); weapon->ammo = weapon->GetClipVolume();
if (i == 0) { if (i == 0) {
caster->SetCurrWeapon(weapon); caster_.Get()->SetCurrWeapon(weapon);
} }
} }
} }
} }
caster->need_sync_active_player = true; caster_.Get()->need_sync_active_player = true;
caster->SyncAroundPlayers(__FILE__, __LINE__, __func__); 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; hold_curr_weapon_idx_ = caster_.Get()->GetCurrWeapon()->weapon_idx;
if (caster->IsHuman()) { if (caster_.Get()->IsHuman()) {
Human* hum = (Human*)caster; Human* hum = (Human*)caster_.Get();
if (hum->GetCar() && hum->GetCar()->GetCurrWeapon()) { if (hum->GetCar() && hum->GetCar()->GetCurrWeapon()) {
hold_weapons_.push_back(hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx]); hold_weapons_.push_back(hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx]);
hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx] = *hum->GetCar()->GetCurrWeapon(); 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_.Get()->need_sync_active_player = true;
caster->SyncAroundPlayers(__FILE__, __LINE__, __func__); caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__);
} }
void Buff::ProcRemoveDriver(Creature* caster) void Buff::ProcRemoveDriver()
{ {
RecoverHoldWeapons(caster); RecoverHoldWeapons();
caster->shoot_offset = a8::Vec2(); caster_.Get()->shoot_offset = a8::Vec2();
} }
void Buff::ProcPassenger(Creature* caster) void Buff::ProcPassenger()
{ {
hold_curr_weapon_idx_ = caster->GetCurrWeapon()->weapon_idx; hold_curr_weapon_idx_ = caster_.Get()->GetCurrWeapon()->weapon_idx;
if (caster->IsHuman()) { if (caster_.Get()->IsHuman()) {
Human* hum = (Human*)caster; Human* hum = (Human*)caster_.Get();
if (hum->GetCar() && hum->GetCar()->GetCurrWeapon()) { if (hum->GetCar() && hum->GetCar()->GetCurrWeapon()) {
hold_weapons_.push_back(hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx]); hold_weapons_.push_back(hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx]);
hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx] = *hum->GetCar()->GetCurrWeapon(); 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_.Get()->need_sync_active_player = true;
caster->SyncAroundPlayers(__FILE__, __LINE__, __func__); caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__);
} }
void Buff::ProcRemovePassenger(Creature* caster) void Buff::ProcRemovePassenger()
{ {
RecoverHoldWeapons(caster); RecoverHoldWeapons();
caster->shoot_offset = a8::Vec2(); caster_.Get()->shoot_offset = a8::Vec2();
} }
void Buff::RecoverHoldWeapons(Creature* caster) void Buff::RecoverHoldWeapons()
{ {
for (auto& weapon : hold_weapons_) { for (auto& weapon : hold_weapons_) {
if (weapon.weapon_idx >= 0 && if (weapon.weapon_idx >= 0 &&
weapon.weapon_idx < caster->weapons.size()) { weapon.weapon_idx < caster_.Get()->weapons.size()) {
caster->weapons[weapon.weapon_idx] = weapon; caster_.Get()->weapons[weapon.weapon_idx] = weapon;
} }
} }
if (hold_curr_weapon_idx_ >=0 && if (hold_curr_weapon_idx_ >=0 &&
hold_curr_weapon_idx_ <= caster->weapons.size() && hold_curr_weapon_idx_ <= caster_.Get()->weapons.size() &&
caster->weapons[hold_curr_weapon_idx_].weapon_id != 0) { caster_.Get()->weapons[hold_curr_weapon_idx_].weapon_id != 0) {
Weapon* next_weapon = &caster->weapons[hold_curr_weapon_idx_]; Weapon* next_weapon = &caster_.Get()->weapons[hold_curr_weapon_idx_];
caster->SetCurrWeapon(next_weapon); caster_.Get()->SetCurrWeapon(next_weapon);
} else { } else {
if (!hold_weapons_.empty()) { if (!hold_weapons_.empty()) {
Weapon* next_weapon = caster->AutoChgWeapon(); Weapon* next_weapon = caster_.Get()->AutoChgWeapon();
if (next_weapon) { if (next_weapon) {
caster->SetCurrWeapon(next_weapon); caster_.Get()->SetCurrWeapon(next_weapon);
} }
} }
} }
hold_weapons_.clear(); hold_weapons_.clear();
caster->need_sync_active_player = true; caster_.Get()->need_sync_active_player = true;
caster->SyncAroundPlayers(__FILE__, __LINE__, __func__); caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__);
} }
void Buff::ProcSprint(Creature* caster) void Buff::ProcSprint()
{ {
if (caster->IsPlayer()) { if (caster_.Get()->IsPlayer()) {
Player* hum = (Player*)caster; Player* hum = (Player*)caster_.Get();
std::set<int>* hited_objects = new std::set<int>; std::set<int>* hited_objects = new std::set<int>;
owner->room->xtimer.AddRepeatTimerAndAttach owner->room->xtimer.AddRepeatTimerAndAttach
( (
@ -345,7 +345,7 @@ void Buff::ProcSprint(Creature* caster)
} }
} }
void Buff::ProcSeletTargetWithSelfPos(Creature* caster) void Buff::ProcSeletTargetWithSelfPos()
{ {
std::vector<Creature*> targets; std::vector<Creature*> targets;
owner->TraverseCreatures owner->TraverseCreatures
@ -402,12 +402,12 @@ void Buff::ProcSeletTargetWithSelfPos(Creature* caster)
); );
for (auto& target : targets) { for (auto& target : targets) {
for (int buff_id : meta->param2_int_list) { 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(); Skill* skill = owner->CurrentSkill();
if (!skill) { if (!skill) {
@ -491,3 +491,8 @@ void Buff::ProcPullToWalkable()
owner->FindLocation(); owner->FindLocation();
} }
} }
void Buff::ProcCondAddBuff()
{
}

View File

@ -41,25 +41,26 @@ class Buff
CreatureWeakPtr& GetCaster(); CreatureWeakPtr& GetCaster();
void SetCaster(Creature* caster); void SetCaster(Creature* caster);
void ProcDelayAddBuff(Creature* caster); void ProcDelayAddBuff();
void ProcIntervalAddBuff(Creature* caster); void ProcIntervalAddBuff();
void ProcBatchAddBuff(Creature* caster); void ProcBatchAddBuff();
void ProcSummonHero(Creature* caster); void ProcSummonHero();
void ProcBeRecycle(Creature* caster); void ProcBeRecycle();
void ProcBecome(Creature* caster); void ProcBecome();
void ProcRemoveBecome(Creature* caster); void ProcRemoveBecome();
void ProcDriver(Creature* caster); void ProcDriver();
void ProcRemoveDriver(Creature* caster); void ProcRemoveDriver();
void ProcPassenger(Creature* caster); void ProcPassenger();
void ProcRemovePassenger(Creature* caster); void ProcRemovePassenger();
void ProcSprint(Creature* caster); void ProcSprint();
void ProcSeletTargetWithSelfPos(Creature* caster); void ProcSeletTargetWithSelfPos();
void ProcTurnOver(Creature* caster); void ProcTurnOver();
void ProcPullToWalkable(); void ProcPullToWalkable();
void ProcCondAddBuff();
private: private:
void InternalTimerAddBuff(Creature* caster); void InternalTimerAddBuff();
void RecoverHoldWeapons(Creature* caster); void RecoverHoldWeapons();
private: private:
int hold_curr_weapon_idx_ = 0; int hold_curr_weapon_idx_ = 0;

View File

@ -796,7 +796,7 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
break; break;
case kBET_TurnOver: case kBET_TurnOver:
{ {
buff->ProcTurnOver(caster); buff->ProcTurnOver();
} }
break; break;
case kBET_Camouflage: case kBET_Camouflage:
@ -909,12 +909,12 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
break; break;
case kBET_DelayAddBuff: case kBET_DelayAddBuff:
{ {
buff->ProcDelayAddBuff(caster); buff->ProcDelayAddBuff();
} }
break; break;
case kBET_IntervalAddBuff: case kBET_IntervalAddBuff:
{ {
buff->ProcIntervalAddBuff(caster); buff->ProcIntervalAddBuff();
} }
break; break;
case kBET_OnceAddHp: case kBET_OnceAddHp:
@ -948,7 +948,7 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
break; break;
case kBET_Sprint: case kBET_Sprint:
{ {
buff->ProcSprint(caster); buff->ProcSprint();
} }
break; break;
case kBET_FlashMove: case kBET_FlashMove:
@ -965,32 +965,32 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
break; break;
case kBET_BatchAddBuff: case kBET_BatchAddBuff:
{ {
buff->ProcBatchAddBuff(caster); buff->ProcBatchAddBuff();
} }
break; break;
case kBET_BeRecycle: case kBET_BeRecycle:
{ {
buff->ProcBeRecycle(caster); buff->ProcBeRecycle();
} }
break; break;
case kBET_Become: case kBET_Become:
{ {
buff->ProcBecome(caster); buff->ProcBecome();
} }
break; break;
case kBET_SelectTargetWithSelfPos: case kBET_SelectTargetWithSelfPos:
{ {
buff->ProcSeletTargetWithSelfPos(caster); buff->ProcSeletTargetWithSelfPos();
} }
break; break;
case kBET_Driver: case kBET_Driver:
{ {
buff->ProcDriver(caster); buff->ProcDriver();
} }
break; break;
case kBET_Passenger: case kBET_Passenger:
{ {
buff->ProcPassenger(caster); buff->ProcPassenger();
} }
break; break;
case kBET_PullToWalkable: case kBET_PullToWalkable:

View File

@ -3127,17 +3127,17 @@ void Human::OnBuffRemove(Buff& buff)
break; break;
case kBET_Become: case kBET_Become:
{ {
buff.ProcRemoveBecome(this); buff.ProcRemoveBecome();
} }
break; break;
case kBET_Driver: case kBET_Driver:
{ {
buff.ProcRemoveDriver(this); buff.ProcRemoveDriver();
} }
break; break;
case kBET_Passenger: case kBET_Passenger:
{ {
buff.ProcRemovePassenger(this); buff.ProcRemovePassenger();
} }
break; break;
default: default: