1
This commit is contained in:
parent
267da32a90
commit
01c792509c
@ -220,9 +220,11 @@ void Buff::ProcDriver(Creature* caster)
|
|||||||
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();
|
||||||
hum->SetCurrWeapon(&hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx]);
|
hum->SetCurrWeapon(&hum->weapons[hum->GetCar()->GetCurrWeapon()->weapon_idx]);
|
||||||
if (hum->GetCar()->meta && !hum->GetCar()->meta->shoot_offsets.empty()) {
|
if (hum->GetCar()->meta &&
|
||||||
hum->shoot_offset = hum->GetCar()->meta->shoot_offsets[0];
|
hum->GetSeat() < hum->GetCar()->meta->shoot_offsets.size() &&
|
||||||
hum->GetCar()->shoot_offset = hum->GetCar()->meta->shoot_offsets[0];
|
std::get<0>(hum->GetCar()->meta->shoot_offsets[hum->GetSeat()])
|
||||||
|
) {
|
||||||
|
hum->shoot_offset = std::get<1>(hum->GetCar()->meta->shoot_offsets[hum->GetSeat()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -236,6 +238,33 @@ void Buff::ProcRemoveDriver(Creature* caster)
|
|||||||
caster->shoot_offset = a8::Vec2();
|
caster->shoot_offset = a8::Vec2();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Buff::ProcPassenger(Creature* caster)
|
||||||
|
{
|
||||||
|
hold_curr_weapon_idx_ = caster->GetCurrWeapon()->weapon_idx;
|
||||||
|
if (caster->IsHuman()) {
|
||||||
|
Human* hum = (Human*)caster;
|
||||||
|
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()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
caster->need_sync_active_player = true;
|
||||||
|
caster->SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Buff::ProcRemovePassenger(Creature* caster)
|
||||||
|
{
|
||||||
|
RecoverHoldWeapons(caster);
|
||||||
|
caster->shoot_offset = a8::Vec2();
|
||||||
|
}
|
||||||
|
|
||||||
void Buff::RecoverHoldWeapons(Creature* caster)
|
void Buff::RecoverHoldWeapons(Creature* caster)
|
||||||
{
|
{
|
||||||
for (auto& weapon : hold_weapons_) {
|
for (auto& weapon : hold_weapons_) {
|
||||||
|
@ -42,6 +42,8 @@ class Buff
|
|||||||
void ProcRemoveBecome(Creature* caster);
|
void ProcRemoveBecome(Creature* caster);
|
||||||
void ProcDriver(Creature* caster);
|
void ProcDriver(Creature* caster);
|
||||||
void ProcRemoveDriver(Creature* caster);
|
void ProcRemoveDriver(Creature* caster);
|
||||||
|
void ProcPassenger(Creature* caster);
|
||||||
|
void ProcRemovePassenger(Creature* caster);
|
||||||
void ProcSprint(Creature* caster);
|
void ProcSprint(Creature* caster);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -932,6 +932,11 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
|
|||||||
buff->ProcDriver(caster);
|
buff->ProcDriver(caster);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case kBET_Passenger:
|
||||||
|
{
|
||||||
|
buff->ProcPassenger(caster);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -3263,6 +3263,11 @@ void Human::OnBuffRemove(Buff& buff)
|
|||||||
buff.ProcRemoveDriver(this);
|
buff.ProcRemoveDriver(this);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case kBET_Passenger:
|
||||||
|
{
|
||||||
|
buff.ProcRemovePassenger(this);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -175,10 +175,22 @@ namespace MetaData
|
|||||||
for (auto& str : strings) {
|
for (auto& str : strings) {
|
||||||
std::vector<std::string> strings2;
|
std::vector<std::string> strings2;
|
||||||
a8::Split(str, strings2, ':');
|
a8::Split(str, strings2, ':');
|
||||||
assert(strings2.size() == 2);
|
|
||||||
if (strings2.size() >= 2) {
|
if (strings2.size() >= 2) {
|
||||||
shoot_offsets.push_back(a8::Vec2((float)a8::XValue(strings2[0]).GetDouble(),
|
shoot_offsets.push_back(std::make_tuple
|
||||||
(float)a8::XValue(strings2[1]).GetDouble()));
|
(1,
|
||||||
|
a8::Vec2(
|
||||||
|
(float)a8::XValue(strings2[0]).GetDouble(),
|
||||||
|
(float)a8::XValue(strings2[1]).GetDouble())
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
shoot_offsets.push_back(std::make_tuple
|
||||||
|
(0,
|
||||||
|
a8::Vec2(
|
||||||
|
0.0f,
|
||||||
|
0.0f
|
||||||
|
)
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ namespace MetaData
|
|||||||
const metatable::Equip* i = nullptr;
|
const metatable::Equip* i = nullptr;
|
||||||
|
|
||||||
std::vector<std::tuple<float, float, float>> bullet_born_offset;
|
std::vector<std::tuple<float, float, float>> bullet_born_offset;
|
||||||
std::vector<a8::Vec2> shoot_offsets;
|
std::vector<std::tuple<int, a8::Vec2>> shoot_offsets;
|
||||||
std::array<int, IS_END> volume = {};
|
std::array<int, IS_END> volume = {};
|
||||||
int int_param1 = 0;
|
int int_param1 = 0;
|
||||||
float float_param1 = 0;
|
float float_param1 = 0;
|
||||||
|
@ -193,11 +193,14 @@ void Player::UpdateShot()
|
|||||||
if (GetCar() && GetCar()->IsDriver(this)) {
|
if (GetCar() && GetCar()->IsDriver(this)) {
|
||||||
bool shot_ok = false;
|
bool shot_ok = false;
|
||||||
a8::Vec2 target_dir = GetAttackDir();
|
a8::Vec2 target_dir = GetAttackDir();
|
||||||
|
a8::Vec2 old_car_shoot_offset = GetCar()->shoot_offset;
|
||||||
|
GetCar()->shoot_offset = shoot_offset;
|
||||||
GetCar()->SetAttackDir(GetAttackDir());
|
GetCar()->SetAttackDir(GetAttackDir());
|
||||||
GetCar()->Shot(target_dir, shot_ok, fly_distance);
|
GetCar()->Shot(target_dir, shot_ok, fly_distance);
|
||||||
if (!moving) {
|
if (!moving) {
|
||||||
GetCar()->SetMoveDir(GetAttackDir());
|
GetCar()->SetMoveDir(GetAttackDir());
|
||||||
}
|
}
|
||||||
|
GetCar()->shoot_offset = old_car_shoot_offset;
|
||||||
shot_start = false;
|
shot_start = false;
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user