Skip to content

Commit 605e89a

Browse files
authored
Fix WeaponUsedConditions (#5165)
1 parent 37f7c56 commit 605e89a

File tree

5 files changed

+15
-9
lines changed

5 files changed

+15
-9
lines changed

code/ai/aiturret.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1889,7 +1889,7 @@ bool turret_fire_weapon(int weapon_num, ship_subsys *turret, int parent_objnum,
18891889
turret->last_fired_weapon_info_index = turret_weapon_class;
18901890

18911891
if (scripting::hooks::OnTurretFired->isActive()) {
1892-
scripting::hooks::OnTurretFired->run(scripting::hooks::WeaponUsedConditions{ parent_ship , turret_enemy_objp, turret_weapon_class, true },
1892+
scripting::hooks::OnTurretFired->run(scripting::hooks::WeaponUsedConditions{ parent_ship , turret_enemy_objp, SCP_vector<int>{ turret_weapon_class }, true },
18931893
scripting::hook_param_list(
18941894
scripting::hook_param("Ship", 'o', &Objects[parent_objnum]),
18951895
scripting::hook_param("Beam", 'o', objp),
@@ -2035,7 +2035,7 @@ bool turret_fire_weapon(int weapon_num, ship_subsys *turret, int parent_objnum,
20352035
wp->turret_subsys = turret;
20362036

20372037
if (scripting::hooks::OnTurretFired->isActive()) {
2038-
scripting::hooks::OnTurretFired->run(scripting::hooks::WeaponUsedConditions{ parent_ship , turret_enemy_objp, turret_weapon_class, wip->subtype == WP_LASER },
2038+
scripting::hooks::OnTurretFired->run(scripting::hooks::WeaponUsedConditions{ parent_ship , turret_enemy_objp, SCP_vector<int>{ turret_weapon_class }, wip->subtype == WP_LASER },
20392039
scripting::hook_param_list(
20402040
scripting::hook_param("Ship", 'o', &Objects[parent_objnum]),
20412041
scripting::hook_param("Weapon", 'o', objp),
@@ -2160,7 +2160,7 @@ void turret_swarm_fire_from_turret(turret_swarm_info *tsi)
21602160
scripting::hooks::OnTurretFired->run(scripting::hooks::WeaponUsedConditions{
21612161
&Ships[Objects[tsi->parent_objnum].instance],
21622162
&Objects[tsi->turret->turret_enemy_objnum],
2163-
tsi->weapon_class, Weapon_info[tsi->weapon_class].subtype == WP_LASER
2163+
SCP_vector<int>{ tsi->weapon_class }, Weapon_info[tsi->weapon_class].subtype == WP_LASER
21642164
},
21652165
scripting::hook_param_list(
21662166
scripting::hook_param("Ship", 'o', &Objects[tsi->parent_objnum]),

code/scripting/hook_conditions.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,9 @@ HOOK_CONDITIONS_END
249249

250250
HOOK_CONDITIONS_START(WeaponUsedConditions)
251251
HOOK_CONDITION_SHIPP(WeaponUsedConditions, "that fired the weapon.", user_shipp);
252-
HOOK_CONDITION(WeaponUsedConditions, "Weapon class", "Specifies the class of the weapon that was fired.", weaponclass, conditionParseWeaponClass, std::equal_to<int>());
252+
HOOK_CONDITION(WeaponUsedConditions, "Weapon class", "Specifies the class of the weapon that was fired.", weaponclasses, conditionParseWeaponClass, [](const SCP_vector<int>& weaponclass_list, const int& weaponclass) -> bool {
253+
return std::count(weaponclass_list.cbegin(), weaponclass_list.cend(), weaponclass) > 0;
254+
});
253255
HOOK_CONDITIONS_END
254256

255257
HOOK_CONDITIONS_START(WeaponSelectedConditions)

code/scripting/hook_conditions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ struct WeaponUsedConditions {
105105
HOOK_DEFINE_CONDITIONS;
106106
const ship* user_shipp;
107107
const object* target; // As of yet unused
108-
int weaponclass;
108+
SCP_vector<int> weaponclasses;
109109
bool isPrimary; // As of yet unused
110110
};
111111

code/ship/ship.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12537,18 +12537,22 @@ int ship_fire_primary(object * obj, int force, bool rollback_shot)
1253712537
if (objp == Player_obj && Player_ai->target_objnum != -1)
1253812538
target = &Objects[Player_ai->target_objnum];
1253912539

12540+
SCP_vector<int> firedWeapons;
12541+
1254012542
for (int bank = 0; bank < MAX_SHIP_PRIMARY_BANKS; bank++) {
12541-
if(banks_fired & (1 << bank))
12543+
if (banks_fired & (1 << bank)) {
1254212544
//Start Animation in Forced mode: Always restart it from its initial position rather than just flip it to FWD motion if it was still moving. This is to make it work best for uses like recoil.
1254312545
sip->animations.getAll(model_get_instance(shipp->model_instance_num), animation::ModelAnimationTriggerType::PrimaryFired, bank).start(animation::ModelAnimationDirection::FWD, true);
12546+
firedWeapons.emplace_back(shipp->weapons.primary_bank_weapons[bank]);
12547+
}
1254412548
}
1254512549

1254612550
if (scripting::hooks::OnWeaponFired->isActive() || scripting::hooks::OnPrimaryFired->isActive()) {
1254712551
auto param_list = scripting::hook_param_list(
1254812552
scripting::hook_param("User", 'o', objp),
1254912553
scripting::hook_param("Target", 'o', target)
1255012554
);
12551-
auto conditions = scripting::hooks::WeaponUsedConditions{ shipp, target, weapon_idx, true };
12555+
auto conditions = scripting::hooks::WeaponUsedConditions{ shipp, target, firedWeapons, true };
1255212556
scripting::hooks::OnWeaponFired->run(conditions, param_list);
1255312557
scripting::hooks::OnPrimaryFired->run(conditions, param_list);
1255412558
}
@@ -13262,7 +13266,7 @@ int ship_fire_secondary( object *obj, int allow_swarm, bool rollback_shot )
1326213266
scripting::hook_param("User", 'o', objp),
1326313267
scripting::hook_param("Target", 'o', target)
1326413268
);
13265-
auto conditions = scripting::hooks::WeaponUsedConditions{ shipp, target, weapon_idx, false };
13269+
auto conditions = scripting::hooks::WeaponUsedConditions{ shipp, target, SCP_vector<int>{ weapon_idx }, false };
1326613270
scripting::hooks::OnWeaponFired->run(conditions, param_list);
1326713271
scripting::hooks::OnSecondaryFired->run(conditions, param_list);
1326813272
}

code/weapon/beam.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2185,7 +2185,7 @@ int beam_start_firing(beam *b)
21852185
Ships[b->objp->instance].weapons.primary_bank_ammo[b->bank]--;
21862186

21872187
if (scripting::hooks::OnBeamFired->isActive()) {
2188-
scripting::hooks::OnBeamFired->run(scripting::hooks::WeaponUsedConditions{ &Ships[b->objp->instance], b->target, b->weapon_info_index, true },
2188+
scripting::hooks::OnBeamFired->run(scripting::hooks::WeaponUsedConditions{ &Ships[b->objp->instance], b->target, SCP_vector<int>{ b->weapon_info_index }, true },
21892189
scripting::hook_param_list(
21902190
scripting::hook_param("Beam", 'o', &Objects[b->objnum]),
21912191
scripting::hook_param("User", 'o', b->objp),

0 commit comments

Comments
 (0)