This commit is contained in:
aozhiwei 2021-07-28 08:27:34 +00:00
parent b4b27d56e5
commit da8a0b1937
3 changed files with 25 additions and 14 deletions

View File

@ -299,20 +299,7 @@ void Buff::ProcRemoveDriver()
void Buff::ProcPassenger()
{
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();
hum->SetCurrWeapon(&hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx]);
if (hum->GetCar()->meta &&
hum->GetSeat() < hum->GetCar()->meta->shoot_offsets.size() &&
std::get<0>(hum->GetCar()->meta->shoot_offsets[hum->GetSeat()])
) {
hum->shoot_offset = std::get<1>(hum->GetCar()->meta->shoot_offsets[hum->GetSeat()]);
}
}
}
CalcPassengerShotOffset();
caster_.Get()->need_sync_active_player = true;
caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__);
}
@ -653,3 +640,21 @@ void Buff::ProcAISeting()
{
}
void Buff::CalcPassengerShotOffset()
{
if (meta->i->buff_effect() == kBET_Passenger && 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();
hum->SetCurrWeapon(&hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx]);
if (hum->GetCar()->meta &&
hum->GetSeat() < hum->GetCar()->meta->shoot_offsets.size() &&
std::get<0>(hum->GetCar()->meta->shoot_offsets[hum->GetSeat()])
) {
hum->shoot_offset = std::get<1>(hum->GetCar()->meta->shoot_offsets[hum->GetSeat()]);
}
}
}
}

View File

@ -74,6 +74,8 @@ class Buff
void ProcDisperse();
void ProcAISeting();
void CalcPassengerShotOffset();
private:
void InternalTimerAddBuff();
void RecoverHoldWeapons();

View File

@ -213,6 +213,10 @@ void Car::SwitchSeat(Human* passenger, int seat)
driver_ = nullptr;
passenger->RemoveBuffByEffectId(kBET_Driver);
passenger->MustBeAddBuff(passenger, PASSENGER_BUFFID);
} else {
Buff* buff = passenger->GetBuffByEffectId(kBET_Passenger);
buff->CalcPassengerShotOffset();
passenger->need_sync_active_player = true;
}
room->frame_event.AddCarChg(passenger->GetWeakPtrRef());
SyncAroundPlayers(__FILE__, __LINE__, __func__);