diff options
-rw-r--r-- | doc/script_commands.txt | 11 | ||||
-rw-r--r-- | src/map/script.c | 15 |
2 files changed, 13 insertions, 13 deletions
diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 29a1478fa..4dcbd75d1 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -4784,18 +4784,15 @@ so. --------------------------------------- -*downrefitem <equipment slot>; +*downrefitem <equipment slot>{,<downgrade_count>}; -This command will downgrade an item by - 1 in the specified equipment slot -of the invoking character. So the item will not be destroyed unlike in the +This command will downgrade an item by - 1 (unless optional <downgrade_count> is provided) +in the specified equipment slot of the invoking character. +So the item will not be destroyed unlike in the failedrefitem script command. This will also display a 'refine failure' effect on the character and put appropriate messages into their chat window. -The official scripts seems to use the 'downrefitem' command as a function -instead: 'downrefitem(<number>)' but it returns nothing on the stack. -This is since jAthena, so probably nobody knows for sure why is it so. - --------------------------------------- *unequip <equipment slot>; diff --git a/src/map/script.c b/src/map/script.c index 879ca8c84..5fa248f4e 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -7187,13 +7187,15 @@ BUILDIN(failedrefitem) *------------------------------------------*/ BUILDIN(downrefitem) { - int i = -1,num,ep; + int i = -1,num,ep, down = 1; TBL_PC *sd; - num = script_getnum(st,2); sd = script->rid2sd(st); if( sd == NULL ) return true; + num = script_getnum(st,2); + if( script_hasdata(st, 3) ) + down = script_getnum(st, 3); if (num > 0 && num <= ARRAYLENGTH(script->equip)) i = pc->checkequip(sd,script->equip[num-1]); @@ -7203,10 +7205,11 @@ BUILDIN(downrefitem) //Logs items, got from (N)PC scripts [Lupus] logs->pick_pc(sd, LOG_TYPE_SCRIPT, -1, &sd->status.inventory[i],sd->inventory_data[i]); - sd->status.inventory[i].refine++; pc->unequipitem(sd,i,2); // status calc will happen in pc->equipitem() below - - clif->refine(sd->fd,2,i,sd->status.inventory[i].refine = sd->status.inventory[i].refine - 2); + sd->status.inventory[i].refine -= down; + sd->status.inventory[i].refine = cap_value( sd->status.inventory[i].refine, 0, MAX_REFINE); + + clif->refine(sd->fd,2,i,sd->status.inventory[i].refine); clif->delitem(sd,i,1,3); //Logs items, got from (N)PC scripts [Lupus] @@ -17375,7 +17378,7 @@ void script_parse_builtin(void) { BUILDIN_DEF(getequippercentrefinery,"i"), BUILDIN_DEF(successrefitem,"i"), BUILDIN_DEF(failedrefitem,"i"), - BUILDIN_DEF(downrefitem,"i"), + BUILDIN_DEF(downrefitem,"i?"), BUILDIN_DEF(statusup,"i"), BUILDIN_DEF(statusup2,"ii"), BUILDIN_DEF(bonus,"iv"), |