Fixes getrefine failing in OnEquip/OnUnequip scripts (#7592)

This commit is contained in:
Vincent Stumpf 2023-03-20 10:08:04 -07:00 committed by GitHub
parent 819b7cb361
commit f0e374ea23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 5 deletions

View File

@ -11955,6 +11955,8 @@ bool pc_equipitem(map_session_data *sd,short n,int req_pos,bool equipswitch)
//OnEquip script [Skotlex]
if (id) {
current_equip_item_index = n;
current_equip_card_id = 0;
//only run the script if item isn't restricted
if (id->equip_script && (pc_has_permission(sd,PC_PERM_USE_ALL_EQUIPMENT) || !itemdb_isNoEquip(id,sd->bl.m)))
run_script(id->equip_script,0,sd->bl.id,fake_nd->bl.id);
@ -11964,15 +11966,18 @@ bool pc_equipitem(map_session_data *sd,short n,int req_pos,bool equipswitch)
for( i = 0; i < MAX_SLOTS; i++ ) {
if (!sd->inventory.u.items_inventory[n].card[i])
continue;
std::shared_ptr<item_data> data = item_db.find(sd->inventory.u.items_inventory[n].card[i]);
if ( data != nullptr ) {
if (data->equip_script && (pc_has_permission(sd,PC_PERM_USE_ALL_EQUIPMENT) || !itemdb_isNoEquip(data.get(), sd->bl.m)))
if (data->equip_script && (pc_has_permission(sd,PC_PERM_USE_ALL_EQUIPMENT) || !itemdb_isNoEquip(data.get(), sd->bl.m))) {
current_equip_card_id = sd->inventory.u.items_inventory[n].card[i];
run_script(data->equip_script,0,sd->bl.id,fake_nd->bl.id);
}
}
current_equip_card_id = 0;
}
}
current_equip_item_index = -1;
}
sd->npc_item_flag = iflag;
@ -12050,6 +12055,8 @@ static void pc_unequipitem_sub(map_session_data *sd, int n, int flag) {
//OnUnEquip script [Skotlex]
if (sd->inventory_data[n]) {
current_equip_item_index = n;
current_equip_card_id = 0;
if (sd->inventory_data[n]->unequip_script)
run_script(sd->inventory_data[n]->unequip_script, 0, sd->bl.id, fake_nd->bl.id);
if (itemdb_isspecial(sd->inventory.u.items_inventory[n].card[0]))
@ -12062,12 +12069,15 @@ static void pc_unequipitem_sub(map_session_data *sd, int n, int flag) {
std::shared_ptr<item_data> data = item_db.find(sd->inventory.u.items_inventory[n].card[i]);
if (data != nullptr) {
if (data->unequip_script)
if (data->unequip_script) {
current_equip_card_id = sd->inventory.u.items_inventory[n].card[i];
run_script(data->unequip_script, 0, sd->bl.id, fake_nd->bl.id);
}
}
current_equip_card_id = 0;
}
}
current_equip_item_index = -1;
}
sd->npc_item_flag = iflag;

View File

@ -4132,8 +4132,11 @@ int run_func(struct script_state *st)
}
#endif
if (str_data[func].func(st) == SCRIPT_CMD_FAILURE) //Report error
if (str_data[func].func(st) == SCRIPT_CMD_FAILURE) {
//Report error
ShowWarning("Script command '%s' returned failure.\n", get_str(func));
script_reportsrc(st);
}
} else {
ShowError("script:run_func: '%s' (id=%d type=%s) has no C function. please report this!!!\n", get_str(func), func, script_op2name(str_data[func].type));
script_reportsrc(st);