移除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) {
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<std::string> 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<int>* hited_objects = new std::set<int>;
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;
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()
{
}

View File

@ -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;

View File

@ -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:

View File

@ -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: