summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorepoque11 <epoque11@54d463be-8e91-2dee-dedb-b68131a5f0ec>2011-12-12 03:32:34 +0000
committerepoque11 <epoque11@54d463be-8e91-2dee-dedb-b68131a5f0ec>2011-12-12 03:32:34 +0000
commitcc8c60d13a476f95b1d79f2f3811f21d4174acb5 (patch)
tree5f74b02ff37ff484d6f987a2e1215728ee830568
parent372828e4de3c2474891380c30ce94ce1d72e9127 (diff)
downloadhercules-cc8c60d13a476f95b1d79f2f3811f21d4174acb5.tar.gz
hercules-cc8c60d13a476f95b1d79f2f3811f21d4174acb5.tar.bz2
hercules-cc8c60d13a476f95b1d79f2f3811f21d4174acb5.tar.xz
hercules-cc8c60d13a476f95b1d79f2f3811f21d4174acb5.zip
- 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
-rw-r--r--doc/script_commands.txt28
-rw-r--r--src/map/script.c68
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 <effect type>{,<type>};
+
+Retrieve information about a specific status effect when called. Depending on <type>
+specified the function will return different information.
+
+Possible <type> 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 <type> 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 <type> fields are provided, this script function
+will always return 0.
+
+---------------------------------------
+
*skilleffect <skill id>,<number>;
*skilleffect "<skill name>",<number>;
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 "<message>";
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;
}
@@ -9068,6 +9081,56 @@ BUILDIN_FUNC(getscrate)
}
/*==========================================
+ * getstatus <type>{, <info>};
+ *------------------------------------------*/
+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;
+}
+
+/*==========================================
*
*------------------------------------------*/
BUILDIN_FUNC(debugmes)
@@ -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"),