diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 336c1a1ea08..6d3d68eb514 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -4294,6 +4294,14 @@ This command will force a stat recalculation for the attached player. --------------------------------------- +*needed_status_point(,{,}); + +Returns the number of stat points needed to change the specified stat by . +If is negative, returns the number of stat points that would be needed to +raise the specified stat from (current value - ) to current value. + +--------------------------------------- + *get_revision() This command will return the SVN revision number that the server is currently diff --git a/npc/other/CashShop_Functions.txt b/npc/other/CashShop_Functions.txt index e1640ec1b3d..2c0fa037a27 100644 --- a/npc/other/CashShop_Functions.txt +++ b/npc/other/CashShop_Functions.txt @@ -304,3 +304,23 @@ function script F_Snowball { } end; } + +// Status reduction potion +//============================================================ +// - Permanently reduces base stat by 1. +// - Returns status points equals to points needed to raise +// that stat to original value. +// - Doesn't work if base status is already 1. +// * callfunc("F_CashReduceStat",{,}); +function script F_CashReduceStat { + .@type = getarg(0); + .@itemid = getarg(1, 0); + + if(readparam(.@type) < 2) return; + + if(.@itemid) + delitem .@itemid,1; + StatusPoint += needed_status_point(.@type, -1); + statusup2 .@type,-1; + return; +} diff --git a/src/map/script.c b/src/map/script.c index eed20473185..6f1e0d0e31a 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -21661,6 +21661,22 @@ BUILDIN_FUNC(setrandomoption) { return SCRIPT_CMD_FAILURE; } +/// Returns the number of stat points needed to change the specified stat by val. +/// If val is negative, returns the number of stat points that would be needed to +/// raise the specified stat from (current value - val) to current value. +/// *needed_status_point(,{,}); +/// @author [secretdataz] +BUILDIN_FUNC(needed_status_point) { + struct map_session_data *sd; + int type, val; + if (!script_charid2sd(4, sd)) + return SCRIPT_CMD_FAILURE; + type = script_getnum(st, 2); + val = script_getnum(st, 3); + + script_pushint(st, pc_need_status_point(sd, type, val)); + return SCRIPT_CMD_SUCCESS; +} #include "../custom/script.inc" // declarations that were supposed to be exported from npc_chat.c @@ -22243,6 +22259,7 @@ struct script_function buildin_func[] = { BUILDIN_DEF(getrandomoptinfo, "i"), BUILDIN_DEF(getequiprandomoption, "iii?"), BUILDIN_DEF(setrandomoption,"iiiii?"), + BUILDIN_DEF(needed_status_point,"ii?"), #include "../custom/script_def.inc"