diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/constants.md | 143 | ||||
-rw-r--r-- | doc/script_commands.txt | 142 |
2 files changed, 211 insertions, 74 deletions
diff --git a/doc/constants.md b/doc/constants.md index 565048840..ead85314d 100644 --- a/doc/constants.md +++ b/doc/constants.md @@ -3854,6 +3854,55 @@ - `HAT_EF_FSTONE`: 55 - `HAT_EF_MAGICCIRCLE`: 56 +### Achievement Types + +- `ACH_QUEST`: 0 +- `ACH_KILL_PC_TOTAL`: 1 +- `ACH_KILL_PC_JOB`: 2 +- `ACH_KILL_PC_JOBTYPE`: 3 +- `ACH_KILL_MOB_CLASS`: 4 +- `ACH_DAMAGE_PC_MAX`: 5 +- `ACH_DAMAGE_PC_TOTAL`: 6 +- `ACH_DAMAGE_PC_REC_MAX`: 7 +- `ACH_DAMAGE_PC_REC_TOTAL`: 8 +- `ACH_DAMAGE_MOB_MAX`: 9 +- `ACH_DAMAGE_MOB_TOTAL`: 10 +- `ACH_DAMAGE_MOB_REC_MAX`: 11 +- `ACH_DAMAGE_MOB_REC_TOTAL`: 12 +- `ACH_JOB_CHANGE`: 13 +- `ACH_STATUS`: 14 +- `ACH_STATUS_BY_JOB`: 15 +- `ACH_STATUS_BY_JOBTYPE`: 16 +- `ACH_CHATROOM_CREATE_DEAD`: 17 +- `ACH_CHATROOM_CREATE`: 18 +- `ACH_CHATROOM_MEMBERS`: 19 +- `ACH_FRIEND_ADD`: 20 +- `ACH_PARTY_CREATE`: 21 +- `ACH_PARTY_JOIN`: 22 +- `ACH_MARRY`: 23 +- `ACH_ADOPT_BABY`: 24 +- `ACH_ADOPT_PARENT`: 25 +- `ACH_ZENY_HOLD`: 26 +- `ACH_ZENY_GET_ONCE`: 27 +- `ACH_ZENY_GET_TOTAL`: 28 +- `ACH_ZENY_SPEND_ONCE`: 29 +- `ACH_ZENY_SPEND_TOTAL`: 30 +- `ACH_EQUIP_REFINE_SUCCESS`: 31 +- `ACH_EQUIP_REFINE_FAILURE`: 32 +- `ACH_EQUIP_REFINE_SUCCESS_TOTAL`: 33 +- `ACH_EQUIP_REFINE_FAILURE_TOTAL`: 34 +- `ACH_EQUIP_REFINE_SUCCESS_WLV`: 35 +- `ACH_EQUIP_REFINE_FAILURE_WLV`: 36 +- `ACH_EQUIP_REFINE_SUCCESS_ID`: 37 +- `ACH_EQUIP_REFINE_FAILURE_ID`: 38 +- `ACH_ITEM_GET_COUNT`: 39 +- `ACH_ITEM_GET_COUNT_ITEMTYPE`: 40 +- `ACH_ITEM_GET_WORTH`: 41 +- `ACH_ITEM_SELL_WORTH`: 42 +- `ACH_PET_CREATE`: 43 +- `ACH_ACHIEVE`: 44 +- `ACH_ACHIEVEMENT_RANK`: 45 + ## Hardcoded Constants (source) @@ -3919,31 +3968,31 @@ - `AREA_WOC`: 4 - `AREA_WOSC`: 5 - `AREA_CHAT_WOC`: 6 -- `CHAT`: 7 -- `CHAT_WOS`: 8 -- `PARTY`: 9 -- `PARTY_WOS`: 10 -- `PARTY_SAMEMAP`: 11 -- `PARTY_SAMEMAP_WOS`: 12 -- `PARTY_AREA`: 13 -- `PARTY_AREA_WOS`: 14 -- `GUILD`: 15 -- `GUILD_WOS`: 16 -- `GUILD_SAMEMAP`: 17 -- `GUILD_SAMEMAP_WOS`: 18 -- `GUILD_AREA`: 19 -- `GUILD_AREA_WOS`: 20 -- `GUILD_NOBG`: 21 -- `DUEL`: 22 -- `DUEL_WOS`: 23 -- `SELF`: 24 -- `BG`: 25 -- `BG_WOS`: 26 -- `BG_SAMEMAP`: 27 -- `BG_SAMEMAP_WOS`: 28 -- `BG_AREA`: 29 -- `BG_AREA_WOS`: 30 -- `BG_QUEUE`: 31 +- `CHAT`: 8 +- `CHAT_WOS`: 9 +- `PARTY`: 10 +- `PARTY_WOS`: 11 +- `PARTY_SAMEMAP`: 12 +- `PARTY_SAMEMAP_WOS`: 13 +- `PARTY_AREA`: 14 +- `PARTY_AREA_WOS`: 15 +- `GUILD`: 16 +- `GUILD_WOS`: 17 +- `GUILD_SAMEMAP`: 18 +- `GUILD_SAMEMAP_WOS`: 19 +- `GUILD_AREA`: 20 +- `GUILD_AREA_WOS`: 21 +- `GUILD_NOBG`: 22 +- `DUEL`: 23 +- `DUEL_WOS`: 24 +- `SELF`: 25 +- `BG`: 26 +- `BG_WOS`: 27 +- `BG_SAMEMAP`: 28 +- `BG_SAMEMAP_WOS`: 29 +- `BG_AREA`: 30 +- `BG_AREA_WOS`: 31 +- `BG_QUEUE`: 32 ### LOOK_ constants, use in setlook/changelook script commands @@ -4237,11 +4286,29 @@ - `P_AIRSHIP_NONE`: 0 - `P_AIRSHIP_RETRY`: 1 -- `P_AIRSHIP_INVALID_START_MAP`: 2 +- `P_AIRSHIP_INVALID_START_MAP`: 4 - `P_AIRSHIP_INVALID_END_MAP`: 3 -- `P_AIRSHIP_ITEM_NOT_ENOUGH`: 4 +- `P_AIRSHIP_ITEM_NOT_ENOUGH`: 2 - `P_AIRSHIP_ITEM_INVALID`: 5 +### questinfo types + +- `QINFO_JOB`: 0 +- `QINFO_SEX`: 1 +- `QINFO_BASE_LEVEL`: 2 +- `QINFO_JOB_LEVEL`: 3 +- `QINFO_ITEM`: 4 +- `QINFO_HOMUN_LEVEL`: 5 +- `QINFO_HOMUN_TYPE`: 6 +- `QINFO_QUEST`: 7 + +### function types + +- `FUNCTION_IS_COMMAND`: 1 +- `FUNCTION_IS_GLOBAL`: 2 +- `FUNCTION_IS_LOCAL`: 3 +- `FUNCTION_IS_LABEL`: 4 + ### Renewal - `RENEWAL`: 1 @@ -7412,6 +7479,10 @@ - `NG_BAPHOMET`: 2483 - `G_NG_BAPHOMET_`: 2484 - `NG_CHIMERA`: 2485 +- `FACEWORM_QUEEN`: 2529 +- `FACEWORM_QUEEN_G`: 2533 +- `FACEWORM_QUEEN_B`: 2534 +- `FACEWORM_QUEEN_Y`: 2535 - `IRENE_ELDER`: 2542 - `PAYONSOLDIER`: 2543 - `PAYONSOLDIER2`: 2544 @@ -7779,7 +7850,11 @@ - `FATAL_DAYS`: 2958 - `TORTUROUS_REDEEMER`: 2959 - `E_TORTUROUS_REDEEMER`: 2961 +- `XM_CELINE_KIMI`: 2996 +- `GRIM_REAPER_ANKOU`: 3029 - `TIMEHOLDER`: 3074 +- `E1_FELOCK`: 3181 +- `MM_SARAH`: 3190 - `ORGANIC_JAKK`: 3202 - `INORGANIC_JAKK`: 3203 - `DARK_SOUL`: 3381 @@ -12292,6 +12367,7 @@ - `High_Purity_Energy_Xtal`: 6625 - `Blacksmith_Blessing`: 6635 - `Poring_Badge`: 6646 +- `Broken_Horn`: 6649 - `Needle_And_Thread`: 6654 - `Firm_Pumpkin`: 6655 - `Goast_Free_Charm`: 6656 @@ -12313,6 +12389,7 @@ - `Sacred_Rosary`: 6913 - `Black_Soul`: 6914 - `Captured_Soul`: 6915 +- `Costume_Change_Ticket`: 6959 - `Mould_Powder`: 7001 - `Ogre_Tooth`: 7002 - `Anolian_Skin`: 7003 @@ -12951,6 +13028,7 @@ - `Father_Giftbox`: 7637 - `Tw_Green_Box`: 7638 - `Tw_Red_Box`: 7639 +- `Bloody_Coin`: 7642 - `RO_Luk_Bookmark`: 7646 - `Taiwan_Luk_Coin`: 7647 - `Snake_Bookmark`: 7648 @@ -14325,6 +14403,7 @@ - `Peony_Mommy`: 12813 - `Slapping_Herb`: 12814 - `Yggdrasil_Dust`: 12815 +- `Old_Card_Album_`: 12817 - `High_Weapon_Box_`: 12818 - `Zherlthsh_Tck_Box_`: 12819 - `Mao_Guai_Scroll`: 12820 @@ -14540,6 +14619,7 @@ - `Octo_kitchen_Knife`: 13081 - `TE_Woe_Knife`: 13083 - `Goldsmithing_Dagger`: 13086 +- `FaceWormQueen_Leg`: 13090 - `RWC_Memory_Knife`: 13092 - `Thanos_Dagger`: 13093 - `Dagger_Of_Evil_Slayer`: 13094 @@ -15792,6 +15872,7 @@ - `Gray_Robe`: 15091 - `Airship_Armor`: 15116 - `Felock_Armor`: 15117 +- `Robe_Of_Sarah`: 15121 - `Whikebain_Suit`: 15123 - `Female_Poring_Balloon`: 15126 - `Female_Poring_Egg`: 15128 @@ -15936,7 +16017,9 @@ - `Red_Wing_Hat_Box`: 16461 - `FRed_Wing_Hat_Box`: 16462 - `My_Scroll2`: 16466 +- `Abrasive_Box_10`: 16483 - `E_Insurance_Package`: 16503 +- `Bubble_Gum_Box_10`: 16504 - `Xmas_Bless`: 16542 - `Snowman_Hat_Box`: 16543 - `FSnowman_Hat_Box`: 16544 @@ -17524,6 +17607,8 @@ - `Para_Team_Mark_`: 22508 - `Candy_Holder`: 22514 - `Key_Of_Twisted_Time`: 22515 +- `Closedmind_Box`: 22534 +- `PrizeOfHero`: 22537 - `Runstone_Lux`: 22540 - `HALLOWEEN_G_BOX`: 22669 - `DARK_INVITATION`: 22670 @@ -17546,8 +17631,10 @@ - `Bullet_Case_Stone`: 22748 - `Sanctified_Bullet_Case`: 22749 - `Buff_Gift_Set`: 22777 +- `Special_Gift_Box`: 22808 - `Integer_Time`: 22837 - `Something_Candy_Holder`: 22838 +- `Old_Money_Pocket`: 22876 - `T1_Shadow_Armor`: 24000 - `T1_Shadow_Weapon`: 24001 - `T1_Shadow_Shield`: 24002 @@ -17795,6 +17882,8 @@ - `S_Reload_Shield`: 24244 - `S_Reload_Armor`: 24245 - `Paradise_Foxtail_Staff_III`: 26101 +- `Faceworm_Queen_Card`: 27164 +- `Captain_Felock_Card`: 27182 - `Thanos_Katar`: 28000 - `Katar_Of_Evil_Slayer`: 28001 - `Half_BF_Katar2`: 28002 diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 2653f052a..4c5dab969 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -247,8 +247,8 @@ increments of 45 degrees, where 0 means facing towards the top of the map. and to make it look southeast it's facing 5.) Sprite is the sprite identifier used to display this particular NPC. For a -full list of sprite numbers see http://kalen.s79.xrea.com/npc/npce.shtml as -well as db/constants.conf. +full list of sprite numbers see http://nn.ai4rei.net/dev/npclist/ as +well as doc/constants.md. You may also use a monster's ID constant instead to display a monster sprite for this NPC, in npcs that have view ids of mobs it's encouraged to use OnTouch events with a 2,2 range and with an 'end' after the header to avoid @@ -536,7 +536,7 @@ suffix is 32. Some variables are special, that is, they are already defined for you by the scripting engine. You can see the full list somewhere in -'db/constants.conf', which is a file you should read, since it also +'doc/constants.md', which 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 commonly used are all permanent character-based variables: @@ -699,7 +699,7 @@ Variable References Hard-coded constants -------------------- Most of the constants defined by the scripting engine can be found in -'db/constants.conf' and have the same value independently of settings +'doc/constants.md' and have the same value independently of settings that are core related, but there are constants that can be used to retrieve core information that's set when the server is compiled. @@ -716,8 +716,7 @@ MAX_CHAT_USERS - Maximum Chat users MAX_REFINE - Maximum Refine level Send targets and status options are also hard-coded and can be found -in src/map/script.c::script_hardcoded_constants or in functions that -currently use them. +in 'doc/constants.md'. Operators --------- @@ -1977,18 +1976,35 @@ prontera,150,150,0 script TestNPC 123,{ *is_function("<function name>") -This command checks whether a function exists. -It returns 1 if function is found, or 0 if it isn't. +This command checks whether or not a function exists and returns its type. +Returns false if it cannot be found. + +return values: + + FUNCTION_IS_COMMAND - built-in script command (eg: mes, select, ...) + FUNCTION_IS_GLOBAL - user-defined global function (callable with callfunc) + FUNCTION_IS_LOCAL - user-defined local function + FUNCTION_IS_LABEL - user-defined label function (callable with callsub) Example: - function script try { + function script func1 { dothat(); } - script test FAKE_NPC,{ - .@try = is_function("try"); // 1 - .@not = is_function("notafunction"); // 0 + function func2 { + do_something(); + } + + func3: + end; + + is_function("func1"); // FUNCTION_IS_GLOBAL + is_function("func2"); // FUNCTION_IS_LOCAL + is_function("func3"); // FUNCTION_IS_LABEL + is_function("select"); // FUNCTION_IS_COMMAND + is_function("invalid"); // false } --------------------------------------- @@ -2477,7 +2493,7 @@ arrays: This function will return the basic stats of an invoking character, referred to by the parameter number. Instead of a number, you can use a -parameter name if it is defined in 'db/constants.conf'. +parameter name if it is defined in 'doc/constants.md'. Example parameters: @@ -3852,7 +3868,7 @@ mob database and return the info set by TYPE argument. It will return -1 if there is no such monster (or the type value is invalid), or "null" if you requested the monster's name. -Valid types are listed in constants.conf: +Valid types are listed in doc/constants.md: MOB_NAME 0 MOB_LV 1 MOB_MAXHP 2 @@ -4003,7 +4019,7 @@ effect being inflicted, in percent. } You can see the full list of available effect types you can possibly -inflict in 'db/constants.conf' under 'Eff_'. +inflict in 'doc/constants.md' under 'Status effects'. --------------------------------------- //===================================== @@ -4653,7 +4669,7 @@ This command will change the job class of the invoking character. This command does work with numbers, but you can also use job names. The full list of job names and the numbers they correspond to can be found in -'db/constants.conf'. +'doc/constants.md'. 'upper flag' can alternatively be used to specify the type of job one changes to. For example, jobchange(Job_Swordman, 1); will change the @@ -4801,7 +4817,7 @@ Is subject to EXP bonuses and to the `quest_exp_rate` config option. getexp(10000, 5000); You can also assign directly to the parameters defined in -'db/constants.conf': +'doc/constants.md': BaseExp += 10000; JobExp += 5000; @@ -4880,7 +4896,7 @@ installation that you can look at: 'npc/custom/stylist.txt' This command will push the currently attached player to given direction by given amount of square cells. Direction is the same as used when declaring NPCs, and can be specified by using one of the DIR_* constants -(db/constants.conf). +(doc/constants.md). The knock-back is not restricted by items or map flags, only obstacles are taken into account. If there is not enough space to perform the push (e.g. @@ -5835,7 +5851,7 @@ These commands will bestow a status effect on a character. The <effect type> determines which status is invoked. This can be either a number or constant, with the common statuses (mostly negative) found in -'db/constants.conf' with the 'SC_' prefix. A full list is located in +'doc/constants.md' under 'Status Changes'. A full list is located in 'src/map/status.h', though they are not currently documented. The duration of the status is given in <ticks>, or milleseconds. @@ -6635,7 +6651,7 @@ Examples: *unitemote(<GID>, <Emote>) Okay, these commands should be fairly self explaining. -For the emotions, you can look in db/constants.conf for prefixes with e_ +For the emotions, you can look in 'doc/constants.md' under 'Emotes' PS: unitwarp() supports a <GID> of zero, which causes the executor of the PS: unittalk() can receive 3 extra parameters: show_name: @@ -7064,7 +7080,7 @@ This command will broadcast a message to all or most players, similar to The region the broadcast is heard in (target), source of the broadcast and the color the message will come up as is determined by the flags. -The flag values are coded as constants in db/constants.conf to make them +The flag values are coded as constants in doc/constants.md to make them easier to use. Target flags: @@ -7390,7 +7406,7 @@ to the coordinates specified. This command marks a specified map with a map flag given. Map flags alter the behavior of the map, you can see the list of the available ones in -'db/constants.conf' under 'mf_'. +'doc/constants.md' under 'Mapflags'. The map flags alter the behavior of the map regarding teleporting (mf_nomemo, mf_noteleport, mf_nowarp), storing location when @@ -7663,15 +7679,19 @@ solution rather than sending the map and the monster_id. //===================================== --------------------------------------- -*debugmes("<message>") +*debugmes("<format string>"{, <param>{, ...}}) + +This command will print a message in the server console (map-server window), +after applying the same format-string replacements as sprintf(). It will not be +displayed anywhere else. Returns true on success. + +Example: -This command will send the message to the server console (map-server -window). It will not be displayed anywhere else. -// // Displays "NAME has clicked me!" in the map-server window. - debugmes(strcharinfo(PC_NAME)+" has clicked me!"); + debugmes("%s has clicked me!", strcharinfo(PC_NAME)); + + debugmes("\033[0;32mHello World"); // supports ANSI escape sequences - debugmes("\033[38D\033[K ==Message== \n"); // enable colour code. --------------------------------------- *logmes("<message>"{, <log type>}) @@ -7841,7 +7861,7 @@ A full list of pet IDs can be found inside 'db/pet_db.txt' This command makes an object display an emotion sprite above their own as if they were doing that emotion. For a full list of emotion numbers, see -'db/constants.conf' under 'e_'. The not so obvious ones are 'e_what' (a +'doc/constants.md' under 'Emotes'. The not so obvious ones are 'e_what' (a question mark) and 'e_gasp' (the exclamation mark). The optional target parameter specifies who will get the emotion on top of @@ -8906,14 +8926,14 @@ same time. This command will make the pet give a bonus to the owner's stat (bonus type - bInt, bVit, bDex, bAgi, bLuk, bStr, bSpeedRate - for a full list, see the -values starting with 'b' in 'db/constants.conf'). +'doc/constants.md' under 'Bonuses / Parameter IDs'). *petrecovery(<status type>, <delay>) This command will make the pet cure a specified status condition. The curing actions will occur once every <delay> seconds. For a full list of -status conditions that can be cured, see the list of 'SC_' status -condition constants in 'db/constants.conf' +status conditions that can be cured, see the list of 'Status Changes' status +condition constants in 'doc/constants.md' *petloot(<max items>) @@ -9008,7 +9028,7 @@ Each of these can be 'on' or 'off'. Together they define a cell's behavior. This command lets you alter these flags for all map cells in the specified (x1,y1)-(x2,y2) rectangle. 'type' defines which flag to modify. Possible options include cell_walkable, -cell_shootable, cell_basilica. For a full list, see constants.conf. +cell_shootable, cell_basilica. For a full list, see 'doc/constants.md'. 'flag' can be false (clear flat) or true (set flag). Example: @@ -9045,7 +9065,7 @@ remove a nonwalkable row of cells after the barricade mobs. This command will return true or false, depending on whether the specified cell has the 'type' flag set or not. There are various types to check, all mimicking the server's cell_chk enumeration. The types can be found in -db/constants.conf. +'doc/constants.md' under 'Cell checks'. The meaning of the individual types can be confusing, so here's an overview: @@ -9337,12 +9357,10 @@ that fails, the command returns an empty string instead. //===================================== --------------------------------------- -*questinfo(<Quest ID>, <Icon> {, <Map Mark Color>{, <Job Class>}}) - -This is esentially a combination of questprogress() and showevent(). Use this only -in an OnInit label. For the Quest ID, specify the quest ID that you want -checked if it has been started yet. +*questinfo(<Icon> {, <Map Mark Color>}) +This is esentially a showevent() that supports different conditions that can be set using setquestinfo(). +Use this only in an OnInit label. For Icon, use one of the following: No Icon : QTYPE_NONE @@ -9373,8 +9391,6 @@ the available color values are: When a user shows up on a map, each NPC is checked for questinfo that has been set. If questinfo is present, it will check if the quest has been started, if it has not, the bubble will appear. -Optionally, you can also specify a Job Class if the quest bubble should only appear for a certain class. - Example izlude,100,100,4 script Test 844,{ mes("[Test]"); @@ -9382,12 +9398,29 @@ Example close(); OnInit: - questinfo(1001, QTYPE_QUEST, 0, Job_Novice); + questinfo(QTYPE_QUEST); end; } --------------------------------------- +*setquestinfo(<Type> {, <Values...>}) + +Use this command ONLY after a questinfo() +it allows you to set multiple required conditions for the quest bubble to show up. + +supported types: values + QINFO_JOB: job_id + QINFO_SEX: sex + QINFO_BASE_LEVEL: min, max + QINFO_JOB_LEVEL: min, max + QINFO_ITEM: item_id, amount // append to the items list on each use + QINFO_HOMUN_LEVEL: min + QINFO_HOMUN_TYPE: homunculus_type (0 - regular, 1 - evolved, 2 - S) + QINFO_QUEST: quest_id, state // append to the quests list on each use + +--------------------------------------- + *setquest(<ID>{, <Time Limit>}) Place quest of <ID> in the users quest log, the state of which is "active". @@ -9945,9 +9978,9 @@ Applicable Data Types (available as constants) - UDT_WALKTOXY: Make a unit walk to certain co-ordinates. (Val1 = (int) x, Val2 = (int) y) UDT_SPEED: Unit Speed. (int) UDT_MODE: Mode (Mobs only) (int) - UDT_AI: Unit AI Type (see constants.conf for Unit AI Types) - UDT_SCOPTION: Status Options. (see constants.conf for Unit Option Types) - UDT_SEX: Gender of the unit. (see constants.conf for Genders) + UDT_AI: Unit AI Type (see doc/constants.md for Unit AI Types) + UDT_SCOPTION: Status Options. (see doc/constants.md for Unit Option Types) + UDT_SEX: Gender of the unit. (see doc/constants.md for Genders) UDT_CLASS: Class of the unit. (Monster ID) (int) UDT_HAIRSTYLE: Hair Style ID. (int) UDT_HAIRCOLOR: Hair Color ID. (int) @@ -10010,9 +10043,9 @@ Applicable Data types (available as constants) - UDT_MAPIDXY: Warp a Unit to a map. (Val1 = (string) MapName, Val2 = (int) x, Val3 = (int) y) UDT_SPEED: Unit Speed. (int) UDT_MODE: Mode (Mobs only) (int) - UDT_AI: Unit AI Type (see constants.conf for Unit AI Types) - UDT_SCOPTION: Status Options. (see constants.conf for Unit Option Types) - UDT_SEX: Gender of the unit. (see constants.conf for Genders) + UDT_AI: Unit AI Type (see doc/constants.md for Unit AI Types) + UDT_SCOPTION: Status Options. (see doc/constants.md for Unit Option Types) + UDT_SEX: Gender of the unit. (see doc/constants.md for Genders) UDT_CLASS: Class of the unit. (Monster ID) (int) UDT_HAIRSTYLE: Hair Style ID. (int) UDT_HAIRCOLOR: Hair Color ID. (int) @@ -10124,3 +10157,18 @@ the available flags are: Opens the styling shop on client --------------------------------------- + +*msgtable(<message_id>{, <color>}) + +Show in client message by <message_id> from msg string table +with optional <color>. + +--------------------------------------- + +*msgtable2(<message_id>, <param>{, <color>}) + +Show in client message by <message_id> from msg string table. +<param> is parameter for this message. Can be string or int. +Optional <color> can be used for set color for whole message. + +--------------------------------------- |