From baa5c1fc386a706ba4bf4aa48409b8947274c928 Mon Sep 17 00:00:00 2001 From: shennetsind Date: Fri, 4 Oct 2013 20:55:58 -0300 Subject: downrefitem script command update Preparation for refiner/hd-ore update; Optional param added, this will allow for the officials 1/3 downgrades as well as for users to customise the value to their liking at script-level. Thanks To Haruna. Signed-off-by: shennetsind --- doc/script_commands.txt | 11 ++++------- 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 ; +*downrefitem {,}; -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 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()' but it returns nothing on the stack. -This is since jAthena, so probably nobody knows for sure why is it so. - --------------------------------------- *unequip ; 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"), -- cgit v1.2.3-60-g2f50