|
@@ -361,9 +361,9 @@ would not know what character to work on if there's no RID.
|
|
Unless you use 'attachrid' to explicitly attach a character to the script first.
|
|
Unless you use 'attachrid' to explicitly attach a character to the script first.
|
|
|
|
|
|
Whenever we say 'invoking character', we mean 'the character who's RID is
|
|
Whenever we say 'invoking character', we mean 'the character who's RID is
|
|
-attached to the running script. The script function "playerattached" can be
|
|
|
|
-used to check which is the currently attached player to the script (it will
|
|
|
|
-return 0 if the there is no player attached or the attached player no longer
|
|
|
|
|
|
+attached to the running script. The script function "playerattached" can be
|
|
|
|
+used to check which is the currently attached player to the script (it will
|
|
|
|
+return 0 if the there is no player attached or the attached player no longer
|
|
is logged on to the map-server).
|
|
is logged on to the map-server).
|
|
|
|
|
|
Item and pet scripts
|
|
Item and pet scripts
|
|
@@ -438,7 +438,7 @@ Variable scope is defined by a prefix before the variable name:
|
|
is, not triggered by a specific character object.
|
|
is, not triggered by a specific character object.
|
|
"#" - A permanent account-based variable.
|
|
"#" - A permanent account-based variable.
|
|
They are stored with all the account data in "save\accreg.txt" in TXT
|
|
They are stored with all the account data in "save\accreg.txt" in TXT
|
|
- versions and in the SQL versions in the 'global_reg_value' table using
|
|
|
|
|
|
+ versions and in the SQL versions in the 'global_reg_value' table using
|
|
type 2.
|
|
type 2.
|
|
"##" - A permanent account-based variable stored by the login server.
|
|
"##" - A permanent account-based variable stored by the login server.
|
|
They are stored in "save\account.txt" and in the SQL versions in the
|
|
They are stored in "save\account.txt" and in the SQL versions in the
|
|
@@ -454,30 +454,30 @@ is a file you should read, since it also allows you to replace lots of numbered
|
|
arguments for many commands with easier to read text. The special variables most
|
|
arguments for many commands with easier to read text. The special variables most
|
|
commonly used are all permanent character-based variables:
|
|
commonly used are all permanent character-based variables:
|
|
|
|
|
|
-StatusPoint - Amount of status points remaining.
|
|
|
|
-BaseLevel - Current base level
|
|
|
|
-SkillPoint - Amount of skill points remaining
|
|
|
|
-Class - Current job
|
|
|
|
-Upper - 1 if the character is an advanced job class.
|
|
|
|
-Zeny - Current amount of zeny
|
|
|
|
-Sex - Character's gender, 0 if female, 1 if male.
|
|
|
|
-Weight - The weight the character currently carries.
|
|
|
|
-MaxWeight - The maximum weight the character can carry.
|
|
|
|
-JobLevel - Character's job level
|
|
|
|
|
|
+StatusPoint - Amount of status points remaining.
|
|
|
|
+BaseLevel - Current base level
|
|
|
|
+SkillPoint - Amount of skill points remaining
|
|
|
|
+Class - Current job
|
|
|
|
+Upper - 1 if the character is an advanced job class.
|
|
|
|
+Zeny - Current amount of zeny
|
|
|
|
+Sex - Character's gender, 0 if female, 1 if male.
|
|
|
|
+Weight - The weight the character currently carries.
|
|
|
|
+MaxWeight - The maximum weight the character can carry.
|
|
|
|
+JobLevel - Character's job level
|
|
BaseExp - The amount of base experience points the character has.
|
|
BaseExp - The amount of base experience points the character has.
|
|
- Notice that it's zero (or close) if the character just got a level.
|
|
|
|
-JobExp - Same for job levels
|
|
|
|
-NextBaseExp - Amount of experience points needed to reach the next base level.
|
|
|
|
-NextJobExp - Same for job levels.
|
|
|
|
-Hp - Current amount of hit points.
|
|
|
|
-MaxHp - Maximum amount of hit points.
|
|
|
|
-Sp - Current spell points.
|
|
|
|
-MaxSp - Maximum amount of spell points.
|
|
|
|
|
|
+ Notice that it's zero (or close) if the character just got a level.
|
|
|
|
+JobExp - Same for job levels
|
|
|
|
+NextBaseExp - Amount of experience points needed to reach the next base level.
|
|
|
|
+NextJobExp - Same for job levels.
|
|
|
|
+Hp - Current amount of hit points.
|
|
|
|
+MaxHp - Maximum amount of hit points.
|
|
|
|
+Sp - Current spell points.
|
|
|
|
+MaxSp - Maximum amount of spell points.
|
|
BaseJob - This is sneaky, apparently meant for baby class support.
|
|
BaseJob - This is sneaky, apparently meant for baby class support.
|
|
This will supposedly equal Job_Acolyte regardless of whether the
|
|
This will supposedly equal Job_Acolyte regardless of whether the
|
|
character is an acolyte or a baby acolyte, for example.
|
|
character is an acolyte or a baby acolyte, for example.
|
|
Karma - The character's karma. Karma system is not fully functional, but
|
|
Karma - The character's karma. Karma system is not fully functional, but
|
|
- this doesn't mean this doesn't work at all. Not tested.
|
|
|
|
|
|
+ this doesn't mean this doesn't work at all. Not tested.
|
|
Manner - The character's manner rating. Becomes negative if the player
|
|
Manner - The character's manner rating. Becomes negative if the player
|
|
utters words forbidden through the use of 'manner.txt' client-side
|
|
utters words forbidden through the use of 'manner.txt' client-side
|
|
file.
|
|
file.
|
|
@@ -695,7 +695,7 @@ Returns the ID of the player currently attached to the script. It will return
|
|
0 if noone is attached, or if the attached player no longer exists on the map
|
|
0 if noone is attached, or if the attached player no longer exists on the map
|
|
server. It is wise to check for the attached player in script functions that
|
|
server. It is wise to check for the attached player in script functions that
|
|
deal with timers as there's no guarantee the player will still be logged on
|
|
deal with timers as there's no guarantee the player will still be logged on
|
|
-when the timer triggers. Note that the ID of a player is actually their
|
|
|
|
|
|
+when the timer triggers. Note that the ID of a player is actually their
|
|
account ID.
|
|
account ID.
|
|
|
|
|
|
-------------------------
|
|
-------------------------
|
|
@@ -1841,9 +1841,9 @@ adding up strings:
|
|
|
|
|
|
*countitem2(<item id>,<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>)
|
|
*countitem2(<item id>,<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>)
|
|
*countitem2("<item name>",<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>)
|
|
*countitem2("<item name>",<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>)
|
|
-
|
|
|
|
-Expanded version of 'countitem' function, used for created/carded/forged items.
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+Expanded version of 'countitem' function, used for created/carded/forged items.
|
|
|
|
+
|
|
This function will return the number of items for the specified item ID and
|
|
This function will return the number of items for the specified item ID and
|
|
other parameters that the invoking character has in the inventory.
|
|
other parameters that the invoking character has in the inventory.
|
|
Check 'getitem2' to understand the arguments of the function.
|
|
Check 'getitem2' to understand the arguments of the function.
|
|
@@ -1893,7 +1893,7 @@ is defined in "db/const.txt".
|
|
For reference, in there these things are defined:
|
|
For reference, in there these things are defined:
|
|
|
|
|
|
StatusPoint, BaseLevel, SkillPoint, Class, Upper, Zeny, Sex, Weight, MaxWeight,
|
|
StatusPoint, BaseLevel, SkillPoint, Class, Upper, Zeny, Sex, Weight, MaxWeight,
|
|
-JobLevel, BaseExp, JobExp, NextBaseExp, NextJobExp, Hp, MaxHp, Sp, MaxSp,
|
|
|
|
|
|
+JobLevel, BaseExp, JobExp, NextBaseExp, NextJobExp, Hp, MaxHp, Sp, MaxSp,
|
|
BaseJob, Karma, Manner, bVit, bDex, bAgi, bStr, bInt, bLuk
|
|
BaseJob, Karma, Manner, bVit, bDex, bAgi, bStr, bInt, bLuk
|
|
|
|
|
|
All of these also behave as variables, but don't expect to be able to just 'set'
|
|
All of these also behave as variables, but don't expect to be able to just 'set'
|
|
@@ -1942,8 +1942,8 @@ if guild or party number is requested. If a name is specified and the character
|
|
is not found, 0 is returned.
|
|
is not found, 0 is returned.
|
|
|
|
|
|
If getcharid(0) returns a zero, the script got called not by a character and
|
|
If getcharid(0) returns a zero, the script got called not by a character and
|
|
-doesn't have an attached RID. Note that this will cause the map server to
|
|
|
|
-print "player not attached!" error messages, so it is preferred to use
|
|
|
|
|
|
+doesn't have an attached RID. Note that this will cause the map server to
|
|
|
|
+print "player not attached!" error messages, so it is preferred to use
|
|
"playerattached" to check for the character attached to the script.
|
|
"playerattached" to check for the character attached to the script.
|
|
|
|
|
|
if (getcharid(2)) mes "Only members of a guild are allowed beyond this point!";
|
|
if (getcharid(2)) mes "Only members of a guild are allowed beyond this point!";
|
|
@@ -2196,7 +2196,7 @@ see 'getequipid'. Function originally used by the refining NPCs:
|
|
mes "[Refiner]";
|
|
mes "[Refiner]";
|
|
mes "That's a fine hat you are wearing there...";
|
|
mes "That's a fine hat you are wearing there...";
|
|
close;
|
|
close;
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
---------------------------------------
|
|
---------------------------------------
|
|
|
|
|
|
@@ -3384,7 +3384,8 @@ You can see the full list of available effect types you can possibly inflict in
|
|
|
|
|
|
It is pretty certain that addressing the target by an ID number will not
|
|
It is pretty certain that addressing the target by an ID number will not
|
|
currently work due to a bug.
|
|
currently work due to a bug.
|
|
-
---------------------------------------
|
|
|
|
|
|
+
|
|
|
|
+---------------------------------------
|
|
|
|
|
|
*callshop "<shop name>",<flag>;
|
|
*callshop "<shop name>",<flag>;
|
|
|
|
|
|
@@ -3974,7 +3975,7 @@ online.
|
|
These functions return the characters (shild/mother/father) ID
|
|
These functions return the characters (shild/mother/father) ID
|
|
|
|
|
|
if (getmotherid()) mes "Oh... I know your mother's ID:"+getmotherid();
|
|
if (getmotherid()) mes "Oh... I know your mother's ID:"+getmotherid();
|
|
-
|
|
|
|
|
|
+
|
|
---------------------------------------
|
|
---------------------------------------
|
|
|
|
|
|
*getitemname(<item id>)
|
|
*getitemname(<item id>)
|
|
@@ -4602,23 +4603,23 @@ nighttime will persist if the server restarts during the night, if the automated
|
|
day/night switching is turned off in the configuration files. Figure it out on
|
|
day/night switching is turned off in the configuration files. Figure it out on
|
|
your own:
|
|
your own:
|
|
|
|
|
|
--%TAB%script%TAB%DayNight%TAB%-1,{
|
|
|
|
|
|
+-%TAB%script%TAB%DayNight%TAB%-1,{
|
|
|
|
|
|
- end;
|
|
|
|
|
|
+ end;
|
|
|
|
|
|
-OnClock0300:
|
|
|
|
|
|
+OnClock0300:
|
|
|
|
|
|
-OnClock0800:
|
|
|
|
|
|
+OnClock0800:
|
|
|
|
|
|
-OnInit:
|
|
|
|
|
|
+OnInit:
|
|
|
|
|
|
set $@minutesfrommidnight, gettime(3)*60+gettime(2);
|
|
set $@minutesfrommidnight, gettime(3)*60+gettime(2);
|
|
-
|
|
|
|
|
|
+
|
|
set $@night_start, 180; // 03:00
|
|
set $@night_start, 180; // 03:00
|
|
set $@night_end, 480; // 08:00
|
|
set $@night_end, 480; // 08:00
|
|
-
|
|
|
|
|
|
+
|
|
if ($@minutesfrommidnight>=$@night_start && $@minutesfrommidnight<$@night_end) goto StartNight;
|
|
if ($@minutesfrommidnight>=$@night_start && $@minutesfrommidnight<$@night_end) goto StartNight;
|
|
-
|
|
|
|
|
|
+
|
|
goto StartDay;
|
|
goto StartDay;
|
|
StartNight:
|
|
StartNight:
|
|
night;
|
|
night;
|
|
@@ -4864,14 +4865,14 @@ set @i, distance(100,200,101,202);
|
|
|
|
|
|
---------------------------------------
|
|
---------------------------------------
|
|
*query_sql "your MySQL query", <array name>
|
|
*query_sql "your MySQL query", <array name>
|
|
-
|
|
|
|
|
|
+
|
|
Returns up to 127 values into array.
|
|
Returns up to 127 values into array.
|
|
|
|
|
|
Example:
|
|
Example:
|
|
|
|
|
|
query_sql "SELECT name FROM 'char' ORDER BY fame DESC LIMIT 5", @most_fame_dude$;
|
|
query_sql "SELECT name FROM 'char' ORDER BY fame DESC LIMIT 5", @most_fame_dude$;
|
|
mes "Hall Of Fame: TOP5";
|
|
mes "Hall Of Fame: TOP5";
|
|
-mes "1."+@most_fame_dude$[0]; // Will return a person with the biggest fame value.
|
|
|
|
|
|
+mes "1."+@most_fame_dude$[0]; // Will return a person with the biggest fame value.
|
|
mes "2."+@most_fame_dude$[1];
|
|
mes "2."+@most_fame_dude$[1];
|
|
mes "3."+@most_fame_dude$[2];
|
|
mes "3."+@most_fame_dude$[2];
|
|
mes "4."+@most_fame_dude$[3];
|
|
mes "4."+@most_fame_dude$[3];
|
|
@@ -4923,42 +4924,50 @@ Example:
|
|
set @i, petstat(PET_CLASS);
|
|
set @i, petstat(PET_CLASS);
|
|
|
|
|
|
Whew.
|
|
Whew.
|
|
-What's about all of them.
|
|
|
|
-
|
|
|
|
----------------------------------------
|
|
|
|
-
|
|
|
|
-*setitemscript(<ItemID>,<"{ new item script }">)
|
|
|
|
-
|
|
|
|
-Set a new script bonus to the Item. Very useful for game events.
|
|
|
|
-
|
|
|
|
-Example:
|
|
|
|
-setitemscript 2637,"{ bonus bDamageWhenUnequip,40; if(isequipped(2236)==0)end; if(getskilllv(26)){skill 40,1;}else{skill 26,1+isequipped(2636);} }";
|
|
|
|
-
|
|
|
|
----------------------------------------
|
|
|
|
-
|
|
|
|
-*disguise <Monster ID>;
|
|
|
|
-*undisguise;
|
|
|
|
-
|
|
|
|
-This command disgueses current player with a monster sprite.
|
|
|
|
-The disguise is disappearing on re-login or on 'undisguise' command.
|
|
|
|
-
|
|
|
|
-Note: It doesn't work with "Pets with equipment on"
|
|
|
|
-Note: If u're a Sniper, u'd get an old Falcon over your head
|
|
|
|
-Note: You can kill yourself with some skills
|
|
|
|
-Note: Monsters of your type could heal you
|
|
|
|
-
|
|
|
|
-Example:
|
|
|
|
-disquise 1002; //Yay! You're a Poring!!!
|
|
|
|
-next;
|
|
|
|
-undisquise; //Yay!!!! You're a human again!!
|
|
|
|
-
|
|
|
|
----------------------------------------
|
|
|
|
-
|
|
|
|
-*nude;
|
|
|
|
-
|
|
|
|
-This command will unequip anything equipped on the invoking character.
|
|
|
|
-
|
|
|
|
-It is not required to do this when changing jobs since 'jobchange' will unequip
|
|
|
|
-everything not equippable by the new job class anyway.
|
|
|
|
-
|
|
|
|
----------------------------------------
|
|
|
|
|
|
+What's about all of them.
|
|
|
|
+
|
|
|
|
+---------------------------------------
|
|
|
|
+
|
|
|
|
+*setitemscript(<ItemID>,<"{ new item script }">)
|
|
|
|
+
|
|
|
|
+Set a new script bonus to the Item. Very useful for game events.
|
|
|
|
+
|
|
|
|
+Example:
|
|
|
|
+setitemscript 2637,"{ bonus bDamageWhenUnequip,40; if(isequipped(2236)==0)end; if(getskilllv(26)){skill 40,1;}else{skill 26,1+isequipped(2636);} }";
|
|
|
|
+
|
|
|
|
+---------------------------------------
|
|
|
|
+
|
|
|
|
+*disguise <Monster ID>;
|
|
|
|
+*undisguise;
|
|
|
|
+
|
|
|
|
+This command disgueses current player with a monster sprite.
|
|
|
|
+The disguise is disappearing on re-login or on 'undisguise' command.
|
|
|
|
+
|
|
|
|
+Note: It doesn't work with "Pets with equipment on"
|
|
|
|
+Note: If u're a Sniper, u'd get an old Falcon over your head
|
|
|
|
+Note: You can kill yourself with some skills
|
|
|
|
+Note: Monsters of your type could heal you
|
|
|
|
+
|
|
|
|
+Example:
|
|
|
|
+disquise 1002; //Yay! You're a Poring!!!
|
|
|
|
+next;
|
|
|
|
+undisquise; //Yay!!!! You're a human again!!
|
|
|
|
+
|
|
|
|
+---------------------------------------
|
|
|
|
+
|
|
|
|
+*nude;
|
|
|
|
+
|
|
|
|
+This command will unequip anything equipped on the invoking character.
|
|
|
|
+
|
|
|
|
+It is not required to do this when changing jobs since 'jobchange' will unequip
|
|
|
|
+everything not equippable by the new job class anyway.
|
|
|
|
+
|
|
|
|
+---------------------------------------
|
|
|
|
+
|
|
|
|
+*rid2name(rid)
|
|
|
|
+
|
|
|
|
+Converts rid to name. Note: The player/monster/NPC must be online/enabled.
|
|
|
|
+Good for PCKillEvent where you can convert 'killedrid' to the name of the player.
|
|
|
|
+
|
|
|
|
+Note: rid2name may not produce correct character names since rid = account id.
|
|
|
|
+ It will return the current online character of the account only.
|