Fixes getrefine failing in OnEquip/OnUnequip scripts (#7592)
This commit is contained in:
parent
819b7cb361
commit
f0e374ea23
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user