|
@@ -11,11 +11,11 @@
|
|
|
#include "../common/mapindex.h"
|
|
|
#include "../common/db.h"
|
|
|
|
|
|
-#include "itemdb.h" // MAX_ITEMGROUP
|
|
|
-#include "status.h" // SC_MAX
|
|
|
-
|
|
|
#include <stdarg.h>
|
|
|
|
|
|
+struct npc_data;
|
|
|
+struct item_data;
|
|
|
+
|
|
|
//Uncomment to enable the Cell Stack Limit mod.
|
|
|
//It's only config is the battle_config cell_stack_limit.
|
|
|
//Only chars affected are those defined in BL_CHAR (mobs and players currently)
|
|
@@ -33,10 +33,6 @@
|
|
|
#define AREA_SIZE battle_config.area_size
|
|
|
#define DAMAGELOG_SIZE 30
|
|
|
#define LOOTITEM_SIZE 10
|
|
|
-#define MAX_SKILL_LEVEL 100
|
|
|
-#define MAX_SKILLUNITGROUP 25
|
|
|
-#define MAX_SKILLUNITGROUPTICKSET 25
|
|
|
-#define MAX_SKILLTIMERSKILL 15
|
|
|
#define MAX_MOBSKILL 40
|
|
|
#define MAX_MOB_LIST_PER_MAP 128
|
|
|
#define MAX_EVENTQUEUE 2
|
|
@@ -44,7 +40,6 @@
|
|
|
#define NATURAL_HEAL_INTERVAL 500
|
|
|
#define MAX_FLOORITEM 500000
|
|
|
#define MAX_LEVEL 99
|
|
|
-#define MAX_WALKPATH 32
|
|
|
#define MAX_DROP_PER_MAP 48
|
|
|
#define MAX_IGNORE_LIST 20 // official is 14
|
|
|
#define MAX_VENDING 12
|
|
@@ -52,9 +47,6 @@
|
|
|
#define MOBID_BARRICADEB 1905
|
|
|
#define MOBID_BARRICADEA 1906 // Undestruble
|
|
|
|
|
|
-#define MAX_PC_BONUS 10
|
|
|
-#define MAX_DUEL 1024
|
|
|
-
|
|
|
//The following system marks a different job ID system used by the map server,
|
|
|
//which makes a lot more sense than the normal one. [Skotlex]
|
|
|
//
|
|
@@ -236,630 +228,6 @@ struct block_list {
|
|
|
enum bl_type type;
|
|
|
};
|
|
|
|
|
|
-struct walkpath_data {
|
|
|
- unsigned char path_len,path_pos;
|
|
|
- unsigned char path[MAX_WALKPATH];
|
|
|
-};
|
|
|
-struct shootpath_data {
|
|
|
- int rx,ry,len;
|
|
|
- int x[MAX_WALKPATH];
|
|
|
- int y[MAX_WALKPATH];
|
|
|
-};
|
|
|
-
|
|
|
-struct skill_timerskill {
|
|
|
- int timer;
|
|
|
- int src_id;
|
|
|
- int target_id;
|
|
|
- int map;
|
|
|
- short x,y;
|
|
|
- short skill_id,skill_lv;
|
|
|
- int type; // a BF_ type (NOTE: some places use this as general-purpose storage...)
|
|
|
- int flag;
|
|
|
-};
|
|
|
-
|
|
|
-struct skill_unit_group;
|
|
|
-struct skill_unit {
|
|
|
- struct block_list bl;
|
|
|
-
|
|
|
- struct skill_unit_group *group;
|
|
|
-
|
|
|
- int limit;
|
|
|
- int val1,val2;
|
|
|
- short alive,range;
|
|
|
-};
|
|
|
-
|
|
|
-struct skill_unit_group {
|
|
|
- int src_id;
|
|
|
- int party_id;
|
|
|
- int guild_id;
|
|
|
- int map;
|
|
|
- int target_flag; //Holds BCT_* flag for battle_check_target
|
|
|
- int bl_flag; //Holds BL_* flag for map_foreachin* functions
|
|
|
- unsigned int tick;
|
|
|
- int limit,interval;
|
|
|
-
|
|
|
- short skill_id,skill_lv;
|
|
|
- int val1,val2,val3;
|
|
|
- char *valstr;
|
|
|
- int unit_id;
|
|
|
- int group_id;
|
|
|
- int unit_count,alive_count;
|
|
|
- struct skill_unit *unit;
|
|
|
- struct {
|
|
|
- unsigned ammo_consume : 1;
|
|
|
- unsigned magic_power : 1;
|
|
|
- unsigned song_dance : 2; //0x1 Song/Dance, 0x2 Ensemble
|
|
|
- } state;
|
|
|
-};
|
|
|
-struct skill_unit_group_tickset {
|
|
|
- unsigned int tick;
|
|
|
- int id;
|
|
|
-};
|
|
|
-
|
|
|
-struct unit_data {
|
|
|
- struct block_list *bl;
|
|
|
- struct walkpath_data walkpath;
|
|
|
- struct skill_timerskill *skilltimerskill[MAX_SKILLTIMERSKILL];
|
|
|
- struct skill_unit_group *skillunit[MAX_SKILLUNITGROUP];
|
|
|
- struct skill_unit_group_tickset skillunittick[MAX_SKILLUNITGROUPTICKSET];
|
|
|
- short attacktarget_lv;
|
|
|
- short to_x,to_y;
|
|
|
- short skillx,skilly;
|
|
|
- short skillid,skilllv;
|
|
|
- int skilltarget;
|
|
|
- int skilltimer;
|
|
|
- int target;
|
|
|
- int attacktimer;
|
|
|
- int walktimer;
|
|
|
- int chaserange;
|
|
|
- unsigned int attackabletime;
|
|
|
- unsigned int canact_tick;
|
|
|
- unsigned int canmove_tick;
|
|
|
- uint8 dir;
|
|
|
- unsigned char walk_count;
|
|
|
- struct {
|
|
|
- unsigned change_walk_target : 1 ;
|
|
|
- unsigned skillcastcancel : 1 ;
|
|
|
- unsigned attack_continue : 1 ;
|
|
|
- unsigned walk_easy : 1 ;
|
|
|
- unsigned running : 1;
|
|
|
- unsigned speed_changed : 1;
|
|
|
- } state;
|
|
|
-};
|
|
|
-
|
|
|
-//Basic damage info of a weapon
|
|
|
-//Required because players have two of these, one in status_data and another
|
|
|
-//for their left hand weapon.
|
|
|
-struct weapon_atk {
|
|
|
- unsigned short atk, atk2;
|
|
|
- unsigned short range;
|
|
|
- unsigned char ele;
|
|
|
-};
|
|
|
-
|
|
|
-//For holding basic status (which can be modified by status changes)
|
|
|
-struct status_data {
|
|
|
- unsigned int
|
|
|
- hp, sp,
|
|
|
- max_hp, max_sp;
|
|
|
- unsigned short
|
|
|
- str, agi, vit, int_, dex, luk,
|
|
|
- batk,
|
|
|
- matk_min, matk_max,
|
|
|
- speed,
|
|
|
- amotion, adelay, dmotion,
|
|
|
- mode;
|
|
|
- short
|
|
|
- hit, flee, cri, flee2,
|
|
|
- def2, mdef2,
|
|
|
- aspd_rate;
|
|
|
- unsigned char
|
|
|
- def_ele, ele_lv,
|
|
|
- size, race;
|
|
|
- signed char
|
|
|
- def, mdef;
|
|
|
- struct weapon_atk rhw, lhw; //Right Hand/Left Hand Weapon.
|
|
|
-};
|
|
|
-
|
|
|
-struct script_reg {
|
|
|
- int index;
|
|
|
- int data;
|
|
|
-};
|
|
|
-struct script_regstr {
|
|
|
- int index;
|
|
|
- char* data;
|
|
|
-};
|
|
|
-
|
|
|
-struct status_change_entry {
|
|
|
- int timer;
|
|
|
- int val1,val2,val3,val4;
|
|
|
-};
|
|
|
-
|
|
|
-struct status_change {
|
|
|
- unsigned int option;// effect state (bitfield)
|
|
|
- unsigned int opt3;// skill state (bitfield)
|
|
|
- unsigned short opt1;// body state
|
|
|
- unsigned short opt2;// health state (bitfield)
|
|
|
- unsigned char count;
|
|
|
- //TODO: See if it is possible to implement the following SC's without requiring extra parameters while the SC is inactive.
|
|
|
- unsigned char jb_flag; //Joint Beat type flag
|
|
|
- unsigned short mp_matk_min, mp_matk_max; //Previous matk min/max for ground spells (Amplify magic power)
|
|
|
- int sg_id; //ID of the previous Storm gust that hit you
|
|
|
- unsigned char sg_counter; //Storm gust counter (previous hits from storm gust)
|
|
|
- struct status_change_entry *data[SC_MAX];
|
|
|
-};
|
|
|
-
|
|
|
-struct s_vending {
|
|
|
- short index;
|
|
|
- short amount;
|
|
|
- unsigned int value;
|
|
|
-};
|
|
|
-
|
|
|
-struct weapon_data {
|
|
|
- int atkmods[3];
|
|
|
- // all the variables except atkmods get zero'ed in each call of status_calc_pc
|
|
|
- // NOTE: if you want to add a non-zeroed variable, you need to update the memset call
|
|
|
- // in status_calc_pc as well! All the following are automatically zero'ed. [Skotlex]
|
|
|
- int overrefine;
|
|
|
- int star;
|
|
|
- int ignore_def_ele;
|
|
|
- int ignore_def_race;
|
|
|
- int def_ratio_atk_ele;
|
|
|
- int def_ratio_atk_race;
|
|
|
- int addele[ELE_MAX];
|
|
|
- int addrace[RC_MAX];
|
|
|
- int addrace2[RC_MAX];
|
|
|
- int addsize[3];
|
|
|
-
|
|
|
- struct drain_data {
|
|
|
- short rate;
|
|
|
- short per;
|
|
|
- short value;
|
|
|
- unsigned type:1;
|
|
|
- } hp_drain[RC_MAX], sp_drain[RC_MAX];
|
|
|
-
|
|
|
- struct {
|
|
|
- short class_, rate;
|
|
|
- } add_dmg[MAX_PC_BONUS];
|
|
|
-};
|
|
|
-
|
|
|
-struct view_data {
|
|
|
- unsigned short
|
|
|
- class_,
|
|
|
- weapon,
|
|
|
- shield, //Or left-hand weapon.
|
|
|
- head_top,
|
|
|
- head_mid,
|
|
|
- head_bottom,
|
|
|
- hair_style,
|
|
|
- hair_color,
|
|
|
- cloth_color;
|
|
|
- char sex;
|
|
|
- unsigned dead_sit : 2;
|
|
|
-};
|
|
|
-
|
|
|
-//Additional regen data that only players have.
|
|
|
-struct regen_data_sub {
|
|
|
- unsigned short
|
|
|
- hp,sp;
|
|
|
-
|
|
|
- //tick accumulation before healing.
|
|
|
- struct {
|
|
|
- unsigned int hp,sp;
|
|
|
- } tick;
|
|
|
-
|
|
|
- //Regen rates (where every 1 means +100% regen)
|
|
|
- struct {
|
|
|
- unsigned char hp,sp;
|
|
|
- } rate;
|
|
|
-};
|
|
|
-
|
|
|
-struct regen_data {
|
|
|
-
|
|
|
- unsigned short flag; //Marks what stuff you may heal or not.
|
|
|
- unsigned short
|
|
|
- hp,sp,shp,ssp;
|
|
|
-
|
|
|
- //tick accumulation before healing.
|
|
|
- struct {
|
|
|
- unsigned int hp,sp,shp,ssp;
|
|
|
- } tick;
|
|
|
-
|
|
|
- //Regen rates (where every 1 means +100% regen)
|
|
|
- struct {
|
|
|
- unsigned char
|
|
|
- hp,sp,shp,ssp;
|
|
|
- } rate;
|
|
|
-
|
|
|
- struct {
|
|
|
- unsigned walk:1; //Can you regen even when walking?
|
|
|
- unsigned gc:1; //Tags when you should have double regen due to GVG castle
|
|
|
- unsigned overweight :2; //overweight state (1: 50%, 2: 90%)
|
|
|
- unsigned block :2; //Block regen flag (1: Hp, 2: Sp)
|
|
|
- } state;
|
|
|
-
|
|
|
- //skill-regen, sitting-skill-regen (since not all chars with regen need it)
|
|
|
- struct regen_data_sub *sregen, *ssregen;
|
|
|
-};
|
|
|
-
|
|
|
-struct party_member_data {
|
|
|
- struct map_session_data *sd;
|
|
|
- unsigned int hp; //For HP,x,y refreshing.
|
|
|
- unsigned short x, y;
|
|
|
-};
|
|
|
-
|
|
|
-struct party_data {
|
|
|
- struct party party;
|
|
|
- struct party_member_data data[MAX_PARTY];
|
|
|
- uint8 itemc; //For item distribution, position of last picker in party
|
|
|
- struct {
|
|
|
- unsigned monk : 1; //There's at least one monk in party?
|
|
|
- unsigned sg : 1; //There's at least one Star Gladiator in party?
|
|
|
- unsigned snovice :1; //There's a Super Novice
|
|
|
- unsigned tk : 1; //There's a taekwon
|
|
|
- } state;
|
|
|
-};
|
|
|
-
|
|
|
-struct npc_data;
|
|
|
-struct pet_db;
|
|
|
-struct homunculus_db; //[orn]
|
|
|
-struct item_data;
|
|
|
-struct square;
|
|
|
-
|
|
|
-struct map_session_data {
|
|
|
- struct block_list bl;
|
|
|
- struct unit_data ud;
|
|
|
- struct view_data vd;
|
|
|
- struct status_data base_status, battle_status;
|
|
|
- struct status_change sc;
|
|
|
- struct regen_data regen;
|
|
|
- struct regen_data_sub sregen, ssregen;
|
|
|
- //NOTE: When deciding to add a flag to state or special_state, take into consideration that state is preserved in
|
|
|
- //status_calc_pc, while special_state is recalculated in each call. [Skotlex]
|
|
|
- struct {
|
|
|
- unsigned active : 1; //Marks active player (not active is logging in/out, or changing map servers)
|
|
|
- unsigned menu_or_input : 1;// if a script is waiting for feedback from the player
|
|
|
- unsigned dead_sit : 2;
|
|
|
- unsigned lr_flag : 2;
|
|
|
- unsigned connect_new : 1;
|
|
|
- unsigned arrow_atk : 1;
|
|
|
- unsigned skill_flag : 1;
|
|
|
- unsigned gangsterparadise : 1;
|
|
|
- unsigned rest : 1;
|
|
|
- unsigned storage_flag : 2; //0: closed, 1: Normal Storage open, 2: guild storage open [Skotlex]
|
|
|
- unsigned snovice_call_flag : 2; //Summon Angel (stage 1~3)
|
|
|
- unsigned snovice_dead_flag : 2; //Explosion spirits on death: 0 off, 1 active, 2 used.
|
|
|
- unsigned abra_flag : 1; // Abracadabra bugfix by Aru
|
|
|
- unsigned autotrade : 1; //By Fantik
|
|
|
- unsigned reg_dirty : 3; //By Skotlex (marks whether registry variables have been saved or not yet)
|
|
|
- unsigned showdelay :1;
|
|
|
- unsigned showexp :1;
|
|
|
- unsigned showzeny :1;
|
|
|
- unsigned mainchat :1; //[LuzZza]
|
|
|
- unsigned noask :1; // [LuzZza]
|
|
|
- unsigned trading :1; //[Skotlex] is 1 only after a trade has started.
|
|
|
- unsigned deal_locked :2; //1: Clicked on OK. 2: Clicked on TRADE
|
|
|
- unsigned monster_ignore :1; // for monsters to ignore a character [Valaris] [zzo]
|
|
|
- unsigned size :2; // for tiny/large types
|
|
|
- unsigned night :1; //Holds whether or not the player currently has the SI_NIGHT effect on. [Skotlex]
|
|
|
- unsigned blockedmove :1;
|
|
|
- unsigned using_fake_npc :1;
|
|
|
- unsigned rewarp :1; //Signals that a player should warp as soon as he is done loading a map. [Skotlex]
|
|
|
- unsigned killer : 1;
|
|
|
- unsigned killable : 1;
|
|
|
- unsigned doridori : 1;
|
|
|
- unsigned ignoreAll : 1;
|
|
|
- unsigned short autoloot;
|
|
|
- unsigned short autolootid; // [Zephyrus]
|
|
|
- unsigned noks : 3; // [Zeph Kill Steal Protection]
|
|
|
- bool changemap;
|
|
|
- struct guild *gmaster_flag;
|
|
|
- } state;
|
|
|
- struct {
|
|
|
- unsigned char no_weapon_damage, no_magic_damage, no_misc_damage;
|
|
|
- unsigned restart_full_recover : 1;
|
|
|
- unsigned no_castcancel : 1;
|
|
|
- unsigned no_castcancel2 : 1;
|
|
|
- unsigned no_sizefix : 1;
|
|
|
- unsigned no_gemstone : 1;
|
|
|
- unsigned intravision : 1; // Maya Purple Card effect [DracoRPG]
|
|
|
- unsigned perfect_hiding : 1; // [Valaris]
|
|
|
- unsigned no_knockback : 1;
|
|
|
- unsigned bonus_coma : 1;
|
|
|
- } special_state;
|
|
|
- int login_id1, login_id2;
|
|
|
- unsigned short class_; //This is the internal job ID used by the map server to simplify comparisons/queries/etc. [Skotlex]
|
|
|
-
|
|
|
- int packet_ver; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04, 11: 21sept04, 12: 18oct04, 13: 25oct04 ... 18
|
|
|
- struct mmo_charstatus status;
|
|
|
- struct registry save_reg;
|
|
|
-
|
|
|
- struct item_data* inventory_data[MAX_INVENTORY]; // direct pointers to itemdb entries (faster than doing item_id lookups)
|
|
|
- short equip_index[11];
|
|
|
- unsigned int weight,max_weight;
|
|
|
- int cart_weight,cart_num;
|
|
|
- int fd;
|
|
|
- unsigned short mapindex;
|
|
|
- unsigned short prev_speed,prev_adelay;
|
|
|
- unsigned char head_dir; //0: Look forward. 1: Look right, 2: Look left.
|
|
|
- unsigned int client_tick;
|
|
|
- int npc_id,areanpc_id,npc_shopid;
|
|
|
- int npc_item_flag; //Marks the npc_id with which you can use items during interactions with said npc (see script command enable_itemuse)
|
|
|
- int npc_menu;
|
|
|
- int npc_amount;
|
|
|
- struct script_state *st;
|
|
|
- char npc_str[CHATBOX_SIZE]; // for passing npc input box text to script engine
|
|
|
- int npc_timer_id; //For player attached npc timers. [Skotlex]
|
|
|
- unsigned int chatID;
|
|
|
- time_t idletime;
|
|
|
-
|
|
|
- struct{
|
|
|
- char name[NAME_LENGTH];
|
|
|
- } ignore[MAX_IGNORE_LIST];
|
|
|
-
|
|
|
- int followtimer; // [MouseJstr]
|
|
|
- int followtarget;
|
|
|
-
|
|
|
- time_t emotionlasttime; // to limit flood with emotion packets
|
|
|
-
|
|
|
- short skillitem,skillitemlv;
|
|
|
- short skillid_old,skilllv_old;
|
|
|
- short skillid_dance,skilllv_dance;
|
|
|
- char blockskill[MAX_SKILL]; // [celest]
|
|
|
- int cloneskill_id;
|
|
|
- int menuskill_id, menuskill_val;
|
|
|
-
|
|
|
- int invincible_timer;
|
|
|
- unsigned int canlog_tick;
|
|
|
- unsigned int canuseitem_tick; // [Skotlex]
|
|
|
- unsigned int cantalk_tick;
|
|
|
- unsigned int cansendmail_tick; // [Mail System Flood Protection]
|
|
|
- unsigned int ks_floodprotect_tick; // [Kill Steal Protection]
|
|
|
-
|
|
|
- short weapontype1,weapontype2;
|
|
|
- short disguise; // [Valaris]
|
|
|
-
|
|
|
- struct weapon_data right_weapon, left_weapon;
|
|
|
-
|
|
|
- // here start arrays to be globally zeroed at the beginning of status_calc_pc()
|
|
|
- int param_bonus[6],param_equip[6]; //Stores card/equipment bonuses.
|
|
|
- int subele[ELE_MAX];
|
|
|
- int subrace[RC_MAX];
|
|
|
- int subrace2[RC_MAX];
|
|
|
- int subsize[3];
|
|
|
- int reseff[SC_COMMON_MAX-SC_COMMON_MIN+1];
|
|
|
- int weapon_coma_ele[ELE_MAX];
|
|
|
- int weapon_coma_race[RC_MAX];
|
|
|
- int weapon_atk[16];
|
|
|
- int weapon_atk_rate[16];
|
|
|
- int arrow_addele[ELE_MAX];
|
|
|
- int arrow_addrace[RC_MAX];
|
|
|
- int arrow_addsize[3];
|
|
|
- int magic_addele[ELE_MAX];
|
|
|
- int magic_addrace[RC_MAX];
|
|
|
- int magic_addsize[3];
|
|
|
- int critaddrace[RC_MAX];
|
|
|
- int expaddrace[RC_MAX];
|
|
|
- int ignore_mdef[RC_MAX];
|
|
|
- int itemgrouphealrate[MAX_ITEMGROUP];
|
|
|
- short sp_gain_race[RC_MAX];
|
|
|
- // zeroed arrays end here.
|
|
|
- // zeroed structures start here
|
|
|
- struct s_autospell{
|
|
|
- short id, lv, rate, card_id, flag;
|
|
|
- } autospell[15], autospell2[15];
|
|
|
- struct s_addeffect{
|
|
|
- short id, rate, arrow_rate;
|
|
|
- unsigned char flag;
|
|
|
- } addeff[MAX_PC_BONUS], addeff2[MAX_PC_BONUS];
|
|
|
- struct { //skillatk raises bonus dmg% of skills, skillheal increases heal%, skillblown increases bonus blewcount for some skills.
|
|
|
- unsigned short id;
|
|
|
- short val;
|
|
|
- } skillatk[MAX_PC_BONUS], skillheal[5], skillblown[MAX_PC_BONUS], skillcast[MAX_PC_BONUS];
|
|
|
- struct {
|
|
|
- short value;
|
|
|
- int rate;
|
|
|
- int tick;
|
|
|
- } hp_loss, sp_loss, hp_regen, sp_regen;
|
|
|
- struct {
|
|
|
- short class_, rate;
|
|
|
- } add_def[MAX_PC_BONUS], add_mdef[MAX_PC_BONUS],
|
|
|
- add_mdmg[MAX_PC_BONUS];
|
|
|
- struct s_add_drop {
|
|
|
- short id, group;
|
|
|
- int race, rate;
|
|
|
- } add_drop[MAX_PC_BONUS];
|
|
|
- struct {
|
|
|
- int nameid;
|
|
|
- int rate;
|
|
|
- } itemhealrate[MAX_PC_BONUS];
|
|
|
- // zeroed structures end here
|
|
|
- // manually zeroed structures start here.
|
|
|
- struct s_autoscript {
|
|
|
- unsigned short rate, flag;
|
|
|
- struct script_code *script;
|
|
|
- } autoscript[10], autoscript2[10]; //Auto script on attack, when attacked
|
|
|
- // manually zeroed structures end here.
|
|
|
- // zeroed vars start here.
|
|
|
- int arrow_atk,arrow_ele,arrow_cri,arrow_hit;
|
|
|
- int nsshealhp,nsshealsp;
|
|
|
- int critical_def,double_rate;
|
|
|
- int long_attack_atk_rate; //Long range atk rate, not weapon based. [Skotlex]
|
|
|
- int near_attack_def_rate,long_attack_def_rate,magic_def_rate,misc_def_rate;
|
|
|
- int ignore_mdef_ele;
|
|
|
- int ignore_mdef_race;
|
|
|
- int perfect_hit;
|
|
|
- int perfect_hit_add;
|
|
|
- int get_zeny_rate;
|
|
|
- int get_zeny_num; //Added Get Zeny Rate [Skotlex]
|
|
|
- int double_add_rate;
|
|
|
- int short_weapon_damage_return,long_weapon_damage_return;
|
|
|
- int magic_damage_return; // AppleGirl Was Here
|
|
|
- int random_attack_increase_add,random_attack_increase_per; // [Valaris]
|
|
|
- int break_weapon_rate,break_armor_rate;
|
|
|
- int crit_atk_rate;
|
|
|
- int classchange; // [Valaris]
|
|
|
- int speed_add_rate, aspd_add;
|
|
|
- unsigned int setitem_hash, setitem_hash2; //Split in 2 because shift operations only work on int ranges. [Skotlex]
|
|
|
-
|
|
|
- short splash_range, splash_add_range;
|
|
|
- short add_steal_rate;
|
|
|
- short sp_gain_value, hp_gain_value;
|
|
|
- short sp_vanish_rate;
|
|
|
- short sp_vanish_per;
|
|
|
- unsigned short unbreakable; // chance to prevent ANY equipment breaking [celest]
|
|
|
- unsigned short unbreakable_equip; //100% break resistance on certain equipment
|
|
|
- unsigned short unstripable_equip;
|
|
|
-
|
|
|
- // zeroed vars end here.
|
|
|
-
|
|
|
- int castrate,delayrate,hprate,sprate,dsprate;
|
|
|
- int atk_rate;
|
|
|
- int speed_rate,hprecov_rate,sprecov_rate;
|
|
|
- int matk_rate;
|
|
|
- int critical_rate,hit_rate,flee_rate,flee2_rate,def_rate,def2_rate,mdef_rate,mdef2_rate;
|
|
|
-
|
|
|
- int itemid;
|
|
|
- short itemindex; //Used item's index in sd->inventory [Skotlex]
|
|
|
-
|
|
|
- short catch_target_class; // pet catching, stores a pet class to catch (short now) [zzo]
|
|
|
-
|
|
|
- short spiritball, spiritball_old;
|
|
|
- int spirit_timer[MAX_SKILL_LEVEL];
|
|
|
-
|
|
|
- unsigned char potion_success_counter; //Potion successes in row counter
|
|
|
- unsigned char mission_count; //Stores the bounty kill count for TK_MISSION
|
|
|
- short mission_mobid; //Stores the target mob_id for TK_MISSION
|
|
|
- int die_counter; //Total number of times you've died
|
|
|
- int devotion[5]; //Stores the account IDs of chars devoted to.
|
|
|
- int reg_num; //Number of registries (type numeric)
|
|
|
- int regstr_num; //Number of registries (type string)
|
|
|
-
|
|
|
- struct script_reg *reg;
|
|
|
- struct script_regstr *regstr;
|
|
|
-
|
|
|
- int trade_partner;
|
|
|
- struct {
|
|
|
- struct {
|
|
|
- short index, amount;
|
|
|
- } item[10];
|
|
|
- int zeny, weight;
|
|
|
- } deal;
|
|
|
-
|
|
|
- int party_invite,party_invite_account;
|
|
|
- int adopt_invite; // Adoption
|
|
|
-
|
|
|
- int guild_invite,guild_invite_account;
|
|
|
- int guild_emblem_id,guild_alliance,guild_alliance_account;
|
|
|
- short guild_x,guild_y; // For guildmate position display. [Skotlex] should be short [zzo]
|
|
|
- int guildspy; // [Syrus22]
|
|
|
- int partyspy; // [Syrus22]
|
|
|
-
|
|
|
- int vender_id;
|
|
|
- int vend_num;
|
|
|
- char message[MESSAGE_SIZE];
|
|
|
- struct s_vending vending[MAX_VENDING];
|
|
|
-
|
|
|
- struct pet_data *pd;
|
|
|
- struct homun_data *hd; // [blackhole89]
|
|
|
-
|
|
|
- struct{
|
|
|
- int m; //-1 - none, other: map index corresponding to map name.
|
|
|
- unsigned short index; //map index
|
|
|
- }feel_map[3];// 0 - Sun; 1 - Moon; 2 - Stars
|
|
|
- short hate_mob[3];
|
|
|
-
|
|
|
- int pvp_timer;
|
|
|
- short pvp_point;
|
|
|
- unsigned short pvp_rank, pvp_lastusers;
|
|
|
- unsigned short pvp_won, pvp_lost;
|
|
|
-
|
|
|
- char eventqueue[MAX_EVENTQUEUE][50];
|
|
|
- int eventtimer[MAX_EVENTTIMER];
|
|
|
- unsigned short eventcount; // [celest]
|
|
|
-
|
|
|
- unsigned char change_level; // [celest]
|
|
|
-
|
|
|
- char fakename[NAME_LENGTH]; // fake names [Valaris]
|
|
|
-
|
|
|
- int duel_group; // duel vars [LuzZza]
|
|
|
- int duel_invite;
|
|
|
-
|
|
|
- char away_message[128]; // [LuzZza]
|
|
|
-
|
|
|
- int cashPoints, kafraPoints;
|
|
|
-
|
|
|
- // Auction System [Zephyrus]
|
|
|
- struct {
|
|
|
- int index, amount;
|
|
|
- } auction;
|
|
|
-
|
|
|
- // Mail System [Zephyrus]
|
|
|
- struct {
|
|
|
- short nameid;
|
|
|
- int index, amount, zeny;
|
|
|
- struct mail_data inbox;
|
|
|
- } mail;
|
|
|
-};
|
|
|
-
|
|
|
-struct npc_timerevent_list {
|
|
|
- int timer,pos;
|
|
|
-};
|
|
|
-struct npc_label_list {
|
|
|
- char name[NAME_LENGTH];
|
|
|
- int pos;
|
|
|
-};
|
|
|
-struct npc_item_list {
|
|
|
- unsigned int nameid,value;
|
|
|
-};
|
|
|
-struct npc_data {
|
|
|
- struct block_list bl;
|
|
|
- struct unit_data ud; //Because they need to be able to move....
|
|
|
- struct view_data *vd;
|
|
|
- struct status_change sc; //They can't have status changes, but.. they want the visual opt values.
|
|
|
- struct npc_data *master_nd;
|
|
|
- short class_;
|
|
|
- short speed;
|
|
|
- char name[NAME_LENGTH+1];// display name
|
|
|
- char exname[NAME_LENGTH+1];// unique npc name
|
|
|
- int chat_id;
|
|
|
- unsigned int next_walktime;
|
|
|
-
|
|
|
- void* chatdb; // pointer to a npc_parse struct (see npc_chat.c)
|
|
|
- enum npc_subtype subtype;
|
|
|
- union {
|
|
|
- struct {
|
|
|
- struct script_code *script;
|
|
|
- short xs,ys; // OnTouch area radius
|
|
|
- int guild_id;
|
|
|
- int timer,timerid,timeramount,rid;
|
|
|
- unsigned int timertick;
|
|
|
- struct npc_timerevent_list *timer_event;
|
|
|
- int label_list_num;
|
|
|
- struct npc_label_list *label_list;
|
|
|
- int src_id;
|
|
|
- } scr;
|
|
|
- struct {
|
|
|
- struct npc_item_list* shop_item;
|
|
|
- int count;
|
|
|
- } shop;
|
|
|
- struct {
|
|
|
- short xs,ys; // OnTouch area radius
|
|
|
- short x,y; // destination coords
|
|
|
- unsigned short mapindex; // destination map
|
|
|
- } warp;
|
|
|
- } u;
|
|
|
-};
|
|
|
-
|
|
|
-//For quick linking to a guardian's info. [Skotlex]
|
|
|
-struct guardian_data {
|
|
|
- int number; //0-MAX_GUARDIANS-1 = Guardians. MAX_GUARDIANS = Emperium.
|
|
|
- int guild_id;
|
|
|
- int emblem_id;
|
|
|
- int guardup_lv; //Level of GD_GUARDUP skill.
|
|
|
- char guild_name[NAME_LENGTH];
|
|
|
- struct guild_castle* castle;
|
|
|
-};
|
|
|
-
|
|
|
// Mob List Held in memory for Dynamic Mobs [Wizputer]
|
|
|
// Expanded to specify all mob-related spawn data by [Skotlex]
|
|
|
struct spawn_data {
|
|
@@ -879,139 +247,6 @@ struct spawn_data {
|
|
|
};
|
|
|
|
|
|
|
|
|
-struct mob_data {
|
|
|
- struct block_list bl;
|
|
|
- struct unit_data ud;
|
|
|
- struct view_data *vd;
|
|
|
- struct status_data status, *base_status; //Second one is in case of leveling up mobs, or tiny/large mobs.
|
|
|
- struct status_change sc;
|
|
|
- struct mob_db *db; //For quick data access (saves doing mob_db(md->class_) all the time) [Skotlex]
|
|
|
- struct barricade_data *barricade;
|
|
|
- char name[NAME_LENGTH];
|
|
|
- struct {
|
|
|
- unsigned size : 2; //Small/Big monsters.
|
|
|
- unsigned ai : 2; //Special ai for summoned monsters.
|
|
|
- //0: Normal mob.
|
|
|
- //1: Standard summon, attacks mobs.
|
|
|
- //2: Alchemist Marine Sphere
|
|
|
- //3: Alchemist Summon Flora
|
|
|
- } special_state; //Special mob information that does not needs to be zero'ed on mob respawn.
|
|
|
- struct {
|
|
|
- unsigned skillstate : 8;
|
|
|
- unsigned aggressive : 1; //Signals whether the mob AI is in aggressive mode or reactive mode. [Skotlex]
|
|
|
- unsigned char steal_flag; //number of steal tries (to prevent steal exploit on mobs with few items) [Lupus]
|
|
|
- unsigned steal_coin_flag : 1;
|
|
|
- unsigned soul_change_flag : 1; // Celest
|
|
|
- unsigned alchemist: 1;
|
|
|
- unsigned no_random_walk: 1;
|
|
|
- unsigned killer: 1;
|
|
|
- unsigned spotted: 1;
|
|
|
- unsigned char attacked_count; //For rude attacked.
|
|
|
- int provoke_flag; // Celest
|
|
|
- } state;
|
|
|
- struct guardian_data* guardian_data;
|
|
|
- struct {
|
|
|
- int id;
|
|
|
- unsigned int dmg;
|
|
|
- unsigned flag : 1; //0: Normal. 1: Homunc exp
|
|
|
- } dmglog[DAMAGELOG_SIZE];
|
|
|
- struct spawn_data *spawn; //Spawn data.
|
|
|
- struct item *lootitem;
|
|
|
- short class_;
|
|
|
- unsigned int tdmg; //Stores total damage given to the mob, for exp calculations. [Skotlex]
|
|
|
- int level;
|
|
|
- int target_id,attacked_id;
|
|
|
-
|
|
|
- unsigned int next_walktime,last_thinktime,last_linktime,last_pcneartime;
|
|
|
- short move_fail_count;
|
|
|
- short lootitem_count;
|
|
|
- short min_chase;
|
|
|
-
|
|
|
- int deletetimer;
|
|
|
- int master_id,master_dist;
|
|
|
-
|
|
|
- struct npc_data *nd;
|
|
|
- unsigned short callback_flag;
|
|
|
-
|
|
|
- short skillidx;
|
|
|
- unsigned int skilldelay[MAX_MOBSKILL];
|
|
|
- char npc_event[50];
|
|
|
-};
|
|
|
-
|
|
|
-/* [blackhole89] */
|
|
|
-struct homun_data {
|
|
|
- struct block_list bl;
|
|
|
- struct unit_data ud;
|
|
|
- struct view_data *vd;
|
|
|
- struct status_data base_status, battle_status;
|
|
|
- struct status_change sc;
|
|
|
- struct regen_data regen;
|
|
|
- struct s_homunculus_db *homunculusDB; //[orn]
|
|
|
- struct s_homunculus homunculus ; //[orn]
|
|
|
-
|
|
|
- struct map_session_data *master; //pointer back to its master
|
|
|
- int hungry_timer; //[orn]
|
|
|
- unsigned int exp_next;
|
|
|
- char blockskill[MAX_SKILL]; // [orn]
|
|
|
-};
|
|
|
-
|
|
|
-struct pet_data {
|
|
|
- struct block_list bl;
|
|
|
- struct unit_data ud;
|
|
|
- struct view_data vd;
|
|
|
- struct s_pet pet;
|
|
|
- struct status_data status;
|
|
|
- struct mob_db *db;
|
|
|
- struct s_pet_db *petDB;
|
|
|
- int pet_hungry_timer;
|
|
|
- int target_id;
|
|
|
- struct {
|
|
|
- unsigned skillbonus : 1;
|
|
|
- } state;
|
|
|
- int move_fail_count;
|
|
|
- unsigned int next_walktime,last_thinktime;
|
|
|
- short rate_fix; //Support rate as modified by intimacy (1000 = 100%) [Skotlex]
|
|
|
-
|
|
|
- struct pet_recovery { //Stat recovery
|
|
|
- unsigned short type; //Status Change id
|
|
|
- unsigned short delay; //How long before curing (secs).
|
|
|
- int timer;
|
|
|
- } *recovery; //[Valaris] / Reimplemented by [Skotlex]
|
|
|
-
|
|
|
- struct pet_bonus {
|
|
|
- unsigned short type; //bStr, bVit?
|
|
|
- unsigned short val; //Qty
|
|
|
- unsigned short duration; //in secs
|
|
|
- unsigned short delay; //Time before recasting (secs)
|
|
|
- int timer;
|
|
|
- } *bonus; //[Valaris] / Reimplemented by [Skotlex]
|
|
|
-
|
|
|
- struct pet_skill_attack { //Attack Skill
|
|
|
- unsigned short id;
|
|
|
- unsigned short lv;
|
|
|
- unsigned short div_; //0 = Normal skill. >0 = Fixed damage (lv), fixed div_.
|
|
|
- unsigned short rate; //Base chance of skill ocurrance (10 = 10% of attacks)
|
|
|
- unsigned short bonusrate; //How being 100% loyal affects cast rate (10 = At 1000 intimacy->rate+10%
|
|
|
- } *a_skill; //[Skotlex]
|
|
|
-
|
|
|
- struct pet_skill_support { //Support Skill
|
|
|
- unsigned short id;
|
|
|
- unsigned short lv;
|
|
|
- unsigned short hp; //Max HP% for skill to trigger (50 -> 50% for Magnificat)
|
|
|
- unsigned short sp; //Max SP% for skill to trigger (100 = no check)
|
|
|
- unsigned short delay; //Time (secs) between being able to recast.
|
|
|
- int timer;
|
|
|
- } *s_skill; //[Skotlex]
|
|
|
-
|
|
|
- struct pet_loot {
|
|
|
- struct item *item;
|
|
|
- unsigned short count;
|
|
|
- unsigned short weight;
|
|
|
- unsigned short max;
|
|
|
- } *loot; //[Valaris] / Rewritten by [Skotlex]
|
|
|
-
|
|
|
- struct map_session_data *msd;
|
|
|
-};
|
|
|
|
|
|
struct flooritem_data {
|
|
|
struct block_list bl;
|
|
@@ -1022,19 +257,6 @@ struct flooritem_data {
|
|
|
struct item item_data;
|
|
|
};
|
|
|
|
|
|
-struct chat_data {
|
|
|
- struct block_list bl; // data for this map object
|
|
|
- char title[CHATROOM_TITLE_SIZE]; // room title
|
|
|
- char pass[CHATROOM_PASS_SIZE]; // password
|
|
|
- bool pub; // private/public flag
|
|
|
- uint8 users; // current user count
|
|
|
- uint8 limit; // join limit
|
|
|
- uint8 trigger; // number of users needed to trigger event
|
|
|
- struct map_session_data* usersd[20];
|
|
|
- struct block_list* owner;
|
|
|
- char npc_event[50];
|
|
|
-};
|
|
|
-
|
|
|
enum _sp {
|
|
|
SP_SPEED,SP_BASEEXP,SP_JOBEXP,SP_KARMA,SP_MANNER,SP_HP,SP_MAXHP,SP_SP, // 0-7
|
|
|
SP_MAXSP,SP_STATUSPOINT,SP_0a,SP_BASELEVEL,SP_SKILLPOINT,SP_STR,SP_AGI,SP_VIT, // 8-15
|