fix(rules): stop steal from taking held weapons
PF1e (APG Steal): "Items held in the hands (such as wielded weapons or wands) also cannot be taken with the steal maneuver—you must use the disarm combat maneuver instead." The model carries no non-held items, so a successful steal now takes nothing and logs "nothing stealable — wielded weapons require disarm". README updated; the retrieve_weapon tests keep locking the restoration mechanism directly. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -4448,16 +4448,15 @@ class CombatEngine:
|
||||
if not m.success:
|
||||
self._maneuver_fail(state, target, "steal", m)
|
||||
return
|
||||
weapon = next((w for w in target.usable_attacks() if w.kind == "melee"), None)
|
||||
if weapon is None:
|
||||
outcome = "SUCCESS (nothing to steal)"
|
||||
else:
|
||||
target.weapon_stolen.add(weapon.id)
|
||||
outcome = f"SUCCESS (stole {weapon.id})"
|
||||
# PF1e (APG Steal): "Items held in the hands (such as wielded weapons
|
||||
# or wands) also cannot be taken with the steal maneuver—you must use
|
||||
# the disarm combat maneuver instead." The model carries no non-held
|
||||
# items, so every stealable target is held: a success takes nothing.
|
||||
self._log(
|
||||
f"round {self._current_round} {state.combatant.id}: steal vs "
|
||||
f"{target.combatant.id} d20={m.roll}+{m.attacker_cmb}={m.total} "
|
||||
f"CMD {m.target_cmd} -> {outcome}"
|
||||
f"CMD {m.target_cmd} -> SUCCESS (nothing stealable — wielded "
|
||||
f"weapons require disarm)"
|
||||
)
|
||||
|
||||
def _maneuver_reposition(
|
||||
|
||||
Reference in New Issue
Block a user