diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/constants.md | 129 | ||||
-rw-r--r-- | doc/mob_db.txt | 68 | ||||
-rw-r--r-- | doc/option_drop_group.md | 97 | ||||
-rw-r--r-- | doc/script_commands.txt | 66 |
4 files changed, 278 insertions, 82 deletions
diff --git a/doc/constants.md b/doc/constants.md index 1fce24643..835b49036 100644 --- a/doc/constants.md +++ b/doc/constants.md @@ -3762,66 +3762,6 @@ - `SEX_MALE`: 1 - `SEX_ANY`: 2 -### Script Unit Data Types - -- `UDT_TYPE`: 0 -- `UDT_SIZE`: 1 -- `UDT_LEVEL`: 2 -- `UDT_HP`: 3 -- `UDT_MAXHP`: 4 -- `UDT_SP`: 5 -- `UDT_MAXSP`: 6 -- `UDT_MASTERAID`: 7 -- `UDT_MASTERCID`: 8 -- `UDT_MAPIDXY`: 9 **(DEPRECATED)** -- `UDT_WALKTOXY`: 10 **(DEPRECATED)** -- `UDT_SPEED`: 11 -- `UDT_MODE`: 12 -- `UDT_AI`: 13 -- `UDT_SCOPTION`: 14 -- `UDT_SEX`: 15 -- `UDT_CLASS`: 16 -- `UDT_HAIRSTYLE`: 17 -- `UDT_HAIRCOLOR`: 18 -- `UDT_HEADBOTTOM`: 19 -- `UDT_HEADMIDDLE`: 20 -- `UDT_HEADTOP`: 21 -- `UDT_CLOTHCOLOR`: 22 -- `UDT_SHIELD`: 23 -- `UDT_WEAPON`: 24 -- `UDT_LOOKDIR`: 25 -- `UDT_CANMOVETICK`: 26 -- `UDT_STR`: 27 -- `UDT_AGI`: 28 -- `UDT_VIT`: 29 -- `UDT_INT`: 30 -- `UDT_DEX`: 31 -- `UDT_LUK`: 32 -- `UDT_ATKRANGE`: 33 -- `UDT_ATKMIN`: 34 -- `UDT_ATKMAX`: 35 -- `UDT_MATKMIN`: 36 -- `UDT_MATKMAX`: 37 -- `UDT_DEF`: 38 -- `UDT_MDEF`: 39 -- `UDT_HIT`: 40 -- `UDT_FLEE`: 41 -- `UDT_PDODGE`: 42 -- `UDT_CRIT`: 43 -- `UDT_RACE`: 44 -- `UDT_ELETYPE`: 45 -- `UDT_ELELEVEL`: 46 -- `UDT_AMOTION`: 47 -- `UDT_ADELAY`: 48 -- `UDT_DMOTION`: 49 -- `UDT_HUNGER`: 50 -- `UDT_INTIMACY`: 51 -- `UDT_LIFETIME`: 52 -- `UDT_MERC_KILLCOUNT`: 53 -- `UDT_STATADD`: 54 -- `UDT_ROBE`: 55 -- `UDT_BODY2`: 56 - ### HatEffect Constants - `HAT_EF_BLOSSOM_FLUTTERING`: 1 @@ -3994,6 +3934,7 @@ - `MAX_MENU_LENGTH`: 2048 - `MOB_CLONE_START`: 4001 - `MOB_CLONE_END`: 5000 +- `MAX_NPC_PER_MAP`: 512 ### status options @@ -4261,6 +4202,7 @@ - `MAPINFO_SIZE_X`: 2 - `MAPINFO_SIZE_Y`: 3 - `MAPINFO_ZONE`: 4 +- `MAPINFO_NPC_COUNT`: 5 ### consolemes options @@ -4455,6 +4397,67 @@ - `NST_CUSTOM`: 3 - `NST_BARTER`: 4 +### script unit data types + +- `UDT_TYPE`: 0 +- `UDT_SIZE`: 1 +- `UDT_LEVEL`: 2 +- `UDT_HP`: 3 +- `UDT_MAXHP`: 4 +- `UDT_SP`: 5 +- `UDT_MAXSP`: 6 +- `UDT_MASTERAID`: 7 +- `UDT_MASTERCID`: 8 +- `UDT_MAPIDXY`: 9 **(DEPRECATED)** +- `UDT_WALKTOXY`: 10 **(DEPRECATED)** +- `UDT_SPEED`: 11 +- `UDT_MODE`: 12 +- `UDT_AI`: 13 +- `UDT_SCOPTION`: 14 +- `UDT_SEX`: 15 +- `UDT_CLASS`: 16 +- `UDT_HAIRSTYLE`: 17 +- `UDT_HAIRCOLOR`: 18 +- `UDT_HEADBOTTOM`: 19 +- `UDT_HEADMIDDLE`: 20 +- `UDT_HEADTOP`: 21 +- `UDT_CLOTHCOLOR`: 22 +- `UDT_SHIELD`: 23 +- `UDT_WEAPON`: 24 +- `UDT_LOOKDIR`: 25 +- `UDT_CANMOVETICK`: 26 +- `UDT_STR`: 27 +- `UDT_AGI`: 28 +- `UDT_VIT`: 29 +- `UDT_INT`: 30 +- `UDT_DEX`: 31 +- `UDT_LUK`: 32 +- `UDT_ATKRANGE`: 33 +- `UDT_ATKMIN`: 34 +- `UDT_ATKMAX`: 35 +- `UDT_MATKMIN`: 36 +- `UDT_MATKMAX`: 37 +- `UDT_DEF`: 38 +- `UDT_MDEF`: 39 +- `UDT_HIT`: 40 +- `UDT_FLEE`: 41 +- `UDT_PDODGE`: 42 +- `UDT_CRIT`: 43 +- `UDT_RACE`: 44 +- `UDT_ELETYPE`: 45 +- `UDT_ELELEVEL`: 46 +- `UDT_AMOTION`: 47 +- `UDT_ADELAY`: 48 +- `UDT_DMOTION`: 49 +- `UDT_HUNGER`: 50 +- `UDT_INTIMACY`: 51 +- `UDT_LIFETIME`: 52 +- `UDT_MERC_KILLCOUNT`: 53 +- `UDT_STATPOINT`: 54 +- `UDT_ROBE`: 55 +- `UDT_BODY2`: 56 +- `UDT_GROUP`: 57 + ### Renewal - `RENEWAL`: 1 @@ -17894,6 +17897,12 @@ - `Chest_Of_Death`: 22679 - `Solo_Christmas_Gift`: 22685 - `Solo_Cookie`: 22686 +- `STR_Soul_Potion`: 22702 +- `AGI_Soul_Potion`: 22703 +- `VIT_Soul_Potion`: 22704 +- `INT_Soul_Potion`: 22705 +- `DEX_Soul_Potion`: 22706 +- `LUK_Soul_Potion`: 22707 - `Bullet_Case_Blood_`: 22737 - `Bullet_Case_Silver_`: 22738 - `Sphere_Case_Wind_`: 22739 diff --git a/doc/mob_db.txt b/doc/mob_db.txt index 29d2ab465..d62181048 100644 --- a/doc/mob_db.txt +++ b/doc/mob_db.txt @@ -63,10 +63,14 @@ mob_db: ( MvpExp: mvp experience (int, defaults to 0) MvpDrops: { AegisName: chance (string: int) + // or + AegisName: (chance, "Option Drop Group") // ... } Drops: { - AegisName: chance (string: int) + AegisName: chance (string: int) + // or + AegisName: (chance, "Option Drop Group") // ... } }, @@ -199,21 +203,55 @@ MvpExp: Base Experience given by the monster to the player who inflict more atta MvpDrops: Sets monster mvp drops list. Requires to have MvpExp to trigger. - Accepted values are AegisName as defined on item_db.conf and a chance. + There are two ways to define a drop: + 1) The first one is used for simple drops and uses the item AegisName + as defined on item_db.conf and a chance. + Format: + AegisName: chance Chance is an integer from 1 to 10000 (10000 = 100%). - Required format: - MvpDrops: { - AegisName: chance - // ... - } - When not specified, becomes false. + + 2) The second way to define a drop allows setting a random option drop + group to be used by this drop. + Format: + AegisName: (chance, "Option Drop Group") + + The item drop chance refers to the chance of dropping this item, same as chance in the first option. + the "Option Drop Group" parameter refers to an entry on option_drop_group database file. The specified + entry will be used when this item is dropped in order to add random options to the dropped equipment. + + A monster drop list may use both format for different items. + Required Format: + Drops: { + AegisName: chance + // or + AegisName: (chance, "Option Drop Group") + } + + When not specified, becomes false (no drops). Drops: Sets monster drops list. - Accepted values are AegisName as defined on item_db.conf and a chance. + There are two ways to define a drop: + 1) The first one is used for simple drops and uses the item AegisName + as defined on item_db.conf and a chance. + Format: + AegisName: chance Chance is an integer from 1 to 10000 (10000 = 100%). - Required format: - Drops: { - AegisName: chance - // ... - } - When not specified, becomes false. + + 2) The second way to define a drop allows setting a random option drop + group to be used by this drop. + Format: + AegisName: (chance, "Option Drop Group") + + The item drop chance refers to the chance of dropping this item, same as chance in the first option. + the "Option Drop Group" parameter refers to an entry on option_drop_group database file. The specified + entry will be used when this item is dropped in order to add random options to the dropped equipment. + + A monster drop list may use both format for different items. + Required Format: + Drops: { + AegisName: chance + // or + AegisName: (chance, "Option Drop Group") + } + + When not specified, becomes false (no drops). diff --git a/doc/option_drop_group.md b/doc/option_drop_group.md new file mode 100644 index 000000000..325cf9fe2 --- /dev/null +++ b/doc/option_drop_group.md @@ -0,0 +1,97 @@ +# Option Drop Group Database + +## Description +Explanation of the `db/option_drop_groups.conf` file and structure. + +This database file allows the creation of groups of random options +that will be added to certain equipments when dropped. After creating +a group in this database file, you may set up drops in `mob_db` to use +it in order to get items with these options. For more information on +adding option drop groups to `mob_db`, check `doc/mob_db.txt` documentation file. + +Each item may have up to `MAX_ITEM_OPTION` options at the same time, +in this document, each of these independent options will be called +`option slot`. One drop group will define the possibilities of random +options for each of these slots. + +## Entries Format + +``` +<Group Name Constant>: ( + { // Option Slot 1 + Rate: (int) chance of filling option slot 1 (100 = 1%) + + // Possible options for slot 1 + // min/max value : int, defaults to 0 + // chance : int, 100 = 1% if not set, will be 100%/number of possibiltiies + OptionName: value + // or + OptionName: [min value, max value] + // or + OptionName: [min value, max value, chance] + // ... (as many as you want) + }, + // ... (up to MAX_ITEM_OPTION) +), +``` + +### `Group Name Constant` +This is the group name, it is how this group is referenced in other files +(e.g. mob_db). It must be globally unique, as it is a server constant, and +must contain only letters, numbers and " _ ". + +### `Rate` +This is the chance of this option slot to drop. In other words, this is the +chance of getting this slot filled with something, where something is given +by the list of `OptionName` that follows. + +Rate is an integer value where 100 means 1%. + +### `OptionName` +Adds `OptionName` as one option that may fill this slot when it drops. + +The details of this option may be specified in one of 3 ways: + +#### `OptionName: value` +The chance of this option being picked is auto calculated (see below), +and if this option is chosen, its value will be `value`. + +#### `OptionName: [min, max]` +The chance of this option being picked is auto calculated (see below), +and if this option is chosen, its value will be a random integer between +`min` and `max` (both included). + +#### `OptionName: [min, max, chance]` +The chance of this option being picked is `chance`, and if this option is chosen, +its value will be a random integer between `min` and `max` (both included). + +#### Auto calculated chances +When chance is not specified in an option, it will be auto calculated by +the server as being `100%/num`, when `num` is the number of possibilities +in this option slot. + +For example, if you specify 3 possible options, all of them without +a `chance` defined, all of them will have 33.33% chance of being +picked (100%/3). If you set the chance of one of them to 50%, you +will have one option with 50% chance, and each of the others with +33.33% chance. + +## Example +``` +MYITEM: ( + { // Option Slot 1 + Rate: 10000 // It has 100% of chance of being filled + + // This slot may have one of the following options: + WEAPON_ATTR_WIND: 5, // WEAPON_ATTR_WIND Lv5 (33.33%) + WEAPON_ATTR_GROUND: [2, 4] // WEAPON_ATTR_GROUND Lv 2~4 (33.33%) + WEAPON_ATTR_POISON: [1, 4, 8000] // WEAPON_ATTR_POISON Lv 1~4 (80%) + }, + { // Option Slot 2 + Rate: 5000 // It has 50% of chance of being filled + + // If filled, may have one of the following options: + WEAPON_ATTR_WATER: 4 // WEAPON_ATTR_WATER Lv4 (100%) + } +) +``` diff --git a/doc/script_commands.txt b/doc/script_commands.txt index c454509ee..3bf0c7427 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -1231,7 +1231,7 @@ you have to set it back to black unless you want all the rest of the text be in that color: mes("This is ^FF0000 red ^000000 and this is ^00FF00 green, ^000000 so."); - mes(callfunc("F_MesColor", C_BLUE) +"This message is now in BLUE"); + mesf("%sThis message is now in BLUE.", F_MesColor(C_BLUE)); Notice that the text coloring is handled purely by the client. If you use non-English characters, the color codes might get screwed if they stick to @@ -1255,6 +1255,14 @@ This will allow you to visit 'Google' with the in-game browser using default dim Clicking 'Bing!' will open the in-game browser using the specified dimensions. (800x600) +If you're using client from 2013-01-30 onwards, you can also use <ITEMLINK> to show +the item's description. Gravity changed this into <ITEM> since 2015-07-29 onwards. + + mes("Bring me an <ITEM>Apple<INFO>512</INFO></ITEM>."); + mesf("Bring me an %s.", F_MesItemInfo(Apple)); + +This will show the item name and a clickable link for the item description. + --------------------------------------- *mesf("<format>"{, <param>{, <param>{, ...}}}) @@ -3144,7 +3152,8 @@ recreate these items perfectly if they are destroyed. Here's what you get: made by a specific craftsman. @inventorylist_expire[] - expire time (Unix time stamp). 0 means never expires. -@inventorylist_bound - whether it is an account bounded item or not. +@inventorylist_bound[] - whether it is an account bounded item or not. +@inventorylist_favorite[] - whether it is favorite (inside favorite tab) or not. @inventorylist_count - the number of items in these lists. This could be handy to save/restore a character's inventory, since no @@ -3402,11 +3411,12 @@ argument is omitted, it will try to use the map of the attached NPC, or the map of the attached player if the NPC can't be found. Valid <info> are: - MAPINFO_NAME name of the map - MAPINFO_ID numeric ID of the map - MAPINFO_ZONE name of the zone used by the map - MAPINFO_SIZE_X width of the map (cells on the x axis) - MAPINFO_SIZE_Y height of the map (cells on the y axis) + MAPINFO_NAME name of the map + MAPINFO_ID numeric ID of the map + MAPINFO_ZONE name of the zone used by the map + MAPINFO_SIZE_X width of the map (cells on the x axis) + MAPINFO_SIZE_Y height of the map (cells on the y axis) + MAPINFO_NPC_COUNT total number of NPC in the map Examples: getmapinfo(MAPINFO_ID, "map name"); // ID from name @@ -8542,6 +8552,18 @@ Example: --------------------------------------- +*cap_value(<number>, <min>, <max>) + +Returns the number but capped between <min> and <max>. + +Example: + // capped between 0 ~ 100 + .@value = cap_value(10, 0, 100); // .@value will be equal to 10 + .@value = cap_value(1000, 0, 100); // .@value will be equal to 100 + .@value = cap_value(-10, 3, 100); // .@value will be equal to 3 + +--------------------------------------- + *md5("<string>") Returns the md5 checksum of a number or string. @@ -10180,6 +10202,7 @@ Applicable Data Types (available as constants) - UDT_LIFETIME: LifeTime - for summons. UDT_MERC_KILLCOUNT: Kill count for mercenaries UDT_STATADD: Status Points - for NPCs. + UDT_GROUP: group id returns 0 if value could not be set, 1 if successful. @@ -10242,6 +10265,7 @@ Applicable Data types (available as constants) - UDT_INTIMACY: Intimacy Rate - for summons. UDT_LIFETIME: LifeTime - for summons. UDT_MERC_KILLCOUNT: Kill count for mercenaries. + UDT_GROUP: group id returns -1 if value could not be retrieved. @@ -10445,3 +10469,31 @@ This value always smaller or equal to MAX_INVENTORY. Size can be changed by group of functions expandInventory* --------------------------------------- + +*getunittitle(<GID>) + +Return unit title string. +Works for 20180207 main clients, 20171129 re clients, 20171130 zero clients + +--------------------------------------- + +*setunittitle(<GID>, <title>) + +Set unit title string. +Invisible for players, because current implimentation using title id only. +Works for 20180207 main clients, 20171129 re clients, 20171130 zero clients + +--------------------------------------- + +*closeroulette() + +Force close roulette window. +Works for 20141008 main clients, 20140903 re, any zero. + +--------------------------------------- +*openrefineryui() + +Opens refinery user interface for the player +returns true on success and false on failure + +--------------------------------------- |