移除buff代码里多余的caster
This commit is contained in:
parent
bebb081ba1
commit
1f8eb998fb
@ -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()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user