summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/script_commands.txt11
-rw-r--r--src/map/script.c15
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"),