From cc8c60d13a476f95b1d79f2f3811f21d4174acb5 Mon Sep 17 00:00:00 2001 From: epoque11 Date: Mon, 12 Dec 2011 03:32:34 +0000 Subject: - Added support for multi-line messages when using mes; - Added getstatus; script command to retrieve information about a specific, active status effect git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15072 54d463be-8e91-2dee-dedb-b68131a5f0ec --- doc/script_commands.txt | 28 ++++++++++++++++++++ src/map/script.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 94 insertions(+), 2 deletions(-) diff --git a/doc/script_commands.txt b/doc/script_commands.txt index bcf269535..644c58d22 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -1168,6 +1168,14 @@ english characters, the color codes might get screwed if they stick to letters with no intervening space. Separating them with spaces from the letters on either side solves the problem. +To display multiple lines of message while only using a single mes; command, +use the script command in the following format: + + mes "Line 1", "Line 2", "Line 3"; + +This will display 3 different lines while only consuming a single line in +the relevant script file. + --------------------------------------- *next; @@ -4737,6 +4745,26 @@ should be rather obvious. --------------------------------------- +*getstatus {,}; + +Retrieve information about a specific status effect when called. Depending on +specified the function will return different information. + +Possible values: + - 0 or undefined: whether the status is active + - 1: the val1 of the status + - 2: the val2 of the status + - 3: the val3 of the status + - 4: the val4 of the status + - 5: the amount of time in milliseconds that the status has remaining + +If is not defined or is set to 0, then the script function will either +return 1 if the status is active, or 0 if the status is not active. If the status +is not active when any of the fields are provided, this script function +will always return 0. + +--------------------------------------- + *skilleffect ,; *skilleffect "",; diff --git a/src/map/script.c b/src/map/script.c index 2647997c6..9fd0693e4 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -3874,11 +3874,24 @@ int script_reload() /// mes ""; BUILDIN_FUNC(mes) { + int i; TBL_PC* sd = script_rid2sd(st); if( sd == NULL ) return 0; - clif_scriptmes(sd, st->oid, script_getstr(st, 2)); + if( !script_hasdata(st, 3) ) + {// only a single line detected in the script + clif_scriptmes(sd, st->oid, script_getstr(st, 2)); + } + else + {// parse multiple lines as they exist + for( i = 2; script_hasdata(st, i); i++ ) + { + // send the message to the client + clif_scriptmes(sd, st->oid, script_getstr(st, i)); + } + } + return 0; } @@ -9067,6 +9080,56 @@ BUILDIN_FUNC(getscrate) return 0; } +/*========================================== + * getstatus {, }; + *------------------------------------------*/ +BUILDIN_FUNC(getstatus) +{ + int id, type; + struct map_session_data* sd = script_rid2sd(st); + + if( sd == NULL ) + {// no player attached + return 0; + } + + id = script_getnum(st, 2); + type = script_hasdata(st, 3) ? script_getnum(st, 3) : 0; + + if( id <= SC_NONE || id >= SC_MAX ) + {// invalid status type given + ShowWarning("script.c:getstatus: Invalid status type given (%d).\n", id); + return 0; + } + + if( sd->sc.count == 0 || !sd->sc.data[id] ) + {// no status is active + script_pushint(st, 0); + return 0; + } + + switch( type ) + { + case 1: script_pushint(st, sd->sc.data[id]->val1); break; + case 2: script_pushint(st, sd->sc.data[id]->val2); break; + case 3: script_pushint(st, sd->sc.data[id]->val3); break; + case 4: script_pushint(st, sd->sc.data[id]->val4); break; + case 5: + { + struct TimerData* timer = (struct TimerData*)get_timer(sd->sc.data[id]->timer); + + if( timer ) + {// return the amount of time remaining + script_pushint(st, timer->tick - gettick()); + } + } + break; + default: script_pushint(st, 1); break; + } + + return 0; +} + /*========================================== * *------------------------------------------*/ @@ -15912,7 +15975,7 @@ BUILDIN_FUNC(deletepset); /// for an explanation on args, see add_buildin_func struct script_function buildin_func[] = { // NPC interaction - BUILDIN_DEF(mes,"s"), + BUILDIN_DEF(mes,"s*"), BUILDIN_DEF(next,""), BUILDIN_DEF(close,""), BUILDIN_DEF(close2,""), @@ -16055,6 +16118,7 @@ struct script_function buildin_func[] = { BUILDIN_DEF(sc_start2,"iiii?"), BUILDIN_DEF(sc_start4,"iiiiii?"), BUILDIN_DEF(sc_end,"i?"), + BUILDIN_DEF(getstatus, "i?"), BUILDIN_DEF(getscrate,"ii?"), BUILDIN_DEF(debugmes,"s"), BUILDIN_DEF2(catchpet,"pet","i"), -- cgit v1.2.3-60-g2f50