I don't have WB installed on the computer I've access to for the rest of the week, but tried to think through this the best I could.
This is based on the following bit of code to capture the modifier for the currently equipped weapon, which I believe will do the trick, but please let me know if I totally missed something...
(try_for_range, ":i_slot", 0, 10),
(troop_get_inventory_slot, ":item_id", "trp_player", ":i_slot"),
(eq, ":item_id", ":breakweapon"),
(troop_get_inventory_slot_modifier, ":imod", "trp_player", ":i_slot"),
(try_end)
The following code is marked with 'imod...' comments to denote my additions to Baron Conrad's original code.
common_weapon_break = (
0.4, 0, 0,
[
#(player_get_agent_id, ":player_agent", ":player_no"),
(get_player_agent_no, ":player_agent"),
(agent_get_attack_action, ":playeraction", ":player_agent"), #returned values: free = 0, readying_attack = 1, releasing_attack = 2, completing_attack_after_hit = 3, attack_parried = 4, reloading = 5, after_release = 6, cancelling_attack = 7
(try_begin),
(eq,":playeraction",3),
(agent_get_wielded_item,":breakweapon",":player_agent",0),
(gt,":breakweapon",2),
(item_get_type, ":weapontype", ":breakweapon"),
#--imod, get weapon imod
(try_for_range, ":i_slot", 0, 10),
(troop_get_inventory_slot, ":item_id", "trp_player", ":i_slot"), #Find Item Slot with same item ID as Equipped Weapon
(eq, ":item_id", ":breakweapon"),
(troop_get_inventory_slot_modifier, ":imod", "trp_player", ":i_slot"),
(try_end)
#--End Get imod
(agent_get_horse,":playermounted",":player_agent"),
(store_random_in_range,":weaponbreakchance",1,100),
(try_begin),
(ge,":playermounted",0),
# (display_message, "@Mounted."),
(val_mul,":weaponbreakchance",104),
(val_div,":weaponbreakchance",100),
(eq,itp_type_polearm,":weapontype"),
(val_mul,":weaponbreakchance",110),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq,itp_type_polearm,":weapontype"),
# (display_message, "@Polearm"),
(val_mul,":weaponbreakchance",102),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq,itp_type_two_handed_wpn,":weapontype"),
# (display_message, "@2 hander"),
(val_mul,":weaponbreakchance",101),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq,itp_type_one_handed_wpn,":weapontype"),
# (display_message, "@1 hander"),
(val_mul,":weaponbreakchance",1),
(try_end),
#--imod Quality Modifier
#Better than Average
(try_begin),
(eq, imodbit_masterwork, ":imod"),
(val_mul,":weaponbreakchance",50),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_tempered, ":imod"),
(val_mul,":weaponbreakchance",75),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_balanced, ":imod"),
(val_mul,":weaponbreakchance",85),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_heavy, ":imod"),
(val_mul,":weaponbreakchance",90),
(val_div,":weaponbreakchance",100),
(try_end),
#Worse than Average
(try_begin),
(eq, imodbit_bent, ":imod"),
(val_mul,":weaponbreakchance",110),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_rusty, ":imod"),
(val_mul,":weaponbreakchance",125),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_chipped, ":imod"),
(val_mul,":weaponbreakchance",150),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_cracked, ":imod"),
(val_mul,":weaponbreakchance",200),
(val_div,":weaponbreakchance",100),
(try_end),
#--End imod Quality Modifier
(try_begin),
(assign, reg8, ":weaponbreakchance"),
# (display_message, "@{reg8}"),
(ge,":weaponbreakchance",98),
(agent_unequip_item,":player_agent",":breakweapon"),
(play_sound,"snd_shield_broken",),
(troop_remove_item, "trp_player", ":breakweapon"),
(display_message, "@Hah! Your weapon broke."),
(lt,":playermounted",0),
(agent_set_animation, ":player_agent", "anim_strike_chest_front"),
(try_end),
(try_end),
], [])
And below, the script checks the imod to determine how drastically to damage the weapon. Better weapons just lose their improvements, normal weapons get chipped, lesser weapons break.
common_weapon_break = (
0.4, 0, 0,
[
#(player_get_agent_id, ":player_agent", ":player_no"),
(get_player_agent_no, ":player_agent"),
(agent_get_attack_action, ":playeraction", ":player_agent"), #returned values: free = 0, readying_attack = 1, releasing_attack = 2, completing_attack_after_hit = 3, attack_parried = 4, reloading = 5, after_release = 6, cancelling_attack = 7
(try_begin),
(eq,":playeraction",3),
(agent_get_wielded_item,":breakweapon",":player_agent",0),
(gt,":breakweapon",2),
(item_get_type, ":weapontype", ":breakweapon"),
#--imod, get weapon imod
(try_for_range, ":i_slot", 0, 10),
(troop_get_inventory_slot, ":item_id", "trp_player", ":i_slot"), #Find Item Slot with same item ID as Equipped Weapon
(eq, ":item_id", ":breakweapon"),
(troop_get_inventory_slot_modifier, ":imod", "trp_player", ":i_slot"),
(try_end)
#--End Get imod
(agent_get_horse,":playermounted",":player_agent"),
(store_random_in_range,":weaponbreakchance",1,100),
(try_begin),
(ge,":playermounted",0),
# (display_message, "@Mounted."),
(val_mul,":weaponbreakchance",104),
(val_div,":weaponbreakchance",100),
(eq,itp_type_polearm,":weapontype"),
(val_mul,":weaponbreakchance",110),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq,itp_type_polearm,":weapontype"),
# (display_message, "@Polearm"),
(val_mul,":weaponbreakchance",102),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq,itp_type_two_handed_wpn,":weapontype"),
# (display_message, "@2 hander"),
(val_mul,":weaponbreakchance",101),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq,itp_type_one_handed_wpn,":weapontype"),
# (display_message, "@1 hander"),
(val_mul,":weaponbreakchance",1),
(try_end),
#--imod Quality Modifier
#Better than Average
(try_begin),
(eq, imodbit_masterwork, ":imod"),
(val_mul,":weaponbreakchance",50),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_tempered, ":imod"),
(val_mul,":weaponbreakchance",75),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_balanced, ":imod"),
(val_mul,":weaponbreakchance",85),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_heavy, ":imod"),
(val_mul,":weaponbreakchance",90),
(val_div,":weaponbreakchance",100),
(try_end),
#Worse than Average
(try_begin),
(eq, imodbit_bent, ":imod"),
(val_mul,":weaponbreakchance",110),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_rusty, ":imod"),
(val_mul,":weaponbreakchance",125),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_chipped, ":imod"),
(val_mul,":weaponbreakchance",150),
(val_div,":weaponbreakchance",100),
(try_end),
(try_begin),
(eq, imodbit_cracked, ":imod"),
(val_mul,":weaponbreakchance",200),
(val_div,":weaponbreakchance",100),
(try_end),
#--End imod Quality Modifier
(try_begin),
(assign, reg8, ":weaponbreakchance"),
# (display_message, "@{reg8}"),
(ge,":weaponbreakchance",98),
#--imod Weapon Damage
#Better than Average
(try_begin),
(eq, imodbit_masterwork, ":imod"),
(troop_set_inventory_slot_modifier, "trp_player", ":i_slot", imodbit_balanced),
(else_try),
(eq, imodbit_tempered, ":imod"),
(troop_set_inventory_slot_modifier, "trp_player", ":i_slot", 0),
(else_try),
(eq, imodbit_balanced, ":imod"),
(troop_set_inventory_slot_modifier, "trp_player", ":i_slot", 0),
(else_try),
(eq, imodbit_heavy, ":imod"),
(troop_set_inventory_slot_modifier, "trp_player", ":i_slot", imodbit_chipped),
#Worse than Average
(else_try),
(eq, imodbit_bent, ":imod"),
(troop_set_inventory_slot_modifier, "trp_player", ":i_slot", imodbit_cracked),
#Chipped, Cracked, Rusty weapons break
(else_try),
(this_or_next|eq, imodbit_rusty, ":imod"),
(this_or_next|eq, imodbit_chipped, ":imod"),
(eq, imodbit_cracked, ":imod"),
(agent_unequip_item,":player_agent",":breakweapon"),
(play_sound,"snd_shield_broken",),
(troop_remove_item, "trp_player", ":breakweapon"),
(display_message, "@Hah! Your weapon broke."),
(lt,":playermounted",0),
(agent_set_animation, ":player_agent", "anim_strike_chest_front"),
#Normal Weapon gets Chipped
(else_try),
(troop_set_inventory_slot_modifier, "trp_player", ":i_slot", imodbit_chipped),
(try_end),
#--End imod Weapon Damage
(try_end),
(try_end),
], [])