From 4de6b8e083f5e14ebc5a453af7efce341852be7a Mon Sep 17 00:00:00 2001 From: shennetsind Date: Sun, 29 Sep 2013 15:42:33 -0300 Subject: HPM: Status.c Completed Fully Interfaced. Moved missing vars and declarations of interest into the interface. Removed a couple things from pc.h into mmo.h due to circular dependence. Signed-off-by: shennetsind --- src/common/mmo.h | 51 +++ src/map/clif.c | 4 +- src/map/pc.h | 50 --- src/map/status.c | 1290 +++++++++++++++++++++++++++--------------------------- src/map/status.h | 139 ++++-- 5 files changed, 800 insertions(+), 734 deletions(-) (limited to 'src') diff --git a/src/common/mmo.h b/src/common/mmo.h index f49a859e0..205cf8425 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -777,12 +777,63 @@ enum { JOB_MAX, }; +//Total number of classes (for data storage) +#define CLASS_COUNT (JOB_MAX - JOB_NOVICE_HIGH + JOB_MAX_BASIC) + enum { SEX_FEMALE = 0, SEX_MALE, SEX_SERVER }; +enum weapon_type { + W_FIST, //Bare hands + W_DAGGER, //1 + W_1HSWORD, //2 + W_2HSWORD, //3 + W_1HSPEAR, //4 + W_2HSPEAR, //5 + W_1HAXE, //6 + W_2HAXE, //7 + W_MACE, //8 + W_2HMACE, //9 (unused) + W_STAFF, //10 + W_BOW, //11 + W_KNUCKLE, //12 + W_MUSICAL, //13 + W_WHIP, //14 + W_BOOK, //15 + W_KATAR, //16 + W_REVOLVER, //17 + W_RIFLE, //18 + W_GATLING, //19 + W_SHOTGUN, //20 + W_GRENADE, //21 + W_HUUMA, //22 + W_2HSTAFF, //23 + MAX_WEAPON_TYPE, + // dual-wield constants + W_DOUBLE_DD, // 2 daggers + W_DOUBLE_SS, // 2 swords + W_DOUBLE_AA, // 2 axes + W_DOUBLE_DS, // dagger + sword + W_DOUBLE_DA, // dagger + axe + W_DOUBLE_SA, // sword + axe +}; + +enum ammo_type { + A_ARROW = 1, + A_DAGGER, //2 + A_BULLET, //3 + A_SHELL, //4 + A_GRENADE, //5 + A_SHURIKEN, //6 + A_KUNAI, //7 + A_CANNONBALL, //8 + A_THROWWEAPON //9 +}; + + // sanity checks... #if MAX_ZENY > INT_MAX #error MAX_ZENY is too big diff --git a/src/map/clif.c b/src/map/clif.c index e260c3a1b..11cce1a2d 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1322,7 +1322,7 @@ int clif_spawn(struct block_list *bl) if( sd->bg_id && maplist[sd->bl.m].flag.battleground ) clif->sendbgemblem_area(sd); for( i = 0; i < sd->sc_display_count; i++ ) { - clif->sc_load(&sd->bl, sd->bl.id,AREA,StatusIconChangeTable[sd->sc_display[i]->type],sd->sc_display[i]->val1,sd->sc_display[i]->val2,sd->sc_display[i]->val3); + clif->sc_load(&sd->bl, sd->bl.id,AREA,status->IconChangeTable[sd->sc_display[i]->type],sd->sc_display[i]->val1,sd->sc_display[i]->val2,sd->sc_display[i]->val3); } for(i = 1; i < 5; i++){ if( sd->charm[i] > 0 ) @@ -4283,7 +4283,7 @@ void clif_getareachar_pc(struct map_session_data* sd,struct map_session_data* ds clif->charm_single(sd->fd, dstsd, i); } for( i = 0; i < dstsd->sc_display_count; i++ ) { - clif->sc_load(&sd->bl,dstsd->bl.id,SELF,StatusIconChangeTable[dstsd->sc_display[i]->type],dstsd->sc_display[i]->val1,dstsd->sc_display[i]->val2,dstsd->sc_display[i]->val3); + clif->sc_load(&sd->bl,dstsd->bl.id,SELF,status->IconChangeTable[dstsd->sc_display[i]->type],dstsd->sc_display[i]->val1,dstsd->sc_display[i]->val2,dstsd->sc_display[i]->val3); } if( (sd->status.party_id && dstsd->status.party_id == sd->status.party_id) || //Party-mate, or hpdisp setting. (sd->bg_id && sd->bg_id == dstsd->bg_id) || //BattleGround diff --git a/src/map/pc.h b/src/map/pc.h index d2866b9a9..bf2f9d7c5 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -524,56 +524,6 @@ struct map_session_data { }; -//Total number of classes (for data storage) -#define CLASS_COUNT (JOB_MAX - JOB_NOVICE_HIGH + JOB_MAX_BASIC) - -enum weapon_type { - W_FIST, //Bare hands - W_DAGGER, //1 - W_1HSWORD, //2 - W_2HSWORD, //3 - W_1HSPEAR, //4 - W_2HSPEAR, //5 - W_1HAXE, //6 - W_2HAXE, //7 - W_MACE, //8 - W_2HMACE, //9 (unused) - W_STAFF, //10 - W_BOW, //11 - W_KNUCKLE, //12 - W_MUSICAL, //13 - W_WHIP, //14 - W_BOOK, //15 - W_KATAR, //16 - W_REVOLVER, //17 - W_RIFLE, //18 - W_GATLING, //19 - W_SHOTGUN, //20 - W_GRENADE, //21 - W_HUUMA, //22 - W_2HSTAFF, //23 - MAX_WEAPON_TYPE, - // dual-wield constants - W_DOUBLE_DD, // 2 daggers - W_DOUBLE_SS, // 2 swords - W_DOUBLE_AA, // 2 axes - W_DOUBLE_DS, // dagger + sword - W_DOUBLE_DA, // dagger + axe - W_DOUBLE_SA, // sword + axe -}; - -enum ammo_type { - A_ARROW = 1, - A_DAGGER, //2 - A_BULLET, //3 - A_SHELL, //4 - A_GRENADE, //5 - A_SHURIKEN, //6 - A_KUNAI, //7 - A_CANNONBALL, //8 - A_THROWWEAPON //9 -}; - //Equip position constants enum equip_pos { EQP_HEAD_LOW = 0x0001, diff --git a/src/map/status.c b/src/map/status.c index dbce2f7f4..978380a20 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -40,39 +40,7 @@ #include #include -//Regen related flags. -enum e_regen -{ - RGN_HP = 0x01, - RGN_SP = 0x02, - RGN_SHP = 0x04, - RGN_SSP = 0x08, -}; - -static int max_weight_base[CLASS_COUNT]; -static int hp_coefficient[CLASS_COUNT]; -static int hp_coefficient2[CLASS_COUNT]; -static int hp_sigma_val[CLASS_COUNT][MAX_LEVEL+1]; -static int sp_coefficient[CLASS_COUNT]; -#ifdef RENEWAL_ASPD -static int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE+1]; -#else -static int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE]; //[blackhole89] -#endif - -// bonus values and upgrade chances for refining equipment -static struct { - int chance[MAX_REFINE]; // success chance - int bonus[MAX_REFINE]; // cumulative fixed bonus damage - int randombonus_max[MAX_REFINE]; // cumulative maximum random bonus damage -} refine_info[REFINE_TYPE_MAX]; - -static int atkmods[3][MAX_WEAPON_TYPE]; //ATK weapon modification for size (size_fix.txt) -static char job_bonus[CLASS_COUNT][MAX_LEVEL]; -static sc_conf_type sc_conf[SC_MAX]; - -static struct eri *sc_data_ers; //For sc_data entries -static struct status_data dummy_status; +struct status_interface status_s; /** * Returns the status change associated with a skill. @@ -85,7 +53,7 @@ sc_type status_skill2sc(int skill_id) { ShowError("status_skill2sc: Unsupported skill id %d\n", skill_id); return SC_NONE; } - return SkillStatusChangeTable[idx]; + return status->Skill2SCTable[idx]; } /** @@ -101,7 +69,7 @@ int status_sc2skill(sc_type sc) return 0; } - return StatusSkillChangeTable[sc]; + return status->SkillChangeTable[sc]; } /** @@ -116,7 +84,7 @@ unsigned int status_sc2scb_flag(sc_type sc) return SCB_NONE; } - return StatusChangeFlagTable[sc]; + return status->ChangeFlagTable[sc]; } /** @@ -131,12 +99,12 @@ int status_type2relevant_bl_types(int type) return SI_BLANK; } - return StatusRelevantBLTypes[type]; + return status->RelevantBLTypes[type]; } #define add_sc(skill,sc) set_sc(skill,sc,SI_BLANK,SCB_NONE) // indicates that the status displays a visual effect for the affected unit, and should be sent to the client for all supported units -#define set_sc_with_vfx(skill, sc, icon, flag) set_sc((skill), (sc), (icon), (flag)); if((icon) < SI_MAX) StatusRelevantBLTypes[(icon)] |= BL_SCEFFECT +#define set_sc_with_vfx(skill, sc, icon, flag) set_sc((skill), (sc), (icon), (flag)); if((icon) < SI_MAX) status->RelevantBLTypes[(icon)] |= BL_SCEFFECT static void set_sc(uint16 skill_id, sc_type sc, int icon, unsigned int flag) { uint16 idx; @@ -149,31 +117,31 @@ static void set_sc(uint16 skill_id, sc_type sc, int icon, unsigned int flag) { return; } - if( StatusSkillChangeTable[sc] == 0 ) - StatusSkillChangeTable[sc] = skill_id; - if( StatusIconChangeTable[sc] == SI_BLANK ) - StatusIconChangeTable[sc] = icon; - StatusChangeFlagTable[sc] |= flag; + if( status->SkillChangeTable[sc] == 0 ) + status->SkillChangeTable[sc] = skill_id; + if( status->IconChangeTable[sc] == SI_BLANK ) + status->IconChangeTable[sc] = icon; + status->ChangeFlagTable[sc] |= flag; - if( SkillStatusChangeTable[idx] == SC_NONE ) - SkillStatusChangeTable[idx] = sc; + if( status->Skill2SCTable[idx] == SC_NONE ) + status->Skill2SCTable[idx] = sc; } void initChangeTables(void) { int i; for (i = 0; i < SC_MAX; i++) - StatusIconChangeTable[i] = SI_BLANK; + status->IconChangeTable[i] = SI_BLANK; for (i = 0; i < MAX_SKILL; i++) - SkillStatusChangeTable[i] = SC_NONE; + status->Skill2SCTable[i] = SC_NONE; for (i = 0; i < SI_MAX; i++) - StatusRelevantBLTypes[i] = BL_PC; + status->RelevantBLTypes[i] = BL_PC; - memset(StatusSkillChangeTable, 0, sizeof(StatusSkillChangeTable)); - memset(StatusChangeFlagTable, 0, sizeof(StatusChangeFlagTable)); - memset(StatusDisplayType, 0, sizeof(StatusDisplayType)); + memset(status->SkillChangeTable, 0, sizeof(status->SkillChangeTable)); + memset(status->ChangeFlagTable, 0, sizeof(status->ChangeFlagTable)); + memset(status->DisplayType, 0, sizeof(status->DisplayType)); //First we define the skill for common ailments. These are used in skill_additional_effect through sc cards. [Skotlex] set_sc( NPC_PETRIFYATTACK , SC_STONE , SI_BLANK , SCB_DEF_ELE|SCB_DEF|SCB_MDEF ); @@ -780,303 +748,303 @@ void initChangeTables(void) { set_sc_with_vfx( GN_ILLUSIONDOPING , SC_ILLUSIONDOPING , SI_ILLUSIONDOPING , SCB_HIT ); // Storing the target job rather than simply SC_SOULLINK simplifies code later on. - SkillStatusChangeTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST, - SkillStatusChangeTable[SL_MONK] = (sc_type)MAPID_MONK, - SkillStatusChangeTable[SL_STAR] = (sc_type)MAPID_STAR_GLADIATOR, - SkillStatusChangeTable[SL_SAGE] = (sc_type)MAPID_SAGE, - SkillStatusChangeTable[SL_CRUSADER] = (sc_type)MAPID_CRUSADER, - SkillStatusChangeTable[SL_SUPERNOVICE] = (sc_type)MAPID_SUPER_NOVICE, - SkillStatusChangeTable[SL_KNIGHT] = (sc_type)MAPID_KNIGHT, - SkillStatusChangeTable[SL_WIZARD] = (sc_type)MAPID_WIZARD, - SkillStatusChangeTable[SL_PRIEST] = (sc_type)MAPID_PRIEST, - SkillStatusChangeTable[SL_BARDDANCER] = (sc_type)MAPID_BARDDANCER, - SkillStatusChangeTable[SL_ROGUE] = (sc_type)MAPID_ROGUE, - SkillStatusChangeTable[SL_ASSASIN] = (sc_type)MAPID_ASSASSIN, - SkillStatusChangeTable[SL_BLACKSMITH] = (sc_type)MAPID_BLACKSMITH, - SkillStatusChangeTable[SL_HUNTER] = (sc_type)MAPID_HUNTER, - SkillStatusChangeTable[SL_SOULLINKER] = (sc_type)MAPID_SOUL_LINKER, - - //Status that don't have a skill associated. - StatusIconChangeTable[SC_WEIGHTOVER50] = SI_WEIGHTOVER50; - StatusIconChangeTable[SC_WEIGHTOVER90] = SI_WEIGHTOVER90; - StatusIconChangeTable[SC_ATTHASTE_POTION1] = SI_ATTHASTE_POTION1; - StatusIconChangeTable[SC_ATTHASTE_POTION2] = SI_ATTHASTE_POTION2; - StatusIconChangeTable[SC_ATTHASTE_POTION3] = SI_ATTHASTE_POTION3; - StatusIconChangeTable[SC_ATTHASTE_INFINITY] = SI_ATTHASTE_INFINITY; - StatusIconChangeTable[SC_MOVHASTE_HORSE] = SI_MOVHASTE_HORSE; - StatusIconChangeTable[SC_MOVHASTE_INFINITY] = SI_MOVHASTE_INFINITY; - StatusIconChangeTable[SC_CHASEWALK2] = SI_INCSTR; - StatusIconChangeTable[SC_MIRACLE] = SI_SOULLINK; - StatusIconChangeTable[SC_CLAIRVOYANCE] = SI_CLAIRVOYANCE; - StatusIconChangeTable[SC_FOOD_STR] = SI_FOOD_STR; - StatusIconChangeTable[SC_FOOD_AGI] = SI_FOOD_AGI; - StatusIconChangeTable[SC_FOOD_VIT] = SI_FOOD_VIT; - StatusIconChangeTable[SC_FOOD_INT] = SI_FOOD_INT; - StatusIconChangeTable[SC_FOOD_DEX] = SI_FOOD_DEX; - StatusIconChangeTable[SC_FOOD_LUK] = SI_FOOD_LUK; - StatusIconChangeTable[SC_FOOD_BASICAVOIDANCE]= SI_FOOD_BASICAVOIDANCE; - StatusIconChangeTable[SC_FOOD_BASICHIT] = SI_FOOD_BASICHIT; - StatusIconChangeTable[SC_MANU_ATK] = SI_MANU_ATK; - StatusIconChangeTable[SC_MANU_DEF] = SI_MANU_DEF; - StatusIconChangeTable[SC_SPL_ATK] = SI_SPL_ATK; - StatusIconChangeTable[SC_SPL_DEF] = SI_SPL_DEF; - StatusIconChangeTable[SC_MANU_MATK] = SI_MANU_MATK; - StatusIconChangeTable[SC_SPL_MATK] = SI_SPL_MATK; - StatusIconChangeTable[SC_PLUSATTACKPOWER] = SI_PLUSATTACKPOWER; - StatusIconChangeTable[SC_PLUSMAGICPOWER] = SI_PLUSMAGICPOWER; + status->Skill2SCTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST, + status->Skill2SCTable[SL_MONK] = (sc_type)MAPID_MONK, + status->Skill2SCTable[SL_STAR] = (sc_type)MAPID_STAR_GLADIATOR, + status->Skill2SCTable[SL_SAGE] = (sc_type)MAPID_SAGE, + status->Skill2SCTable[SL_CRUSADER] = (sc_type)MAPID_CRUSADER, + status->Skill2SCTable[SL_SUPERNOVICE] = (sc_type)MAPID_SUPER_NOVICE, + status->Skill2SCTable[SL_KNIGHT] = (sc_type)MAPID_KNIGHT, + status->Skill2SCTable[SL_WIZARD] = (sc_type)MAPID_WIZARD, + status->Skill2SCTable[SL_PRIEST] = (sc_type)MAPID_PRIEST, + status->Skill2SCTable[SL_BARDDANCER] = (sc_type)MAPID_BARDDANCER, + status->Skill2SCTable[SL_ROGUE] = (sc_type)MAPID_ROGUE, + status->Skill2SCTable[SL_ASSASIN] = (sc_type)MAPID_ASSASSIN, + status->Skill2SCTable[SL_BLACKSMITH] = (sc_type)MAPID_BLACKSMITH, + status->Skill2SCTable[SL_HUNTER] = (sc_type)MAPID_HUNTER, + status->Skill2SCTable[SL_SOULLINKER] = (sc_type)MAPID_SOUL_LINKER, + + //Status that don't have a skill associated. + status->IconChangeTable[SC_WEIGHTOVER50] = SI_WEIGHTOVER50; + status->IconChangeTable[SC_WEIGHTOVER90] = SI_WEIGHTOVER90; + status->IconChangeTable[SC_ATTHASTE_POTION1] = SI_ATTHASTE_POTION1; + status->IconChangeTable[SC_ATTHASTE_POTION2] = SI_ATTHASTE_POTION2; + status->IconChangeTable[SC_ATTHASTE_POTION3] = SI_ATTHASTE_POTION3; + status->IconChangeTable[SC_ATTHASTE_INFINITY] = SI_ATTHASTE_INFINITY; + status->IconChangeTable[SC_MOVHASTE_HORSE] = SI_MOVHASTE_HORSE; + status->IconChangeTable[SC_MOVHASTE_INFINITY] = SI_MOVHASTE_INFINITY; + status->IconChangeTable[SC_CHASEWALK2] = SI_INCSTR; + status->IconChangeTable[SC_MIRACLE] = SI_SOULLINK; + status->IconChangeTable[SC_CLAIRVOYANCE] = SI_CLAIRVOYANCE; + status->IconChangeTable[SC_FOOD_STR] = SI_FOOD_STR; + status->IconChangeTable[SC_FOOD_AGI] = SI_FOOD_AGI; + status->IconChangeTable[SC_FOOD_VIT] = SI_FOOD_VIT; + status->IconChangeTable[SC_FOOD_INT] = SI_FOOD_INT; + status->IconChangeTable[SC_FOOD_DEX] = SI_FOOD_DEX; + status->IconChangeTable[SC_FOOD_LUK] = SI_FOOD_LUK; + status->IconChangeTable[SC_FOOD_BASICAVOIDANCE]= SI_FOOD_BASICAVOIDANCE; + status->IconChangeTable[SC_FOOD_BASICHIT] = SI_FOOD_BASICHIT; + status->IconChangeTable[SC_MANU_ATK] = SI_MANU_ATK; + status->IconChangeTable[SC_MANU_DEF] = SI_MANU_DEF; + status->IconChangeTable[SC_SPL_ATK] = SI_SPL_ATK; + status->IconChangeTable[SC_SPL_DEF] = SI_SPL_DEF; + status->IconChangeTable[SC_MANU_MATK] = SI_MANU_MATK; + status->IconChangeTable[SC_SPL_MATK] = SI_SPL_MATK; + status->IconChangeTable[SC_PLUSATTACKPOWER] = SI_PLUSATTACKPOWER; + status->IconChangeTable[SC_PLUSMAGICPOWER] = SI_PLUSMAGICPOWER; //Cash Items - StatusIconChangeTable[SC_FOOD_STR_CASH] = SI_FOOD_STR_CASH; - StatusIconChangeTable[SC_FOOD_AGI_CASH] = SI_FOOD_AGI_CASH; - StatusIconChangeTable[SC_FOOD_VIT_CASH] = SI_FOOD_VIT_CASH; - StatusIconChangeTable[SC_FOOD_DEX_CASH] = SI_FOOD_DEX_CASH; - StatusIconChangeTable[SC_FOOD_INT_CASH] = SI_FOOD_INT_CASH; - StatusIconChangeTable[SC_FOOD_LUK_CASH] = SI_FOOD_LUK_CASH; - StatusIconChangeTable[SC_CASH_PLUSEXP] = SI_CASH_PLUSEXP; - StatusIconChangeTable[SC_CASH_RECEIVEITEM] = SI_CASH_RECEIVEITEM; - StatusIconChangeTable[SC_CASH_PLUSONLYJOBEXP] = SI_CASH_PLUSONLYJOBEXP; - StatusIconChangeTable[SC_CASH_DEATHPENALTY] = SI_CASH_DEATHPENALTY; - StatusIconChangeTable[SC_CASH_BOSS_ALARM] = SI_CASH_BOSS_ALARM; - StatusIconChangeTable[SC_PROTECT_DEF] = SI_PROTECT_DEF; - StatusIconChangeTable[SC_PROTECT_MDEF] = SI_PROTECT_MDEF; - StatusIconChangeTable[SC_CRITICALPERCENT] = SI_CRITICALPERCENT; - StatusIconChangeTable[SC_PLUSAVOIDVALUE] = SI_PLUSAVOIDVALUE; - StatusIconChangeTable[SC_HEALPLUS] = SI_HEALPLUS; - StatusIconChangeTable[SC_S_LIFEPOTION] = SI_S_LIFEPOTION; - StatusIconChangeTable[SC_L_LIFEPOTION] = SI_L_LIFEPOTION; - StatusIconChangeTable[SC_ATKER_BLOOD] = SI_ATKER_BLOOD; - StatusIconChangeTable[SC_TARGET_BLOOD] = SI_TARGET_BLOOD; + status->IconChangeTable[SC_FOOD_STR_CASH] = SI_FOOD_STR_CASH; + status->IconChangeTable[SC_FOOD_AGI_CASH] = SI_FOOD_AGI_CASH; + status->IconChangeTable[SC_FOOD_VIT_CASH] = SI_FOOD_VIT_CASH; + status->IconChangeTable[SC_FOOD_DEX_CASH] = SI_FOOD_DEX_CASH; + status->IconChangeTable[SC_FOOD_INT_CASH] = SI_FOOD_INT_CASH; + status->IconChangeTable[SC_FOOD_LUK_CASH] = SI_FOOD_LUK_CASH; + status->IconChangeTable[SC_CASH_PLUSEXP] = SI_CASH_PLUSEXP; + status->IconChangeTable[SC_CASH_RECEIVEITEM] = SI_CASH_RECEIVEITEM; + status->IconChangeTable[SC_CASH_PLUSONLYJOBEXP] = SI_CASH_PLUSONLYJOBEXP; + status->IconChangeTable[SC_CASH_DEATHPENALTY] = SI_CASH_DEATHPENALTY; + status->IconChangeTable[SC_CASH_BOSS_ALARM] = SI_CASH_BOSS_ALARM; + status->IconChangeTable[SC_PROTECT_DEF] = SI_PROTECT_DEF; + status->IconChangeTable[SC_PROTECT_MDEF] = SI_PROTECT_MDEF; + status->IconChangeTable[SC_CRITICALPERCENT] = SI_CRITICALPERCENT; + status->IconChangeTable[SC_PLUSAVOIDVALUE] = SI_PLUSAVOIDVALUE; + status->IconChangeTable[SC_HEALPLUS] = SI_HEALPLUS; + status->IconChangeTable[SC_S_LIFEPOTION] = SI_S_LIFEPOTION; + status->IconChangeTable[SC_L_LIFEPOTION] = SI_L_LIFEPOTION; + status->IconChangeTable[SC_ATKER_BLOOD] = SI_ATKER_BLOOD; + status->IconChangeTable[SC_TARGET_BLOOD] = SI_TARGET_BLOOD; // Mercenary Bonus Effects - StatusIconChangeTable[SC_MER_FLEE] = SI_MER_FLEE; - StatusIconChangeTable[SC_MER_ATK] = SI_MER_ATK; - StatusIconChangeTable[SC_MER_HP] = SI_MER_HP; - StatusIconChangeTable[SC_MER_SP] = SI_MER_SP; - StatusIconChangeTable[SC_MER_HIT] = SI_MER_HIT; + status->IconChangeTable[SC_MER_FLEE] = SI_MER_FLEE; + status->IconChangeTable[SC_MER_ATK] = SI_MER_ATK; + status->IconChangeTable[SC_MER_HP] = SI_MER_HP; + status->IconChangeTable[SC_MER_SP] = SI_MER_SP; + status->IconChangeTable[SC_MER_HIT] = SI_MER_HIT; // Warlock Spheres - StatusIconChangeTable[SC_SUMMON1] = SI_SPHERE_1; - StatusIconChangeTable[SC_SUMMON2] = SI_SPHERE_2; - StatusIconChangeTable[SC_SUMMON3] = SI_SPHERE_3; - StatusIconChangeTable[SC_SUMMON4] = SI_SPHERE_4; - StatusIconChangeTable[SC_SUMMON5] = SI_SPHERE_5; + status->IconChangeTable[SC_SUMMON1] = SI_SPHERE_1; + status->IconChangeTable[SC_SUMMON2] = SI_SPHERE_2; + status->IconChangeTable[SC_SUMMON3] = SI_SPHERE_3; + status->IconChangeTable[SC_SUMMON4] = SI_SPHERE_4; + status->IconChangeTable[SC_SUMMON5] = SI_SPHERE_5; // Warlock Preserved spells - StatusIconChangeTable[SC_SPELLBOOK1] = SI_SPELLBOOK1; - StatusIconChangeTable[SC_SPELLBOOK2] = SI_SPELLBOOK2; - StatusIconChangeTable[SC_SPELLBOOK3] = SI_SPELLBOOK3; - StatusIconChangeTable[SC_SPELLBOOK4] = SI_SPELLBOOK4; - StatusIconChangeTable[SC_SPELLBOOK5] = SI_SPELLBOOK5; - StatusIconChangeTable[SC_SPELLBOOK6] = SI_SPELLBOOK6; - StatusIconChangeTable[SC_SPELLBOOK7] = SI_SPELLBOOK7; - - StatusIconChangeTable[SC_NEUTRALBARRIER_MASTER] = SI_NEUTRALBARRIER_MASTER; - StatusIconChangeTable[SC_STEALTHFIELD_MASTER] = SI_STEALTHFIELD_MASTER; - StatusIconChangeTable[SC_OVERHEAT] = SI_OVERHEAT; - StatusIconChangeTable[SC_OVERHEAT_LIMITPOINT] = SI_OVERHEAT_LIMITPOINT; - - StatusIconChangeTable[SC_HALLUCINATIONWALK_POSTDELAY] = SI_HALLUCINATIONWALK_POSTDELAY; - StatusIconChangeTable[SC_TOXIN] = SI_TOXIN; - StatusIconChangeTable[SC_PARALYSE] = SI_PARALYSE; - StatusIconChangeTable[SC_VENOMBLEED] = SI_VENOMBLEED; - StatusIconChangeTable[SC_MAGICMUSHROOM] = SI_MAGICMUSHROOM; - StatusIconChangeTable[SC_DEATHHURT] = SI_DEATHHURT; - StatusIconChangeTable[SC_PYREXIA] = SI_PYREXIA; - StatusIconChangeTable[SC_OBLIVIONCURSE] = SI_OBLIVIONCURSE; - StatusIconChangeTable[SC_LEECHESEND] = SI_LEECHESEND; - - StatusIconChangeTable[SC_SHIELDSPELL_DEF] = SI_SHIELDSPELL_DEF; - StatusIconChangeTable[SC_SHIELDSPELL_MDEF] = SI_SHIELDSPELL_MDEF; - StatusIconChangeTable[SC_SHIELDSPELL_REF] = SI_SHIELDSPELL_REF; - StatusIconChangeTable[SC_BANDING_DEFENCE] = SI_BANDING_DEFENCE; - - StatusIconChangeTable[SC_GLOOMYDAY_SK] = SI_GLOOMYDAY; - - StatusIconChangeTable[SC_CURSEDCIRCLE_ATKER] = SI_CURSEDCIRCLE_ATKER; - - StatusIconChangeTable[SC_STOMACHACHE] = SI_STOMACHACHE; - StatusIconChangeTable[SC_MYSTERIOUS_POWDER] = SI_MYSTERIOUS_POWDER; - StatusIconChangeTable[SC_MELON_BOMB] = SI_MELON_BOMB; - StatusIconChangeTable[SC_BANANA_BOMB] = SI_BANANA_BOMB; - StatusIconChangeTable[SC_BANANA_BOMB_SITDOWN_POSTDELAY] = SI_BANANA_BOMB_SITDOWN_POSTDELAY; + status->IconChangeTable[SC_SPELLBOOK1] = SI_SPELLBOOK1; + status->IconChangeTable[SC_SPELLBOOK2] = SI_SPELLBOOK2; + status->IconChangeTable[SC_SPELLBOOK3] = SI_SPELLBOOK3; + status->IconChangeTable[SC_SPELLBOOK4] = SI_SPELLBOOK4; + status->IconChangeTable[SC_SPELLBOOK5] = SI_SPELLBOOK5; + status->IconChangeTable[SC_SPELLBOOK6] = SI_SPELLBOOK6; + status->IconChangeTable[SC_SPELLBOOK7] = SI_SPELLBOOK7; + + status->IconChangeTable[SC_NEUTRALBARRIER_MASTER] = SI_NEUTRALBARRIER_MASTER; + status->IconChangeTable[SC_STEALTHFIELD_MASTER] = SI_STEALTHFIELD_MASTER; + status->IconChangeTable[SC_OVERHEAT] = SI_OVERHEAT; + status->IconChangeTable[SC_OVERHEAT_LIMITPOINT] = SI_OVERHEAT_LIMITPOINT; + + status->IconChangeTable[SC_HALLUCINATIONWALK_POSTDELAY] = SI_HALLUCINATIONWALK_POSTDELAY; + status->IconChangeTable[SC_TOXIN] = SI_TOXIN; + status->IconChangeTable[SC_PARALYSE] = SI_PARALYSE; + status->IconChangeTable[SC_VENOMBLEED] = SI_VENOMBLEED; + status->IconChangeTable[SC_MAGICMUSHROOM] = SI_MAGICMUSHROOM; + status->IconChangeTable[SC_DEATHHURT] = SI_DEATHHURT; + status->IconChangeTable[SC_PYREXIA] = SI_PYREXIA; + status->IconChangeTable[SC_OBLIVIONCURSE] = SI_OBLIVIONCURSE; + status->IconChangeTable[SC_LEECHESEND] = SI_LEECHESEND; + + status->IconChangeTable[SC_SHIELDSPELL_DEF] = SI_SHIELDSPELL_DEF; + status->IconChangeTable[SC_SHIELDSPELL_MDEF] = SI_SHIELDSPELL_MDEF; + status->IconChangeTable[SC_SHIELDSPELL_REF] = SI_SHIELDSPELL_REF; + status->IconChangeTable[SC_BANDING_DEFENCE] = SI_BANDING_DEFENCE; + + status->IconChangeTable[SC_GLOOMYDAY_SK] = SI_GLOOMYDAY; + + status->IconChangeTable[SC_CURSEDCIRCLE_ATKER] = SI_CURSEDCIRCLE_ATKER; + + status->IconChangeTable[SC_STOMACHACHE] = SI_STOMACHACHE; + status->IconChangeTable[SC_MYSTERIOUS_POWDER] = SI_MYSTERIOUS_POWDER; + status->IconChangeTable[SC_MELON_BOMB] = SI_MELON_BOMB; + status->IconChangeTable[SC_BANANA_BOMB] = SI_BANANA_BOMB; + status->IconChangeTable[SC_BANANA_BOMB_SITDOWN_POSTDELAY] = SI_BANANA_BOMB_SITDOWN_POSTDELAY; //Genetics New Food Items Status Icons - StatusIconChangeTable[SC_SAVAGE_STEAK] = SI_SAVAGE_STEAK; - StatusIconChangeTable[SC_COCKTAIL_WARG_BLOOD] = SI_COCKTAIL_WARG_BLOOD; - StatusIconChangeTable[SC_MINOR_BBQ] = SI_MINOR_BBQ; - StatusIconChangeTable[SC_SIROMA_ICE_TEA] = SI_SIROMA_ICE_TEA; - StatusIconChangeTable[SC_DROCERA_HERB_STEAMED] = SI_DROCERA_HERB_STEAMED; - StatusIconChangeTable[SC_PUTTI_TAILS_NOODLES] = SI_PUTTI_TAILS_NOODLES; - - StatusIconChangeTable[SC_BOOST500] |= SI_BOOST500; - StatusIconChangeTable[SC_FULL_SWING_K] |= SI_FULL_SWING_K; - StatusIconChangeTable[SC_MANA_PLUS] |= SI_MANA_PLUS; - StatusIconChangeTable[SC_MUSTLE_M] |= SI_MUSTLE_M; - StatusIconChangeTable[SC_LIFE_FORCE_F] |= SI_LIFE_FORCE_F; - StatusIconChangeTable[SC_EXTRACT_WHITE_POTION_Z] |= SI_EXTRACT_WHITE_POTION_Z; - StatusIconChangeTable[SC_VITATA_500] |= SI_VITATA_500; - StatusIconChangeTable[SC_EXTRACT_SALAMINE_JUICE] |= SI_EXTRACT_SALAMINE_JUICE; + status->IconChangeTable[SC_SAVAGE_STEAK] = SI_SAVAGE_STEAK; + status->IconChangeTable[SC_COCKTAIL_WARG_BLOOD] = SI_COCKTAIL_WARG_BLOOD; + status->IconChangeTable[SC_MINOR_BBQ] = SI_MINOR_BBQ; + status->IconChangeTable[SC_SIROMA_ICE_TEA] = SI_SIROMA_ICE_TEA; + status->IconChangeTable[SC_DROCERA_HERB_STEAMED] = SI_DROCERA_HERB_STEAMED; + status->IconChangeTable[SC_PUTTI_TAILS_NOODLES] = SI_PUTTI_TAILS_NOODLES; + + status->IconChangeTable[SC_BOOST500] |= SI_BOOST500; + status->IconChangeTable[SC_FULL_SWING_K] |= SI_FULL_SWING_K; + status->IconChangeTable[SC_MANA_PLUS] |= SI_MANA_PLUS; + status->IconChangeTable[SC_MUSTLE_M] |= SI_MUSTLE_M; + status->IconChangeTable[SC_LIFE_FORCE_F] |= SI_LIFE_FORCE_F; + status->IconChangeTable[SC_EXTRACT_WHITE_POTION_Z] |= SI_EXTRACT_WHITE_POTION_Z; + status->IconChangeTable[SC_VITATA_500] |= SI_VITATA_500; + status->IconChangeTable[SC_EXTRACT_SALAMINE_JUICE] |= SI_EXTRACT_SALAMINE_JUICE; // Elemental Spirit's 'side' status change icons. - StatusIconChangeTable[SC_CIRCLE_OF_FIRE] = SI_CIRCLE_OF_FIRE; - StatusIconChangeTable[SC_FIRE_CLOAK] = SI_FIRE_CLOAK; - StatusIconChangeTable[SC_WATER_SCREEN] = SI_WATER_SCREEN; - StatusIconChangeTable[SC_WATER_DROP] = SI_WATER_DROP; - StatusIconChangeTable[SC_WIND_STEP] = SI_WIND_STEP; - StatusIconChangeTable[SC_WIND_CURTAIN] = SI_WIND_CURTAIN; - StatusIconChangeTable[SC_SOLID_SKIN] = SI_SOLID_SKIN; - StatusIconChangeTable[SC_STONE_SHIELD] = SI_STONE_SHIELD; - StatusIconChangeTable[SC_PYROTECHNIC] = SI_PYROTECHNIC; - StatusIconChangeTable[SC_HEATER] = SI_HEATER; - StatusIconChangeTable[SC_TROPIC] = SI_TROPIC; - StatusIconChangeTable[SC_AQUAPLAY] = SI_AQUAPLAY; - StatusIconChangeTable[SC_COOLER] = SI_COOLER; - StatusIconChangeTable[SC_CHILLY_AIR] = SI_CHILLY_AIR; - StatusIconChangeTable[SC_GUST] = SI_GUST; - StatusIconChangeTable[SC_BLAST] = SI_BLAST; - StatusIconChangeTable[SC_WILD_STORM] = SI_WILD_STORM; - StatusIconChangeTable[SC_PETROLOGY] = SI_PETROLOGY; - StatusIconChangeTable[SC_CURSED_SOIL] = SI_CURSED_SOIL; - StatusIconChangeTable[SC_UPHEAVAL] = SI_UPHEAVAL; - StatusIconChangeTable[SC_PUSH_CART] = SI_ON_PUSH_CART; - StatusIconChangeTable[SC_REBOUND] = SI_REBOUND; - StatusIconChangeTable[SC_ALL_RIDING] = SI_ALL_RIDING; - StatusIconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM; + status->IconChangeTable[SC_CIRCLE_OF_FIRE] = SI_CIRCLE_OF_FIRE; + status->IconChangeTable[SC_FIRE_CLOAK] = SI_FIRE_CLOAK; + status->IconChangeTable[SC_WATER_SCREEN] = SI_WATER_SCREEN; + status->IconChangeTable[SC_WATER_DROP] = SI_WATER_DROP; + status->IconChangeTable[SC_WIND_STEP] = SI_WIND_STEP; + status->IconChangeTable[SC_WIND_CURTAIN] = SI_WIND_CURTAIN; + status->IconChangeTable[SC_SOLID_SKIN] = SI_SOLID_SKIN; + status->IconChangeTable[SC_STONE_SHIELD] = SI_STONE_SHIELD; + status->IconChangeTable[SC_PYROTECHNIC] = SI_PYROTECHNIC; + status->IconChangeTable[SC_HEATER] = SI_HEATER; + status->IconChangeTable[SC_TROPIC] = SI_TROPIC; + status->IconChangeTable[SC_AQUAPLAY] = SI_AQUAPLAY; + status->IconChangeTable[SC_COOLER] = SI_COOLER; + status->IconChangeTable[SC_CHILLY_AIR] = SI_CHILLY_AIR; + status->IconChangeTable[SC_GUST] = SI_GUST; + status->IconChangeTable[SC_BLAST] = SI_BLAST; + status->IconChangeTable[SC_WILD_STORM] = SI_WILD_STORM; + status->IconChangeTable[SC_PETROLOGY] = SI_PETROLOGY; + status->IconChangeTable[SC_CURSED_SOIL] = SI_CURSED_SOIL; + status->IconChangeTable[SC_UPHEAVAL] = SI_UPHEAVAL; + status->IconChangeTable[SC_PUSH_CART] = SI_ON_PUSH_CART; + status->IconChangeTable[SC_REBOUND] = SI_REBOUND; + status->IconChangeTable[SC_ALL_RIDING] = SI_ALL_RIDING; + status->IconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM; //Other SC which are not necessarily associated to skills. - StatusChangeFlagTable[SC_ATTHASTE_POTION1] = SCB_ASPD; - StatusChangeFlagTable[SC_ATTHASTE_POTION2] = SCB_ASPD; - StatusChangeFlagTable[SC_ATTHASTE_POTION3] = SCB_ASPD; - StatusChangeFlagTable[SC_ATTHASTE_INFINITY] = SCB_ASPD; - StatusChangeFlagTable[SC_MOVHASTE_HORSE] = SCB_SPEED; - StatusChangeFlagTable[SC_MOVHASTE_INFINITY] = SCB_SPEED; - StatusChangeFlagTable[SC_PLUSATTACKPOWER] = SCB_BATK; - StatusChangeFlagTable[SC_PLUSMAGICPOWER] = SCB_MATK; - StatusChangeFlagTable[SC_INCALLSTATUS] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK; - StatusChangeFlagTable[SC_CHASEWALK2] |= SCB_STR; - StatusChangeFlagTable[SC_INCAGI] |= SCB_AGI; - StatusChangeFlagTable[SC_INCVIT] |= SCB_VIT; - StatusChangeFlagTable[SC_INCINT] |= SCB_INT; - StatusChangeFlagTable[SC_INCDEX] |= SCB_DEX; - StatusChangeFlagTable[SC_INCLUK] |= SCB_LUK; - StatusChangeFlagTable[SC_INCHIT] |= SCB_HIT; - StatusChangeFlagTable[SC_INCHITRATE] |= SCB_HIT; - StatusChangeFlagTable[SC_INCFLEE] |= SCB_FLEE; - StatusChangeFlagTable[SC_INCFLEERATE] |= SCB_FLEE; - StatusChangeFlagTable[SC_CRITICALPERCENT] |= SCB_CRI; - StatusChangeFlagTable[SC_INCASPDRATE] |= SCB_ASPD; - StatusChangeFlagTable[SC_PLUSAVOIDVALUE] |= SCB_FLEE2; - StatusChangeFlagTable[SC_INCMHPRATE] |= SCB_MAXHP; - StatusChangeFlagTable[SC_INCMSPRATE] |= SCB_MAXSP; - StatusChangeFlagTable[SC_INCMHP] |= SCB_MAXHP; - StatusChangeFlagTable[SC_INCMSP] |= SCB_MAXSP; - StatusChangeFlagTable[SC_INCATKRATE] |= SCB_BATK|SCB_WATK; - StatusChangeFlagTable[SC_INCMATKRATE] |= SCB_MATK; - StatusChangeFlagTable[SC_INCDEFRATE] |= SCB_DEF; - StatusChangeFlagTable[SC_FOOD_STR] |= SCB_STR; - StatusChangeFlagTable[SC_FOOD_AGI] |= SCB_AGI; - StatusChangeFlagTable[SC_FOOD_VIT] |= SCB_VIT; - StatusChangeFlagTable[SC_FOOD_INT] |= SCB_INT; - StatusChangeFlagTable[SC_FOOD_DEX] |= SCB_DEX; - StatusChangeFlagTable[SC_FOOD_LUK] |= SCB_LUK; - StatusChangeFlagTable[SC_FOOD_BASICHIT] |= SCB_HIT; - StatusChangeFlagTable[SC_FOOD_BASICAVOIDANCE] |= SCB_FLEE; - StatusChangeFlagTable[SC_BATKFOOD] |= SCB_BATK; - StatusChangeFlagTable[SC_WATKFOOD] |= SCB_WATK; - StatusChangeFlagTable[SC_MATKFOOD] |= SCB_MATK; - StatusChangeFlagTable[SC_ARMORPROPERTY] |= SCB_ALL; - StatusChangeFlagTable[SC_ARMOR_RESIST] |= SCB_ALL; - StatusChangeFlagTable[SC_ATKER_BLOOD] |= SCB_ALL; - StatusChangeFlagTable[SC_WALKSPEED] |= SCB_SPEED; - StatusChangeFlagTable[SC_ITEMSCRIPT] |= SCB_ALL; + status->ChangeFlagTable[SC_ATTHASTE_POTION1] = SCB_ASPD; + status->ChangeFlagTable[SC_ATTHASTE_POTION2] = SCB_ASPD; + status->ChangeFlagTable[SC_ATTHASTE_POTION3] = SCB_ASPD; + status->ChangeFlagTable[SC_ATTHASTE_INFINITY] = SCB_ASPD; + status->ChangeFlagTable[SC_MOVHASTE_HORSE] = SCB_SPEED; + status->ChangeFlagTable[SC_MOVHASTE_INFINITY] = SCB_SPEED; + status->ChangeFlagTable[SC_PLUSATTACKPOWER] = SCB_BATK; + status->ChangeFlagTable[SC_PLUSMAGICPOWER] = SCB_MATK; + status->ChangeFlagTable[SC_INCALLSTATUS] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK; + status->ChangeFlagTable[SC_CHASEWALK2] |= SCB_STR; + status->ChangeFlagTable[SC_INCAGI] |= SCB_AGI; + status->ChangeFlagTable[SC_INCVIT] |= SCB_VIT; + status->ChangeFlagTable[SC_INCINT] |= SCB_INT; + status->ChangeFlagTable[SC_INCDEX] |= SCB_DEX; + status->ChangeFlagTable[SC_INCLUK] |= SCB_LUK; + status->ChangeFlagTable[SC_INCHIT] |= SCB_HIT; + status->ChangeFlagTable[SC_INCHITRATE] |= SCB_HIT; + status->ChangeFlagTable[SC_INCFLEE] |= SCB_FLEE; + status->ChangeFlagTable[SC_INCFLEERATE] |= SCB_FLEE; + status->ChangeFlagTable[SC_CRITICALPERCENT] |= SCB_CRI; + status->ChangeFlagTable[SC_INCASPDRATE] |= SCB_ASPD; + status->ChangeFlagTable[SC_PLUSAVOIDVALUE] |= SCB_FLEE2; + status->ChangeFlagTable[SC_INCMHPRATE] |= SCB_MAXHP; + status->ChangeFlagTable[SC_INCMSPRATE] |= SCB_MAXSP; + status->ChangeFlagTable[SC_INCMHP] |= SCB_MAXHP; + status->ChangeFlagTable[SC_INCMSP] |= SCB_MAXSP; + status->ChangeFlagTable[SC_INCATKRATE] |= SCB_BATK|SCB_WATK; + status->ChangeFlagTable[SC_INCMATKRATE] |= SCB_MATK; + status->ChangeFlagTable[SC_INCDEFRATE] |= SCB_DEF; + status->ChangeFlagTable[SC_FOOD_STR] |= SCB_STR; + status->ChangeFlagTable[SC_FOOD_AGI] |= SCB_AGI; + status->ChangeFlagTable[SC_FOOD_VIT] |= SCB_VIT; + status->ChangeFlagTable[SC_FOOD_INT] |= SCB_INT; + status->ChangeFlagTable[SC_FOOD_DEX] |= SCB_DEX; + status->ChangeFlagTable[SC_FOOD_LUK] |= SCB_LUK; + status->ChangeFlagTable[SC_FOOD_BASICHIT] |= SCB_HIT; + status->ChangeFlagTable[SC_FOOD_BASICAVOIDANCE] |= SCB_FLEE; + status->ChangeFlagTable[SC_BATKFOOD] |= SCB_BATK; + status->ChangeFlagTable[SC_WATKFOOD] |= SCB_WATK; + status->ChangeFlagTable[SC_MATKFOOD] |= SCB_MATK; + status->ChangeFlagTable[SC_ARMORPROPERTY] |= SCB_ALL; + status->ChangeFlagTable[SC_ARMOR_RESIST] |= SCB_ALL; + status->ChangeFlagTable[SC_ATKER_BLOOD] |= SCB_ALL; + status->ChangeFlagTable[SC_WALKSPEED] |= SCB_SPEED; + status->ChangeFlagTable[SC_ITEMSCRIPT] |= SCB_ALL; // Cash Items - StatusChangeFlagTable[SC_FOOD_STR_CASH] = SCB_STR; - StatusChangeFlagTable[SC_FOOD_AGI_CASH] = SCB_AGI; - StatusChangeFlagTable[SC_FOOD_VIT_CASH] = SCB_VIT; - StatusChangeFlagTable[SC_FOOD_DEX_CASH] = SCB_DEX; - StatusChangeFlagTable[SC_FOOD_INT_CASH] = SCB_INT; - StatusChangeFlagTable[SC_FOOD_LUK_CASH] = SCB_LUK; + status->ChangeFlagTable[SC_FOOD_STR_CASH] = SCB_STR; + status->ChangeFlagTable[SC_FOOD_AGI_CASH] = SCB_AGI; + status->ChangeFlagTable[SC_FOOD_VIT_CASH] = SCB_VIT; + status->ChangeFlagTable[SC_FOOD_DEX_CASH] = SCB_DEX; + status->ChangeFlagTable[SC_FOOD_INT_CASH] = SCB_INT; + status->ChangeFlagTable[SC_FOOD_LUK_CASH] = SCB_LUK; // Mercenary Bonus Effects - StatusChangeFlagTable[SC_MER_FLEE] |= SCB_FLEE; - StatusChangeFlagTable[SC_MER_ATK] |= SCB_WATK; - StatusChangeFlagTable[SC_MER_HP] |= SCB_MAXHP; - StatusChangeFlagTable[SC_MER_SP] |= SCB_MAXSP; - StatusChangeFlagTable[SC_MER_HIT] |= SCB_HIT; + status->ChangeFlagTable[SC_MER_FLEE] |= SCB_FLEE; + status->ChangeFlagTable[SC_MER_ATK] |= SCB_WATK; + status->ChangeFlagTable[SC_MER_HP] |= SCB_MAXHP; + status->ChangeFlagTable[SC_MER_SP] |= SCB_MAXSP; + status->ChangeFlagTable[SC_MER_HIT] |= SCB_HIT; // Guillotine Cross Poison Effects - StatusChangeFlagTable[SC_PARALYSE] |= SCB_ASPD|SCB_FLEE|SCB_SPEED; - StatusChangeFlagTable[SC_DEATHHURT] |= SCB_REGEN; - StatusChangeFlagTable[SC_VENOMBLEED] |= SCB_MAXHP; - StatusChangeFlagTable[SC_OBLIVIONCURSE] |= SCB_REGEN; - - StatusChangeFlagTable[SC_SAVAGE_STEAK] |= SCB_STR; - StatusChangeFlagTable[SC_COCKTAIL_WARG_BLOOD] |= SCB_INT; - StatusChangeFlagTable[SC_MINOR_BBQ] |= SCB_VIT; - StatusChangeFlagTable[SC_SIROMA_ICE_TEA] |= SCB_DEX; - StatusChangeFlagTable[SC_DROCERA_HERB_STEAMED] |= SCB_AGI; - StatusChangeFlagTable[SC_PUTTI_TAILS_NOODLES] |= SCB_LUK; - StatusChangeFlagTable[SC_BOOST500] |= SCB_ASPD; - StatusChangeFlagTable[SC_FULL_SWING_K] |= SCB_BATK; - StatusChangeFlagTable[SC_MANA_PLUS] |= SCB_MATK; - StatusChangeFlagTable[SC_MUSTLE_M] |= SCB_MAXHP; - StatusChangeFlagTable[SC_LIFE_FORCE_F] |= SCB_MAXSP; - StatusChangeFlagTable[SC_EXTRACT_WHITE_POTION_Z] |= SCB_REGEN; - StatusChangeFlagTable[SC_VITATA_500] |= SCB_REGEN; - StatusChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD; - StatusChangeFlagTable[SC_REBOUND] |= SCB_SPEED|SCB_REGEN; - - StatusChangeFlagTable[SC_ALL_RIDING] = SCB_SPEED; - StatusChangeFlagTable[SC_WEDDING] = SCB_SPEED; - - - /* StatusDisplayType Table [Ind/Hercules] */ - StatusDisplayType[SC_ALL_RIDING] = true; - StatusDisplayType[SC_PUSH_CART] = true; - StatusDisplayType[SC_SUMMON1] = true; - StatusDisplayType[SC_SUMMON2] = true; - StatusDisplayType[SC_SUMMON3] = true; - StatusDisplayType[SC_SUMMON4] = true; - StatusDisplayType[SC_SUMMON5] = true; - StatusDisplayType[SC_CAMOUFLAGE] = true; - StatusDisplayType[SC_DUPLELIGHT] = true; - StatusDisplayType[SC_ORATIO] = true; - StatusDisplayType[SC_FROSTMISTY] = true; - StatusDisplayType[SC_VENOMIMPRESS] = true; - StatusDisplayType[SC_HALLUCINATIONWALK] = true; - StatusDisplayType[SC_ROLLINGCUTTER] = true; - StatusDisplayType[SC_BANDING] = true; - StatusDisplayType[SC_COLD] = true; - StatusDisplayType[SC_DEEP_SLEEP] = true; - StatusDisplayType[SC_CURSEDCIRCLE_ATKER]= true; - StatusDisplayType[SC_CURSEDCIRCLE_TARGET]= true; - StatusDisplayType[SC_BLOOD_SUCKER] = true; - StatusDisplayType[SC__SHADOWFORM] = true; - StatusDisplayType[SC__MANHOLE] = true; - StatusDisplayType[SC_MONSTER_TRANSFORM] = true; + status->ChangeFlagTable[SC_PARALYSE] |= SCB_ASPD|SCB_FLEE|SCB_SPEED; + status->ChangeFlagTable[SC_DEATHHURT] |= SCB_REGEN; + status->ChangeFlagTable[SC_VENOMBLEED] |= SCB_MAXHP; + status->ChangeFlagTable[SC_OBLIVIONCURSE] |= SCB_REGEN; + + status->ChangeFlagTable[SC_SAVAGE_STEAK] |= SCB_STR; + status->ChangeFlagTable[SC_COCKTAIL_WARG_BLOOD] |= SCB_INT; + status->ChangeFlagTable[SC_MINOR_BBQ] |= SCB_VIT; + status->ChangeFlagTable[SC_SIROMA_ICE_TEA] |= SCB_DEX; + status->ChangeFlagTable[SC_DROCERA_HERB_STEAMED] |= SCB_AGI; + status->ChangeFlagTable[SC_PUTTI_TAILS_NOODLES] |= SCB_LUK; + status->ChangeFlagTable[SC_BOOST500] |= SCB_ASPD; + status->ChangeFlagTable[SC_FULL_SWING_K] |= SCB_BATK; + status->ChangeFlagTable[SC_MANA_PLUS] |= SCB_MATK; + status->ChangeFlagTable[SC_MUSTLE_M] |= SCB_MAXHP; + status->ChangeFlagTable[SC_LIFE_FORCE_F] |= SCB_MAXSP; + status->ChangeFlagTable[SC_EXTRACT_WHITE_POTION_Z] |= SCB_REGEN; + status->ChangeFlagTable[SC_VITATA_500] |= SCB_REGEN; + status->ChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD; + status->ChangeFlagTable[SC_REBOUND] |= SCB_SPEED|SCB_REGEN; + + status->ChangeFlagTable[SC_ALL_RIDING] = SCB_SPEED; + status->ChangeFlagTable[SC_WEDDING] = SCB_SPEED; + + + /* status->DisplayType Table [Ind/Hercules] */ + status->DisplayType[SC_ALL_RIDING] = true; + status->DisplayType[SC_PUSH_CART] = true; + status->DisplayType[SC_SUMMON1] = true; + status->DisplayType[SC_SUMMON2] = true; + status->DisplayType[SC_SUMMON3] = true; + status->DisplayType[SC_SUMMON4] = true; + status->DisplayType[SC_SUMMON5] = true; + status->DisplayType[SC_CAMOUFLAGE] = true; + status->DisplayType[SC_DUPLELIGHT] = true; + status->DisplayType[SC_ORATIO] = true; + status->DisplayType[SC_FROSTMISTY] = true; + status->DisplayType[SC_VENOMIMPRESS] = true; + status->DisplayType[SC_HALLUCINATIONWALK] = true; + status->DisplayType[SC_ROLLINGCUTTER] = true; + status->DisplayType[SC_BANDING] = true; + status->DisplayType[SC_COLD] = true; + status->DisplayType[SC_DEEP_SLEEP] = true; + status->DisplayType[SC_CURSEDCIRCLE_ATKER]= true; + status->DisplayType[SC_CURSEDCIRCLE_TARGET]= true; + status->DisplayType[SC_BLOOD_SUCKER] = true; + status->DisplayType[SC__SHADOWFORM] = true; + status->DisplayType[SC__MANHOLE] = true; + status->DisplayType[SC_MONSTER_TRANSFORM] = true; #ifdef RENEWAL_EDP // renewal EDP increases your weapon atk - StatusChangeFlagTable[SC_EDP] |= SCB_WATK; + status->ChangeFlagTable[SC_EDP] |= SCB_WATK; #endif if( !battle_config.display_hallucination ) //Disable Hallucination. - StatusIconChangeTable[SC_ILLUSION] = SI_BLANK; + status->IconChangeTable[SC_ILLUSION] = SI_BLANK; } -static void initDummyData(void) +void initDummyData(void) { - memset(&dummy_status, 0, sizeof(dummy_status)); - dummy_status.hp = - dummy_status.max_hp = - dummy_status.max_sp = - dummy_status.str = - dummy_status.agi = - dummy_status.vit = - dummy_status.int_ = - dummy_status.dex = - dummy_status.luk = - dummy_status.hit = 1; - dummy_status.speed = 2000; - dummy_status.adelay = 4000; - dummy_status.amotion = 2000; - dummy_status.dmotion = 2000; - dummy_status.ele_lv = 1; //Min elemental level. - dummy_status.mode = MD_CANMOVE; + memset(&status->dummy, 0, sizeof(status->dummy)); + status->dummy.hp = + status->dummy.max_hp = + status->dummy.max_sp = + status->dummy.str = + status->dummy.agi = + status->dummy.vit = + status->dummy.int_ = + status->dummy.dex = + status->dummy.luk = + status->dummy.hit = 1; + status->dummy.speed = 2000; + status->dummy.adelay = 4000; + status->dummy.amotion = 2000; + status->dummy.dmotion = 2000; + status->dummy.ele_lv = 1; //Min elemental level. + status->dummy.mode = MD_CANMOVE; } @@ -1093,7 +1061,7 @@ int status_set_hp(struct block_list *bl, unsigned int hp, int flag) { struct status_data *st; if (hp < 1) return 0; st = status->get_status_data(bl); - if (st == &dummy_status) + if (st == &status->dummy) return 0; if (hp > st->max_hp) hp = st->max_hp; @@ -1110,7 +1078,7 @@ int status_set_sp(struct block_list *bl, unsigned int sp, int flag) { struct status_data *st; st = status->get_status_data(bl); - if (st == &dummy_status) + if (st == &status->dummy) return 0; if (sp > st->max_sp) sp = st->max_sp; @@ -1157,7 +1125,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp, return skill->unit_ondamaged((struct skill_unit *)target, src, hp, timer->gettick()); st = status->get_status_data(target); - if( st == &dummy_status ) + if( st == &status->dummy ) return 0; if ((unsigned int)hp >= st->hp) { @@ -1361,7 +1329,7 @@ int status_heal(struct block_list *bl,int64 in_hp,int64 in_sp, int flag) { st = status->get_status_data(bl); - if (st == &dummy_status || !st->hp) + if (st == &status->dummy || !st->hp) return 0; /* here onwards we consider it a 32-type, the client does not support higher and from here onwards the value doesn't get thru percentage modifiers */ @@ -1496,7 +1464,7 @@ int status_revive(struct block_list *bl, unsigned char per_hp, unsigned char per if (!status->isdead(bl)) return 0; st = status->get_status_data(bl); - if (st == &dummy_status) + if (st == &status->dummy) return 0; //Invalid target. hp = (int64)st->max_hp * per_hp/100; @@ -1543,7 +1511,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin struct status_change *sc=NULL, *tsc; int hide_flag; - st = src ? status->get_status_data(src) : &dummy_status; + st = src ? status->get_status_data(src) : &status->dummy; if (src && src->type != BL_PC && status->isdead(src)) return 0; @@ -1864,21 +1832,21 @@ int status_base_amotion_pc(struct map_session_data *sd, struct status_data *st) } amotion = ( sd->status.weapon < MAX_WEAPON_TYPE && mod < 0 ) - ? (aspd_base[pc->class2idx(sd->status.class_)][sd->status.weapon]) // single weapon - : ((aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2] // dual-wield - + aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2]) * 6 / 10 + 10 * mod - - aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2] - + aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype1]); + ? (status->aspd_base[pc->class2idx(sd->status.class_)][sd->status.weapon]) // single weapon + : ((status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2] // dual-wield + + status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2]) * 6 / 10 + 10 * mod + - status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2] + + status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype1]); if ( sd->status.shield ) - amotion += ( 2000 - aspd_base[pc->class2idx(sd->status.class_)][W_FIST] ) + - ( aspd_base[pc->class2idx(sd->status.class_)][MAX_WEAPON_TYPE] - 2000 ); + amotion += ( 2000 - status->aspd_base[pc->class2idx(sd->status.class_)][W_FIST] ) + + ( status->aspd_base[pc->class2idx(sd->status.class_)][MAX_WEAPON_TYPE] - 2000 ); #else // base weapon delay amotion = (sd->status.weapon < MAX_WEAPON_TYPE) - ? (aspd_base[pc->class2idx(sd->status.class_)][sd->status.weapon]) // single weapon - : (aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype1] + aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2])*7/10; // dual-wield + ? (status->aspd_base[pc->class2idx(sd->status.class_)][sd->status.weapon]) // single weapon + : (status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype1] + status->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2])*7/10; // dual-wield // percentual delay reduction from stats amotion -= amotion * (4*st->agi + st->dex)/1000; @@ -1889,7 +1857,7 @@ int status_base_amotion_pc(struct map_session_data *sd, struct status_data *st) return amotion; } -static unsigned short status_base_atk(const struct block_list *bl, const struct status_data *st) { +unsigned short status_base_atk(const struct block_list *bl, const struct status_data *st) { int flag = 0, str, dex, #ifdef RENEWAL rstr, @@ -1982,10 +1950,10 @@ void status_calc_misc(struct block_list *bl, struct status_data *st, int level) st->flee2 = 0; if (st->batk) { - int temp = st->batk + status_base_atk(bl, st); + int temp = st->batk + status->base_atk(bl, st); st->batk = cap_value(temp, 0, USHRT_MAX); } else - st->batk = status_base_atk(bl, st); + st->batk = status->base_atk(bl, st); if (st->cri) switch (bl->type) { case BL_MOB: @@ -2249,23 +2217,23 @@ int status_calc_pet_(struct pet_data *pd, bool first) } /// Helper function for status_base_pc_maxhp(), used to pre-calculate the hp_sigma_val[] array -static void status_calc_sigma(void) +void status_calc_sigma(void) { int i,j; for(i = 0; i < CLASS_COUNT; i++) { unsigned int k = 0; - hp_sigma_val[i][0] = hp_sigma_val[i][1] = 0; + status->hp_sigma_val[i][0] = status->hp_sigma_val[i][1] = 0; for(j = 2; j <= MAX_LEVEL; j++) { - k += (hp_coefficient[i]*j + 50) / 100; - hp_sigma_val[i][j] = k; + k += (status->hp_coefficient[i]*j + 50) / 100; + status->hp_sigma_val[i][j] = k; if (k >= INT_MAX) break; //Overflow protection. [Skotlex] } for(; j <= MAX_LEVEL; j++) - hp_sigma_val[i][j] = INT_MAX; + status->hp_sigma_val[i][j] = INT_MAX; } } @@ -2274,9 +2242,9 @@ static void status_calc_sigma(void) /// f(0) = 35 | f(x+1) = f(x) + A + (x + B)*C/D /// which reduces to something close to /// f(x) = 35 + x*(A + B*C/D) + sum(i=2..x){ i*C/D } -static unsigned int status_base_pc_maxhp(struct map_session_data *sd, struct status_data *st) { +unsigned int status_base_pc_maxhp(struct map_session_data *sd, struct status_data *st) { uint64 val = pc->class2idx(sd->status.class_); - val = 35 + sd->status.base_level*(int64)hp_coefficient2[val]/100 + hp_sigma_val[val][sd->status.base_level]; + val = 35 + sd->status.base_level*(int64)status->hp_coefficient2[val]/100 + status->hp_sigma_val[val][sd->status.base_level]; if((sd->class_&MAPID_UPPERMASK) == MAPID_NINJA || (sd->class_&MAPID_UPPERMASK) == MAPID_GUNSLINGER || (sd->class_&MAPID_UPPERMASK) == MAPID_REBELLION) val += 100; //Since their HP can't be approximated well enough without this. @@ -2291,13 +2259,13 @@ static unsigned int status_base_pc_maxhp(struct map_session_data *sd, struct sta val += val * 25/100; //Trans classes get a 25% hp bonus else if (sd->class_&JOBL_BABY) val -= val * 30/100; //Baby classes get a 30% hp penalty - return (unsigned int)val; + return (unsigned int)cap_value(val,0,UINT_MAX); } -static unsigned int status_base_pc_maxsp(struct map_session_data* sd, struct status_data *st) { +unsigned int status_base_pc_maxsp(struct map_session_data* sd, struct status_data *st) { uint64 val; - val = 10 + sd->status.base_level*(int64)sp_coefficient[pc->class2idx(sd->status.class_)]/100; + val = 10 + sd->status.base_level*(int64)status->sp_coefficient[pc->class2idx(sd->status.class_)]/100; val += val * st->int_/100; if (sd->class_&JOBL_UPPER) @@ -2307,7 +2275,7 @@ static unsigned int status_base_pc_maxsp(struct map_session_data* sd, struct sta if ((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && pc->famerank(sd->status.char_id, MAPID_TAEKWON)) val *= 3; //Triple max SP for top ranking Taekwons over level 90. - return (unsigned int)val; + return (unsigned int)cap_value(val,0,UINT_MAX); } //Calculates player data from scratch without counting SC adjustments. @@ -2332,7 +2300,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) { pc->calc_skilltree(sd); // SkillTree calculation - sd->max_weight = max_weight_base[pc->class2idx(sd->status.class_)]+sd->status.str*300; + sd->max_weight = status->max_weight_base[pc->class2idx(sd->status.class_)]+sd->status.str*300; if(first) { //Load Hp/SP from char-received data. @@ -2519,18 +2487,18 @@ int status_calc_pc_(struct map_session_data* sd, bool first) { } wa->atk += sd->inventory_data[index]->atk; if ( (r = sd->status.inventory[index].refine) ) - wa->atk2 = refine_info[wlv].bonus[r-1] / 100; + wa->atk2 = status->refine_info[wlv].bonus[r-1] / 100; #ifdef RENEWAL wa->matk += sd->inventory_data[index]->matk; wa->wlv = wlv; if( r && sd->weapontype1 != W_BOW ) // renewal magic attack refine bonus - wa->matk += refine_info[wlv].bonus[r-1] / 100; + wa->matk += status->refine_info[wlv].bonus[r-1] / 100; #endif //Overrefine bonus. if (r) - wd->overrefine = refine_info[wlv].randombonus_max[r-1] / 100; + wd->overrefine = status->refine_info[wlv].randombonus_max[r-1] / 100; wa->range += sd->inventory_data[index]->range; if(sd->inventory_data[index]->script) { @@ -2558,7 +2526,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) { else if(sd->inventory_data[index]->type == IT_ARMOR) { int r; if ( (r = sd->status.inventory[index].refine) ) - refinedef += refine_info[REFINE_TYPE_ARMOR].bonus[r-1]; + refinedef += status->refine_info[REFINE_TYPE_ARMOR].bonus[r-1]; if(sd->inventory_data[index]->script) { if( i == EQI_HAND_L ) //Shield sd->state.lr_flag = 3; @@ -2682,12 +2650,12 @@ int status_calc_pc_(struct map_session_data* sd, bool first) { sd->bonus.splash_range += sd->bonus.splash_add_range; // Damage modifiers from weapon type - sd->right_weapon.atkmods[0] = atkmods[0][sd->weapontype1]; - sd->right_weapon.atkmods[1] = atkmods[1][sd->weapontype1]; - sd->right_weapon.atkmods[2] = atkmods[2][sd->weapontype1]; - sd->left_weapon.atkmods[0] = atkmods[0][sd->weapontype2]; - sd->left_weapon.atkmods[1] = atkmods[1][sd->weapontype2]; - sd->left_weapon.atkmods[2] = atkmods[2][sd->weapontype2]; + sd->right_weapon.atkmods[0] = status->atkmods[0][sd->weapontype1]; + sd->right_weapon.atkmods[1] = status->atkmods[1][sd->weapontype1]; + sd->right_weapon.atkmods[2] = status->atkmods[2][sd->weapontype1]; + sd->left_weapon.atkmods[0] = status->atkmods[0][sd->weapontype2]; + sd->left_weapon.atkmods[1] = status->atkmods[1][sd->weapontype2]; + sd->left_weapon.atkmods[2] = status->atkmods[2][sd->weapontype2]; if( (pc_isriding(sd) || pc_isridingdragon(sd)) && (sd->status.weapon==W_1HSPEAR || sd->status.weapon==W_2HSPEAR)) @@ -2702,15 +2670,15 @@ int status_calc_pc_(struct map_session_data* sd, bool first) { // Job bonuses index = pc->class2idx(sd->status.class_); for(i=0;i<(int)sd->status.job_level && ijob_bonus[index][i]) continue; - switch(job_bonus[index][i]) { - case 1: bstatus->str++; break; - case 2: bstatus->agi++; break; - case 3: bstatus->vit++; break; - case 4: bstatus->int_++; break; - case 5: bstatus->dex++; break; - case 6: bstatus->luk++; break; + switch(status->job_bonus[index][i]) { + case 1: bstatus->str++; break; + case 2: bstatus->agi++; break; + case 3: bstatus->vit++; break; + case 4: bstatus->int_++; break; + case 5: bstatus->dex++; break; + case 6: bstatus->luk++; break; } } @@ -2764,7 +2732,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) { // Basic MaxHP value //We hold the standard Max HP here to make it faster to recalculate on vit changes. - sd->status.max_hp = status_base_pc_maxhp(sd,bstatus); + sd->status.max_hp = status->base_pc_maxhp(sd,bstatus); //This is done to handle underflows from negative Max HP bonuses i64 = sd->status.max_hp + (int)bstatus->max_hp; bstatus->max_hp = (unsigned int)cap_value(i64, 0, INT_MAX); @@ -2789,7 +2757,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) { // ----- SP MAX CALCULATION ----- // Basic MaxSP value - sd->status.max_sp = status_base_pc_maxsp(sd,bstatus); + sd->status.max_sp = status->base_pc_maxsp(sd,bstatus); //This is done to handle underflows from negative Max SP bonuses i64 = sd->status.max_sp + (int)bstatus->max_sp; bstatus->max_sp = (unsigned int)cap_value(i64, 0, INT_MAX); @@ -2952,7 +2920,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) { // Unlike other stats, ASPD rate modifiers from skills/SCs/items/etc are first all added together, then the final modifier is applied // Basic ASPD value - i = status_base_amotion_pc(sd,bstatus); + i = status->base_amotion_pc(sd,bstatus); bstatus->amotion = cap_value(i,((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd),2000); // Relative modifiers from passive skills @@ -3313,35 +3281,6 @@ int status_calc_npc_(struct npc_data *nd, bool first) { return 0; } -static unsigned short status_calc_str(struct block_list *,struct status_change *,int); -static unsigned short status_calc_agi(struct block_list *,struct status_change *,int); -static unsigned short status_calc_vit(struct block_list *,struct status_change *,int); -static unsigned short status_calc_int(struct block_list *,struct status_change *,int); -static unsigned short status_calc_dex(struct block_list *,struct status_change *,int); -static unsigned short status_calc_luk(struct block_list *,struct status_change *,int); -static unsigned short status_calc_watk(struct block_list *,struct status_change *,int,bool); -static unsigned short status_calc_matk(struct block_list *,struct status_change *,int,bool); -static signed short status_calc_hit(struct block_list *,struct status_change *,int,bool); -static signed short status_calc_critical(struct block_list *,struct status_change *,int,bool); -static signed short status_calc_flee(struct block_list *,struct status_change *,int,bool); -static signed short status_calc_flee2(struct block_list *,struct status_change *,int,bool); -static unsigned short status_calc_speed(struct block_list *,struct status_change *,int); -static short status_calc_aspd_rate(struct block_list *,struct status_change *,int); -static unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion); -#ifdef RENEWAL_ASPD -static short status_calc_aspd(struct block_list *bl, struct status_change *sc, short flag); -#endif -static short status_calc_fix_aspd(struct block_list *bl, struct status_change *sc, int); -static unsigned int status_calc_maxhp(struct block_list *,struct status_change *, uint64); -static unsigned int status_calc_maxsp(struct block_list *,struct status_change *,unsigned int); -static unsigned char status_calc_element(struct block_list *bl, struct status_change *sc, int element); -static unsigned char status_calc_element_lv(struct block_list *bl, struct status_change *sc, int lv); -static unsigned short status_calc_mode(struct block_list *bl, struct status_change *sc, int mode); -#ifdef RENEWAL -static unsigned short status_calc_ematk(struct block_list *,struct status_change *,int); -#else -static unsigned short status_calc_batk(struct block_list *,struct status_change *,int,bool); -#endif //Calculates base regen values. void status_calc_regen(struct block_list *bl, struct status_data *st, struct regen_data *regen) { @@ -3543,14 +3482,14 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { } if(flag&SCB_STR) { - st->str = status_calc_str(bl, sc, bst->str); + st->str = status->calc_str(bl, sc, bst->str); flag|=SCB_BATK; if( bl->type&BL_HOM ) flag |= SCB_WATK; } if(flag&SCB_AGI) { - st->agi = status_calc_agi(bl, sc, bst->agi); + st->agi = status->calc_agi(bl, sc, bst->agi); flag|=SCB_FLEE #ifdef RENEWAL |SCB_DEF2 @@ -3561,7 +3500,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { } if(flag&SCB_VIT) { - st->vit = status_calc_vit(bl, sc, bst->vit); + st->vit = status->calc_vit(bl, sc, bst->vit); flag|=SCB_DEF2|SCB_MDEF2; if( bl->type&(BL_PC|BL_HOM|BL_MER|BL_ELEM) ) flag |= SCB_MAXHP; @@ -3570,7 +3509,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { } if(flag&SCB_INT) { - st->int_ = status_calc_int(bl, sc, bst->int_); + st->int_ = status->calc_int(bl, sc, bst->int_); flag|=SCB_MATK|SCB_MDEF2; if( bl->type&(BL_PC|BL_HOM|BL_MER|BL_ELEM) ) flag |= SCB_MAXSP; @@ -3579,7 +3518,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { } if(flag&SCB_DEX) { - st->dex = status_calc_dex(bl, sc, bst->dex); + st->dex = status->calc_dex(bl, sc, bst->dex); flag|=SCB_BATK|SCB_HIT #ifdef RENEWAL |SCB_MATK|SCB_MDEF2 @@ -3592,7 +3531,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { } if(flag&SCB_LUK) { - st->luk = status_calc_luk(bl, sc, bst->luk); + st->luk = status->calc_luk(bl, sc, bst->luk); flag|=SCB_BATK|SCB_CRI|SCB_FLEE2 #ifdef RENEWAL |SCB_MATK|SCB_HIT|SCB_FLEE @@ -3601,8 +3540,8 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { } if(flag&SCB_BATK && bst->batk) { - st->batk = status_base_atk(bl,st); - temp = bst->batk - status_base_atk(bl,bst); + st->batk = status->base_atk(bl,st); + temp = bst->batk - status->base_atk(bl,bst); if (temp) { temp += st->batk; st->batk = cap_value(temp, 0, USHRT_MAX); @@ -3611,18 +3550,18 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { } if(flag&SCB_WATK) { - st->rhw.atk = status_calc_watk(bl, sc, bst->rhw.atk, true); + st->rhw.atk = status->calc_watk(bl, sc, bst->rhw.atk, true); if (!sd) //Should not affect weapon refine bonus - st->rhw.atk2 = status_calc_watk(bl, sc, bst->rhw.atk2, true); + st->rhw.atk2 = status->calc_watk(bl, sc, bst->rhw.atk2, true); if(bst->lhw.atk) { if (sd) { sd->state.lr_flag = 1; - st->lhw.atk = status_calc_watk(bl, sc, bst->lhw.atk, true); + st->lhw.atk = status->calc_watk(bl, sc, bst->lhw.atk, true); sd->state.lr_flag = 0; } else { - st->lhw.atk = status_calc_watk(bl, sc, bst->lhw.atk, true); - st->lhw.atk2 = status_calc_watk(bl, sc, bst->lhw.atk2, true); + st->lhw.atk = status->calc_watk(bl, sc, bst->lhw.atk, true); + st->lhw.atk2 = status->calc_watk(bl, sc, bst->lhw.atk2, true); } } @@ -3640,9 +3579,9 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { && st->luk == bst->luk #endif ) - st->hit = status_calc_hit(bl, sc, bst->hit, true); + st->hit = status->calc_hit(bl, sc, bst->hit, true); else - st->hit = status_calc_hit(bl, sc, bst->hit + (st->dex - bst->dex) + st->hit = status->calc_hit(bl, sc, bst->hit + (st->dex - bst->dex) #ifdef RENEWAL + (st->luk/3 - bst->luk/3) #endif @@ -3655,9 +3594,9 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { && st->luk == bst->luk #endif ) - st->flee = status_calc_flee(bl, sc, bst->flee, true); + st->flee = status->calc_flee(bl, sc, bst->flee, true); else - st->flee = status_calc_flee(bl, sc, bst->flee +(st->agi - bst->agi) + st->flee = status->calc_flee(bl, sc, bst->flee +(st->agi - bst->agi) #ifdef RENEWAL + (st->luk/5 - bst->luk/5) #endif @@ -3714,7 +3653,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { if(flag&SCB_SPEED) { struct unit_data *ud = unit->bl2ud(bl); - st->speed = status_calc_speed(bl, sc, bst->speed); + st->speed = status->calc_speed(bl, sc, bst->speed); //Re-walk to adjust speed (we do not check if walktimer != INVALID_TIMER //because if you step on something while walking, the moment this @@ -3733,9 +3672,9 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { if(flag&SCB_CRI && bst->cri) { if (st->luk == bst->luk) - st->cri = status_calc_critical(bl, sc, bst->cri, true); + st->cri = status->calc_critical(bl, sc, bst->cri, true); else - st->cri = status_calc_critical(bl, sc, bst->cri + 3*(st->luk - bst->luk), true); + st->cri = status->calc_critical(bl, sc, bst->cri + 3*(st->luk - bst->luk), true); /** * after status_calc_critical so the bonus is applied despite if you have or not a sc bugreport:5240 **/ @@ -3746,9 +3685,9 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { if(flag&SCB_FLEE2 && bst->flee2) { if (st->luk == bst->luk) - st->flee2 = status_calc_flee2(bl, sc, bst->flee2, true); + st->flee2 = status->calc_flee2(bl, sc, bst->flee2, true); else - st->flee2 = status_calc_flee2(bl, sc, bst->flee2 +(st->luk - bst->luk), true); + st->flee2 = status->calc_flee2(bl, sc, bst->flee2 +(st->luk - bst->luk), true); } if(flag&SCB_ATK_ELE) { @@ -3759,12 +3698,12 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { } if(flag&SCB_DEF_ELE) { - st->def_ele = status_calc_element(bl, sc, bst->def_ele); - st->ele_lv = status_calc_element_lv(bl, sc, bst->ele_lv); + st->def_ele = status->calc_element(bl, sc, bst->def_ele); + st->ele_lv = status->calc_element_lv(bl, sc, bst->ele_lv); } if(flag&SCB_MODE) { - st->mode = status_calc_mode(bl, sc, bst->mode); + st->mode = status->calc_mode(bl, sc, bst->mode); //Since mode changed, reset their state. if (!(st->mode&MD_CANATTACK)) unit->stop_attack(bl); @@ -3779,15 +3718,15 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { if(flag&SCB_MAXHP) { if( bl->type&BL_PC ) { - st->max_hp = status_base_pc_maxhp(sd,st); + st->max_hp = status->base_pc_maxhp(sd,st); st->max_hp += bst->max_hp - sd->status.max_hp; - st->max_hp = status_calc_maxhp(bl, sc, st->max_hp); + st->max_hp = status->calc_maxhp(bl, sc, st->max_hp); if( st->max_hp > (unsigned int)battle_config.max_hp ) st->max_hp = (unsigned int)battle_config.max_hp; } else { - st->max_hp = status_calc_maxhp(bl, sc, bst->max_hp); + st->max_hp = status->calc_maxhp(bl, sc, bst->max_hp); } if( st->hp > st->max_hp ) { @@ -3799,15 +3738,15 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { if(flag&SCB_MAXSP) { if( bl->type&BL_PC ) { - st->max_sp = status_base_pc_maxsp(sd,st); + st->max_sp = status->base_pc_maxsp(sd,st); st->max_sp += bst->max_sp - sd->status.max_sp; - st->max_sp = status_calc_maxsp(&sd->bl, &sd->sc, st->max_sp); + st->max_sp = status->calc_maxsp(&sd->bl, &sd->sc, st->max_sp); if( st->max_sp > (unsigned int)battle_config.max_sp ) st->max_sp = (unsigned int)battle_config.max_sp; } else { - st->max_sp = status_calc_maxsp(bl, sc, bst->max_sp); + st->max_sp = status->calc_maxsp(bl, sc, bst->max_sp); } if( st->sp > st->max_sp ) { @@ -3823,46 +3762,46 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { if(flag&SCB_ASPD) { int amotion; if( bl->type&BL_PC ) { - amotion = status_base_amotion_pc(sd,st); + amotion = status->base_amotion_pc(sd,st); #ifndef RENEWAL_ASPD - st->aspd_rate = status_calc_aspd_rate(bl, sc, bst->aspd_rate); + st->aspd_rate = status->calc_aspd_rate(bl, sc, bst->aspd_rate); if(st->aspd_rate != 1000) amotion = amotion*st->aspd_rate/1000; #else // aspd = baseaspd + floor(sqrt((agi^2/2) + (dex^2/5))/4 + (potskillbonus*agi/200)) - amotion -= (int)(sqrt( (pow(st->agi, 2) / 2) + (pow(st->dex, 2) / 5) ) / 4 + ((float)status_calc_aspd(bl, sc, 1) * st->agi / 200)) * 10; + amotion -= (int)(sqrt( (pow(st->agi, 2) / 2) + (pow(st->dex, 2) / 5) ) / 4 + ((float)status->calc_aspd(bl, sc, 1) * st->agi / 200)) * 10; - if( (status_calc_aspd(bl, sc, 2) + st->aspd_rate2) != 0 ) // RE ASPD percertage modifier + if( (status->calc_aspd(bl, sc, 2) + st->aspd_rate2) != 0 ) // RE ASPD percertage modifier amotion -= (( amotion - ((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd) ) - * (status_calc_aspd(bl, sc, 2) + st->aspd_rate2) / 10 + 5) / 10; + * (status->calc_aspd(bl, sc, 2) + st->aspd_rate2) / 10 + 5) / 10; if(st->aspd_rate != 1000) // absolute percentage modifier amotion = ( 200 - (200-amotion/10) * st->aspd_rate / 1000 ) * 10; #endif - amotion = status_calc_fix_aspd(bl, sc, amotion); + amotion = status->calc_fix_aspd(bl, sc, amotion); st->amotion = cap_value(amotion,((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd),2000); st->adelay = 2*st->amotion; } else if( bl->type&BL_HOM ) { amotion = (1000 - 4*st->agi - st->dex) * ((TBL_HOM*)bl)->homunculusDB->baseASPD/1000; - st->aspd_rate = status_calc_aspd_rate(bl, sc, bst->aspd_rate); + st->aspd_rate = status->calc_aspd_rate(bl, sc, bst->aspd_rate); if(st->aspd_rate != 1000) amotion = amotion*st->aspd_rate/1000; - amotion = status_calc_fix_aspd(bl, sc, amotion); + amotion = status->calc_fix_aspd(bl, sc, amotion); st->amotion = cap_value(amotion,battle_config.max_aspd,2000); st->adelay = st->amotion; } else { // mercenary and mobs amotion = bst->amotion; - st->aspd_rate = status_calc_aspd_rate(bl, sc, bst->aspd_rate); + st->aspd_rate = status->calc_aspd_rate(bl, sc, bst->aspd_rate); if(st->aspd_rate != 1000) amotion = amotion*st->aspd_rate/1000; - amotion = status_calc_fix_aspd(bl, sc, amotion); + amotion = status->calc_fix_aspd(bl, sc, amotion); st->amotion = cap_value(amotion, battle_config.monster_max_aspd, 2000); temp = bst->adelay*st->aspd_rate/1000; @@ -3874,21 +3813,21 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { int dmotion; if( bl->type&BL_PC ) { if (bst->agi == st->agi) - st->dmotion = status_calc_dmotion(bl, sc, bst->dmotion); + st->dmotion = status->calc_dmotion(bl, sc, bst->dmotion); else { dmotion = 800-st->agi*4; st->dmotion = cap_value(dmotion, 400, 800); if(battle_config.pc_damage_delay_rate != 100) st->dmotion = st->dmotion*battle_config.pc_damage_delay_rate/100; //It's safe to ignore bst->dmotion since no bonus affects it. - st->dmotion = status_calc_dmotion(bl, sc, st->dmotion); + st->dmotion = status->calc_dmotion(bl, sc, st->dmotion); } } else if( bl->type&BL_HOM ) { dmotion = 800-st->agi*4; st->dmotion = cap_value(dmotion, 400, 800); - st->dmotion = status_calc_dmotion(bl, sc, bst->dmotion); + st->dmotion = status->calc_dmotion(bl, sc, bst->dmotion); } else { // mercenary and mobs - st->dmotion = status_calc_dmotion(bl, sc, bst->dmotion); + st->dmotion = status->calc_dmotion(bl, sc, bst->dmotion); } } @@ -3923,7 +3862,7 @@ void status_calc_bl_(struct block_list *bl, enum scb_flag flag, bool first) { case BL_HOM: status->calc_homunculus_(BL_CAST(BL_HOM,bl), first); break; case BL_MER: status->calc_mercenary_(BL_CAST(BL_MER,bl), first); break; case BL_ELEM: status->calc_elemental_(BL_CAST(BL_ELEM,bl), first); break; - case BL_NPC: status_calc_npc_(BL_CAST(BL_NPC,bl), first); break; + case BL_NPC: status->calc_npc_(BL_CAST(BL_NPC,bl), first); break; } } @@ -3933,7 +3872,7 @@ void status_calc_bl_(struct block_list *bl, enum scb_flag flag, bool first) { if( first && bl->type == BL_MOB ) return; // assume there will be no statuses active - status_calc_bl_main(bl, flag); + status->calc_bl_main(bl, flag); if( first && bl->type == BL_HOM ) return; // client update handled by caller @@ -4076,7 +4015,7 @@ void status_calc_bl_(struct block_list *bl, enum scb_flag flag, bool first) { /*========================================== * Apply shared stat mods from status changes [DracoRPG] *------------------------------------------*/ -static unsigned short status_calc_str(struct block_list *bl, struct status_change *sc, int str) +unsigned short status_calc_str(struct block_list *bl, struct status_change *sc, int str) { if(!sc || !sc->count) return cap_value(str,0,USHRT_MAX); @@ -4133,7 +4072,7 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang return (unsigned short)cap_value(str,0,USHRT_MAX); } -static unsigned short status_calc_agi(struct block_list *bl, struct status_change *sc, int agi) +unsigned short status_calc_agi(struct block_list *bl, struct status_change *sc, int agi) { if(!sc || !sc->count) return cap_value(agi,0,USHRT_MAX); @@ -4191,7 +4130,7 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang return (unsigned short)cap_value(agi,0,USHRT_MAX); } -static unsigned short status_calc_vit(struct block_list *bl, struct status_change *sc, int vit) +unsigned short status_calc_vit(struct block_list *bl, struct status_change *sc, int vit) { if(!sc || !sc->count) return cap_value(vit,0,USHRT_MAX); @@ -4239,7 +4178,7 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang return (unsigned short)cap_value(vit,0,USHRT_MAX); } -static unsigned short status_calc_int(struct block_list *bl, struct status_change *sc, int int_) +unsigned short status_calc_int(struct block_list *bl, struct status_change *sc, int int_) { if(!sc || !sc->count) return cap_value(int_,0,USHRT_MAX); @@ -4297,7 +4236,7 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang return (unsigned short)cap_value(int_,0,USHRT_MAX); } -static unsigned short status_calc_dex(struct block_list *bl, struct status_change *sc, int dex) +unsigned short status_calc_dex(struct block_list *bl, struct status_change *sc, int dex) { if(!sc || !sc->count) return cap_value(dex,0,USHRT_MAX); @@ -4357,7 +4296,7 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang return (unsigned short)cap_value(dex,0,USHRT_MAX); } -static unsigned short status_calc_luk(struct block_list *bl, struct status_change *sc, int luk) +unsigned short status_calc_luk(struct block_list *bl, struct status_change *sc, int luk) { if(!sc || !sc->count) return cap_value(luk,0,USHRT_MAX); @@ -4406,11 +4345,7 @@ static unsigned short status_calc_luk(struct block_list *bl, struct status_chang return (unsigned short)cap_value(luk,0,USHRT_MAX); } -#ifdef RENEWAL unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, int batk, bool viewable) -#else -static unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, int batk, bool viewable) -#endif { if(!sc || !sc->count) return cap_value(batk,0,USHRT_MAX); @@ -4490,7 +4425,7 @@ static unsigned short status_calc_batk(struct block_list *bl, struct status_chan return (unsigned short)cap_value(batk,0,USHRT_MAX); } -static unsigned short status_calc_watk(struct block_list *bl, struct status_change *sc, int watk, bool viewable) +unsigned short status_calc_watk(struct block_list *bl, struct status_change *sc, int watk, bool viewable) { if(!sc || !sc->count) return cap_value(watk,0,USHRT_MAX); @@ -4580,7 +4515,7 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan return (unsigned short)cap_value(watk,0,USHRT_MAX); } #ifdef RENEWAL -static unsigned short status_calc_ematk(struct block_list *bl, struct status_change *sc, int matk) +unsigned short status_calc_ematk(struct block_list *bl, struct status_change *sc, int matk) { if (!sc || !sc->count) @@ -4606,7 +4541,7 @@ static unsigned short status_calc_ematk(struct block_list *bl, struct status_cha return (unsigned short)cap_value(matk,0,USHRT_MAX); } #endif -static unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc, int matk, bool viewable) +unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc, int matk, bool viewable) { if(!sc || !sc->count) return cap_value(matk,0,USHRT_MAX); @@ -4655,7 +4590,7 @@ static unsigned short status_calc_matk(struct block_list *bl, struct status_chan return (unsigned short)cap_value(matk,0,USHRT_MAX); } -static signed short status_calc_critical(struct block_list *bl, struct status_change *sc, int critical, bool viewable) { +signed short status_calc_critical(struct block_list *bl, struct status_change *sc, int critical, bool viewable) { if(!sc || !sc->count) return cap_value(critical,10,SHRT_MAX); @@ -4690,7 +4625,7 @@ static signed short status_calc_critical(struct block_list *bl, struct status_ch return (short)cap_value(critical,10,SHRT_MAX); } -static signed short status_calc_hit(struct block_list *bl, struct status_change *sc, int hit, bool viewable) +signed short status_calc_hit(struct block_list *bl, struct status_change *sc, int hit, bool viewable) { if(!sc || !sc->count) @@ -4736,7 +4671,7 @@ static signed short status_calc_hit(struct block_list *bl, struct status_change return (short)cap_value(hit,1,SHRT_MAX); } -static signed short status_calc_flee(struct block_list *bl, struct status_change *sc, int flee, bool viewable) { +signed short status_calc_flee(struct block_list *bl, struct status_change *sc, int flee, bool viewable) { if( bl->type == BL_PC ) { if( map_flag_gvg2(bl->m) ) flee -= flee * battle_config.gvg_flee_penalty/100; @@ -4821,7 +4756,7 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change return (short)cap_value(flee,1,SHRT_MAX); } -static signed short status_calc_flee2(struct block_list *bl, struct status_change *sc, int flee2, bool viewable) +signed short status_calc_flee2(struct block_list *bl, struct status_change *sc, int flee2, bool viewable) { if(!sc || !sc->count) return cap_value(flee2,10,SHRT_MAX); @@ -5082,7 +5017,7 @@ signed short status_calc_mdef2(struct block_list *bl, struct status_change *sc, #endif } -static unsigned short status_calc_speed(struct block_list *bl, struct status_change *sc, int speed) +unsigned short status_calc_speed(struct block_list *bl, struct status_change *sc, int speed) { TBL_PC* sd = BL_CAST(BL_PC, bl); int speed_rate; @@ -5270,7 +5205,7 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha #ifdef RENEWAL_ASPD // flag&1 - fixed value [malufett] // flag&2 - percentage value -static short status_calc_aspd(struct block_list *bl, struct status_change *sc, short flag) +short status_calc_aspd(struct block_list *bl, struct status_change *sc, short flag) { int i, pots = 0, skills1 = 0, skills2 = 0; @@ -5386,7 +5321,7 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s } #endif -static short status_calc_fix_aspd(struct block_list *bl, struct status_change *sc, int aspd) { +short status_calc_fix_aspd(struct block_list *bl, struct status_change *sc, int aspd) { if (!sc || !sc->count) return cap_value(aspd, 0, 2000); @@ -5406,7 +5341,7 @@ static short status_calc_fix_aspd(struct block_list *bl, struct status_change *s /// Calculates an object's ASPD modifier (alters the base amotion value). /// Note that the scale of aspd_rate is 1000 = 100%. -static short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int aspd_rate) +short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int aspd_rate) { int i; @@ -5543,7 +5478,7 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change * return (short)cap_value(aspd_rate,0,SHRT_MAX); } -static unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion) { +unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion) { if( !sc || !sc->count || map_flag_gvg2(bl->m) || maplist[bl->m].flag.battleground ) return cap_value(dmotion,0,USHRT_MAX); /** @@ -5557,7 +5492,7 @@ static unsigned short status_calc_dmotion(struct block_list *bl, struct status_c return (unsigned short)cap_value(dmotion,0,USHRT_MAX); } -static unsigned int status_calc_maxhp(struct block_list *bl, struct status_change *sc, uint64 maxhp) +unsigned int status_calc_maxhp(struct block_list *bl, struct status_change *sc, uint64 maxhp) { if(!sc || !sc->count) return (unsigned int)cap_value(maxhp,1,UINT_MAX); @@ -5618,7 +5553,7 @@ static unsigned int status_calc_maxhp(struct block_list *bl, struct status_chang return (unsigned int)cap_value(maxhp,1,UINT_MAX); } -static unsigned int status_calc_maxsp(struct block_list *bl, struct status_change *sc, unsigned int maxsp) +unsigned int status_calc_maxsp(struct block_list *bl, struct status_change *sc, unsigned int maxsp) { if(!sc || !sc->count) return cap_value(maxsp,1,UINT_MAX); @@ -5641,7 +5576,7 @@ static unsigned int status_calc_maxsp(struct block_list *bl, struct status_chang return cap_value(maxsp,1,UINT_MAX); } -static unsigned char status_calc_element(struct block_list *bl, struct status_change *sc, int element) +unsigned char status_calc_element(struct block_list *bl, struct status_change *sc, int element) { if(!sc || !sc->count) return element; @@ -5662,7 +5597,7 @@ static unsigned char status_calc_element(struct block_list *bl, struct status_ch return (unsigned char)cap_value(element,0,UCHAR_MAX); } -static unsigned char status_calc_element_lv(struct block_list *bl, struct status_change *sc, int lv) +unsigned char status_calc_element_lv(struct block_list *bl, struct status_change *sc, int lv) { if(!sc || !sc->count) return lv; @@ -5719,7 +5654,7 @@ unsigned char status_calc_attack_element(struct block_list *bl, struct status_ch return (unsigned char)cap_value(element,0,UCHAR_MAX); } -static unsigned short status_calc_mode(struct block_list *bl, struct status_change *sc, int mode) +unsigned short status_calc_mode(struct block_list *bl, struct status_change *sc, int mode) { if(!sc || !sc->count) return mode; @@ -5737,11 +5672,11 @@ static unsigned short status_calc_mode(struct block_list *bl, struct status_chan const char* status_get_name(struct block_list *bl) { nullpo_ret(bl); switch (bl->type) { - case BL_PC: return ((TBL_PC *)bl)->fakename[0] != '\0' ? ((TBL_PC*)bl)->fakename : ((TBL_PC*)bl)->status.name; - case BL_MOB: return ((TBL_MOB*)bl)->name; - case BL_PET: return ((TBL_PET*)bl)->pet.name; - case BL_HOM: return ((TBL_HOM*)bl)->homunculus.name; - case BL_NPC: return ((TBL_NPC*)bl)->name; + case BL_PC: return ((TBL_PC *)bl)->fakename[0] != '\0' ? ((TBL_PC*)bl)->fakename : ((TBL_PC*)bl)->status.name; + case BL_MOB: return ((TBL_MOB*)bl)->name; + case BL_PET: return ((TBL_PET*)bl)->pet.name; + case BL_HOM: return ((TBL_HOM*)bl)->homunculus.name; + case BL_NPC: return ((TBL_NPC*)bl)->name; } return "Unknown"; } @@ -5755,13 +5690,13 @@ const char* status_get_name(struct block_list *bl) { int status_get_class(struct block_list *bl) { nullpo_ret(bl); switch( bl->type ) { - case BL_PC: return ((TBL_PC*)bl)->status.class_; - case BL_MOB: return ((TBL_MOB*)bl)->vd->class_; //Class used on all code should be the view class of the mob. - case BL_PET: return ((TBL_PET*)bl)->pet.class_; - case BL_HOM: return ((TBL_HOM*)bl)->homunculus.class_; - case BL_MER: return ((TBL_MER*)bl)->mercenary.class_; - case BL_NPC: return ((TBL_NPC*)bl)->class_; - case BL_ELEM: return ((TBL_ELEM*)bl)->elemental.class_; + case BL_PC: return ((TBL_PC*)bl)->status.class_; + case BL_MOB: return ((TBL_MOB*)bl)->vd->class_; //Class used on all code should be the view class of the mob. + case BL_PET: return ((TBL_PET*)bl)->pet.class_; + case BL_HOM: return ((TBL_HOM*)bl)->homunculus.class_; + case BL_MER: return ((TBL_MER*)bl)->mercenary.class_; + case BL_NPC: return ((TBL_NPC*)bl)->class_; + case BL_ELEM: return ((TBL_ELEM*)bl)->elemental.class_; } return 0; } @@ -5774,13 +5709,13 @@ int status_get_class(struct block_list *bl) { int status_get_lv(struct block_list *bl) { nullpo_ret(bl); switch (bl->type) { - case BL_PC: return ((TBL_PC*)bl)->status.base_level; - case BL_MOB: return ((TBL_MOB*)bl)->level; - case BL_PET: return ((TBL_PET*)bl)->pet.level; - case BL_HOM: return ((TBL_HOM*)bl)->homunculus.level; - case BL_MER: return ((TBL_MER*)bl)->db->lv; - case BL_ELEM: return ((TBL_ELEM*)bl)->db->lv; - case BL_NPC: return ((TBL_NPC*)bl)->level; + case BL_PC: return ((TBL_PC*)bl)->status.base_level; + case BL_MOB: return ((TBL_MOB*)bl)->level; + case BL_PET: return ((TBL_PET*)bl)->pet.level; + case BL_HOM: return ((TBL_HOM*)bl)->homunculus.level; + case BL_MER: return ((TBL_MER*)bl)->db->lv; + case BL_ELEM: return ((TBL_ELEM*)bl)->db->lv; + case BL_NPC: return ((TBL_NPC*)bl)->level; } return 1; } @@ -5789,29 +5724,29 @@ struct regen_data *status_get_regen_data(struct block_list *bl) { nullpo_retr(NULL, bl); switch (bl->type) { - case BL_PC: return &((TBL_PC*)bl)->regen; - case BL_HOM: return &((TBL_HOM*)bl)->regen; - case BL_MER: return &((TBL_MER*)bl)->regen; - case BL_ELEM: return &((TBL_ELEM*)bl)->regen; - default: - return NULL; + case BL_PC: return &((TBL_PC*)bl)->regen; + case BL_HOM: return &((TBL_HOM*)bl)->regen; + case BL_MER: return &((TBL_MER*)bl)->regen; + case BL_ELEM: return &((TBL_ELEM*)bl)->regen; + default: + return NULL; } } struct status_data *status_get_status_data(struct block_list *bl) { - nullpo_retr(&dummy_status, bl); + nullpo_retr(&status->dummy, bl); switch (bl->type) { - case BL_PC: return &((TBL_PC*)bl)->battle_status; - case BL_MOB: return &((TBL_MOB*)bl)->status; - case BL_PET: return &((TBL_PET*)bl)->status; - case BL_HOM: return &((TBL_HOM*)bl)->battle_status; - case BL_MER: return &((TBL_MER*)bl)->battle_status; - case BL_ELEM: return &((TBL_ELEM*)bl)->battle_status; - case BL_NPC: return ((mob->db_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : &dummy_status); - default: - return &dummy_status; + case BL_PC: return &((TBL_PC*)bl)->battle_status; + case BL_MOB: return &((TBL_MOB*)bl)->status; + case BL_PET: return &((TBL_PET*)bl)->status; + case BL_HOM: return &((TBL_HOM*)bl)->battle_status; + case BL_MER: return &((TBL_MER*)bl)->battle_status; + case BL_ELEM: return &((TBL_ELEM*)bl)->battle_status; + case BL_NPC: return ((mob->db_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : &status->dummy); + default: + return &status->dummy; } } @@ -5819,15 +5754,15 @@ struct status_data *status_get_base_status(struct block_list *bl) { nullpo_retr(NULL, bl); switch (bl->type) { - case BL_PC: return &((TBL_PC*)bl)->base_status; - case BL_MOB: return ((TBL_MOB*)bl)->base_status ? ((TBL_MOB*)bl)->base_status : &((TBL_MOB*)bl)->db->status; - case BL_PET: return &((TBL_PET*)bl)->db->status; - case BL_HOM: return &((TBL_HOM*)bl)->base_status; - case BL_MER: return &((TBL_MER*)bl)->base_status; - case BL_ELEM: return &((TBL_ELEM*)bl)->base_status; - case BL_NPC: return ((mob->db_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : NULL); - default: - return NULL; + case BL_PC: return &((TBL_PC*)bl)->base_status; + case BL_MOB: return ((TBL_MOB*)bl)->base_status ? ((TBL_MOB*)bl)->base_status : &((TBL_MOB*)bl)->db->status; + case BL_PET: return &((TBL_PET*)bl)->db->status; + case BL_HOM: return &((TBL_HOM*)bl)->base_status; + case BL_MER: return &((TBL_MER*)bl)->base_status; + case BL_ELEM: return &((TBL_ELEM*)bl)->base_status; + case BL_NPC: return ((mob->db_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : NULL); + default: + return NULL; } } defType status_get_def(struct block_list *bl) { @@ -6004,13 +5939,13 @@ struct view_data* status_get_viewdata(struct block_list *bl) { nullpo_retr(NULL, bl); switch (bl->type) { - case BL_PC: return &((TBL_PC*)bl)->vd; - case BL_MOB: return ((TBL_MOB*)bl)->vd; - case BL_PET: return &((TBL_PET*)bl)->vd; - case BL_NPC: return ((TBL_NPC*)bl)->vd; - case BL_HOM: return ((TBL_HOM*)bl)->vd; - case BL_MER: return ((TBL_MER*)bl)->vd; - case BL_ELEM: return ((TBL_ELEM*)bl)->vd; + case BL_PC: return &((TBL_PC*)bl)->vd; + case BL_MOB: return ((TBL_MOB*)bl)->vd; + case BL_PET: return &((TBL_PET*)bl)->vd; + case BL_NPC: return ((TBL_NPC*)bl)->vd; + case BL_HOM: return ((TBL_HOM*)bl)->vd; + case BL_MER: return ((TBL_MER*)bl)->vd; + case BL_ELEM: return ((TBL_ELEM*)bl)->vd; } return NULL; } @@ -6039,24 +5974,24 @@ void status_set_viewdata(struct block_list *bl, int class_) if (pcdb_checkid(class_)) { if (sd->sc.option&OPTION_RIDING) { switch (class_) { //Adapt class to a Mounted one. - case JOB_KNIGHT: - class_ = JOB_KNIGHT2; - break; - case JOB_CRUSADER: - class_ = JOB_CRUSADER2; - break; - case JOB_LORD_KNIGHT: - class_ = JOB_LORD_KNIGHT2; - break; - case JOB_PALADIN: - class_ = JOB_PALADIN2; - break; - case JOB_BABY_KNIGHT: - class_ = JOB_BABY_KNIGHT2; - break; - case JOB_BABY_CRUSADER: - class_ = JOB_BABY_CRUSADER2; - break; + case JOB_KNIGHT: + class_ = JOB_KNIGHT2; + break; + case JOB_CRUSADER: + class_ = JOB_CRUSADER2; + break; + case JOB_LORD_KNIGHT: + class_ = JOB_LORD_KNIGHT2; + break; + case JOB_PALADIN: + class_ = JOB_PALADIN2; + break; + case JOB_BABY_KNIGHT: + class_ = JOB_BABY_KNIGHT2; + break; + case JOB_BABY_CRUSADER: + class_ = JOB_BABY_CRUSADER2; + break; } } sd->vd.class_ = class_; @@ -7277,7 +7212,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val } vd = status->get_viewdata(bl); - calc_flag = StatusChangeFlagTable[type]; + calc_flag = status->ChangeFlagTable[type]; if(!(flag&4)) { //&4 - Do not parse val settings when loading SCs switch(type) { case SC_DEC_AGI: @@ -8732,7 +8667,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val val_flag |= 1; break; default: - if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 ) + if( calc_flag == SCB_NONE && status->SkillChangeTable[type] == 0 && status->IconChangeTable[type] == 0 ) { //Status change with no calc, no icon, and no skill associated...? ShowError("UnknownStatusChange [%d]\n", type); return 0; @@ -8768,7 +8703,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val } /* [Ind/Hercules] */ - if( sd && StatusDisplayType[type] ) { + if( sd && status->DisplayType[type] ) { int dval1 = 0, dval2 = 0, dval3 = 0; switch( type ) { case SC_ALL_RIDING: @@ -8778,7 +8713,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val dval1 = val1; break; } - status_display_add(sd,type,dval1,dval2,dval3); + status->display_add(sd,type,dval1,dval2,dval3); } //Those that make you stop attacking/walking.... @@ -9036,8 +8971,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val calc_flag&=~SCB_DYE; } - if( !(flag&4 && StatusDisplayType[type]) ) - clif->status_change(bl,StatusIconChangeTable[type],1,tick,(val_flag&1)?val1:1,(val_flag&2)?val2:0,(val_flag&4)?val3:0); + if( !(flag&4 && status->DisplayType[type]) ) + clif->status_change(bl,status->IconChangeTable[type],1,tick,(val_flag&1)?val1:1,(val_flag&2)?val2:0,(val_flag&4)?val3:0); /** * used as temporary storage for scs with interval ticks, so that the actual duration is sent to the client first. @@ -9051,7 +8986,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val timer->delete(sce->timer, status->change_timer); } else {// new sc ++(sc->count); - sce = sc->data[type] = ers_alloc(sc_data_ers, struct status_change_entry); + sce = sc->data[type] = ers_alloc(status->data_ers, struct status_change_entry); } sce->val1 = val1; sce->val2 = val2; @@ -9204,7 +9139,7 @@ int status_change_clear(struct block_list* bl, int type) { (sc->count)--; if (sc->data[i]->timer != INVALID_TIMER) timer->delete(sc->data[i]->timer, status->change_timer); - ers_free(sc_data_ers, sc->data[i]); + ers_free(status->data_ers, sc->data[i]); sc->data[i] = NULL; } } @@ -9278,12 +9213,12 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const sc->data[type] = NULL; - if( sd && StatusDisplayType[type] ) { - status_display_remove(sd,type); + if( sd && status->DisplayType[type] ) { + status->display_remove(sd,type); } vd = status->get_viewdata(bl); - calc_flag = StatusChangeFlagTable[type]; + calc_flag = status->ChangeFlagTable[type]; switch(type) { case SC_GRANITIC_ARMOR: { @@ -9886,7 +9821,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const } //On Aegis, when turning off a status change, first goes the sc packet, then the option packet. - clif->sc_end(bl,bl->id,AREA,StatusIconChangeTable[type]); + clif->sc_end(bl,bl->id,AREA,status->IconChangeTable[type]); if( opt_flag&8 ) //bugreport:681 clif->changeoption2(bl); @@ -9910,7 +9845,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const if(opt_flag&2 && sd && map->getcell(bl->m,bl->x,bl->y,CELL_CHKNPC)) npc->touch_areanpc(sd,bl->m,bl->x,bl->y); //Trigger on-touch event. - ers_free(sc_data_ers, sce); + ers_free(status->data_ers, sce); return 1; } @@ -10059,7 +9994,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) { sc->opt1 = OPT1_STONE; clif->changeoption(bl); sc_timer_next(1000+tick, status->change_timer, bl->id, data ); - status_calc_bl(bl, StatusChangeFlagTable[type]); + status_calc_bl(bl, status->ChangeFlagTable[type]); return 0; } if(--(sce->val3) > 0) { @@ -10865,7 +10800,7 @@ int status_get_weapon_atk(struct block_list *bl, struct weapon_atk *watk, int fl if( bl->type == BL_PC && ((TBL_PC*)bl)->right_weapon.overrefine > 0 && !(flag&2) ) max += rnd()%((TBL_PC*)bl)->right_weapon.overrefine + 1; - max = status_calc_watk(bl, sc, max, false); + max = status->calc_watk(bl, sc, max, false); return max; } @@ -10911,7 +10846,7 @@ int status_get_matk(struct block_list *bl, int flag) { if( sd && sd->bonus.ematk > 0 && flag != 3 ) st->matk_min += sd->bonus.ematk; if( flag != 3 ) - st->matk_min = status_calc_ematk(bl, sc, st->matk_min); + st->matk_min = status->calc_ematk(bl, sc, st->matk_min); st->matk_max = st->matk_min; @@ -10949,8 +10884,8 @@ int status_get_matk(struct block_list *bl, int flag) { if( flag ) // get unmodified from sc matk GETRANDMATK(st); - st->matk_min = status_calc_matk(bl, sc, st->matk_min, true); - st->matk_max = status_calc_matk(bl, sc, st->matk_max, true); + st->matk_min = status->calc_matk(bl, sc, st->matk_min, true); + st->matk_max = status->calc_matk(bl, sc, st->matk_max, true); return 0; } @@ -11106,8 +11041,7 @@ int status_change_spread( struct block_list *src, struct block_list *bl ) { } //Natural regen related stuff. -static unsigned int natural_heal_prev_tick,natural_heal_diff_tick; -static int status_natural_heal(struct block_list* bl, va_list args) { +int status_natural_heal(struct block_list* bl, va_list args) { struct regen_data *regen; struct status_data *st; struct status_change *sc; @@ -11140,9 +11074,9 @@ static int status_natural_heal(struct block_list* bl, va_list args) { if (sd) { if (sd->hp_loss.value || sd->sp_loss.value) - pc->bleeding(sd, natural_heal_diff_tick); + pc->bleeding(sd, status->natural_heal_diff_tick); if (sd->hp_regen.value || sd->sp_regen.value) - pc->regen(sd, natural_heal_diff_tick); + pc->regen(sd, status->natural_heal_diff_tick); } if (flag&(RGN_SHP|RGN_SSP) @@ -11154,7 +11088,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) { sregen = regen->ssregen; if(flag&(RGN_SHP)) { //Sitting HP regen - val = natural_heal_diff_tick * sregen->rate.hp; + val = status->natural_heal_diff_tick * sregen->rate.hp; if (regen->state.overweight) val>>=1; //Half as fast when overweight. sregen->tick.hp += val; @@ -11169,7 +11103,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) { } if(flag&(RGN_SSP)) { //Sitting SP regen - val = natural_heal_diff_tick * sregen->rate.sp; + val = status->natural_heal_diff_tick * sregen->rate.sp; if (regen->state.overweight) val>>=1; //Half as fast when overweight. sregen->tick.sp += val; @@ -11208,7 +11142,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) { //Natural Hp regen if (flag&RGN_HP) { - rate = natural_heal_diff_tick*(regen->rate.hp+bonus); + rate = status->natural_heal_diff_tick*(regen->rate.hp+bonus); if (ud && ud->walktimer != INVALID_TIMER) rate/=2; // Homun HP regen fix (they should regen as if they were sitting (twice as fast) @@ -11229,7 +11163,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) { //Natural SP regen if(flag&RGN_SP) { - rate = natural_heal_diff_tick*(regen->rate.sp+bonus); + rate = status->natural_heal_diff_tick*(regen->rate.sp+bonus); // Homun SP regen fix (they should regen as if they were sitting (twice as fast) if(bl->type==BL_HOM) rate *=2; @@ -11254,7 +11188,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) { if(flag&RGN_SHP) { //Skill HP regen - sregen->tick.hp += natural_heal_diff_tick * sregen->rate.hp; + sregen->tick.hp += status->natural_heal_diff_tick * sregen->rate.hp; while(sregen->tick.hp >= (unsigned int)battle_config.natural_heal_skill_interval) { sregen->tick.hp -= battle_config.natural_heal_skill_interval; @@ -11264,7 +11198,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) { } if(flag&RGN_SSP) { //Skill SP regen - sregen->tick.sp += natural_heal_diff_tick * sregen->rate.sp; + sregen->tick.sp += status->natural_heal_diff_tick * sregen->rate.sp; while(sregen->tick.sp >= (unsigned int)battle_config.natural_heal_skill_interval) { val = sregen->sp; if (sd && sd->state.doridori) { @@ -11291,10 +11225,10 @@ static int status_natural_heal(struct block_list* bl, va_list args) { } //Natural heal main timer. -static int status_natural_heal_timer(int tid, unsigned int tick, int id, intptr_t data) { - natural_heal_diff_tick = DIFF_TICK(tick,natural_heal_prev_tick); - map->map_foreachregen(status_natural_heal); - natural_heal_prev_tick = tick; +int status_natural_heal_timer(int tid, unsigned int tick, int id, intptr_t data) { + status->natural_heal_diff_tick = DIFF_TICK(tick,status->natural_heal_prev_tick); + map->map_foreachregen(status->natural_heal); + status->natural_heal_prev_tick = tick; return 0; } @@ -11309,7 +11243,7 @@ int status_get_refine_chance(enum refine_type wlv, int refine) { if ( refine < 0 || refine >= MAX_REFINE) return 0; - return refine_info[wlv].chance[refine]; + return status->refine_info[wlv].chance[refine]; } int status_get_sc_type(sc_type type) { @@ -11317,7 +11251,7 @@ int status_get_sc_type(sc_type type) { if( type <= SC_NONE || type >= SC_MAX ) return 0; - return sc_conf[type]; + return status->sc_conf[type]; } /*------------------------------------------ @@ -11327,7 +11261,7 @@ int status_get_sc_type(sc_type type) { * size_fix.txt - size adjustment table for weapons * refine_db.txt - refining data table *------------------------------------------*/ -static bool status_readdb_job1(char* fields[], int columns, int current) +bool status_readdb_job1(char* fields[], int columns, int current) {// Job-specific values (weight, HP, SP, ASPD) int idx, class_; unsigned int i; @@ -11341,22 +11275,22 @@ static bool status_readdb_job1(char* fields[], int columns, int current) } idx = pc->class2idx(class_); - max_weight_base[idx] = atoi(fields[1]); - hp_coefficient[idx] = atoi(fields[2]); - hp_coefficient2[idx] = atoi(fields[3]); - sp_coefficient[idx] = atoi(fields[4]); + status->max_weight_base[idx] = atoi(fields[1]); + status->hp_coefficient[idx] = atoi(fields[2]); + status->hp_coefficient2[idx] = atoi(fields[3]); + status->sp_coefficient[idx] = atoi(fields[4]); #ifdef RENEWAL_ASPD for(i = 0; i <= MAX_WEAPON_TYPE; i++) #else for(i = 0; i < MAX_WEAPON_TYPE; i++) #endif { - aspd_base[idx][i] = atoi(fields[i+5]); + status->aspd_base[idx][i] = atoi(fields[i+5]); } return true; } -static bool status_readdb_job2(char* fields[], int columns, int current) +bool status_readdb_job2(char* fields[], int columns, int current) { int idx, class_, i; @@ -11371,23 +11305,23 @@ static bool status_readdb_job2(char* fields[], int columns, int current) for(i = 1; i < columns; i++) { - job_bonus[idx][i-1] = atoi(fields[i]); + status->job_bonus[idx][i-1] = atoi(fields[i]); } return true; } -static bool status_readdb_sizefix(char* fields[], int columns, int current) +bool status_readdb_sizefix(char* fields[], int columns, int current) { unsigned int i; for(i = 0; i < MAX_WEAPON_TYPE; i++) { - atkmods[current][i] = atoi(fields[i]); + status->atkmods[current][i] = atoi(fields[i]); } return true; } -static bool status_readdb_refine(char* fields[], int columns, int current) +bool status_readdb_refine(char* fields[], int columns, int current) { int i, bonus_per_level, random_bonus, random_bonus_start_level; @@ -11409,19 +11343,19 @@ static bool status_readdb_refine(char* fields[], int columns, int current) *delim = '\0'; - refine_info[current].chance[i] = atoi(fields[4+i]); + status->refine_info[current].chance[i] = atoi(fields[4+i]); if (i >= random_bonus_start_level - 1) - refine_info[current].randombonus_max[i] = random_bonus * (i - random_bonus_start_level + 2); + status->refine_info[current].randombonus_max[i] = random_bonus * (i - random_bonus_start_level + 2); - refine_info[current].bonus[i] = bonus_per_level + atoi(delim+1); + status->refine_info[current].bonus[i] = bonus_per_level + atoi(delim+1); if (i > 0) - refine_info[current].bonus[i] += refine_info[current].bonus[i-1]; + status->refine_info[current].bonus[i] += status->refine_info[current].bonus[i-1]; } return true; } -static bool status_readdb_scconfig(char* fields[], int columns, int current) { +bool status_readdb_scconfig(char* fields[], int columns, int current) { int val = 0; char* type = fields[0]; @@ -11430,46 +11364,44 @@ static bool status_readdb_scconfig(char* fields[], int columns, int current) { return false; } - sc_conf[val] = (int)strtol(fields[1], NULL, 0); + status->sc_conf[val] = (int)strtol(fields[1], NULL, 0); return true; } -/* -* Read status db -* job1.txt -* job2.txt -* size_fixe.txt -* refine_db.txt -*/ +/** + * Read status db + * job1.txt + * job2.txt + * size_fixe.txt + * refine_db.txt + **/ int status_readdb(void) { int i, j; // initialize databases to default // - - // reset job_db1.txt data - memset(max_weight_base, 0, sizeof(max_weight_base)); - memset(hp_coefficient, 0, sizeof(hp_coefficient)); - memset(hp_coefficient2, 0, sizeof(hp_coefficient2)); - memset(sp_coefficient, 0, sizeof(sp_coefficient)); - memset(aspd_base, 0, sizeof(aspd_base)); - // reset job_db2.txt data - memset(job_bonus,0,sizeof(job_bonus)); // Job-specific stats bonus - + if( runflag == MAPSERVER_ST_RUNNING ) {//not necessary during boot + // reset job_db1.txt data + memset(status->max_weight_base, 0, sizeof(status->max_weight_base)); + memset(status->hp_coefficient, 0, sizeof(status->hp_coefficient)); + memset(status->hp_coefficient2, 0, sizeof(status->hp_coefficient2)); + memset(status->sp_coefficient, 0, sizeof(status->sp_coefficient)); + memset(status->aspd_base, 0, sizeof(status->aspd_base)); + // reset job_db2.txt data + memset(status->job_bonus,0,sizeof(status->job_bonus)); // Job-specific stats bonus + } // size_fix.txt - for(i=0;iatkmods); i++) + for(j = 0; j < MAX_WEAPON_TYPE; j++) + status->atkmods[i][j] = 100; // refine_db.txt - for(i=0;irefine_info);i++) { + for(j=0;jrefine_info[i].chance[j] = 100; + status->refine_info[i].bonus[j] = 0; + status->refine_info[i].randombonus_max[j] = 0; } } @@ -11478,14 +11410,14 @@ int status_readdb(void) #ifdef RENEWAL_ASPD - sv->readdb(map->db_path, "re/job_db1.txt", ',', 6+MAX_WEAPON_TYPE, 6+MAX_WEAPON_TYPE, -1, &status_readdb_job1); + sv->readdb(map->db_path, "re/job_db1.txt", ',', 6+MAX_WEAPON_TYPE, 6+MAX_WEAPON_TYPE, -1, status->readdb_job1); #else - sv->readdb(map->db_path, "pre-re/job_db1.txt", ',', 5+MAX_WEAPON_TYPE, 5+MAX_WEAPON_TYPE, -1, &status_readdb_job1); + sv->readdb(map->db_path, "pre-re/job_db1.txt", ',', 5+MAX_WEAPON_TYPE, 5+MAX_WEAPON_TYPE, -1, status->readdb_job1); #endif - sv->readdb(map->db_path, "job_db2.txt", ',', 1, 1+MAX_LEVEL, -1, &status_readdb_job2); - sv->readdb(map->db_path, "size_fix.txt", ',', MAX_WEAPON_TYPE, MAX_WEAPON_TYPE, ARRAYLENGTH(atkmods), &status_readdb_sizefix); - sv->readdb(map->db_path, DBPATH"refine_db.txt", ',', 4+MAX_REFINE, 4+MAX_REFINE, ARRAYLENGTH(refine_info), &status_readdb_refine); - sv->readdb(map->db_path, "sc_config.txt", ',', 2, 2, SC_MAX, &status_readdb_scconfig); + sv->readdb(map->db_path, "job_db2.txt", ',', 1, 1+MAX_LEVEL, -1, status->readdb_job2); + sv->readdb(map->db_path, "size_fix.txt", ',', MAX_WEAPON_TYPE, MAX_WEAPON_TYPE, ARRAYLENGTH(status->atkmods), status->readdb_sizefix); + sv->readdb(map->db_path, DBPATH"refine_db.txt", ',', 4+MAX_REFINE, 4+MAX_REFINE, ARRAYLENGTH(status->refine_info), status->readdb_refine); + sv->readdb(map->db_path, "sc_config.txt", ',', 2, 2, SC_MAX, status->readdb_scconfig); return 0; } @@ -11495,19 +11427,19 @@ int status_readdb(void) *------------------------------------------*/ int do_init_status(void) { timer->add_func_list(status->change_timer,"status_change_timer"); - timer->add_func_list(kaahi_heal_timer,"kaahi_heal_timer"); - timer->add_func_list(status_natural_heal_timer,"status_natural_heal_timer"); - initChangeTables(); - initDummyData(); + timer->add_func_list(status->kaahi_heal_timer,"status_kaahi_heal_timer"); + timer->add_func_list(status->natural_heal_timer,"status_natural_heal_timer"); + status->initChangeTables(); + status->initDummyData(); status->readdb(); - status_calc_sigma(); - natural_heal_prev_tick = timer->gettick(); - sc_data_ers = ers_new(sizeof(struct status_change_entry),"status.c::sc_data_ers",ERS_OPT_NONE); - timer->add_interval(natural_heal_prev_tick + NATURAL_HEAL_INTERVAL, status_natural_heal_timer, 0, 0, NATURAL_HEAL_INTERVAL); + status->calc_sigma(); + status->natural_heal_prev_tick = timer->gettick(); + status->data_ers = ers_new(sizeof(struct status_change_entry),"status.c::data_ers",ERS_OPT_NONE); + timer->add_interval(status->natural_heal_prev_tick + NATURAL_HEAL_INTERVAL, status->natural_heal_timer, 0, 0, NATURAL_HEAL_INTERVAL); return 0; } void do_final_status(void) { - ers_destroy(sc_data_ers); + ers_destroy(status->data_ers); } /*===================================== @@ -11519,14 +11451,34 @@ void status_defaults(void) { status = &status_s; /* vars */ - - status->current_equip_item_index = 0; //Contains inventory index of an equipped item. To pass it into the EQUP_SCRIPT [Lupus] - status->current_equip_card_id = 0; //To prevent card-stacking (from jA) [Skotlex] //we need it for new cards 15 Feb 2005, to check if the combo cards are insrerted into the CURRENT weapon only //to avoid cards exploits + status->current_equip_item_index = 0; //Contains inventory index of an equipped item. To pass it into the EQUP_SCRIPT [Lupus] + status->current_equip_card_id = 0; //To prevent card-stacking (from jA) [Skotlex] + memset(status->max_weight_base,0,sizeof(status->max_weight_base) + + sizeof(status->hp_coefficient) + + sizeof(status->hp_coefficient2) + + sizeof(status->hp_sigma_val) + + sizeof(status->sp_coefficient) + + sizeof(status->aspd_base) + + sizeof(status->Skill2SCTable) + + sizeof(status->IconChangeTable) + + sizeof(status->ChangeFlagTable) + + sizeof(status->SkillChangeTable) + + sizeof(status->RelevantBLTypes) + + sizeof(status->DisplayType) + + sizeof(status->refine_info) + + sizeof(status->atkmods) + + sizeof(status->job_bonus) + + sizeof(status->sc_conf) + ); + + status->data_ers = NULL; + memset(&status->dummy, 0, sizeof(status->dummy)); + status->natural_heal_prev_tick = 0; + status->natural_heal_diff_tick = 0; /* funcs */ - status->get_refine_chance = status_get_refine_chance; // for looking up associated data status->skill2sc = status_skill2sc; @@ -11612,4 +11564,50 @@ void status_defaults(void) { status->readdb = status_readdb; status->init = do_init_status; status->final = do_final_status; + + status->initChangeTables = initChangeTables; + status->initDummyData = initDummyData; + status->base_amotion_pc = status_base_amotion_pc; + status->base_atk = status_base_atk; + status->calc_sigma = status_calc_sigma; + status->base_pc_maxhp = status_base_pc_maxhp; + status->base_pc_maxsp = status_base_pc_maxsp; + status->calc_npc_ = status_calc_npc_; + status->calc_str = status_calc_str; + status->calc_agi = status_calc_agi; + status->calc_vit = status_calc_vit; + status->calc_int = status_calc_int; + status->calc_dex = status_calc_dex; + status->calc_luk = status_calc_luk; + status->calc_watk = status_calc_watk; + status->calc_matk = status_calc_matk; + status->calc_hit = status_calc_hit; + status->calc_critical = status_calc_critical; + status->calc_flee = status_calc_flee; + status->calc_flee2 = status_calc_flee2; + status->calc_speed = status_calc_speed; + status->calc_aspd_rate = status_calc_aspd_rate; + status->calc_dmotion = status_calc_dmotion; +#ifdef RENEWAL_ASPD + status->calc_aspd = status_calc_aspd; +#endif + status->calc_fix_aspd = status_calc_fix_aspd; + status->calc_maxhp = status_calc_maxhp; + status->calc_maxsp = status_calc_maxsp; + status->calc_element = status_calc_element; + status->calc_element_lv = status_calc_element_lv; + status->calc_mode = status_calc_mode; +#ifdef RENEWAL + status->calc_ematk = status_calc_ematk; +#endif + status->calc_bl_main = status_calc_bl_main; + status->display_add = status_display_add; + status->display_remove = status_display_remove; + status->natural_heal = status_natural_heal; + status->natural_heal_timer = status_natural_heal_timer; + status->readdb_job1 = status_readdb_job1; + status->readdb_job2 = status_readdb_job2; + status->readdb_sizefix = status_readdb_sizefix; + status->readdb_refine = status_readdb_refine; + status->readdb_scconfig = status_readdb_scconfig; } diff --git a/src/map/status.h b/src/map/status.h index 16a9be081..d1e78b0b7 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -1,8 +1,12 @@ -// Copyright (c) Athena Dev Teams - Licensed under GNU GPL -// For more information, see LICENCE in the main folder +// Copyright (c) Hercules Dev Team, licensed under GNU GPL. +// See the LICENSE file +// Portions Copyright (c) Athena Dev Teams + #ifndef _STATUS_H_ #define _STATUS_H_ +#include "../common/mmo.h" + struct block_list; struct mob_data; struct pet_data; @@ -1580,6 +1584,14 @@ enum scb_flag SCB_ALL = 0x3FFFFFFF }; +//Regen related flags. +enum e_regen { + RGN_HP = 0x01, + RGN_SP = 0x02, + RGN_SHP = 0x04, + RGN_SSP = 0x08, +}; + //Define to determine who gets HP/SP consumed on doing skills/etc. [Skotlex] #define BL_CONSUME (BL_PC|BL_HOM|BL_MER|BL_ELEM) //Define to determine who has regen @@ -1598,15 +1610,7 @@ typedef struct weapon_atk { unsigned short matk; unsigned char wlv; #endif -}weapon_atk; - -sc_type SkillStatusChangeTable[MAX_SKILL]; // skill -> status -int StatusIconChangeTable[SC_MAX]; // status -> "icon" (icon is a bit of a misnomer, since there exist values with no icon associated) -unsigned int StatusChangeFlagTable[SC_MAX]; // status -> flags -int StatusSkillChangeTable[SC_MAX]; // status -> skill -int StatusRelevantBLTypes[SI_MAX]; // "icon" -> enum bl_type (for clif->status_change to identify for which bl types to send packets) -bool StatusDisplayType[SC_MAX]; - +} weapon_atk; //For holding basic status (which can be modified by status changes) struct status_data { @@ -1780,6 +1784,13 @@ struct status_change { #define status_calc_elemental(ed, first) status->calc_bl_(&(ed)->bl, SCB_ALL, first) #define status_calc_npc(nd, first) status->calc_bl_(&(nd)->bl, SCB_ALL, first) +// bonus values and upgrade chances for refining equipment +struct s_refine_info { + int chance[MAX_REFINE]; // success chance + int bonus[MAX_REFINE]; // cumulative fixed bonus damage + int randombonus_max[MAX_REFINE]; // cumulative maximum random bonus damage +}; + /*===================================== * Interface : status.h * Generated by HerculesInterfaceMaker @@ -1788,12 +1799,38 @@ struct status_change { struct status_interface { /* vars */ - int current_equip_item_index; int current_equip_card_id; - + /* */ + int max_weight_base[CLASS_COUNT]; + int hp_coefficient[CLASS_COUNT]; + int hp_coefficient2[CLASS_COUNT]; + int hp_sigma_val[CLASS_COUNT][MAX_LEVEL+1]; + int sp_coefficient[CLASS_COUNT]; +#ifdef RENEWAL_ASPD + int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE+1]; +#else + int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE]; //[blackhole89] +#endif + sc_type Skill2SCTable[MAX_SKILL]; // skill -> status + int IconChangeTable[SC_MAX]; // status -> "icon" (icon is a bit of a misnomer, since there exist values with no icon associated) + unsigned int ChangeFlagTable[SC_MAX]; // status -> flags + int SkillChangeTable[SC_MAX]; // status -> skill + int RelevantBLTypes[SI_MAX]; // "icon" -> enum bl_type (for clif->status_change to identify for which bl types to send packets) + bool DisplayType[SC_MAX]; + /* */ + struct s_refine_info refine_info[REFINE_TYPE_MAX]; + /* */ + int atkmods[3][MAX_WEAPON_TYPE];//ATK weapon modification for size (size_fix.txt) + char job_bonus[CLASS_COUNT][MAX_LEVEL]; + sc_conf_type sc_conf[SC_MAX]; + struct eri *data_ers; //For sc_data entries + struct status_data dummy; + unsigned int natural_heal_prev_tick,natural_heal_diff_tick; + /* */ + int (*init) (void); + void (*final) (void); /* funcs */ - int (*get_refine_chance) (enum refine_type wlv, int refine); // for looking up associated data sc_type (*skill2sc) (int skill_id); @@ -1801,7 +1838,6 @@ struct status_interface { unsigned int (*sc2scb_flag) (sc_type sc); int (*type2relevant_bl_types) (int type); int (*get_sc_type) (sc_type idx); - int (*damage) (struct block_list *src,struct block_list *target,int64 hp,int64 sp, int walkdelay, int flag); //Define for standard HP/SP skill-related cost triggers (mobs require no HP/SP to use skills) int (*charge) (struct block_list* bl, int64 hp, int64 sp); @@ -1811,7 +1847,6 @@ struct status_interface { int (*set_sp) (struct block_list *bl, unsigned int sp, int flag); int (*heal) (struct block_list *bl,int64 hp,int64 sp, int flag); int (*revive) (struct block_list *bl, unsigned char per_hp, unsigned char per_sp); - struct regen_data * (*get_regen_data) (struct block_list *bl); struct status_data * (*get_status_data) (struct block_list *bl); struct status_data * (*get_base_status) (struct block_list *bl); @@ -1826,17 +1861,13 @@ struct status_interface { int (*get_emblem_id) (struct block_list *bl); int (*get_mexp) (struct block_list *bl); int (*get_race2) (struct block_list *bl); - struct view_data * (*get_viewdata) (struct block_list *bl); void (*set_viewdata) (struct block_list *bl, int class_); void (*change_init) (struct block_list *bl); struct status_change * (*get_sc) (struct block_list *bl); - int (*isdead) (struct block_list *bl); int (*isimmune) (struct block_list *bl); - int (*get_sc_def) (struct block_list *bl, enum sc_type type, int rate, int tick, int flag); - int (*change_start) (struct block_list* bl,enum sc_type type,int rate,int val1,int val2,int val3,int val4,int tick,int flag); int (*change_end_) (struct block_list* bl, enum sc_type type, int tid, const char* file, int line); int (*kaahi_heal_timer) (int tid, unsigned int tick, int id, intptr_t data); @@ -1844,7 +1875,6 @@ struct status_interface { int (*change_timer_sub) (struct block_list* bl, va_list ap); int (*change_clear) (struct block_list* bl, int type); int (*change_clear_buffs) (struct block_list* bl, int type); - void (*calc_bl_) (struct block_list *bl, enum scb_flag flag, bool first); int (*calc_mob_) (struct mob_data* md, bool first); int (*calc_pet_) (struct pet_data* pd, bool first); @@ -1852,35 +1882,72 @@ struct status_interface { int (*calc_homunculus_) (struct homun_data *hd, bool first); int (*calc_mercenary_) (struct mercenary_data *md, bool first); int (*calc_elemental_) (struct elemental_data *ed, bool first); - void (*calc_misc) (struct block_list *bl, struct status_data *status, int level); void (*calc_regen) (struct block_list *bl, struct status_data *st, struct regen_data *regen); void (*calc_regen_rate) (struct block_list *bl, struct regen_data *regen, struct status_change *sc); - int (*check_skilluse) (struct block_list *src, struct block_list *target, uint16 skill_id, int flag); // [Skotlex] int (*check_visibility) (struct block_list *src, struct block_list *target); //[Skotlex] - int (*change_spread) (struct block_list *src, struct block_list *bl); - - defType (*calc_def) (struct block_list *bl, struct status_change *sc, int, bool); - short (*calc_def2) (struct block_list *, struct status_change *, int, bool); - defType (*calc_mdef) (struct block_list *bl, struct status_change *sc, int, bool); - short (*calc_mdef2) (struct block_list *, struct status_change *, int, bool); - unsigned short (*calc_batk) (struct block_list *, struct status_change *, int, bool); - + defType (*calc_def) (struct block_list *bl, struct status_change *sc, int def, bool viewable); + short (*calc_def2) (struct block_list *bl, struct status_change *sc, int def2, bool viewable); + defType (*calc_mdef) (struct block_list *bl, struct status_change *sc, int mdef, bool viewable); + short (*calc_mdef2) (struct block_list *bl, struct status_change *sc, int mdef2, bool viewable); + unsigned short (*calc_batk)(struct block_list *bl, struct status_change *sc, int batk, bool viewable); #ifdef RENEWAL unsigned short (*base_matk) (const struct status_data *st, int level); int (*get_weapon_atk) (struct block_list *src, struct weapon_atk *watk, int flag); #endif int (*get_total_mdef) (struct block_list *src); int (*get_total_def) (struct block_list *src); - int (*get_matk) (struct block_list *src, int flag); - int (*readdb) (void); - int (*init) (void); - void (*final) (void); -} status_s; + + void (*initChangeTables) (void); + void (*initDummyData) (void); + int (*base_amotion_pc) (struct map_session_data *sd, struct status_data *st); + unsigned short (*base_atk) (const struct block_list *bl, const struct status_data *st); + void (*calc_sigma) (void); + unsigned int (*base_pc_maxhp) (struct map_session_data *sd, struct status_data *st); + unsigned int (*base_pc_maxsp) (struct map_session_data *sd, struct status_data *st); + int (*calc_npc_) (struct npc_data *nd, bool first); + unsigned short (*calc_str) (struct block_list *bl, struct status_change *sc, int str); + unsigned short (*calc_agi) (struct block_list *bl, struct status_change *sc, int agi); + unsigned short (*calc_vit) (struct block_list *bl, struct status_change *sc, int vit); + unsigned short (*calc_int) (struct block_list *bl, struct status_change *sc, int int_); + unsigned short (*calc_dex) (struct block_list *bl, struct status_change *sc, int dex); + unsigned short (*calc_luk) (struct block_list *bl, struct status_change *sc, int luk); + unsigned short (*calc_watk) (struct block_list *bl, struct status_change *sc, int watk, bool viewable); + unsigned short (*calc_matk) (struct block_list *bl, struct status_change *sc, int matk, bool viewable); + signed short (*calc_hit) (struct block_list *bl, struct status_change *sc, int hit, bool viewable); + signed short (*calc_critical) (struct block_list *bl, struct status_change *sc, int critical, bool viewable); + signed short (*calc_flee) (struct block_list *bl, struct status_change *sc, int flee, bool viewable); + signed short (*calc_flee2) (struct block_list *bl, struct status_change *sc, int flee2, bool viewable); + unsigned short (*calc_speed) (struct block_list *bl, struct status_change *sc, int speed); + short (*calc_aspd_rate) (struct block_list *bl, struct status_change *sc, int aspd_rate); + unsigned short (*calc_dmotion) (struct block_list *bl, struct status_change *sc, int dmotion); +#ifdef RENEWAL_ASPD + short (*calc_aspd) (struct block_list *bl, struct status_change *sc, short flag); +#endif + short (*calc_fix_aspd) (struct block_list *bl, struct status_change *sc, int aspd); + unsigned int (*calc_maxhp) (struct block_list *bl, struct status_change *sc, uint64 maxhp); + unsigned int (*calc_maxsp) (struct block_list *bl, struct status_change *sc, unsigned int maxsp); + unsigned char (*calc_element) (struct block_list *bl, struct status_change *sc, int element); + unsigned char (*calc_element_lv) (struct block_list *bl, struct status_change *sc, int lv); + unsigned short (*calc_mode) (struct block_list *bl, struct status_change *sc, int mode); +#ifdef RENEWAL + unsigned short (*calc_ematk) (struct block_list *bl, struct status_change *sc, int matk); +#endif + void (*calc_bl_main) (struct block_list *bl, int flag); + void (*display_add) (struct map_session_data *sd, enum sc_type type, int dval1, int dval2, int dval3); + void (*display_remove) (struct map_session_data *sd, enum sc_type type); + int (*natural_heal) (struct block_list *bl, va_list args); + int (*natural_heal_timer) (int tid, unsigned int tick, int id, intptr_t data); + bool (*readdb_job1) (char *fields[], int columns, int current); + bool (*readdb_job2) (char *fields[], int columns, int current); + bool (*readdb_sizefix) (char *fields[], int columns, int current); + bool (*readdb_refine) (char *fields[], int columns, int current); + bool (*readdb_scconfig) (char *fields[], int columns, int current); +}; struct status_interface *status; -- cgit v1.2.3-70-g09d2 From 5319f0f13224a91f9604cac3d53cccc50bf6d99c Mon Sep 17 00:00:00 2001 From: Haru Date: Mon, 30 Sep 2013 01:52:35 +0200 Subject: Corrected length of the PARTY_BOOKING_REQ_REGISTER packet for Ragexe clients - Fixes bugreport:7656 (thanks to Angelmelody) http://hercules.ws/board/tracker/issue-7656-party-booking-system-unsupported-packet-0x0000-0x1b01 - While I have not checked all of the affected clients, the ones I checked had a length of 18. The 41-byte version appears to be used by the RagexeRE clients only. If this speculation turns out to be incorrect, or your client is incompatible with this patch, please report it and it'll be fixed. Signed-off-by: Haru --- src/map/packets.h | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src') diff --git a/src/map/packets.h b/src/map/packets.h index 326d436a8..3ae52cba8 100644 --- a/src/map/packets.h +++ b/src/map/packets.h @@ -2118,7 +2118,11 @@ packet(0x020d,-1); packet(0x035F,6,clif->pReqClickBuyingStore,2); packet(0x0886,2,clif->pReqCloseBuyingStore,0); packet(0x0938,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); +#ifdef PACKETVER_RE packet(0x085D,41,clif->pPartyBookingRegisterReq,2,4); +#else // not PACKETVER_RE + packet(0x085D,18,clif->pPartyBookingRegisterReq,2,4); +#endif // PACKETVER_RE //packet(0x095A,8); // unknown usage packet(0x0868,-1,clif->pItemListWindowSelected,2,4,8); packet(0x0888,19,clif->pWantToConnection,2,6,10,14,18); @@ -2159,7 +2163,11 @@ packet(0x020d,-1); packet(0x0360,6,clif->pReqClickBuyingStore,2); packet(0x0817,2,clif->pReqCloseBuyingStore,0); packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); +#ifdef PACKETVER_RE packet(0x092D,41,clif->pPartyBookingRegisterReq,2,4); +#else // not PACKETVER_RE + packet(0x092D,18,clif->pPartyBookingRegisterReq,2,4); +#endif // PACKETVER_RE //packet(0x08AA,8); // CZ_JOIN_BATTLE_FIELD packet(0x0963,-1,clif->pItemListWindowSelected,2,4,8); packet(0x0943,19,clif->pWantToConnection,2,6,10,14,18); @@ -2194,7 +2202,11 @@ packet(0x020d,-1); packet(0x0368,6,clif->pReqClickBuyingStore,2); packet(0x086E,2,clif->pReqCloseBuyingStore,0); packet(0x0874,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); +#ifdef PACKETVER_RE packet(0x089B,41,clif->pPartyBookingRegisterReq,2,4); +#else // not PACKETVER_RE + packet(0x089B,18,clif->pPartyBookingRegisterReq,2,4); +#endif // PACKETVER_RE //packet(0x0965,8); // CZ_JOIN_BATTLE_FIELD packet(0x086A,-1,clif->pItemListWindowSelected,2,4,8); packet(0x08A9,19,clif->pWantToConnection,2,6,10,14,18); @@ -2228,7 +2240,11 @@ packet(0x020d,-1); packet(0x0892,6,clif->pReqClickBuyingStore,2); packet(0x0964,2,clif->pReqCloseBuyingStore,0); packet(0x0869,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); +#ifdef PACKETVER_RE packet(0x0874,41,clif->pPartyBookingRegisterReq,2,4); +#else // not PACKETVER_RE + packet(0x0874,18,clif->pPartyBookingRegisterReq,2,4); +#endif // PACKETVER_RE // packet(0x088E,8); // CZ_JOIN_BATTLE_FIELD packet(0x0958,-1,clif->pItemListWindowSelected,2,4,8); packet(0x0919,19,clif->pWantToConnection,2,6,10,14,18); @@ -2261,7 +2277,11 @@ packet(0x020d,-1); packet(0x0360,6,clif->pReqClickBuyingStore,2); packet(0x0817,2,clif->pReqCloseBuyingStore,0); packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); +#ifdef PACKETVER_RE packet(0x0365,41,clif->pPartyBookingRegisterReq,2,4); +#else // not PACKETVER_RE + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); +#endif // PACKETVER_RE // packet(0x0363,8); // CZ_JOIN_BATTLE_FIELD packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); packet(0x022D,19,clif->pWantToConnection,2,6,10,14,18); @@ -2303,7 +2323,11 @@ packet(0x020d,-1); packet(0x0862,6,clif->pReqClickBuyingStore,2); packet(0x085A,2,clif->pReqCloseBuyingStore,0); packet(0x0932,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); +#ifdef PACKETVER_RE packet(0x08A7,41,clif->pPartyBookingRegisterReq,2,4); +#else // not PACKETVER_RE + packet(0x08A7,18,clif->pPartyBookingRegisterReq,2,4); +#endif // PACKETVER_RE // packet(0x087A,8); // CZ_JOIN_BATTLE_FIELD packet(0x0942,-1,clif->pItemListWindowSelected,2,4,8); packet(0x095B,19,clif->pWantToConnection,2,6,10,14,18); @@ -2336,7 +2360,11 @@ packet(0x020d,-1); packet(0x0360,6,clif->pReqClickBuyingStore,2); packet(0x0365,2,clif->pReqCloseBuyingStore,0); packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); +#ifdef PACKETVER_RE packet(0x0894,41,clif->pPartyBookingRegisterReq,2,4); +#else // not PACKETVER_RE + packet(0x0894,18,clif->pPartyBookingRegisterReq,2,4); +#endif // PACKETVER_RE // packet(0x0860,8); // CZ_JOIN_BATTLE_FIELD packet(0x08A5,-1,clif->pItemListWindowSelected,2,4,8); packet(0x088C,19,clif->pWantToConnection,2,6,10,14,18); @@ -2357,7 +2385,11 @@ packet(0x020d,-1); packet(0x0202,6,clif->pReqClickBuyingStore,2); packet(0x0817,2,clif->pReqCloseBuyingStore,0); packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); +#ifdef PACKETVER_RE packet(0x0365,41,clif->pPartyBookingRegisterReq,2,4); +#else // not PACKETVER_RE + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); +#endif // PACKETVER_RE // packet(0x0363,8); // CZ_JOIN_BATTLE_FIELD packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); packet(0x022D,19,clif->pWantToConnection,2,6,10,14,18); @@ -2391,7 +2423,11 @@ packet(0x020d,-1); packet(0x0360,6,clif->pReqClickBuyingStore,2); packet(0x0817,2,clif->pReqCloseBuyingStore,0); packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); +#ifdef PACKETVER_RE packet(0x0365,41,clif->pPartyBookingRegisterReq,2,4); +#else // not PACKETVER_RE + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); +#endif // PACKETVER_RE // packet(0x0363,8); // CZ_JOIN_BATTLE_FIELD packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); packet(0x022D,19,clif->pWantToConnection,2,6,10,14,18); -- cgit v1.2.3-70-g09d2 From 1375af7d000d9e35ddd4a8a2c878f0bcefdf9a2d Mon Sep 17 00:00:00 2001 From: shennetsind Date: Mon, 30 Sep 2013 14:05:54 -0300 Subject: Hey Look, I must be lucky today, a penny. Er. I mean, a decade-old unused member in one of the most busy core section -- timers. Signed-off-by: shennetsind --- src/common/timer.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src') diff --git a/src/common/timer.h b/src/common/timer.h index 3146a2e66..600f9fd02 100644 --- a/src/common/timer.h +++ b/src/common/timer.h @@ -23,9 +23,8 @@ typedef int (*TimerFunc)(int tid, unsigned int tick, int id, intptr_t data); struct TimerData { unsigned int tick; TimerFunc func; - int type; + unsigned char type; int interval; - int heap_pos; // general-purpose storage int id; -- cgit v1.2.3-70-g09d2 From 2f2afbd3b63a75695f8f96e3bcb4db9fff5a7dc6 Mon Sep 17 00:00:00 2001 From: shennetsind Date: Wed, 2 Oct 2013 14:31:46 -0300 Subject: HPM: Map.c Completed Fully Interfaced. Moved missing vars and declarations of interest into the interface, removed duplicate mentions of map within calls to shorten wherever it made sense to. Ladies and Gentleman its my pleasure to announce that with this commit we've revised all of map-server, we've learned a hell lot from this, improved many things on the go and have a number of features to be released thanks to this. *cough* hpm hooking *cough*. Signed-off-by: shennetsind --- src/map/atcommand.c | 302 +++---- src/map/battle.c | 122 +-- src/map/battleground.c | 4 +- src/map/buyingstore.c | 4 +- src/map/chat.c | 2 +- src/map/clif.c | 130 +-- src/map/duel.c | 4 +- src/map/elemental.c | 2 +- src/map/guild.c | 6 +- src/map/instance.c | 184 ++--- src/map/intif.c | 6 +- src/map/itemdb.c | 22 +- src/map/log.c | 53 +- src/map/log.h | 9 + src/map/mail.c | 2 +- src/map/map.c | 2134 ++++++++++++++++++++++++------------------------ src/map/map.h | 194 ++++- src/map/mapreg_sql.c | 36 +- src/map/mob.c | 88 +- src/map/mob.h | 4 +- src/map/npc.c | 518 ++++++------ src/map/party.c | 2 +- src/map/path.c | 12 +- src/map/pc.c | 92 +-- src/map/pet.c | 2 +- src/map/script.c | 425 +++++----- src/map/skill.c | 68 +- src/map/status.c | 38 +- src/map/trade.c | 2 +- src/map/unit.c | 30 +- 30 files changed, 2313 insertions(+), 2184 deletions(-) (limited to 'src') diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 5a6068a54..3d04a6bff 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -412,11 +412,11 @@ ACMD(mapmove) { if (!map->search_freecell(NULL, m, &x, &y, 10, 10, 1)) x = y = 0; //Invalid cell, use random spot. } - if (maplist[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (map->list[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(247)); return false; } - if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(248)); return false; } @@ -476,12 +476,12 @@ ACMD(jumpto) { return false; } - if (pl_sd->bl.m >= 0 && maplist[pl_sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(247)); // You are not authorized to warp to this map. return false; } - if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(248)); // You are not authorized to warp from your current map. return false; } @@ -511,7 +511,7 @@ ACMD(jump) sscanf(message, "%hd %hd", &x, &y); - if (maplist[sd->bl.m].flag.noteleport && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (map->list[sd->bl.m].flag.noteleport && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(248)); // You are not authorized to warp from your current map. return false; } @@ -626,11 +626,11 @@ ACMD(who) { StrBuf->Printf(&buf, msg_txt(30), count); // %d players found. } else { if (count == 0) - StrBuf->Printf(&buf, msg_txt(54), maplist[map_id].name); // No player found in map '%s'. + StrBuf->Printf(&buf, msg_txt(54), map->list[map_id].name); // No player found in map '%s'. else if (count == 1) - StrBuf->Printf(&buf, msg_txt(55), maplist[map_id].name); // 1 player found in map '%s'. + StrBuf->Printf(&buf, msg_txt(55), map->list[map_id].name); // 1 player found in map '%s'. else - StrBuf->Printf(&buf, msg_txt(56), count, maplist[map_id].name); // %d players found in map '%s'. + StrBuf->Printf(&buf, msg_txt(56), count, map->list[map_id].name); // %d players found in map '%s'. } clif->message(fd, StrBuf->Value(&buf)); StrBuf->Destroy(&buf); @@ -750,11 +750,11 @@ ACMD(load) { nullpo_retr(-1, sd); m = map->mapindex2mapid(sd->status.save_point.map); - if (m >= 0 && maplist[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (m >= 0 && map->list[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(249)); // You are not authorized to warp to your save map. return false; } - if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(248)); // You are not authorized to warp from your current map. return false; } @@ -893,9 +893,9 @@ ACMD(hide) { clif->message(fd, msg_txt(10)); // Invisible: Off // increment the number of pvp players on the map - maplist[sd->bl.m].users_pvp++; + map->list[sd->bl.m].users_pvp++; - if( maplist[sd->bl.m].flag.pvp && !maplist[sd->bl.m].flag.pvp_nocalcrank ) { + if( map->list[sd->bl.m].flag.pvp && !map->list[sd->bl.m].flag.pvp_nocalcrank ) { // register the player for ranking calculations sd->pvp_timer = timer->add( timer->gettick() + 200, pc->calc_pvprank_timer, sd->bl.id, 0 ); } @@ -907,9 +907,9 @@ ACMD(hide) { clif->message(fd, msg_txt(11)); // Invisible: On // decrement the number of pvp players on the map - maplist[sd->bl.m].users_pvp--; + map->list[sd->bl.m].users_pvp--; - if( maplist[sd->bl.m].flag.pvp && !maplist[sd->bl.m].flag.pvp_nocalcrank && sd->pvp_timer != INVALID_TIMER ) { + if( map->list[sd->bl.m].flag.pvp && !map->list[sd->bl.m].flag.pvp_nocalcrank && sd->pvp_timer != INVALID_TIMER ) { // unregister the player for ranking timer->delete( sd->pvp_timer, pc->calc_pvprank_timer ); sd->pvp_timer = INVALID_TIMER; @@ -1463,13 +1463,13 @@ int atcommand_pvpoff_sub(struct block_list *bl,va_list ap) ACMD(pvpoff) { nullpo_retr(-1, sd); - if (!maplist[sd->bl.m].flag.pvp) { + if (!map->list[sd->bl.m].flag.pvp) { clif->message(fd, msg_txt(160)); // PvP is already Off. return false; } - map->zone_change2(sd->bl.m,maplist[sd->bl.m].prev_zone); - maplist[sd->bl.m].flag.pvp = 0; + map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone); + map->list[sd->bl.m].flag.pvp = 0; if (!battle_config.pk_mode) { clif->map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING); @@ -1501,13 +1501,13 @@ int atcommand_pvpon_sub(struct block_list *bl,va_list ap) ACMD(pvpon) { nullpo_retr(-1, sd); - if (maplist[sd->bl.m].flag.pvp) { + if (map->list[sd->bl.m].flag.pvp) { clif->message(fd, msg_txt(161)); // PvP is already On. return false; } - map->zone_change2(sd->bl.m,strdb_get(zone_db, MAP_ZONE_PVP_NAME)); - maplist[sd->bl.m].flag.pvp = 1; + map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_PVP_NAME)); + map->list[sd->bl.m].flag.pvp = 1; if (!battle_config.pk_mode) {// display pvp circle and rank clif->map_property_mapall(sd->bl.m, MAPPROPERTY_FREEPVPZONE); @@ -1526,13 +1526,13 @@ ACMD(pvpon) { ACMD(gvgoff) { nullpo_retr(-1, sd); - if (!maplist[sd->bl.m].flag.gvg) { + if (!map->list[sd->bl.m].flag.gvg) { clif->message(fd, msg_txt(162)); // GvG is already Off. return false; } - map->zone_change2(sd->bl.m,maplist[sd->bl.m].prev_zone); - maplist[sd->bl.m].flag.gvg = 0; + map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone); + map->list[sd->bl.m].flag.gvg = 0; clif->map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING); clif->maptypeproperty2(&sd->bl,ALL_SAMEMAP); map->foreachinmap(atcommand->stopattack,sd->bl.m, BL_CHAR, 0); @@ -1547,13 +1547,13 @@ ACMD(gvgoff) { ACMD(gvgon) { nullpo_retr(-1, sd); - if (maplist[sd->bl.m].flag.gvg) { + if (map->list[sd->bl.m].flag.gvg) { clif->message(fd, msg_txt(163)); // GvG is already On. return false; } - map->zone_change2(sd->bl.m,strdb_get(zone_db, MAP_ZONE_GVG_NAME)); - maplist[sd->bl.m].flag.gvg = 1; + map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_GVG_NAME)); + map->list[sd->bl.m].flag.gvg = 1; clif->map_property_mapall(sd->bl.m, MAPPROPERTY_AGITZONE); clif->maptypeproperty2(&sd->bl,ALL_SAMEMAP); clif->message(fd, msg_txt(34)); // GvG: On. @@ -1845,11 +1845,11 @@ ACMD(go) if (town >= 0 && town < ARRAYLENGTH(data)) { m = map->mapname2mapid(data[town].map); - if (m >= 0 && maplist[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (m >= 0 && map->list[m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(247)); return false; } - if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(248)); return false; } @@ -2192,7 +2192,7 @@ ACMD(gat) { for (y = 2; y >= -2; y--) { sprintf(atcmd_output, "%s (x= %d, y= %d) %02X %02X %02X %02X %02X", - maplist[sd->bl.m].name, sd->bl.x - 2, sd->bl.y + y, + map->list[sd->bl.m].name, sd->bl.x - 2, sd->bl.y + y, map->getcell(sd->bl.m, sd->bl.x - 2, sd->bl.y + y, CELL_GETTYPE), map->getcell(sd->bl.m, sd->bl.x - 1, sd->bl.y + y, CELL_GETTYPE), map->getcell(sd->bl.m, sd->bl.x, sd->bl.y + y, CELL_GETTYPE), @@ -2688,11 +2688,11 @@ ACMD(recall) { return false; } - if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(1019)); // You are not authorized to warp someone to this map. return false; } - if (pl_sd->bl.m >= 0 && maplist[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(1020)); // You are not authorized to warp this player from their map. return false; } @@ -3391,7 +3391,7 @@ ACMD(recallall) memset(atcmd_output, '\0', sizeof(atcmd_output)); - if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(1032)); // You are not authorized to warp somenone to your current map. return false; } @@ -3402,7 +3402,7 @@ ACMD(recallall) if (sd->status.account_id != pl_sd->status.account_id && pc->get_group_level(sd) >= pc->get_group_level(pl_sd)) { if (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y) continue; // Don't waste time warping the character to the same place. - if (pl_sd->bl.m >= 0 && maplist[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) + if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) count++; else { if (pc_isdead(pl_sd)) { //Wake them up @@ -3444,7 +3444,7 @@ ACMD(guildrecall) return false; } - if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(1032)); // You are not authorized to warp somenone to your current map. return false; } @@ -3464,7 +3464,7 @@ ACMD(guildrecall) if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.guild_id == g->guild_id) { if (pc->get_group_level(pl_sd) > pc->get_group_level(sd) || (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y)) continue; // Skip GMs greater than you... or chars already on the cell - if (pl_sd->bl.m >= 0 && maplist[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) + if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) count++; else pc->setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, CLR_RESPAWN); @@ -3502,7 +3502,7 @@ ACMD(partyrecall) return false; } - if (sd->bl.m >= 0 && maplist[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarpto && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(1032)); // You are not authorized to warp somenone to your current map. return false; } @@ -3521,7 +3521,7 @@ ACMD(partyrecall) if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.party_id == p->party.party_id) { if (pc->get_group_level(pl_sd) > pc->get_group_level(sd) || (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y)) continue; // Skip GMs greater than you... or chars already on the cell - if (pl_sd->bl.m >= 0 && maplist[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) + if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarp && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE)) count++; else pc->setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, CLR_RESPAWN); @@ -3774,129 +3774,129 @@ ACMD(mapinfo) { } mapit->free(iter); - sprintf(atcmd_output, msg_txt(1040), mapname, maplist[m_id].zone->name, maplist[m_id].users, maplist[m_id].npc_num, chat_num, vend_num); // Map: %s (Zone:%s) | Players: %d | NPCs: %d | Chats: %d | Vendings: %d + sprintf(atcmd_output, msg_txt(1040), mapname, map->list[m_id].zone->name, map->list[m_id].users, map->list[m_id].npc_num, chat_num, vend_num); // Map: %s (Zone:%s) | Players: %d | NPCs: %d | Chats: %d | Vendings: %d clif->message(fd, atcmd_output); clif->message(fd, msg_txt(1041)); // ------ Map Flags ------ - if (maplist[m_id].flag.town) + if (map->list[m_id].flag.town) clif->message(fd, msg_txt(1042)); // Town Map - if (battle_config.autotrade_mapflag == maplist[m_id].flag.autotrade) + if (battle_config.autotrade_mapflag == map->list[m_id].flag.autotrade) clif->message(fd, msg_txt(1043)); // Autotrade Enabled else clif->message(fd, msg_txt(1044)); // Autotrade Disabled - if (maplist[m_id].flag.battleground) + if (map->list[m_id].flag.battleground) clif->message(fd, msg_txt(1045)); // Battlegrounds ON strcpy(atcmd_output,msg_txt(1046)); // PvP Flags: - if (maplist[m_id].flag.pvp) + if (map->list[m_id].flag.pvp) strcat(atcmd_output, msg_txt(1047)); // Pvp ON | - if (maplist[m_id].flag.pvp_noguild) + if (map->list[m_id].flag.pvp_noguild) strcat(atcmd_output, msg_txt(1048)); // NoGuild | - if (maplist[m_id].flag.pvp_noparty) + if (map->list[m_id].flag.pvp_noparty) strcat(atcmd_output, msg_txt(1049)); // NoParty | - if (maplist[m_id].flag.pvp_nightmaredrop) + if (map->list[m_id].flag.pvp_nightmaredrop) strcat(atcmd_output, msg_txt(1050)); // NightmareDrop | - if (maplist[m_id].flag.pvp_nocalcrank) + if (map->list[m_id].flag.pvp_nocalcrank) strcat(atcmd_output, msg_txt(1051)); // NoCalcRank | clif->message(fd, atcmd_output); strcpy(atcmd_output,msg_txt(1052)); // GvG Flags: - if (maplist[m_id].flag.gvg) + if (map->list[m_id].flag.gvg) strcat(atcmd_output, msg_txt(1053)); // GvG ON | - if (maplist[m_id].flag.gvg_dungeon) + if (map->list[m_id].flag.gvg_dungeon) strcat(atcmd_output, msg_txt(1054)); // GvG Dungeon | - if (maplist[m_id].flag.gvg_castle) + if (map->list[m_id].flag.gvg_castle) strcat(atcmd_output, msg_txt(1055)); // GvG Castle | - if (maplist[m_id].flag.gvg_noparty) + if (map->list[m_id].flag.gvg_noparty) strcat(atcmd_output, msg_txt(1056)); // NoParty | clif->message(fd, atcmd_output); strcpy(atcmd_output,msg_txt(1057)); // Teleport Flags: - if (maplist[m_id].flag.noteleport) + if (map->list[m_id].flag.noteleport) strcat(atcmd_output, msg_txt(1058)); // NoTeleport | - if (maplist[m_id].flag.monster_noteleport) + if (map->list[m_id].flag.monster_noteleport) strcat(atcmd_output, msg_txt(1059)); // Monster NoTeleport | - if (maplist[m_id].flag.nowarp) + if (map->list[m_id].flag.nowarp) strcat(atcmd_output, msg_txt(1060)); // NoWarp | - if (maplist[m_id].flag.nowarpto) + if (map->list[m_id].flag.nowarpto) strcat(atcmd_output, msg_txt(1061)); // NoWarpTo | - if (maplist[m_id].flag.noreturn) + if (map->list[m_id].flag.noreturn) strcat(atcmd_output, msg_txt(1062)); // NoReturn | - if (maplist[m_id].flag.nomemo) + if (map->list[m_id].flag.nomemo) strcat(atcmd_output, msg_txt(1064)); // NoMemo | clif->message(fd, atcmd_output); sprintf(atcmd_output, msg_txt(1065), // No Exp Penalty: %s | No Zeny Penalty: %s - (maplist[m_id].flag.noexppenalty) ? msg_txt(1066) : msg_txt(1067), - (maplist[m_id].flag.nozenypenalty) ? msg_txt(1066) : msg_txt(1067)); // On / Off + (map->list[m_id].flag.noexppenalty) ? msg_txt(1066) : msg_txt(1067), + (map->list[m_id].flag.nozenypenalty) ? msg_txt(1066) : msg_txt(1067)); // On / Off clif->message(fd, atcmd_output); - if (maplist[m_id].flag.nosave) { - if (!maplist[m_id].save.map) + if (map->list[m_id].flag.nosave) { + if (!map->list[m_id].save.map) clif->message(fd, msg_txt(1068)); // No Save (Return to last Save Point) - else if (maplist[m_id].save.x == -1 || maplist[m_id].save.y == -1 ) { - sprintf(atcmd_output, msg_txt(1069), mapindex_id2name(maplist[m_id].save.map)); // No Save, Save Point: %s,Random + else if (map->list[m_id].save.x == -1 || map->list[m_id].save.y == -1 ) { + sprintf(atcmd_output, msg_txt(1069), mapindex_id2name(map->list[m_id].save.map)); // No Save, Save Point: %s,Random clif->message(fd, atcmd_output); } else { sprintf(atcmd_output, msg_txt(1070), // No Save, Save Point: %s,%d,%d - mapindex_id2name(maplist[m_id].save.map),maplist[m_id].save.x,maplist[m_id].save.y); + mapindex_id2name(map->list[m_id].save.map),map->list[m_id].save.x,map->list[m_id].save.y); clif->message(fd, atcmd_output); } } strcpy(atcmd_output,msg_txt(1071)); // Weather Flags: - if (maplist[m_id].flag.snow) + if (map->list[m_id].flag.snow) strcat(atcmd_output, msg_txt(1072)); // Snow | - if (maplist[m_id].flag.fog) + if (map->list[m_id].flag.fog) strcat(atcmd_output, msg_txt(1073)); // Fog | - if (maplist[m_id].flag.sakura) + if (map->list[m_id].flag.sakura) strcat(atcmd_output, msg_txt(1074)); // Sakura | - if (maplist[m_id].flag.clouds) + if (map->list[m_id].flag.clouds) strcat(atcmd_output, msg_txt(1075)); // Clouds | - if (maplist[m_id].flag.clouds2) + if (map->list[m_id].flag.clouds2) strcat(atcmd_output, msg_txt(1076)); // Clouds2 | - if (maplist[m_id].flag.fireworks) + if (map->list[m_id].flag.fireworks) strcat(atcmd_output, msg_txt(1077)); // Fireworks | - if (maplist[m_id].flag.leaves) + if (map->list[m_id].flag.leaves) strcat(atcmd_output, msg_txt(1078)); // Leaves | - if (maplist[m_id].flag.nightenabled) + if (map->list[m_id].flag.nightenabled) strcat(atcmd_output, msg_txt(1080)); // Displays Night | clif->message(fd, atcmd_output); strcpy(atcmd_output,msg_txt(1081)); // Other Flags: - if (maplist[m_id].flag.nobranch) + if (map->list[m_id].flag.nobranch) strcat(atcmd_output, msg_txt(1082)); // NoBranch | - if (maplist[m_id].flag.notrade) + if (map->list[m_id].flag.notrade) strcat(atcmd_output, msg_txt(1083)); // NoTrade | - if (maplist[m_id].flag.novending) + if (map->list[m_id].flag.novending) strcat(atcmd_output, msg_txt(1084)); // NoVending | - if (maplist[m_id].flag.nodrop) + if (map->list[m_id].flag.nodrop) strcat(atcmd_output, msg_txt(1085)); // NoDrop | - if (maplist[m_id].flag.noskill) + if (map->list[m_id].flag.noskill) strcat(atcmd_output, msg_txt(1086)); // NoSkill | - if (maplist[m_id].flag.noicewall) + if (map->list[m_id].flag.noicewall) strcat(atcmd_output, msg_txt(1087)); // NoIcewall | - if (maplist[m_id].flag.allowks) + if (map->list[m_id].flag.allowks) strcat(atcmd_output, msg_txt(1088)); // AllowKS | - if (maplist[m_id].flag.reset) + if (map->list[m_id].flag.reset) strcat(atcmd_output, msg_txt(1089)); // Reset | clif->message(fd, atcmd_output); strcpy(atcmd_output,msg_txt(1090)); // Other Flags: - if (maplist[m_id].nocommand) + if (map->list[m_id].nocommand) strcat(atcmd_output, msg_txt(1091)); // NoCommand | - if (maplist[m_id].flag.nobaseexp) + if (map->list[m_id].flag.nobaseexp) strcat(atcmd_output, msg_txt(1092)); // NoBaseEXP | - if (maplist[m_id].flag.nojobexp) + if (map->list[m_id].flag.nojobexp) strcat(atcmd_output, msg_txt(1093)); // NoJobEXP | - if (maplist[m_id].flag.nomobloot) + if (map->list[m_id].flag.nomobloot) strcat(atcmd_output, msg_txt(1094)); // NoMobLoot | - if (maplist[m_id].flag.nomvploot) + if (map->list[m_id].flag.nomvploot) strcat(atcmd_output, msg_txt(1095)); // NoMVPLoot | - if (maplist[m_id].flag.partylock) + if (map->list[m_id].flag.partylock) strcat(atcmd_output, msg_txt(1096)); // PartyLock | - if (maplist[m_id].flag.guildlock) + if (map->list[m_id].flag.guildlock) strcat(atcmd_output, msg_txt(1097)); // GuildLock | clif->message(fd, atcmd_output); @@ -3919,8 +3919,8 @@ ACMD(mapinfo) { break; case 2: clif->message(fd, msg_txt(1100)); // ----- NPCs in Map ----- - for (i = 0; i < maplist[m_id].npc_num;) { - nd = maplist[m_id].npc[i]; + for (i = 0; i < map->list[m_id].npc_num;) { + nd = map->list[m_id].npc[i]; switch(nd->dir) { case 0: strcpy(direction, msg_txt(1101)); break; // North case 1: strcpy(direction, msg_txt(1102)); break; // North West @@ -5028,7 +5028,7 @@ ACMD(killable) { *------------------------------------------*/ ACMD(skillon) { nullpo_retr(-1, sd); - maplist[sd->bl.m].flag.noskill = 0; + map->list[sd->bl.m].flag.noskill = 0; clif->message(fd, msg_txt(244)); return true; } @@ -5039,7 +5039,7 @@ ACMD(skillon) { *------------------------------------------*/ ACMD(skilloff) { nullpo_retr(-1, sd); - maplist[sd->bl.m].flag.noskill = 1; + map->list[sd->bl.m].flag.noskill = 1; clif->message(fd, msg_txt(243)); return true; } @@ -5069,8 +5069,8 @@ ACMD(npcmove) { return false; //Not on a map. } - x = cap_value(x, 0, maplist[m].xs-1); - y = cap_value(y, 0, maplist[m].ys-1); + x = cap_value(x, 0, map->list[m].xs-1); + y = cap_value(y, 0, map->list[m].ys-1); map->foreachinrange(clif->outsight, &nd->bl, AREA_SIZE, BL_PC, &nd->bl); map->moveblock(&nd->bl, x, y, timer->gettick()); map->foreachinrange(clif->insight, &nd->bl, AREA_SIZE, BL_PC, &nd->bl); @@ -5557,7 +5557,7 @@ ACMD(changelook) ACMD(autotrade) { nullpo_retr(-1, sd); - if( maplist[sd->bl.m].flag.autotrade != battle_config.autotrade_mapflag ) { + if( map->list[sd->bl.m].flag.autotrade != battle_config.autotrade_mapflag ) { clif->message(fd, msg_txt(1179)); // Autotrade is not allowed on this map. return false; } @@ -5599,7 +5599,7 @@ ACMD(changegm) { return false; } - if( maplist[sd->bl.m].flag.guildlock || maplist[sd->bl.m].flag.gvg_castle ) { + if( map->list[sd->bl.m].flag.guildlock || map->list[sd->bl.m].flag.gvg_castle ) { clif->message(fd, msg_txt(1182)); // You cannot change guild leaders on this map. return false; } @@ -5815,12 +5815,12 @@ ACMD(autolootitem) *------------------------------------------*/ //ACMD(rain) { // nullpo_retr(-1, sd); -// if (maplist[sd->bl.m].flag.rain) { -// maplist[sd->bl.m].flag.rain=0; +// if (map->list[sd->bl.m].flag.rain) { +// map->list[sd->bl.m].flag.rain=0; // clif->weather(sd->bl.m); // clif->message(fd, msg_txt(1201)); // The rain has stopped. // } else { -// maplist[sd->bl.m].flag.rain=1; +// map->list[sd->bl.m].flag.rain=1; // clif->weather(sd->bl.m); // clif->message(fd, msg_txt(1202)); // It has started to rain. // } @@ -5832,12 +5832,12 @@ ACMD(autolootitem) *------------------------------------------*/ ACMD(snow) { nullpo_retr(-1, sd); - if (maplist[sd->bl.m].flag.snow) { - maplist[sd->bl.m].flag.snow=0; + if (map->list[sd->bl.m].flag.snow) { + map->list[sd->bl.m].flag.snow=0; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1203)); // Snow has stopped falling. } else { - maplist[sd->bl.m].flag.snow=1; + map->list[sd->bl.m].flag.snow=1; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1204)); // It has started to snow. } @@ -5850,12 +5850,12 @@ ACMD(snow) { *------------------------------------------*/ ACMD(sakura) { nullpo_retr(-1, sd); - if (maplist[sd->bl.m].flag.sakura) { - maplist[sd->bl.m].flag.sakura=0; + if (map->list[sd->bl.m].flag.sakura) { + map->list[sd->bl.m].flag.sakura=0; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1205)); // Cherry tree leaves no longer fall. } else { - maplist[sd->bl.m].flag.sakura=1; + map->list[sd->bl.m].flag.sakura=1; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1206)); // Cherry tree leaves have begun to fall. } @@ -5867,12 +5867,12 @@ ACMD(sakura) { *------------------------------------------*/ ACMD(clouds) { nullpo_retr(-1, sd); - if (maplist[sd->bl.m].flag.clouds) { - maplist[sd->bl.m].flag.clouds=0; + if (map->list[sd->bl.m].flag.clouds) { + map->list[sd->bl.m].flag.clouds=0; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1207)); // The clouds has disappear. } else { - maplist[sd->bl.m].flag.clouds=1; + map->list[sd->bl.m].flag.clouds=1; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1208)); // Clouds appear. } @@ -5885,12 +5885,12 @@ ACMD(clouds) { *------------------------------------------*/ ACMD(clouds2) { nullpo_retr(-1, sd); - if (maplist[sd->bl.m].flag.clouds2) { - maplist[sd->bl.m].flag.clouds2=0; + if (map->list[sd->bl.m].flag.clouds2) { + map->list[sd->bl.m].flag.clouds2=0; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1209)); // The alternative clouds disappear. } else { - maplist[sd->bl.m].flag.clouds2=1; + map->list[sd->bl.m].flag.clouds2=1; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1210)); // Alternative clouds appear. } @@ -5903,12 +5903,12 @@ ACMD(clouds2) { *------------------------------------------*/ ACMD(fog) { nullpo_retr(-1, sd); - if (maplist[sd->bl.m].flag.fog) { - maplist[sd->bl.m].flag.fog=0; + if (map->list[sd->bl.m].flag.fog) { + map->list[sd->bl.m].flag.fog=0; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1211)); // The fog has gone. } else { - maplist[sd->bl.m].flag.fog=1; + map->list[sd->bl.m].flag.fog=1; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1212)); // Fog hangs over. } @@ -5920,12 +5920,12 @@ ACMD(fog) { *------------------------------------------*/ ACMD(leaves) { nullpo_retr(-1, sd); - if (maplist[sd->bl.m].flag.leaves) { - maplist[sd->bl.m].flag.leaves=0; + if (map->list[sd->bl.m].flag.leaves) { + map->list[sd->bl.m].flag.leaves=0; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1213)); // Leaves no longer fall. } else { - maplist[sd->bl.m].flag.leaves=1; + map->list[sd->bl.m].flag.leaves=1; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1214)); // Fallen leaves fall. } @@ -5938,12 +5938,12 @@ ACMD(leaves) { *------------------------------------------*/ ACMD(fireworks) { nullpo_retr(-1, sd); - if (maplist[sd->bl.m].flag.fireworks) { - maplist[sd->bl.m].flag.fireworks=0; + if (map->list[sd->bl.m].flag.fireworks) { + map->list[sd->bl.m].flag.fireworks=0; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1215)); // Fireworks have ended. } else { - maplist[sd->bl.m].flag.fireworks=1; + map->list[sd->bl.m].flag.fireworks=1; clif->weather(sd->bl.m); clif->message(fd, msg_txt(1216)); // Fireworks have launched. } @@ -5959,14 +5959,14 @@ ACMD(clearweather) { /** * No longer available, keeping here just in case it's back someday. [Ind] **/ - //maplist[sd->bl.m].flag.rain=0; - maplist[sd->bl.m].flag.snow=0; - maplist[sd->bl.m].flag.sakura=0; - maplist[sd->bl.m].flag.clouds=0; - maplist[sd->bl.m].flag.clouds2=0; - maplist[sd->bl.m].flag.fog=0; - maplist[sd->bl.m].flag.fireworks=0; - maplist[sd->bl.m].flag.leaves=0; + //map->list[sd->bl.m].flag.rain=0; + map->list[sd->bl.m].flag.snow=0; + map->list[sd->bl.m].flag.sakura=0; + map->list[sd->bl.m].flag.clouds=0; + map->list[sd->bl.m].flag.clouds2=0; + map->list[sd->bl.m].flag.fog=0; + map->list[sd->bl.m].flag.fireworks=0; + map->list[sd->bl.m].flag.leaves=0; clif->weather(sd->bl.m); clif->message(fd, msg_txt(291)); @@ -7238,7 +7238,7 @@ ACMD(whereis) for (i = 0; i < ARRAYLENGTH(monster->spawn) && monster->spawn[i].qty; i++) { j = map->mapindex2mapid(monster->spawn[i].mapindex); if (j < 0) continue; - snprintf(atcmd_output, sizeof atcmd_output, "%s (%d)", maplist[j].name, monster->spawn[i].qty); + snprintf(atcmd_output, sizeof atcmd_output, "%s (%d)", map->list[j].name, monster->spawn[i].qty); clif->message(fd, atcmd_output); } if (i == 0) @@ -7513,10 +7513,10 @@ ACMD(fakename) * Ragnarok Resources *------------------------------------------*/ ACMD(mapflag) { -#define CHECKFLAG( cmd ) do { if ( maplist[ sd->bl.m ].flag.cmd ) clif->message(sd->fd,#cmd); } while(0) +#define CHECKFLAG( cmd ) do { if ( map->list[ sd->bl.m ].flag.cmd ) clif->message(sd->fd,#cmd); } while(0) #define SETFLAG( cmd ) do { \ if ( strcmp( flag_name , #cmd ) == 0 ) { \ - maplist[ sd->bl.m ].flag.cmd = flag; \ + map->list[ sd->bl.m ].flag.cmd = flag; \ sprintf(atcmd_output,"[ @mapflag ] %s flag has been set to %s value = %hd",#cmd,flag?"On":"Off",flag); \ clif->message(sd->fd,atcmd_output); \ return true; \ @@ -7552,20 +7552,20 @@ ACMD(mapflag) { for (i = 0; flag_name[i]; i++) flag_name[i] = TOLOWER(flag_name[i]); //lowercase if ( strcmp( flag_name , "gvg" ) == 0 ) { - if( flag && !maplist[sd->bl.m].flag.gvg ) - map->zone_change2(sd->bl.m,strdb_get(zone_db, MAP_ZONE_GVG_NAME)); - else if ( !flag && maplist[sd->bl.m].flag.gvg ) - map->zone_change2(sd->bl.m,maplist[sd->bl.m].prev_zone); + if( flag && !map->list[sd->bl.m].flag.gvg ) + map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_GVG_NAME)); + else if ( !flag && map->list[sd->bl.m].flag.gvg ) + map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone); } else if ( strcmp( flag_name , "pvp" ) == 0 ) { - if( flag && !maplist[sd->bl.m].flag.pvp ) - map->zone_change2(sd->bl.m,strdb_get(zone_db, MAP_ZONE_PVP_NAME)); - else if ( !flag && maplist[sd->bl.m].flag.pvp ) - map->zone_change2(sd->bl.m,maplist[sd->bl.m].prev_zone); + if( flag && !map->list[sd->bl.m].flag.pvp ) + map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_PVP_NAME)); + else if ( !flag && map->list[sd->bl.m].flag.pvp ) + map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone); } else if ( strcmp( flag_name , "battleground" ) == 0 ) { - if( flag && !maplist[sd->bl.m].flag.battleground ) - map->zone_change2(sd->bl.m,strdb_get(zone_db, MAP_ZONE_BG_NAME)); - else if ( !flag && maplist[sd->bl.m].flag.battleground ) - map->zone_change2(sd->bl.m,maplist[sd->bl.m].prev_zone); + if( flag && !map->list[sd->bl.m].flag.battleground ) + map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_BG_NAME)); + else if ( !flag && map->list[sd->bl.m].flag.battleground ) + map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone); } SETFLAG(autotrade); SETFLAG(allowks); SETFLAG(nomemo); SETFLAG(noteleport); @@ -8004,11 +8004,11 @@ ACMD(ksprotection) ACMD(allowks) { nullpo_retr(-1,sd); - if( maplist[sd->bl.m].flag.allowks ) { - maplist[sd->bl.m].flag.allowks = 0; + if( map->list[sd->bl.m].flag.allowks ) { + map->list[sd->bl.m].flag.allowks = 0; clif->message(fd, msg_txt(1330)); // [ Map K.S Protection Active ] } else { - maplist[sd->bl.m].flag.allowks = 1; + map->list[sd->bl.m].flag.allowks = 1; clif->message(fd, msg_txt(1331)); // [ Map K.S Protection Inactive ] } return true; @@ -8707,11 +8707,11 @@ ACMD(join) { return false; } if( hChSys.local && strcmpi(name + 1, hChSys.local_name) == 0 ) { - if( !maplist[sd->bl.m].channel ) { + if( !map->list[sd->bl.m].channel ) { clif->chsys_mjoin(sd); return true; } else - channel = maplist[sd->bl.m].channel; + channel = map->list[sd->bl.m].channel; } else if( hChSys.ally && sd->status.guild_id && strcmpi(name + 1, hChSys.ally_name) == 0 ) { struct guild *g = sd->guild; if( !g ) return false;/* unlikely, but we wont let it crash anyway. */ @@ -8877,7 +8877,7 @@ ACMD(channel) { bool show_all = pc->has_permission(sd, PC_PERM_HCHSYS_ADMIN) ? true : false; clif->message(fd, msg_txt(1410)); // -- Public Channels if( hChSys.local ) { - sprintf(atcmd_output, msg_txt(1409), hChSys.local_name, maplist[sd->bl.m].channel ? db_size(maplist[sd->bl.m].channel->users) : 0);// - #%s ( %d users ) + sprintf(atcmd_output, msg_txt(1409), hChSys.local_name, map->list[sd->bl.m].channel ? db_size(map->list[sd->bl.m].channel->users) : 0);// - #%s ( %d users ) clif->message(fd, atcmd_output); } if( hChSys.ally && sd->status.guild_id ) { @@ -9815,7 +9815,7 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message // 1 = player invoked if ( type == 1) { //Commands are disabled on maps flagged as 'nocommand' - if ( maplist[sd->bl.m].nocommand && pc->get_group_level(sd) < maplist[sd->bl.m].nocommand ) { + if ( map->list[sd->bl.m].nocommand && pc->get_group_level(sd) < map->list[sd->bl.m].nocommand ) { clif->message(fd, msg_txt(143)); return false; } @@ -9938,9 +9938,9 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message clif->message(fd, msg_txt(1393)); // You can't use commands while dead return true; } - for(i = 0; i < maplist[sd->bl.m].zone->disabled_commands_count; i++) { - if( info->func == maplist[sd->bl.m].zone->disabled_commands[i]->cmd ) { - if( pc->get_group_level(sd) < maplist[sd->bl.m].zone->disabled_commands[i]->group_lv ) { + for(i = 0; i < map->list[sd->bl.m].zone->disabled_commands_count; i++) { + if( info->func == map->list[sd->bl.m].zone->disabled_commands[i]->cmd ) { + if( pc->get_group_level(sd) < map->list[sd->bl.m].zone->disabled_commands[i]->group_lv ) { clif->colormes(sd->fd,COLOR_RED,"This command is disabled in this area"); return true; } else diff --git a/src/map/battle.c b/src/map/battle.c index 237a4091d..6e6e7eab5 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3003,16 +3003,16 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam default: if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex] if (flag&BF_WEAPON) - damage = damage * maplist[bl->m].weapon_damage_rate / 100; + damage = damage * map->list[bl->m].weapon_damage_rate / 100; if (flag&BF_MAGIC) - damage = damage * maplist[bl->m].magic_damage_rate / 100; + damage = damage * map->list[bl->m].magic_damage_rate / 100; if (flag&BF_MISC) - damage = damage * maplist[bl->m].misc_damage_rate / 100; + damage = damage * map->list[bl->m].misc_damage_rate / 100; } else { //Normal attacks get reductions based on range. if (flag & BF_SHORT) - damage = damage * maplist[bl->m].short_damage_rate / 100; + damage = damage * map->list[bl->m].short_damage_rate / 100; if (flag & BF_LONG) - damage = damage * maplist[bl->m].long_damage_rate / 100; + damage = damage * map->list[bl->m].long_damage_rate / 100; } if(!damage) damage = 1; break; @@ -3178,12 +3178,12 @@ int battle_range_type(struct block_list *src, struct block_list *target, uint16 return BF_LONG; } int battle_adjust_skill_damage(int m, unsigned short skill_id) { - if( maplist[m].skill_count ) { + if( map->list[m].skill_count ) { int i; - ARR_FIND(0, maplist[m].skill_count, i, maplist[m].skills[i]->skill_id == skill_id ); + ARR_FIND(0, map->list[m].skill_count, i, map->list[m].skills[i]->skill_id == skill_id ); - if( i < maplist[m].skill_count ) { - return maplist[m].skills[i]->modifier; + if( i < map->list[m].skill_count ) { + return map->list[m].skills[i]->modifier; } } @@ -3402,18 +3402,18 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list } #ifndef HMAP_ZONE_DAMAGE_CAP_TYPE if( target && skill_id ) { - for(i = 0; i < maplist[target->m].zone->capped_skills_count; i++) { - if( skill_id == maplist[target->m].zone->capped_skills[i]->nameid && (maplist[target->m].zone->capped_skills[i]->type & target->type) ) { - if( target->type == BL_MOB && maplist[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) { - if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) + for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) { + if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) { + if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) { + if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) continue; - if( ((TBL_MOB*)target)->special_state.clone && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) + if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) continue; } - if( ad.damage > maplist[target->m].zone->capped_skills[i]->cap ) - ad.damage = maplist[target->m].zone->capped_skills[i]->cap; - if( ad.damage2 > maplist[target->m].zone->capped_skills[i]->cap ) - ad.damage2 = maplist[target->m].zone->capped_skills[i]->cap; + if( ad.damage > map->list[target->m].zone->capped_skills[i]->cap ) + ad.damage = map->list[target->m].zone->capped_skills[i]->cap; + if( ad.damage2 > map->list[target->m].zone->capped_skills[i]->cap ) + ad.damage2 = map->list[target->m].zone->capped_skills[i]->cap; break; } } @@ -3498,7 +3498,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list ad.damage=battle->calc_damage(src,target,&ad,ad.damage,skill_id,skill_lv); if( map_flag_gvg2(target->m) ) ad.damage=battle->calc_gvg_damage(src,target,ad.damage,ad.div_,skill_id,skill_lv,ad.flag); - else if( maplist[target->m].flag.battleground ) + else if( map->list[target->m].flag.battleground ) ad.damage=battle->calc_bg_damage(src,target,ad.damage,ad.div_,skill_id,skill_lv,ad.flag); switch( skill_id ) { /* post-calc modifiers */ @@ -3844,18 +3844,18 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * } #ifndef HMAP_ZONE_DAMAGE_CAP_TYPE if( target && skill_id ) { - for(i = 0; i < maplist[target->m].zone->capped_skills_count; i++) { - if( skill_id == maplist[target->m].zone->capped_skills[i]->nameid && (maplist[target->m].zone->capped_skills[i]->type & target->type) ) { - if( target->type == BL_MOB && maplist[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) { - if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) + for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) { + if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) { + if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) { + if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) continue; - if( ((TBL_MOB*)target)->special_state.clone && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) + if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) continue; } - if( md.damage > maplist[target->m].zone->capped_skills[i]->cap ) - md.damage = maplist[target->m].zone->capped_skills[i]->cap; - if( md.damage2 > maplist[target->m].zone->capped_skills[i]->cap ) - md.damage2 = maplist[target->m].zone->capped_skills[i]->cap; + if( md.damage > map->list[target->m].zone->capped_skills[i]->cap ) + md.damage = map->list[target->m].zone->capped_skills[i]->cap; + if( md.damage2 > map->list[target->m].zone->capped_skills[i]->cap ) + md.damage2 = map->list[target->m].zone->capped_skills[i]->cap; break; } } @@ -3896,7 +3896,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * md.damage=battle->calc_damage(src,target,&md,md.damage,skill_id,skill_lv); if( map_flag_gvg2(target->m) ) md.damage=battle->calc_gvg_damage(src,target,md.damage,md.div_,skill_id,skill_lv,md.flag); - else if( maplist[target->m].flag.battleground ) + else if( map->list[target->m].flag.battleground ) md.damage=battle->calc_bg_damage(src,target,md.damage,md.div_,skill_id,skill_lv,md.flag); switch( skill_id ) { @@ -4859,18 +4859,18 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list return wd; //Enough, rest is not needed. #ifndef HMAP_ZONE_DAMAGE_CAP_TYPE if( target && skill_id ) { - for(i = 0; i < maplist[target->m].zone->capped_skills_count; i++) { - if( skill_id == maplist[target->m].zone->capped_skills[i]->nameid && (maplist[target->m].zone->capped_skills[i]->type & target->type) ) { - if( target->type == BL_MOB && maplist[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) { - if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) + for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) { + if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) { + if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) { + if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) continue; - if( ((TBL_MOB*)target)->special_state.clone && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) + if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) continue; } - if( wd.damage > maplist[target->m].zone->capped_skills[i]->cap ) - wd.damage = maplist[target->m].zone->capped_skills[i]->cap; - if( wd.damage2 > maplist[target->m].zone->capped_skills[i]->cap ) - wd.damage2 = maplist[target->m].zone->capped_skills[i]->cap; + if( wd.damage > map->list[target->m].zone->capped_skills[i]->cap ) + wd.damage = map->list[target->m].zone->capped_skills[i]->cap; + if( wd.damage2 > map->list[target->m].zone->capped_skills[i]->cap ) + wd.damage2 = map->list[target->m].zone->capped_skills[i]->cap; break; } } @@ -5047,13 +5047,13 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list wd.damage = battle->calc_damage(src,target,&wd,wd.damage,skill_id,skill_lv); if( map_flag_gvg2(target->m) ) wd.damage=battle->calc_gvg_damage(src,target,wd.damage,wd.div_,skill_id,skill_lv,wd.flag); - else if( maplist[target->m].flag.battleground ) + else if( map->list[target->m].flag.battleground ) wd.damage=battle->calc_bg_damage(src,target,wd.damage,wd.div_,skill_id,skill_lv,wd.flag); } else if(!wd.damage) { wd.damage2 = battle->calc_damage(src,target,&wd,wd.damage2,skill_id,skill_lv); if( map_flag_gvg2(target->m) ) wd.damage2 = battle->calc_gvg_damage(src,target,wd.damage2,wd.div_,skill_id,skill_lv,wd.flag); - else if( maplist[target->m].flag.battleground ) + else if( map->list[target->m].flag.battleground ) wd.damage = battle->calc_bg_damage(src,target,wd.damage2,wd.div_,skill_id,skill_lv,wd.flag); } else { #ifdef RENEWAL @@ -5065,7 +5065,7 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list #endif if( map_flag_gvg2(target->m) ) wd.damage = battle->calc_gvg_damage(src,target,wd.damage,wd.div_,skill_id,skill_lv,wd.flag); - else if( maplist[target->m].flag.battleground ) + else if( map->list[target->m].flag.battleground ) wd.damage = battle->calc_bg_damage(src,target,wd.damage,wd.div_,skill_id,skill_lv,wd.flag); #ifndef RENEWAL wd.damage2 = d2*100/d1 * wd.damage/100; @@ -5118,18 +5118,18 @@ struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct bl #ifdef HMAP_ZONE_DAMAGE_CAP_TYPE if( target && skill_id ) { int i; - for(i = 0; i < maplist[target->m].zone->capped_skills_count; i++) { - if( skill_id == maplist[target->m].zone->capped_skills[i]->nameid && (maplist[target->m].zone->capped_skills[i]->type & target->type) ) { - if( target->type == BL_MOB && maplist[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) { - if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) + for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) { + if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) { + if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) { + if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) continue; - if( ((TBL_MOB*)target)->special_state.clone && !(maplist[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) + if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) ) continue; } - if( d.damage > maplist[target->m].zone->capped_skills[i]->cap ) - d.damage = maplist[target->m].zone->capped_skills[i]->cap; - if( d.damage2 > maplist[target->m].zone->capped_skills[i]->cap ) - d.damage2 = maplist[target->m].zone->capped_skills[i]->cap; + if( d.damage > map->list[target->m].zone->capped_skills[i]->cap ) + d.damage = map->list[target->m].zone->capped_skills[i]->cap; + if( d.damage2 > map->list[target->m].zone->capped_skills[i]->cap ) + d.damage2 = map->list[target->m].zone->capped_skills[i]->cap; break; } } @@ -5801,7 +5801,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f switch( battle->get_current_skill(src) ) { case RK_DRAGONBREATH:// it can only hit traps in pvp/gvg maps case RK_DRAGONBREATH_WATER: - if( !maplist[m].flag.pvp && !maplist[m].flag.gvg ) + if( !map->list[m].flag.pvp && !map->list[m].flag.gvg ) break; case 0://you can hit them without skills case MA_REMOVETRAP: @@ -5886,7 +5886,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f { struct mob_data *md = BL_CAST(BL_MOB, t_bl); - if( !((map->agit_flag || map->agit2_flag) && maplist[m].flag.gvg_castle) && md->guardian_data && md->guardian_data->guild_id ) + if( !((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle) && md->guardian_data && md->guardian_data->guild_id ) return 0; // Disable guardians/emperiums owned by Guilds on non-woe times. break; } @@ -5929,7 +5929,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f state |= BCT_ENEMY; // Can kill anything strip_enemy = 0; } else if( sd->duel_group - && !((!battle_config.duel_allow_pvp && maplist[m].flag.pvp) || (!battle_config.duel_allow_gvg && map_flag_gvg(m))) + && !((!battle_config.duel_allow_pvp && map->list[m].flag.pvp) || (!battle_config.duel_allow_gvg && map_flag_gvg(m))) ) { if( t_bl->type == BL_PC && (sd->duel_group == ((TBL_PC*)t_bl)->duel_group) ) return (BCT_ENEMY&flag)?1:-1; // Duel targets can ONLY be your enemy, nothing else. @@ -5946,7 +5946,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f case BL_MOB: { struct mob_data *md = BL_CAST(BL_MOB, s_bl); - if( !((map->agit_flag || map->agit2_flag) && maplist[m].flag.gvg_castle) && md->guardian_data && md->guardian_data->guild_id ) + if( !((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle) && md->guardian_data && md->guardian_data->guild_id ) return 0; // Disable guardians/emperium owned by Guilds on non-woe times. if( !md->special_state.ai ) @@ -5994,16 +5994,16 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f if( map_flag_vs(m) ) { //Check rivalry settings. int sbg_id = 0, tbg_id = 0; - if( maplist[m].flag.battleground ) { + if( map->list[m].flag.battleground ) { sbg_id = bg->team_get_id(s_bl); tbg_id = bg->team_get_id(t_bl); } if( flag&(BCT_PARTY|BCT_ENEMY) ) { int s_party = status->get_party_id(s_bl); if( s_party && s_party == status->get_party_id(t_bl) - && !(maplist[m].flag.pvp && maplist[m].flag.pvp_noparty) - && !(map_flag_gvg(m) && maplist[m].flag.gvg_noparty) - && (!maplist[m].flag.battleground || sbg_id == tbg_id) ) + && !(map->list[m].flag.pvp && map->list[m].flag.pvp_noparty) + && !(map_flag_gvg(m) && map->list[m].flag.gvg_noparty) + && (!map->list[m].flag.battleground || sbg_id == tbg_id) ) state |= BCT_PARTY; else state |= BCT_ENEMY; @@ -6011,15 +6011,15 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f if( flag&(BCT_GUILD|BCT_ENEMY) ) { int s_guild = status->get_guild_id(s_bl); int t_guild = status->get_guild_id(t_bl); - if( !(maplist[m].flag.pvp && maplist[m].flag.pvp_noguild) + if( !(map->list[m].flag.pvp && map->list[m].flag.pvp_noguild) && s_guild && t_guild && (s_guild == t_guild || (!(flag&BCT_SAMEGUILD) && guild->isallied(s_guild, t_guild))) - && (!maplist[m].flag.battleground || sbg_id == tbg_id) ) + && (!map->list[m].flag.battleground || sbg_id == tbg_id) ) state |= BCT_GUILD; else state |= BCT_ENEMY; } - if( state&BCT_ENEMY && maplist[m].flag.battleground && sbg_id && sbg_id == tbg_id ) + if( state&BCT_ENEMY && map->list[m].flag.battleground && sbg_id && sbg_id == tbg_id ) state &= ~BCT_ENEMY; if( state&BCT_ENEMY && battle_config.pk_mode && !map_flag_gvg(m) && s_bl->type == BL_PC && t_bl->type == BL_PC ) diff --git a/src/map/battleground.c b/src/map/battleground.c index 160d2f96e..e7fe4085b 100644 --- a/src/map/battleground.c +++ b/src/map/battleground.c @@ -91,8 +91,8 @@ int bg_team_join(int bg_id, struct map_session_data *sd) { bgd->members[i].x = sd->bl.x; bgd->members[i].y = sd->bl.y; /* populate 'where i came from' */ - if(maplist[sd->bl.m].flag.nosave || maplist[sd->bl.m].instance_id >= 0) { - struct map_data *m=&maplist[sd->bl.m]; + if(map->list[sd->bl.m].flag.nosave || map->list[sd->bl.m].instance_id >= 0) { + struct map_data *m=&map->list[sd->bl.m]; if(m->save.map) memcpy(&bgd->members[i].source,&m->save,sizeof(struct point)); else diff --git a/src/map/buyingstore.c b/src/map/buyingstore.c index 92bf9b869..2a9e6a88e 100644 --- a/src/map/buyingstore.c +++ b/src/map/buyingstore.c @@ -34,7 +34,7 @@ bool buyingstore_setup(struct map_session_data* sd, unsigned char slots) return false; } - if( maplist[sd->bl.m].flag.novending ) { + if( map->list[sd->bl.m].flag.novending ) { // custom: no vending maps clif->message(sd->fd, msg_txt(276)); // "You can't open a shop on this map" return false; @@ -89,7 +89,7 @@ void buyingstore_create(struct map_session_data* sd, int zenylimit, unsigned cha return; } - if( maplist[sd->bl.m].flag.novending ) { + if( map->list[sd->bl.m].flag.novending ) { // custom: no vending maps clif->message(sd->fd, msg_txt(276)); // "You can't open a shop on this map" return; diff --git a/src/map/chat.c b/src/map/chat.c index d6fad4d94..187d40337 100644 --- a/src/map/chat.c +++ b/src/map/chat.c @@ -80,7 +80,7 @@ int chat_createpcchat(struct map_session_data* sd, const char* title, const char return 0; } - if( maplist[sd->bl.m].flag.nochat ) { + if( map->list[sd->bl.m].flag.nochat ) { clif->message(sd->fd, msg_txt(281)); return 0; //Can't create chatrooms on this map. } diff --git a/src/map/clif.c b/src/map/clif.c index 11cce1a2d..f6c2ef4d0 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1251,22 +1251,22 @@ void clif_weather_check(struct map_session_data *sd) { int16 m = sd->bl.m; int fd = sd->fd; - if (maplist[m].flag.snow) + if (map->list[m].flag.snow) clif->specialeffect_single(&sd->bl, 162, fd); - if (maplist[m].flag.clouds) + if (map->list[m].flag.clouds) clif->specialeffect_single(&sd->bl, 233, fd); - if (maplist[m].flag.clouds2) + if (map->list[m].flag.clouds2) clif->specialeffect_single(&sd->bl, 516, fd); - if (maplist[m].flag.fog) + if (map->list[m].flag.fog) clif->specialeffect_single(&sd->bl, 515, fd); - if (maplist[m].flag.fireworks) { + if (map->list[m].flag.fireworks) { clif->specialeffect_single(&sd->bl, 297, fd); clif->specialeffect_single(&sd->bl, 299, fd); clif->specialeffect_single(&sd->bl, 301, fd); } - if (maplist[m].flag.sakura) + if (map->list[m].flag.sakura) clif->specialeffect_single(&sd->bl, 163, fd); - if (maplist[m].flag.leaves) + if (map->list[m].flag.leaves) clif->specialeffect_single(&sd->bl, 333, fd); } /** @@ -1319,7 +1319,7 @@ int clif_spawn(struct block_list *bl) clif->specialeffect(bl,423,AREA); else if(sd->state.size==SZ_MEDIUM) clif->specialeffect(bl,421,AREA); - if( sd->bg_id && maplist[sd->bl.m].flag.battleground ) + if( sd->bg_id && map->list[sd->bl.m].flag.battleground ) clif->sendbgemblem_area(sd); for( i = 0; i < sd->sc_display_count; i++ ) { clif->sc_load(&sd->bl, sd->bl.id,AREA,status->IconChangeTable[sd->sc_display[i]->type],sd->sc_display[i]->val1,sd->sc_display[i]->val2,sd->sc_display[i]->val3); @@ -1638,7 +1638,7 @@ void clif_changemap(struct map_session_data *sd, short m, int x, int y) { WFIFOHEAD(fd,packet_len(0x91)); WFIFOW(fd,0) = 0x91; - mapindex_getmapname_ext(maplist[m].custom_name ? maplist[maplist[m].instance_src_map].name : maplist[m].name, (char*)WFIFOP(fd,2)); + mapindex_getmapname_ext(map->list[m].custom_name ? map->list[map->list[m].instance_src_map].name : map->list[m].name, (char*)WFIFOP(fd,2)); WFIFOW(fd,18) = x; WFIFOW(fd,20) = y; WFIFOSET(fd,packet_len(0x91)); @@ -4332,7 +4332,7 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl) { clif->specialeffect_single(bl,423,sd->fd); else if(tsd->state.size==SZ_MEDIUM) clif->specialeffect_single(bl,421,sd->fd); - if( tsd->bg_id && maplist[tsd->bl.m].flag.battleground ) + if( tsd->bg_id && map->list[tsd->bl.m].flag.battleground ) clif->sendbgemblem_single(sd->fd,tsd); if ( tsd->status.robe ) clif->refreshlook(&sd->bl,bl->id,LOOK_ROBE,tsd->status.robe,SELF); @@ -4574,7 +4574,7 @@ void clif_changemapcell(int fd, int16 m, int x, int y, int type, enum send_targe WBUFW(buf,2) = x; WBUFW(buf,4) = y; WBUFW(buf,6) = type; - mapindex_getmapname_ext(maplist[m].custom_name ? maplist[maplist[m].instance_src_map].name : maplist[m].name,(char*)WBUFP(buf,8)); + mapindex_getmapname_ext(map->list[m].custom_name ? map->list[map->list[m].instance_src_map].name : map->list[m].name,(char*)WBUFP(buf,8)); if( fd ) { WFIFOHEAD(fd,packet_len(0x192)); @@ -6525,7 +6525,7 @@ void clif_party_member_info(struct party_data *p, struct map_session_data *sd) WBUFB(buf,14) = (p->party.member[i].online)?0:1; memcpy(WBUFP(buf,15), p->party.name, NAME_LENGTH); memcpy(WBUFP(buf,39), sd->status.name, NAME_LENGTH); - mapindex_getmapname_ext(maplist[sd->bl.m].custom_name ? maplist[maplist[sd->bl.m].instance_src_map].name : maplist[sd->bl.m].name, (char*)WBUFP(buf,63)); + mapindex_getmapname_ext(map->list[sd->bl.m].custom_name ? map->list[map->list[sd->bl.m].instance_src_map].name : map->list[sd->bl.m].name, (char*)WBUFP(buf,63)); WBUFB(buf,79) = (p->party.item&1)?1:0; WBUFB(buf,80) = (p->party.item&2)?1:0; clif->send(buf,packet_len(0x1e9),&sd->bl,PARTY); @@ -9286,24 +9286,24 @@ void clif_parse_WantToConnection(int fd, struct map_session_data* sd) { chrif->authreq(sd); } void clif_hercules_chsys_mjoin(struct map_session_data *sd) { - if( !maplist[sd->bl.m].channel ) { - CREATE(maplist[sd->bl.m].channel, struct hChSysCh , 1); - safestrncpy(maplist[sd->bl.m].channel->name, hChSys.local_name, HCHSYS_NAME_LENGTH); - maplist[sd->bl.m].channel->type = hChSys_MAP; - maplist[sd->bl.m].channel->m = sd->bl.m; + if( !map->list[sd->bl.m].channel ) { + CREATE(map->list[sd->bl.m].channel, struct hChSysCh , 1); + safestrncpy(map->list[sd->bl.m].channel->name, hChSys.local_name, HCHSYS_NAME_LENGTH); + map->list[sd->bl.m].channel->type = hChSys_MAP; + map->list[sd->bl.m].channel->m = sd->bl.m; - clif->chsys_create(maplist[sd->bl.m].channel,NULL,NULL,hChSys.local_color); + clif->chsys_create(map->list[sd->bl.m].channel,NULL,NULL,hChSys.local_color); } - if( maplist[sd->bl.m].channel->banned && idb_exists(maplist[sd->bl.m].channel->banned, sd->status.account_id) ) { + if( map->list[sd->bl.m].channel->banned && idb_exists(map->list[sd->bl.m].channel->banned, sd->status.account_id) ) { return; } - clif->chsys_join(maplist[sd->bl.m].channel,sd); + clif->chsys_join(map->list[sd->bl.m].channel,sd); - if( !( maplist[sd->bl.m].channel->opt & hChSys_OPT_ANNOUNCE_JOIN ) ) { + if( !( map->list[sd->bl.m].channel->opt & hChSys_OPT_ANNOUNCE_JOIN ) ) { char mout[60]; - sprintf(mout, msg_txt(1435),hChSys.local_name,maplist[sd->bl.m].name); // You're now in the '#%s' channel for '%s' + sprintf(mout, msg_txt(1435),hChSys.local_name,map->list[sd->bl.m].name); // You're now in the '#%s' channel for '%s' clif->colormes(sd->fd, COLOR_DEFAULT, mout); } } @@ -9362,14 +9362,14 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) { pc->setinvincibletimer(sd,battle_config.pc_invincible_time); } - if( maplist[sd->bl.m].users++ == 0 && battle_config.dynamic_mobs ) + if( map->list[sd->bl.m].users++ == 0 && battle_config.dynamic_mobs ) map->spawnmobs(sd->bl.m); if( !(sd->sc.option&OPTION_INVISIBLE) ) { // increment the number of pvp players on the map - maplist[sd->bl.m].users_pvp++; + map->list[sd->bl.m].users_pvp++; } - if( maplist[sd->bl.m].instance_id >= 0 ) { - instance->list[maplist[sd->bl.m].instance_id].users++; - instance->check_idle(maplist[sd->bl.m].instance_id); + if( map->list[sd->bl.m].instance_id >= 0 ) { + instance->list[map->list[sd->bl.m].instance_id].users++; + instance->check_idle(map->list[sd->bl.m].instance_id); } sd->state.debug_remove_map = 0; // temporary state to track double remove_map's [FlavioJS] @@ -9388,9 +9388,9 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) { if( sd->bg_id ) clif->bg_hp(sd); // BattleGround System - if(maplist[sd->bl.m].flag.pvp && !(sd->sc.option&OPTION_INVISIBLE)) { + if(map->list[sd->bl.m].flag.pvp && !(sd->sc.option&OPTION_INVISIBLE)) { if(!battle_config.pk_mode) { // remove pvp stuff for pk_mode [Valaris] - if (!maplist[sd->bl.m].flag.pvp_nocalcrank) + if (!map->list[sd->bl.m].flag.pvp_nocalcrank) sd->pvp_timer = timer->add(timer->gettick()+200, pc->calc_pvprank_timer, sd->bl.id, 0); sd->pvp_rank = 0; sd->pvp_lastusers = 0; @@ -9404,7 +9404,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) { if(sd->duel_group) clif->map_property(sd, MAPPROPERTY_FREEPVPZONE); - if (maplist[sd->bl.m].flag.gvg_dungeon) + if (map->list[sd->bl.m].flag.gvg_dungeon) clif->map_property(sd, MAPPROPERTY_FREEPVPZONE); //TODO: Figure out the real packet to send here. if( map_flag_gvg2(sd->bl.m) ) @@ -9496,13 +9496,13 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) { if(homun_alive(sd->hd)) homun->init_timers(sd->hd); - if (map->night_flag && maplist[sd->bl.m].flag.nightenabled) { + if (map->night_flag && map->list[sd->bl.m].flag.nightenabled) { sd->state.night = 1; clif->status_change(&sd->bl, SI_SKE, 1, 0, 0, 0, 0); } // Notify everyone that this char logged in [Skotlex]. - map->map_foreachpc(clif->friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 1); + map->foreachpc(clif->friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 1); //Login Event npc->script_event(sd, NPCE_LOGIN); @@ -9534,10 +9534,10 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) { #endif if( (battle_config.bg_flee_penalty != 100 || battle_config.gvg_flee_penalty != 100) && (map_flag_gvg2(sd->state.pmap) || map_flag_gvg2(sd->bl.m) - || maplist[sd->state.pmap].flag.battleground || maplist[sd->bl.m].flag.battleground) ) + || map->list[sd->state.pmap].flag.battleground || map->list[sd->bl.m].flag.battleground) ) status_calc_bl(&sd->bl, SCB_FLEE); //Refresh flee penalty - if( map->night_flag && maplist[sd->bl.m].flag.nightenabled ) { + if( map->night_flag && map->list[sd->bl.m].flag.nightenabled ) { //Display night. if( !sd->state.night ) { sd->state.night = 1; @@ -9548,13 +9548,13 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) { clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_SKE); } - if( maplist[sd->bl.m].flag.battleground ) { + if( map->list[sd->bl.m].flag.battleground ) { clif->map_type(sd, MAPTYPE_BATTLEFIELD); // Battleground Mode - if( maplist[sd->bl.m].flag.battleground == 2 ) + if( map->list[sd->bl.m].flag.battleground == 2 ) clif->bg_updatescore_single(sd); } - if( maplist[sd->bl.m].flag.allowks && !map_flag_ks(sd->bl.m) ) { + if( map->list[sd->bl.m].flag.allowks && !map_flag_ks(sd->bl.m) ) { char output[128]; sprintf(output, "[ Kill Steal Protection Disabled. KS is allowed in this map ]"); clif->broadcast(&sd->bl, output, strlen(output) + 1, BC_BLUE, SELF); @@ -9564,7 +9564,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) { status_calc_pc(sd, false);/* some conditions are map-dependent so we must recalculate */ sd->state.changemap = false; - if( hChSys.local && hChSys.local_autojoin && !maplist[sd->bl.m].flag.chsysnolocalaj ) { + if( hChSys.local && hChSys.local_autojoin && !map->list[sd->bl.m].flag.chsysnolocalaj ) { clif->chsys_mjoin(sd); } } @@ -9586,7 +9586,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) { clif->showvendingboard(&sd->bl,sd->message,0); } - if(maplist[sd->bl.m].flag.loadevent) // Lance + if(map->list[sd->bl.m].flag.loadevent) // Lance npc->script_event(sd, NPCE_LOADMAP); if (pc->checkskill(sd, SG_DEVIL) && !pc->nextjobexp(sd)) //blindness [Komurka] @@ -10415,10 +10415,10 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) chname++; if( hChSys.local && strcmpi(chname, hChSys.local_name) == 0 ) { - if( !maplist[sd->bl.m].channel ) { + if( !map->list[sd->bl.m].channel ) { clif->chsys_mjoin(sd); } - channel = maplist[sd->bl.m].channel; + channel = map->list[sd->bl.m].channel; } else if( hChSys.ally && sd->status.guild_id && strcmpi(chname, hChSys.ally_name) == 0 ) { struct guild *g = sd->guild; if( !g ) return; @@ -10699,7 +10699,7 @@ void clif_hercules_chsys_delete(struct hChSysCh *channel) { } db_destroy(channel->users); if( channel->m ) { - maplist[channel->m].channel = NULL; + map->list[channel->m].channel = NULL; aFree(channel); } else if ( channel->type == hChSys_ALLY ) aFree(channel); @@ -12000,7 +12000,7 @@ void clif_parse_CreateParty(int fd, struct map_session_data *sd) { char* name = (char*)RFIFOP(fd,2); name[NAME_LENGTH-1] = '\0'; - if( maplist[sd->bl.m].flag.partylock ) { + if( map->list[sd->bl.m].flag.partylock ) { // Party locked. clif->message(fd, msg_txt(227)); return; @@ -12019,7 +12019,7 @@ void clif_parse_CreateParty2(int fd, struct map_session_data *sd) { int item2 = RFIFOB(fd,27); name[NAME_LENGTH-1] = '\0'; - if( maplist[sd->bl.m].flag.partylock ) { + if( map->list[sd->bl.m].flag.partylock ) { // Party locked. clif->message(fd, msg_txt(227)); return; @@ -12039,7 +12039,7 @@ void clif_parse_CreateParty2(int fd, struct map_session_data *sd) { void clif_parse_PartyInvite(int fd, struct map_session_data *sd) { struct map_session_data *t_sd; - if(maplist[sd->bl.m].flag.partylock) { + if(map->list[sd->bl.m].flag.partylock) { // Party locked. clif->message(fd, msg_txt(227)); return; @@ -12060,7 +12060,7 @@ void clif_parse_PartyInvite2(int fd, struct map_session_data *sd) { char *name = (char*)RFIFOP(fd,2); name[NAME_LENGTH-1] = '\0'; - if(maplist[sd->bl.m].flag.partylock) { + if(map->list[sd->bl.m].flag.partylock) { // Party locked. clif->message(fd, msg_txt(227)); return; @@ -12097,7 +12097,7 @@ void clif_parse_ReplyPartyInvite2(int fd,struct map_session_data *sd) /// Request to leave party (CZ_REQ_LEAVE_GROUP). /// 0100 void clif_parse_LeaveParty(int fd, struct map_session_data *sd) { - if(maplist[sd->bl.m].flag.partylock) { + if(map->list[sd->bl.m].flag.partylock) { // Party locked. clif->message(fd, msg_txt(227)); return; @@ -12109,7 +12109,7 @@ void clif_parse_LeaveParty(int fd, struct map_session_data *sd) { /// Request to expel a party member (CZ_REQ_EXPEL_GROUP_MEMBER). /// 0103 .L .24B void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd) { - if(maplist[sd->bl.m].flag.partylock) { + if(map->list[sd->bl.m].flag.partylock) { // Party locked. clif->message(fd, msg_txt(227)); return; @@ -12730,7 +12730,7 @@ void clif_parse_OpenVending(int fd, struct map_session_data* sd) { if( sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOROOM ) return; - if( maplist[sd->bl.m].flag.novending ) { + if( map->list[sd->bl.m].flag.novending ) { clif->message (sd->fd, msg_txt(276)); // "You can't open a shop on this map" return; } @@ -12751,7 +12751,7 @@ void clif_parse_CreateGuild(int fd,struct map_session_data *sd) { char* name = (char*)RFIFOP(fd,6); name[NAME_LENGTH-1] = '\0'; - if(maplist[sd->bl.m].flag.guildlock) { + if(map->list[sd->bl.m].flag.guildlock) { //Guild locked. clif->message(fd, msg_txt(228)); return; @@ -12914,7 +12914,7 @@ clif_sub_guild_invite(int fd, struct map_session_data *sd, struct map_session_da return 1; } - if (maplist[sd->bl.m].flag.guildlock) { + if (map->list[sd->bl.m].flag.guildlock) { //Guild locked. clif->message(fd, msg_txt(228)); return 1; @@ -12961,7 +12961,7 @@ void clif_parse_GuildReplyInvite(int fd,struct map_session_data *sd) /// Request to leave guild (CZ_REQ_LEAVE_GUILD). /// 0159 .L .L .L .40B void clif_parse_GuildLeave(int fd,struct map_session_data *sd) { - if(maplist[sd->bl.m].flag.guildlock) { + if(map->list[sd->bl.m].flag.guildlock) { //Guild locked. clif->message(fd, msg_txt(228)); return; @@ -12978,7 +12978,7 @@ void clif_parse_GuildLeave(int fd,struct map_session_data *sd) { /// Request to expel a member of a guild (CZ_REQ_BAN_GUILD). /// 015b .L .L .L .40B void clif_parse_GuildExpulsion(int fd,struct map_session_data *sd) { - if( maplist[sd->bl.m].flag.guildlock || sd->bg_id ) { + if( map->list[sd->bl.m].flag.guildlock || sd->bg_id ) { // Guild locked. clif->message(fd, msg_txt(228)); return; @@ -13029,7 +13029,7 @@ void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd) { if(!sd->state.gmaster_flag) return; - if(maplist[sd->bl.m].flag.guildlock) { + if(map->list[sd->bl.m].flag.guildlock) { //Guild locked. clif->message(fd, msg_txt(228)); return; @@ -13067,7 +13067,7 @@ void clif_parse_GuildDelAlliance(int fd, struct map_session_data *sd) { if(!sd->state.gmaster_flag) return; - if(maplist[sd->bl.m].flag.guildlock) { + if(map->list[sd->bl.m].flag.guildlock) { //Guild locked. clif->message(fd, msg_txt(228)); return; @@ -13084,7 +13084,7 @@ void clif_parse_GuildOpposition(int fd, struct map_session_data *sd) { if(!sd->state.gmaster_flag) return; - if(maplist[sd->bl.m].flag.guildlock) { + if(map->list[sd->bl.m].flag.guildlock) { //Guild locked. clif->message(fd, msg_txt(228)); return; @@ -13108,7 +13108,7 @@ void clif_parse_GuildOpposition(int fd, struct map_session_data *sd) { /// now guild name; might have been (intended) email, since the /// field name and size is same as the one in CH_DELETE_CHAR. void clif_parse_GuildBreak(int fd, struct map_session_data *sd) { - if( maplist[sd->bl.m].flag.guildlock ) { + if( map->list[sd->bl.m].flag.guildlock ) { //Guild locked. clif->message(fd, msg_txt(228)); return; @@ -15950,8 +15950,8 @@ void clif_bg_updatescore(int16 m) { bl.m = m; WBUFW(buf,0) = 0x2de; - WBUFW(buf,2) = maplist[m].bgscore_lion; - WBUFW(buf,4) = maplist[m].bgscore_eagle; + WBUFW(buf,2) = map->list[m].bgscore_lion; + WBUFW(buf,4) = map->list[m].bgscore_eagle; clif->send(buf,packet_len(0x2de),&bl,ALL_SAMEMAP); } @@ -15962,8 +15962,8 @@ void clif_bg_updatescore_single(struct map_session_data *sd) { WFIFOHEAD(fd,packet_len(0x2de)); WFIFOW(fd,0) = 0x2de; - WFIFOW(fd,2) = maplist[sd->bl.m].bgscore_lion; - WFIFOW(fd,4) = maplist[sd->bl.m].bgscore_eagle; + WFIFOW(fd,2) = map->list[sd->bl.m].bgscore_lion; + WFIFOW(fd,4) = map->list[sd->bl.m].bgscore_eagle; WFIFOSET(fd,packet_len(0x2de)); } @@ -17358,14 +17358,14 @@ void clif_maptypeproperty2(struct block_list *bl,enum send_target t) { p.PacketType = maptypeproperty2Type; p.type = 0x28; - p.flag.party = maplist[bl->m].flag.pvp ? 1 : 0; + p.flag.party = map->list[bl->m].flag.pvp ? 1 : 0; p.flag.guild = map_flag_gvg(bl->m) ? 1 : 0; p.flag.siege = map_flag_gvg2(bl->m) ? 1: 0; p.flag.mineffect = map_flag_gvg(bl->m); // FIXME/CHECKME Forcing /mineffect in castles during WoE (probably redundant? I'm not sure) p.flag.nolockon = 0; // TODO - p.flag.countpk = maplist[bl->m].flag.pvp ? 1 : 0; - p.flag.nopartyformation = maplist[bl->m].flag.partylock ? 1 : 0; - p.flag.bg = maplist[bl->m].flag.battleground ? 1 : 0; + p.flag.countpk = map->list[bl->m].flag.pvp ? 1 : 0; + p.flag.nopartyformation = map->list[bl->m].flag.partylock ? 1 : 0; + p.flag.bg = map->list[bl->m].flag.battleground ? 1 : 0; p.flag.noitemconsumption = 0; // TODO p.flag.summonstarmiracle = 0; // TODO p.flag.usecart = 1; // TODO diff --git a/src/map/duel.c b/src/map/duel.c index a993ee667..4e41865d4 100644 --- a/src/map/duel.c +++ b/src/map/duel.c @@ -69,7 +69,7 @@ void duel_showinfo(const unsigned int did, struct map_session_data* sd) { duel->list[did].members_count + duel->list[did].invites_count); clif->disp_onlyself(sd, output, strlen(output)); - map->map_foreachpc(duel_showinfo_sub, sd, &p); + map->foreachpc(duel_showinfo_sub, sd, &p); } int duel_create(struct map_session_data* sd, const unsigned int maxpl) { @@ -126,7 +126,7 @@ void duel_leave(const unsigned int did, struct map_session_data* sd) { duel->list[did].members_count--; if(duel->list[did].members_count == 0) { - map->map_foreachpc(duel_leave_sub, did); + map->foreachpc(duel_leave_sub, did); duel->count--; } diff --git a/src/map/elemental.c b/src/map/elemental.c index 5a3630c70..3251ca992 100644 --- a/src/map/elemental.c +++ b/src/map/elemental.c @@ -754,7 +754,7 @@ int elemental_ai_sub_foreachclient(struct map_session_data *sd, va_list ap) { } int elemental_ai_timer(int tid, unsigned int tick, int id, intptr_t data) { - map->map_foreachpc(elemental->ai_sub_foreachclient,tick); + map->foreachpc(elemental->ai_sub_foreachclient,tick); return 0; } diff --git a/src/map/guild.c b/src/map/guild.c index b66961262..30f989f58 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -621,7 +621,7 @@ int guild_invite(struct map_session_data *sd, struct map_session_data *tsd) { if( tsd->status.guild_id > 0 || tsd->guild_invite > 0 - || ((map->agit_flag || map->agit2_flag) && maplist[tsd->bl.m].flag.gvg_castle) + || ((map->agit_flag || map->agit2_flag) && map->list[tsd->bl.m].flag.gvg_castle) ) { //Can't invite people inside castles. [Skotlex] clif->guild_inviteack(sd,0); @@ -806,7 +806,7 @@ int guild_leave(struct map_session_data* sd, int guild_id, int account_id, int c if( sd->status.account_id != account_id || sd->status.char_id != char_id || sd->status.guild_id != guild_id - || ((map->agit_flag || map->agit2_flag) && maplist[sd->bl.m].flag.gvg_castle) + || ((map->agit_flag || map->agit2_flag) && map->list[sd->bl.m].flag.gvg_castle) ) return 0; @@ -838,7 +838,7 @@ int guild_expulsion(struct map_session_data* sd, int guild_id, int account_id, i //Can't leave inside guild castles. if ((tsd = map->id2sd(account_id)) && tsd->status.char_id == char_id - && ((map->agit_flag || map->agit2_flag) && maplist[tsd->bl.m].flag.gvg_castle) + && ((map->agit_flag || map->agit2_flag) && map->list[tsd->bl.m].flag.gvg_castle) ) return 0; diff --git a/src/map/instance.c b/src/map/instance.c index 17b66fa75..6ae1d6141 100644 --- a/src/map/instance.c +++ b/src/map/instance.c @@ -159,95 +159,95 @@ int instance_add_map(const char *name, int instance_id, bool usebasename, const return -2; } - if( maplist[m].instance_id >= 0 ) { + if( map->list[m].instance_id >= 0 ) { // Source map already belong to a Instance. ShowError("instance_add_map: trying to instance already instanced map %s.\n", name); return -4; } - ARR_FIND( instance->start_id, map->map_num, i, maplist[i].name[0] == 0 ); // Searching for a Free Map + ARR_FIND( instance->start_id, map->count, i, map->list[i].name[0] == 0 ); // Searching for a Free Map - if( i < map->map_num ) + if( i < map->count ) im = i; // Unused map found (old instance) else { - im = map->map_num; // Using next map index - RECREATE(maplist,struct map_data,++map->map_num); + im = map->count; // Using next map index + RECREATE(map->list,struct map_data,++map->count); } - if( maplist[m].cell == (struct mapcell *)0xdeadbeaf ) - map->cellfromcache(&maplist[m]); + if( map->list[m].cell == (struct mapcell *)0xdeadbeaf ) + map->cellfromcache(&map->list[m]); - memcpy( &maplist[im], &maplist[m], sizeof(struct map_data) ); // Copy source map + memcpy( &map->list[im], &map->list[m], sizeof(struct map_data) ); // Copy source map if( map_name != NULL ) { - snprintf(maplist[im].name, MAP_NAME_LENGTH, "%s", map_name); - maplist[im].custom_name = true; + snprintf(map->list[im].name, MAP_NAME_LENGTH, "%s", map_name); + map->list[im].custom_name = true; } else - snprintf(maplist[im].name, MAP_NAME_LENGTH, (usebasename ? "%.3d#%s" : "%.3d%s"), instance_id, name); // Generate Name for Instance Map - maplist[im].index = mapindex_addmap(-1, maplist[im].name); // Add map index + snprintf(map->list[im].name, MAP_NAME_LENGTH, (usebasename ? "%.3d#%s" : "%.3d%s"), instance_id, name); // Generate Name for Instance Map + map->list[im].index = mapindex_addmap(-1, map->list[im].name); // Add map index - maplist[im].channel = NULL; + map->list[im].channel = NULL; - if( !maplist[im].index ) { - maplist[im].name[0] = '\0'; + if( !map->list[im].index ) { + map->list[im].name[0] = '\0'; ShowError("instance_add_map: no more free map indexes.\n"); return -3; // No free map index } // Reallocate cells - num_cell = maplist[im].xs * maplist[im].ys; - CREATE( maplist[im].cell, struct mapcell, num_cell ); - memcpy( maplist[im].cell, maplist[m].cell, num_cell * sizeof(struct mapcell) ); + num_cell = map->list[im].xs * map->list[im].ys; + CREATE( map->list[im].cell, struct mapcell, num_cell ); + memcpy( map->list[im].cell, map->list[m].cell, num_cell * sizeof(struct mapcell) ); - size = maplist[im].bxs * maplist[im].bys * sizeof(struct block_list*); - maplist[im].block = (struct block_list**)aCalloc(size, 1); - maplist[im].block_mob = (struct block_list**)aCalloc(size, 1); + size = map->list[im].bxs * map->list[im].bys * sizeof(struct block_list*); + map->list[im].block = (struct block_list**)aCalloc(size, 1); + map->list[im].block_mob = (struct block_list**)aCalloc(size, 1); - memset(maplist[im].npc, 0x00, sizeof(maplist[i].npc)); - maplist[im].npc_num = 0; + memset(map->list[im].npc, 0x00, sizeof(map->list[i].npc)); + map->list[im].npc_num = 0; - memset(maplist[im].moblist, 0x00, sizeof(maplist[im].moblist)); - maplist[im].mob_delete_timer = INVALID_TIMER; + memset(map->list[im].moblist, 0x00, sizeof(map->list[im].moblist)); + map->list[im].mob_delete_timer = INVALID_TIMER; //Mimic unit - if( maplist[m].unit_count ) { - maplist[im].unit_count = maplist[m].unit_count; - CREATE( maplist[im].units, struct mapflag_skill_adjust*, maplist[im].unit_count ); + if( map->list[m].unit_count ) { + map->list[im].unit_count = map->list[m].unit_count; + CREATE( map->list[im].units, struct mapflag_skill_adjust*, map->list[im].unit_count ); - for(i = 0; i < maplist[im].unit_count; i++) { - CREATE( maplist[im].units[i], struct mapflag_skill_adjust, 1); - memcpy( maplist[im].units[i],maplist[m].units[i],sizeof(struct mapflag_skill_adjust)); + for(i = 0; i < map->list[im].unit_count; i++) { + CREATE( map->list[im].units[i], struct mapflag_skill_adjust, 1); + memcpy( map->list[im].units[i],map->list[m].units[i],sizeof(struct mapflag_skill_adjust)); } } //Mimic skills - if( maplist[m].skill_count ) { - maplist[im].skill_count = maplist[m].skill_count; - CREATE( maplist[im].skills, struct mapflag_skill_adjust*, maplist[im].skill_count ); + if( map->list[m].skill_count ) { + map->list[im].skill_count = map->list[m].skill_count; + CREATE( map->list[im].skills, struct mapflag_skill_adjust*, map->list[im].skill_count ); - for(i = 0; i < maplist[im].skill_count; i++) { - CREATE( maplist[im].skills[i], struct mapflag_skill_adjust, 1); - memcpy( maplist[im].skills[i],maplist[m].skills[i],sizeof(struct mapflag_skill_adjust)); + for(i = 0; i < map->list[im].skill_count; i++) { + CREATE( map->list[im].skills[i], struct mapflag_skill_adjust, 1); + memcpy( map->list[im].skills[i],map->list[m].skills[i],sizeof(struct mapflag_skill_adjust)); } } //Mimic zone mf - if( maplist[m].zone_mf_count ) { - maplist[im].zone_mf_count = maplist[m].zone_mf_count; - CREATE( maplist[im].zone_mf, char *, maplist[im].zone_mf_count ); + if( map->list[m].zone_mf_count ) { + map->list[im].zone_mf_count = map->list[m].zone_mf_count; + CREATE( map->list[im].zone_mf, char *, map->list[im].zone_mf_count ); - for(i = 0; i < maplist[im].zone_mf_count; i++) { - CREATE(maplist[im].zone_mf[i], char, MAP_ZONE_MAPFLAG_LENGTH); - safestrncpy(maplist[im].zone_mf[i],maplist[m].zone_mf[i],MAP_ZONE_MAPFLAG_LENGTH); + for(i = 0; i < map->list[im].zone_mf_count; i++) { + CREATE(map->list[im].zone_mf[i], char, MAP_ZONE_MAPFLAG_LENGTH); + safestrncpy(map->list[im].zone_mf[i],map->list[m].zone_mf[i],MAP_ZONE_MAPFLAG_LENGTH); } } - maplist[im].m = im; - maplist[im].instance_id = instance_id; - maplist[im].instance_src_map = m; - maplist[m].flag.src4instance = 1; // Flag this map as a src map for instances + map->list[im].m = im; + map->list[im].instance_id = instance_id; + map->list[im].instance_src_map = m; + map->list[m].flag.src4instance = 1; // Flag this map as a src map for instances RECREATE(instance->list[instance_id].map, unsigned short, ++instance->list[instance_id].num_map); instance->list[instance_id].map[instance->list[instance_id].num_map - 1] = im; // Attach to actual instance - map->addmap2db(&maplist[im]); + map->addmap2db(&map->list[im]); return im; } @@ -265,7 +265,7 @@ int instance_map2imap(int16 m, int instance_id) { } for( i = 0; i < instance->list[instance_id].num_map; i++ ) { - if( instance->list[instance_id].map[i] && maplist[instance->list[instance_id].map[i]].instance_src_map == m ) + if( instance->list[instance_id].map[i] && map->list[instance->list[instance_id].map[i]].instance_src_map == m ) return instance->list[instance_id].map[i]; } return -1; @@ -277,9 +277,9 @@ int instance_map2imap(int16 m, int instance_id) { * result : mapid of map "m" in this instance *--------------------------------------*/ int instance_mapid2imapid(int16 m, int instance_id) { - if( maplist[m].flag.src4instance == 0 ) + if( map->list[m].flag.src4instance == 0 ) return m; // not instances found for this map - else if( maplist[m].instance_id >= 0 ) { // This map is a instance, not a src map instance + else if( map->list[m].instance_id >= 0 ) { // This map is a instance, not a src map instance ShowError("map_instance_mapid2imapid: already instanced (%d / %d)\n", m, instance_id); return -1; } @@ -314,7 +314,7 @@ void instance_init(int instance_id) { return; // nothing to do for( i = 0; i < instance->list[instance_id].num_map; i++ ) - map->foreachinmap(instance_map_npcsub, maplist[instance->list[instance_id].map[i]].instance_src_map, BL_NPC, instance->list[instance_id].map[i]); + map->foreachinmap(instance_map_npcsub, map->list[instance->list[instance_id].map[i]].instance_src_map, BL_NPC, instance->list[instance_id].map[i]); instance->list[instance_id].state = INSTANCE_BUSY; } @@ -367,70 +367,70 @@ int instance_cleanup_sub(struct block_list *bl, va_list ap) { void instance_del_map(int16 m) { int i; - if( m <= 0 || maplist[m].instance_id == -1 ) { + if( m <= 0 || map->list[m].instance_id == -1 ) { ShowError("instance_del_map: tried to remove non-existing instance map (%d)\n", m); return; } - map->map_foreachpc(instance_del_load, m); + map->foreachpc(instance_del_load, m); map->foreachinmap(instance_cleanup_sub, m, BL_ALL); - if( maplist[m].mob_delete_timer != INVALID_TIMER ) - timer->delete(maplist[m].mob_delete_timer, map->removemobs_timer); + if( map->list[m].mob_delete_timer != INVALID_TIMER ) + timer->delete(map->list[m].mob_delete_timer, map->removemobs_timer); mapindex_removemap(map_id2index(m)); // Free memory - aFree(maplist[m].cell); - aFree(maplist[m].block); - aFree(maplist[m].block_mob); + aFree(map->list[m].cell); + aFree(map->list[m].block); + aFree(map->list[m].block_mob); - if( maplist[m].unit_count ) { - for(i = 0; i < maplist[m].unit_count; i++) { - aFree(maplist[m].units[i]); + if( map->list[m].unit_count ) { + for(i = 0; i < map->list[m].unit_count; i++) { + aFree(map->list[m].units[i]); } - if( maplist[m].units ) - aFree(maplist[m].units); + if( map->list[m].units ) + aFree(map->list[m].units); } - if( maplist[m].skill_count ) { - for(i = 0; i < maplist[m].skill_count; i++) { - aFree(maplist[m].skills[i]); + if( map->list[m].skill_count ) { + for(i = 0; i < map->list[m].skill_count; i++) { + aFree(map->list[m].skills[i]); } - if( maplist[m].skills ) - aFree(maplist[m].skills); + if( map->list[m].skills ) + aFree(map->list[m].skills); } - if( maplist[m].zone_mf_count ) { - for(i = 0; i < maplist[m].zone_mf_count; i++) { - aFree(maplist[m].zone_mf[i]); + if( map->list[m].zone_mf_count ) { + for(i = 0; i < map->list[m].zone_mf_count; i++) { + aFree(map->list[m].zone_mf[i]); } - if( maplist[m].zone_mf ) - aFree(maplist[m].zone_mf); + if( map->list[m].zone_mf ) + aFree(map->list[m].zone_mf); } // Remove from instance - for( i = 0; i < instance->list[maplist[m].instance_id].num_map; i++ ) { - if( instance->list[maplist[m].instance_id].map[i] == m ) { - instance->list[maplist[m].instance_id].num_map--; - for( ; i < instance->list[maplist[m].instance_id].num_map; i++ ) - instance->list[maplist[m].instance_id].map[i] = instance->list[maplist[m].instance_id].map[i+1]; + for( i = 0; i < instance->list[map->list[m].instance_id].num_map; i++ ) { + if( instance->list[map->list[m].instance_id].map[i] == m ) { + instance->list[map->list[m].instance_id].num_map--; + for( ; i < instance->list[map->list[m].instance_id].num_map; i++ ) + instance->list[map->list[m].instance_id].map[i] = instance->list[map->list[m].instance_id].map[i+1]; i = -1; break; } } - if( i == instance->list[maplist[m].instance_id].num_map ) - ShowError("map_instance_del: failed to remove %s from instance list (%s): %d\n", maplist[m].name, instance->list[maplist[m].instance_id].name, m); + if( i == instance->list[map->list[m].instance_id].num_map ) + ShowError("map_instance_del: failed to remove %s from instance list (%s): %d\n", map->list[m].name, instance->list[map->list[m].instance_id].name, m); - if( maplist[m].channel ) - clif->chsys_delete(maplist[m].channel); - - map->removemapdb(&maplist[m]); - memset(&maplist[m], 0x00, sizeof(maplist[0])); - maplist[m].name[0] = 0; - maplist[m].instance_id = -1; - maplist[m].mob_delete_timer = INVALID_TIMER; + if( map->list[m].channel ) + clif->chsys_delete(map->list[m].channel); + + map->removemapdb(&map->list[m]); + memset(&map->list[m], 0x00, sizeof(map->list[0])); + map->list[m].name[0] = 0; + map->list[m].instance_id = -1; + map->list[m].mob_delete_timer = INVALID_TIMER; } /*-------------------------------------- @@ -592,9 +592,9 @@ void instance_check_kick(struct map_session_data *sd) { int16 m = sd->bl.m; clif->instance_leave(sd->fd); - if( maplist[m].instance_id >= 0 ) { // User was on the instance map - if( maplist[m].save.map ) - pc->setpos(sd, maplist[m].save.map, maplist[m].save.x, maplist[m].save.y, CLR_TELEPORT); + if( map->list[m].instance_id >= 0 ) { // User was on the instance map + if( map->list[m].save.map ) + pc->setpos(sd, map->list[m].save.map, map->list[m].save.x, map->list[m].save.y, CLR_TELEPORT); else pc->setpos(sd, sd->status.save_point.map, sd->status.save_point.x, sd->status.save_point.y, CLR_TELEPORT); } diff --git a/src/map/intif.c b/src/map/intif.c index e42679ec6..f31ab0f5a 100644 --- a/src/map/intif.c +++ b/src/map/intif.c @@ -454,8 +454,8 @@ int intif_party_changemap(struct map_session_data *sd,int online) { if(!sd) return 0; - if( (m=map->mapindex2mapid(sd->mapindex)) >= 0 && maplist[m].instance_id >= 0 ) - mapindex = map_id2index(maplist[m].instance_src_map); + if( (m=map->mapindex2mapid(sd->mapindex)) >= 0 && map->list[m].instance_id >= 0 ) + mapindex = map_id2index(map->list[m].instance_src_map); else mapindex = sd->mapindex; @@ -918,7 +918,7 @@ void mapif_parse_WisToGM(int fd) safestrncpy(Wisp_name, (char*)RFIFOP(fd,4), NAME_LENGTH); safestrncpy(message, (char*)RFIFOP(fd,32), mes_len); // information is sent to all online GM - map->map_foreachpc(mapif_parse_WisToGM_sub, permission, Wisp_name, message, mes_len); + map->foreachpc(mapif_parse_WisToGM_sub, permission, Wisp_name, message, mes_len); if (message != mbuf) aFree(message); diff --git a/src/map/itemdb.c b/src/map/itemdb.c index f7ee8a884..fe2c43fcc 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -1838,18 +1838,18 @@ int itemdb_read_sqldb(void) { uint32 count = 0; // retrieve all rows from the item database - if( SQL_ERROR == SQL->Query(mmysql_handle, "SELECT * FROM `%s`", item_db_name[fi]) ) { - Sql_ShowDebug(mmysql_handle); + if( SQL_ERROR == SQL->Query(map->mysql_handle, "SELECT * FROM `%s`", item_db_name[fi]) ) { + Sql_ShowDebug(map->mysql_handle); continue; } // process rows one by one - while( SQL_SUCCESS == SQL->NextRow(mmysql_handle) ) {// wrap the result into a TXT-compatible format + while( SQL_SUCCESS == SQL->NextRow(map->mysql_handle) ) {// wrap the result into a TXT-compatible format char* str[ITEMDB_SQL_COLUMNS]; char* dummy = ""; int i; for( i = 0; i < ITEMDB_SQL_COLUMNS; ++i ) { - SQL->GetData(mmysql_handle, i, &str[i], NULL); + SQL->GetData(map->mysql_handle, i, &str[i], NULL); if( str[i] == NULL ) str[i] = dummy; // get rid of NULL columns } @@ -1860,7 +1860,7 @@ int itemdb_read_sqldb(void) { } // free the query result - SQL->FreeResult(mmysql_handle); + SQL->FreeResult(map->mysql_handle); ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, item_db_name[fi]); } @@ -1895,18 +1895,18 @@ uint64 itemdb_unique_id(int8 flag, int64 value) { } int itemdb_uid_load() { char * uid; - if (SQL_ERROR == SQL->Query(mmysql_handle, "SELECT `value` FROM `%s` WHERE `varname`='unique_id'",map->interreg_db)) - Sql_ShowDebug(mmysql_handle); + if (SQL_ERROR == SQL->Query(map->mysql_handle, "SELECT `value` FROM `%s` WHERE `varname`='unique_id'",map->interreg_db)) + Sql_ShowDebug(map->mysql_handle); - if( SQL_SUCCESS != SQL->NextRow(mmysql_handle) ) { + if( SQL_SUCCESS != SQL->NextRow(map->mysql_handle) ) { ShowError("itemdb_uid_load: Unable to fetch unique_id data\n"); - SQL->FreeResult(mmysql_handle); + SQL->FreeResult(map->mysql_handle); return -1; } - SQL->GetData(mmysql_handle, 0, &uid, NULL); + SQL->GetData(map->mysql_handle, 0, &uid, NULL); itemdb->unique_id(1, (uint64)strtoull(uid, NULL, 10)); - SQL->FreeResult(mmysql_handle); + SQL->FreeResult(map->mysql_handle); return 0; } diff --git a/src/map/log.c b/src/map/log.c index 5d88e3df4..e33240505 100644 --- a/src/map/log.c +++ b/src/map/log.c @@ -91,7 +91,7 @@ bool should_log_item(int nameid, int amount, int refine, struct item_data *id) { } void log_branch_sub_sql(struct map_session_data* sd) { SqlStmt* stmt; - stmt = SQL->StmtMalloc(logmysql_handle); + stmt = SQL->StmtMalloc(logs->mysql_handle); if( SQL_SUCCESS != SQL->StmtPrepare(stmt, LOG_QUERY " INTO `%s` (`branch_date`, `account_id`, `char_id`, `char_name`, `map`) VALUES (NOW(), '%d', '%d', ?, '%s')", logs->config.log_branch, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) ) || SQL_SUCCESS != SQL->StmtBindParam(stmt, 0, SQLDT_STRING, sd->status.name, strnlen(sd->status.name, NAME_LENGTH)) || SQL_SUCCESS != SQL->StmtExecute(stmt) ) @@ -125,13 +125,13 @@ void log_branch(struct map_session_data* sd) { logs->branch_sub(sd); } void log_pick_sub_sql(int id, int16 m, e_log_pick_type type, int amount, struct item* itm, struct item_data *data) { - if( SQL_ERROR == SQL->Query(logmysql_handle, + if( SQL_ERROR == SQL->Query(logs->mysql_handle, LOG_QUERY " INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `refine`, `card0`, `card1`, `card2`, `card3`, `map`, `unique_id`) " "VALUES (NOW(), '%d', '%c', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%"PRIu64"')", logs->config.log_pick, id, logs->picktype2char(type), itm->nameid, amount, itm->refine, itm->card[0], itm->card[1], itm->card[2], itm->card[3], - maplist[m].name?maplist[m].name:"", itm->unique_id) + map->list[m].name?map->list[m].name:"", itm->unique_id) ) { - Sql_ShowDebug(logmysql_handle); + Sql_ShowDebug(logs->mysql_handle); return; } } @@ -146,7 +146,7 @@ void log_pick_sub_txt(int id, int16 m, e_log_pick_type type, int amount, struct strftime(timestring, sizeof(timestring), "%m/%d/%Y %H:%M:%S", localtime(&curtime)); fprintf(logfp,"%s - %d\t%c\t%d,%d,%d,%d,%d,%d,%d,%s,'%"PRIu64"'\n", timestring, id, logs->picktype2char(type), itm->nameid, amount, itm->refine, itm->card[0], itm->card[1], itm->card[2], itm->card[3], - maplist[m].name?maplist[m].name:"", itm->unique_id); + map->list[m].name?map->list[m].name:"", itm->unique_id); fclose(logfp); } /// logs item transactions (generic) @@ -175,10 +175,10 @@ void log_pick_mob(struct mob_data* md, e_log_pick_type type, int amount, struct log_pick(md->class_, md->bl.m, type, amount, itm, data ? data : itemdb->exists(itm->nameid)); } void log_zeny_sub_sql(struct map_session_data* sd, e_log_pick_type type, struct map_session_data* src_sd, int amount) { - if( SQL_ERROR == SQL->Query(logmysql_handle, LOG_QUERY " INTO `%s` (`time`, `char_id`, `src_id`, `type`, `amount`, `map`) VALUES (NOW(), '%d', '%d', '%c', '%d', '%s')", + if( SQL_ERROR == SQL->Query(logs->mysql_handle, LOG_QUERY " INTO `%s` (`time`, `char_id`, `src_id`, `type`, `amount`, `map`) VALUES (NOW(), '%d', '%d', '%c', '%d', '%s')", logs->config.log_zeny, sd->status.char_id, src_sd->status.char_id, logs->picktype2char(type), amount, mapindex_id2name(sd->mapindex)) ) { - Sql_ShowDebug(logmysql_handle); + Sql_ShowDebug(logs->mysql_handle); return; } } @@ -205,10 +205,10 @@ void log_zeny(struct map_session_data* sd, e_log_pick_type type, struct map_sess logs->zeny_sub(sd,type,src_sd,amount); } void log_mvpdrop_sub_sql(struct map_session_data* sd, int monster_id, int* log_mvp) { - if( SQL_ERROR == SQL->Query(logmysql_handle, LOG_QUERY " INTO `%s` (`mvp_date`, `kill_char_id`, `monster_id`, `prize`, `mvpexp`, `map`) VALUES (NOW(), '%d', '%d', '%d', '%d', '%s') ", + if( SQL_ERROR == SQL->Query(logs->mysql_handle, LOG_QUERY " INTO `%s` (`mvp_date`, `kill_char_id`, `monster_id`, `prize`, `mvpexp`, `map`) VALUES (NOW(), '%d', '%d', '%d', '%d', '%s') ", logs->config.log_mvpdrop, sd->status.char_id, monster_id, log_mvp[0], log_mvp[1], mapindex_id2name(sd->mapindex)) ) { - Sql_ShowDebug(logmysql_handle); + Sql_ShowDebug(logs->mysql_handle); return; } } @@ -238,7 +238,7 @@ void log_mvpdrop(struct map_session_data* sd, int monster_id, int* log_mvp) void log_atcommand_sub_sql(struct map_session_data* sd, const char* message) { SqlStmt* stmt; - stmt = SQL->StmtMalloc(logmysql_handle); + stmt = SQL->StmtMalloc(logs->mysql_handle); if( SQL_SUCCESS != SQL->StmtPrepare(stmt, LOG_QUERY " INTO `%s` (`atcommand_date`, `account_id`, `char_id`, `char_name`, `map`, `command`) VALUES (NOW(), '%d', '%d', ?, '%s', ?)", logs->config.log_gm, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) ) || SQL_SUCCESS != SQL->StmtBindParam(stmt, 0, SQLDT_STRING, sd->status.name, strnlen(sd->status.name, NAME_LENGTH)) || SQL_SUCCESS != SQL->StmtBindParam(stmt, 1, SQLDT_STRING, (char*)message, safestrnlen(message, 255)) @@ -276,7 +276,7 @@ void log_atcommand(struct map_session_data* sd, const char* message) void log_npc_sub_sql(struct map_session_data *sd, const char *message) { SqlStmt* stmt; - stmt = SQL->StmtMalloc(logmysql_handle); + stmt = SQL->StmtMalloc(logs->mysql_handle); if( SQL_SUCCESS != SQL->StmtPrepare(stmt, LOG_QUERY " INTO `%s` (`npc_date`, `account_id`, `char_id`, `char_name`, `map`, `mes`) VALUES (NOW(), '%d', '%d', ?, '%s', ?)", logs->config.log_npc, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) ) || SQL_SUCCESS != SQL->StmtBindParam(stmt, 0, SQLDT_STRING, sd->status.name, strnlen(sd->status.name, NAME_LENGTH)) || SQL_SUCCESS != SQL->StmtBindParam(stmt, 1, SQLDT_STRING, (char*)message, safestrnlen(message, 255)) @@ -314,7 +314,7 @@ void log_npc(struct map_session_data* sd, const char* message) void log_chat_sub_sql(e_log_chat_type type, int type_id, int src_charid, int src_accid, const char *mapname, int x, int y, const char* dst_charname, const char* message) { SqlStmt* stmt; - stmt = SQL->StmtMalloc(logmysql_handle); + stmt = SQL->StmtMalloc(logs->mysql_handle); if( SQL_SUCCESS != SQL->StmtPrepare(stmt, LOG_QUERY " INTO `%s` (`time`, `type`, `type_id`, `src_charid`, `src_accountid`, `src_map`, `src_map_x`, `src_map_y`, `dst_charname`, `message`) VALUES (NOW(), '%c', '%d', '%d', '%d', '%s', '%d', '%d', ?, ?)", logs->config.log_chat, logs->chattype2char(type), type_id, src_charid, src_accid, mapname, x, y) || SQL_SUCCESS != SQL->StmtBindParam(stmt, 0, SQLDT_STRING, (char*)dst_charname, safestrnlen(dst_charname, NAME_LENGTH)) || SQL_SUCCESS != SQL->StmtBindParam(stmt, 1, SQLDT_STRING, (char*)message, safestrnlen(message, CHAT_SIZE_MAX)) @@ -354,6 +354,24 @@ void log_chat(e_log_chat_type type, int type_id, int src_charid, int src_accid, logs->chat_sub(type,type_id,src_charid,src_accid,mapname,x,y,dst_charname,message); } +void log_sql_init(void) { + // log db connection + logs->mysql_handle = SQL->Malloc(); + + ShowInfo(""CL_WHITE"[SQL]"CL_RESET": Connecting to the Log Database "CL_WHITE"%s"CL_RESET" At "CL_WHITE"%s"CL_RESET"...\n",logs->db_name,logs->db_ip); + if ( SQL_ERROR == SQL->Connect(logs->mysql_handle, logs->db_id, logs->db_pw, logs->db_ip, logs->db_port, logs->db_name) ) + exit(EXIT_FAILURE); + ShowStatus(""CL_WHITE"[SQL]"CL_RESET": Successfully '"CL_GREEN"connected"CL_RESET"' to Database '"CL_WHITE"%s"CL_RESET"'.\n", logs->db_name); + + if( strlen(map->default_codepage) > 0 ) + if ( SQL_ERROR == SQL->SetEncoding(logs->mysql_handle, map->default_codepage) ) + Sql_ShowDebug(logs->mysql_handle); +} +void log_sql_final(void) { + ShowStatus("Close Log DB Connection....\n"); + SQL->Free(logs->mysql_handle); + logs->mysql_handle = NULL; +} void log_set_defaults(void) { memset(&logs->config, 0, sizeof(logs->config)); @@ -481,6 +499,15 @@ void log_config_complete(void) { void log_defaults(void) { logs = &log_s; + sprintf(logs->db_ip,"127.0.0.1"); + sprintf(logs->db_id,"ragnarok"); + sprintf(logs->db_pw,"ragnarok"); + sprintf(logs->db_name,"log"); + + logs->db_port = 3306; + logs->mysql_handle = NULL; + /* */ + logs->pick_pc = log_pick_pc; logs->pick_mob = log_pick_mob; logs->zeny = log_zeny; @@ -501,6 +528,8 @@ void log_defaults(void) { logs->config_read = log_config_read; logs->config_done = log_config_complete; + logs->sql_init = log_sql_init; + logs->sql_final = log_sql_final; logs->picktype2char = log_picktype2char; logs->chattype2char = log_chattype2char; diff --git a/src/map/log.h b/src/map/log.h index caf9ce0c5..07606c8ef 100644 --- a/src/map/log.h +++ b/src/map/log.h @@ -95,6 +95,13 @@ struct log_interface { char log_branch[64], log_pick[64], log_zeny[64], log_mvpdrop[64], log_gm[64], log_npc[64], log_chat[64]; } config; /* */ + char db_ip[32]; + int db_port; + char db_id[32]; + char db_pw[32]; + char db_name[32]; + Sql* mysql_handle; + /* */ void (*pick_pc) (struct map_session_data* sd, e_log_pick_type type, int amount, struct item* itm, struct item_data *data); void (*pick_mob) (struct mob_data* md, e_log_pick_type type, int amount, struct item* itm, struct item_data *data); void (*zeny) (struct map_session_data* sd, e_log_pick_type type, struct map_session_data* src_sd, int amount); @@ -114,6 +121,8 @@ struct log_interface { int (*config_read) (const char* cfgName); void (*config_done) (void); + void (*sql_init) (void); + void (*sql_final) (void); char (*picktype2char) (e_log_pick_type type); char (*chattype2char) (e_log_chat_type type); diff --git a/src/map/mail.c b/src/map/mail.c index ea8bda003..2378cbe2a 100644 --- a/src/map/mail.c +++ b/src/map/mail.c @@ -177,7 +177,7 @@ void mail_deliveryfail(struct map_session_data *sd, struct mail_message *msg) // This function only check if the mail operations are valid bool mail_invalid_operation(struct map_session_data *sd) { - if( !maplist[sd->bl.m].flag.town && !pc->can_use_command(sd, "@mail") ) { + if( !map->list[sd->bl.m].flag.town && !pc->can_use_command(sd, "@mail") ) { ShowWarning("clif->parse_Mail: char '%s' trying to do invalid mail operations.\n", sd->status.name); return true; } diff --git a/src/map/map.c b/src/map/map.c index ea40d9979..0457de5bb 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -62,197 +62,106 @@ #include #endif -char default_codepage[32] = ""; - -int map_server_port = 3306; -char map_server_ip[32] = "127.0.0.1"; -char map_server_id[32] = "ragnarok"; -char map_server_pw[32] = "ragnarok"; -char map_server_db[32] = "ragnarok"; -Sql* mmysql_handle; - -int map_port=0; - -// log database -char log_db_ip[32] = "127.0.0.1"; -int log_db_port = 3306; -char log_db_id[32] = "ragnarok"; -char log_db_pw[32] = "ragnarok"; -char log_db_db[32] = "log"; -Sql* logmysql_handle; - -// DBMap declaration -static DBMap* id_db=NULL; // int id -> struct block_list* -static DBMap* pc_db=NULL; // int id -> struct map_session_data* -static DBMap* mobid_db=NULL; // int id -> struct mob_data* -static DBMap* bossid_db=NULL; // int id -> struct mob_data* (MVP db) -static DBMap* map_db=NULL; // unsigned int mapindex -> struct map_data_other_server* -static DBMap* nick_db=NULL; // int char_id -> struct charid2nick* (requested names of offline characters) -static DBMap* charid_db=NULL; // int char_id -> struct map_session_data* -static DBMap* regen_db=NULL; // int id -> struct block_list* (status_natural_heal processing) - -static int map_users=0; - -#define BLOCK_SIZE 8 -#define block_free_max 1048576 -struct block_list *block_free[block_free_max]; -static int block_free_count = 0, block_free_lock = 0; - -#define BL_LIST_MAX 1048576 -static struct block_list *bl_list[BL_LIST_MAX]; -static int bl_list_count = 0; - -struct charid_request { - struct charid_request* next; - int charid;// who want to be notified of the nick -}; -struct charid2nick { - char nick[NAME_LENGTH]; - struct charid_request* requests;// requests of notification on this nick -}; - -// This is the main header found at the very beginning of the map cache -struct map_cache_main_header { - uint32 file_size; - uint16 map_count; -}; - -// This is the header appended before every compressed map cells info in the map cache -struct map_cache_map_info { - char name[MAP_NAME_LENGTH]; - int16 xs; - int16 ys; - int32 len; -}; - -int16 index2mapid[MAX_MAPINDEX]; - -int enable_grf = 0; //To enable/disable reading maps from GRF files, bypassing mapcache [blackhole89] - -/* [Ind/Hercules] */ -struct eri *map_iterator_ers; -char *map_cache_buffer = NULL; // Has the uncompressed gat data of all maps, so just one allocation has to be made - struct map_interface map_s; - -struct map_session_data *cpsd; +struct mapit_interface mapit_s; /*========================================== -* server player count (of all mapservers) -*------------------------------------------*/ -void map_setusers(int users) -{ - map_users = users; + * server player count (of all mapservers) + *------------------------------------------*/ +void map_setusers(int users) { + map->users = users; } -int map_getusers(void) -{ - return map_users; +int map_getusers(void) { + return map->users; } /*========================================== -* server player count (this mapserver only) -*------------------------------------------*/ -int map_usercount(void) -{ - return pc_db->size(pc_db); + * server player count (this mapserver only) + *------------------------------------------*/ +int map_usercount(void) { + return db_size(map->pc_db); } - /*========================================== -* Attempt to free a map blocklist -*------------------------------------------*/ -int map_freeblock (struct block_list *bl) -{ - nullpo_retr(block_free_lock, bl); - if (block_free_lock == 0 || block_free_count >= block_free_max) - { + * Attempt to free a map blocklist + *------------------------------------------*/ +int map_freeblock (struct block_list *bl) { + nullpo_retr(map->block_free_lock, bl); + if (map->block_free_lock == 0 || map->block_free_count >= block_free_max) { aFree(bl); bl = NULL; - if (block_free_count >= block_free_max) - ShowWarning("map_freeblock: too many free block! %d %d\n", block_free_count, block_free_lock); + if (map->block_free_count >= block_free_max) + ShowWarning("map_freeblock: too many free block! %d %d\n", map->block_free_count, map->block_free_lock); } else - block_free[block_free_count++] = bl; + map->block_free[map->block_free_count++] = bl; - return block_free_lock; + return map->block_free_lock; } /*========================================== -* Lock blocklist, (prevent map->freeblock usage) -*------------------------------------------*/ -int map_freeblock_lock (void) -{ - return ++block_free_lock; + * Lock blocklist, (prevent map->freeblock usage) + *------------------------------------------*/ +int map_freeblock_lock (void) { + return ++map->block_free_lock; } /*========================================== -* Remove the lock on map_bl -*------------------------------------------*/ -int map_freeblock_unlock (void) -{ - if ((--block_free_lock) == 0) { + * Remove the lock on map_bl + *------------------------------------------*/ +int map_freeblock_unlock (void) { + if ((--map->block_free_lock) == 0) { int i; - for (i = 0; i < block_free_count; i++) + for (i = 0; i < map->block_free_count; i++) { - aFree(block_free[i]); - block_free[i] = NULL; + aFree(map->block_free[i]); + map->block_free[i] = NULL; } - block_free_count = 0; - } else if (block_free_lock < 0) { + map->block_free_count = 0; + } else if (map->block_free_lock < 0) { ShowError("map_freeblock_unlock: lock count < 0 !\n"); - block_free_lock = 0; + map->block_free_lock = 0; } - return block_free_lock; + return map->block_free_lock; } // Timer function to check if there some remaining lock and remove them if so. // Called each 1s int map_freeblock_timer(int tid, unsigned int tick, int id, intptr_t data) { - if (block_free_lock > 0) { - ShowError("map_freeblock_timer: block_free_lock(%d) is invalid.\n", block_free_lock); - block_free_lock = 1; + if (map->block_free_lock > 0) { + ShowError("map_freeblock_timer: block_free_lock(%d) is invalid.\n", map->block_free_lock); + map->block_free_lock = 1; map->freeblock_unlock(); } return 0; } -// -// blocklist -// -/*========================================== -* Handling of map_bl[] -* The adresse of bl_heal is set in bl->prev -*------------------------------------------*/ -static struct block_list bl_head; - #ifdef CELL_NOSTACK /*========================================== -* These pair of functions update the counter of how many objects -* lie on a tile. -*------------------------------------------*/ -static void map_addblcell(struct block_list *bl) { - if( bl->m < 0 || bl->x < 0 || bl->x >= maplist[bl->m].xs - || bl->y < 0 || bl->y >= maplist[bl->m].ys + * These pair of functions update the counter of how many objects + * lie on a tile. + *------------------------------------------*/ +void map_addblcell(struct block_list *bl) { + if( bl->m < 0 || bl->x < 0 || bl->x >= map->list[bl->m].xs + || bl->y < 0 || bl->y >= map->list[bl->m].ys || !(bl->type&BL_CHAR) ) return; - maplist[bl->m].cell[bl->x+bl->y*maplist[bl->m].xs].cell_bl++; - return; + map->list[bl->m].cell[bl->x+bl->y*map->list[bl->m].xs].cell_bl++; } -static void map_delblcell(struct block_list *bl) { - if( bl->m < 0 || bl->x < 0 || bl->x >= maplist[bl->m].xs - || bl->y < 0 || bl->y >= maplist[bl->m].ys +void map_delblcell(struct block_list *bl) { + if( bl->m < 0 || bl->x < 0 || bl->x >= map->list[bl->m].xs + || bl->y < 0 || bl->y >= map->list[bl->m].ys || !(bl->type&BL_CHAR) ) - return; - maplist[bl->m].cell[bl->x+bl->y*maplist[bl->m].xs].cell_bl--; + map->list[bl->m].cell[bl->x+bl->y*map->list[bl->m].xs].cell_bl--; } #endif /*========================================== -* Adds a block to the map. -* Returns 0 on success, 1 on failure (illegal coordinates). -*------------------------------------------*/ + * Adds a block to the map. + * Returns 0 on success, 1 on failure (illegal coordinates). + *------------------------------------------*/ int map_addblock(struct block_list* bl) { int16 m, x, y; @@ -268,39 +177,39 @@ int map_addblock(struct block_list* bl) m = bl->m; x = bl->x; y = bl->y; - if( m < 0 || m >= map->map_num ) { - ShowError("map_addblock: invalid map id (%d), only %d are loaded.\n", m, map->map_num); + if( m < 0 || m >= map->count ) { + ShowError("map_addblock: invalid map id (%d), only %d are loaded.\n", m, map->count); return 1; } - if( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) { - ShowError("map_addblock: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d\n", maplist[m].name, x, y, maplist[m].xs, maplist[m].ys); + if( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) { + ShowError("map_addblock: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d\n", map->list[m].name, x, y, map->list[m].xs, map->list[m].ys); return 1; } - pos = x/BLOCK_SIZE+(y/BLOCK_SIZE)*maplist[m].bxs; + pos = x/BLOCK_SIZE+(y/BLOCK_SIZE)*map->list[m].bxs; if (bl->type == BL_MOB) { - bl->next = maplist[m].block_mob[pos]; - bl->prev = &bl_head; + bl->next = map->list[m].block_mob[pos]; + bl->prev = &map->bl_head; if (bl->next) bl->next->prev = bl; - maplist[m].block_mob[pos] = bl; + map->list[m].block_mob[pos] = bl; } else { - bl->next = maplist[m].block[pos]; - bl->prev = &bl_head; + bl->next = map->list[m].block[pos]; + bl->prev = &map->bl_head; if (bl->next) bl->next->prev = bl; - maplist[m].block[pos] = bl; + map->list[m].block[pos] = bl; } #ifdef CELL_NOSTACK - map_addblcell(bl); + map->addblcell(bl); #endif return 0; } /*========================================== -* Removes a block from the map. -*------------------------------------------*/ + * Removes a block from the map. + *------------------------------------------*/ int map_delblock(struct block_list* bl) { int pos; @@ -316,19 +225,19 @@ int map_delblock(struct block_list* bl) } #ifdef CELL_NOSTACK - map_delblcell(bl); + map->delblcell(bl); #endif - pos = bl->x/BLOCK_SIZE+(bl->y/BLOCK_SIZE)*maplist[bl->m].bxs; + pos = bl->x/BLOCK_SIZE+(bl->y/BLOCK_SIZE)*map->list[bl->m].bxs; if (bl->next) bl->next->prev = bl->prev; - if (bl->prev == &bl_head) { + if (bl->prev == &map->bl_head) { //Since the head of the list, update the block_list map of [] if (bl->type == BL_MOB) { - maplist[bl->m].block_mob[pos] = bl->next; + map->list[bl->m].block_mob[pos] = bl->next; } else { - maplist[bl->m].block[pos] = bl->next; + map->list[bl->m].block[pos] = bl->next; } } else { bl->prev->next = bl->next; @@ -340,10 +249,10 @@ int map_delblock(struct block_list* bl) } /*========================================== -* Moves a block a x/y target position. [Skotlex] -* Pass flag as 1 to prevent doing skill->unit_move checks -* (which are executed by default on BL_CHAR types) -*------------------------------------------*/ + * Moves a block a x/y target position. [Skotlex] + * Pass flag as 1 to prevent doing skill->unit_move checks + * (which are executed by default on BL_CHAR types) + *------------------------------------------*/ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick) { int x0 = bl->x, y0 = bl->y; @@ -375,13 +284,13 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick) if (moveblock) map->delblock(bl); #ifdef CELL_NOSTACK - else map_delblcell(bl); + else map->delblcell(bl); #endif bl->x = x1; bl->y = y1; if (moveblock) map->addblock(bl); #ifdef CELL_NOSTACK - else map_addblcell(bl); + else map->addblcell(bl); #endif if (bl->type&BL_CHAR) { @@ -449,49 +358,49 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick) } /*========================================== -* Counts specified number of objects on given cell. -* TODO: merge with bl_getall_area -*------------------------------------------*/ + * Counts specified number of objects on given cell. + * TODO: merge with bl_getall_area + *------------------------------------------*/ int map_count_oncell(int16 m, int16 x, int16 y, int type) { int bx,by; struct block_list *bl; int count = 0; - if (x < 0 || y < 0 || (x >= maplist[m].xs) || (y >= maplist[m].ys)) + if (x < 0 || y < 0 || (x >= map->list[m].xs) || (y >= map->list[m].ys)) return 0; bx = x/BLOCK_SIZE; by = y/BLOCK_SIZE; if (type&~BL_MOB) - for( bl = maplist[m].block[bx+by*maplist[m].bxs] ; bl != NULL ; bl = bl->next ) + for( bl = map->list[m].block[bx+by*map->list[m].bxs] ; bl != NULL ; bl = bl->next ) if(bl->x == x && bl->y == y && bl->type&type) count++; if (type&BL_MOB) - for( bl = maplist[m].block_mob[bx+by*maplist[m].bxs] ; bl != NULL ; bl = bl->next ) + for( bl = map->list[m].block_mob[bx+by*map->list[m].bxs] ; bl != NULL ; bl = bl->next ) if(bl->x == x && bl->y == y) count++; return count; } /* -* Looks for a skill unit on a given cell -* flag&1: runs battle_check_target check based on unit->group->target_flag -*/ + * Looks for a skill unit on a given cell + * flag&1: runs battle_check_target check based on unit->group->target_flag + */ struct skill_unit* map_find_skill_unit_oncell(struct block_list* target,int16 x,int16 y,uint16 skill_id,struct skill_unit* out_unit, int flag) { int16 m,bx,by; struct block_list *bl; struct skill_unit *su; m = target->m; - if (x < 0 || y < 0 || (x >= maplist[m].xs) || (y >= maplist[m].ys)) + if (x < 0 || y < 0 || (x >= map->list[m].xs) || (y >= map->list[m].ys)) return NULL; bx = x/BLOCK_SIZE; by = y/BLOCK_SIZE; - for( bl = maplist[m].block[bx+by*maplist[m].bxs] ; bl != NULL ; bl = bl->next ) { + for( bl = map->list[m].block[bx+by*map->list[m].bxs] ; bl != NULL ; bl = bl->next ) { if (bl->x != x || bl->y != y || bl->type != BL_SKILL) continue; @@ -523,17 +432,17 @@ static int bl_vforeach(int (*func)(struct block_list*, va_list), int blockcount, int returnCount = 0; map->freeblock_lock(); - for (i = blockcount; i < bl_list_count && returnCount < max; i++) { - if (bl_list[i]->prev) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion. + for (i = blockcount; i < map->bl_list_count && returnCount < max; i++) { + if (map->bl_list[i]->prev) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion. va_list argscopy; va_copy(argscopy, args); - returnCount += func(bl_list[i], argscopy); + returnCount += func(map->bl_list[i], argscopy); va_end(argscopy); } } map->freeblock_unlock(); - bl_list_count = blockcount; + map->bl_list_count = blockcount; return returnCount; } @@ -553,30 +462,30 @@ static int map_vforeachinmap(int (*func)(struct block_list*, va_list), int16 m, int bsize; va_list argscopy; struct block_list *bl; - int blockcount = bl_list_count; + int blockcount = map->bl_list_count; if (m < 0) return 0; - bsize = maplist[m].bxs * maplist[m].bys; + bsize = map->list[m].bxs * map->list[m].bys; for (i = 0; i < bsize; i++) { if (type&~BL_MOB) { - for (bl = maplist[m].block[i]; bl != NULL; bl = bl->next) { - if (bl->type&type && bl_list_count < BL_LIST_MAX) { - bl_list[bl_list_count++] = bl; + for (bl = map->list[m].block[i]; bl != NULL; bl = bl->next) { + if (bl->type&type && map->bl_list_count < BL_LIST_MAX) { + map->bl_list[map->bl_list_count++] = bl; } } } if (type&BL_MOB) { - for (bl = maplist[m].block_mob[i]; bl != NULL; bl = bl->next) { - if (bl_list_count < BL_LIST_MAX) { - bl_list[bl_list_count++] = bl; + for (bl = map->list[m].block_mob[i]; bl != NULL; bl = bl->next) { + if (map->bl_list_count < BL_LIST_MAX) { + map->bl_list[map->bl_list_count++] = bl; } } } } - if (bl_list_count >= BL_LIST_MAX) + if (map->bl_list_count >= BL_LIST_MAX) ShowError("map.c:map_vforeachinmap: bl_list size (%d) exceeded\n", BL_LIST_MAX); va_copy(argscopy, args); @@ -679,48 +588,48 @@ static int bl_getall_area(int type, int m, int x0, int y0, int x1, int y1, int ( // Limit search area to map size x0 = max(x0, 0); y0 = max(y0, 0); - x1 = min(x1, maplist[m].xs - 1); - y1 = min(y1, maplist[m].ys - 1); + x1 = min(x1, map->list[m].xs - 1); + y1 = min(y1, map->list[m].ys - 1); for (by = y0 / BLOCK_SIZE; by <= y1 / BLOCK_SIZE; by++) { for (bx = x0 / BLOCK_SIZE; bx <= x1 / BLOCK_SIZE; bx++) { if (type&~BL_MOB) { - for (bl = maplist[m].block[bx + by * maplist[m].bxs]; bl != NULL; bl = bl->next) { - if (bl_list_count < BL_LIST_MAX + for (bl = map->list[m].block[bx + by * map->list[m].bxs]; bl != NULL; bl = bl->next) { + if (map->bl_list_count < BL_LIST_MAX && bl->type&type && bl->x >= x0 && bl->x <= x1 && bl->y >= y0 && bl->y <= y1) { if (func) { va_start(args, func); if (func(bl, args)) { - bl_list[bl_list_count++] = bl; + map->bl_list[map->bl_list_count++] = bl; found++; } va_end(args); } else { - bl_list[bl_list_count++] = bl; + map->bl_list[map->bl_list_count++] = bl; found++; } } } } if (type&BL_MOB) { // TODO: fix this code duplication - for (bl = maplist[m].block_mob[bx + by * maplist[m].bxs]; bl != NULL; bl = bl->next) { - if (bl_list_count < BL_LIST_MAX + for (bl = map->list[m].block_mob[bx + by * map->list[m].bxs]; bl != NULL; bl = bl->next) { + if (map->bl_list_count < BL_LIST_MAX //&& bl->type&type // block_mob contains BL_MOBs only && bl->x >= x0 && bl->x <= x1 && bl->y >= y0 && bl->y <= y1) { if (func) { va_start(args, func); if (func(bl, args)) { - bl_list[bl_list_count++] = bl; + map->bl_list[map->bl_list_count++] = bl; found++; } va_end(args); } else { - bl_list[bl_list_count++] = bl; + map->bl_list[map->bl_list_count++] = bl; found++; } } @@ -729,7 +638,7 @@ static int bl_getall_area(int type, int m, int x0, int y0, int x1, int y1, int ( } } - if (bl_list_count >= BL_LIST_MAX) + if (map->bl_list_count >= BL_LIST_MAX) ShowError("map.c:bl_getall_area: bl_list size (%d) exceeded\n", BL_LIST_MAX); return found; @@ -765,7 +674,7 @@ static int bl_vgetall_inrange(struct block_list *bl, va_list args) */ int map_vforeachinrange(int (*func)(struct block_list*, va_list), struct block_list* center, int16 range, int type, va_list ap) { int returnCount = 0; - int blockcount = bl_list_count; + int blockcount = map->bl_list_count; va_list apcopy; if (range < 0) range *= -1; @@ -817,7 +726,7 @@ int map_foreachinrange(int (*func)(struct block_list*, va_list), struct block_li */ int map_vforcountinrange(int (*func)(struct block_list*, va_list), struct block_list* center, int16 range, int count, int type, va_list ap) { int returnCount = 0; - int blockcount = bl_list_count; + int blockcount = map->bl_list_count; va_list apcopy; if (range < 0) range *= -1; @@ -890,7 +799,7 @@ static int bl_vgetall_inshootrange(struct block_list *bl, va_list args) */ int map_vforeachinshootrange(int (*func)(struct block_list*, va_list), struct block_list* center, int16 range, int type, va_list ap) { int returnCount = 0; - int blockcount = bl_list_count; + int blockcount = map->bl_list_count; va_list apcopy; if (range < 0) range *= -1; @@ -943,7 +852,7 @@ int map_foreachinshootrange(int (*func)(struct block_list*, va_list), struct blo */ int map_vforeachinarea(int (*func)(struct block_list*, va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int type, va_list ap) { int returnCount = 0; - int blockcount = bl_list_count; + int blockcount = map->bl_list_count; va_list apcopy; bl_getall_area(type, m, x0, y0, x1, y1, NULL); @@ -999,7 +908,7 @@ int map_foreachinarea(int (*func)(struct block_list*, va_list), int16 m, int16 x */ int map_vforcountinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x0, int16 y0, int16 x1, int16 y1, int count, int type, va_list ap) { int returnCount = 0; - int blockcount = bl_list_count; + int blockcount = map->bl_list_count; va_list apcopy; bl_getall_area(type, m, x0, y0, x1, y1, NULL); @@ -1084,7 +993,7 @@ static int bl_vgetall_inmovearea(struct block_list *bl, va_list args) */ int map_vforeachinmovearea(int (*func)(struct block_list*, va_list), struct block_list* center, int16 range, int16 dx, int16 dy, int type, va_list ap) { int returnCount = 0; - int blockcount = bl_list_count; + int blockcount = map->bl_list_count; int m, x0, x1, y0, y1; va_list apcopy; @@ -1165,7 +1074,7 @@ int map_foreachinmovearea(int (*func)(struct block_list*, va_list), struct block */ int map_vforeachincell(int (*func)(struct block_list*, va_list), int16 m, int16 x, int16 y, int type, va_list ap) { int returnCount = 0; - int blockcount = bl_list_count; + int blockcount = map->bl_list_count; va_list apcopy; bl_getall_area(type, m, x, y, x, y, NULL); @@ -1280,7 +1189,7 @@ int map_vforeachinpath(int (*func)(struct block_list*, va_list), int16 m, int16 // kRO int returnCount = 0; - int blockcount = bl_list_count; + int blockcount = map->bl_list_count; va_list apcopy; //method specific variables @@ -1369,7 +1278,7 @@ int map_get_new_object_id(void) if( i == MAX_FLOORITEM ) i = MIN_FLOORITEM; - if( !idb_exists(id_db, i) ) + if( !idb_exists(map->id_db, i) ) break; ++i; @@ -1387,11 +1296,11 @@ int map_get_new_object_id(void) } /*========================================== -* Timered function to clear the floor (remove remaining item) -* Called each flooritem_lifetime ms -*------------------------------------------*/ + * Timered function to clear the floor (remove remaining item) + * Called each flooritem_lifetime ms + *------------------------------------------*/ int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data) { - struct flooritem_data* fitem = (struct flooritem_data*)idb_get(id_db, id); + struct flooritem_data* fitem = (struct flooritem_data*)idb_get(map->id_db, id); if (fitem == NULL || fitem->bl.type != BL_ITEM || (fitem->cleartimer != tid)) { ShowError("map_clearflooritem_timer : error\n"); @@ -1410,8 +1319,8 @@ int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data) } /* -* clears a single bl item out of the bazooonga. -*/ + * clears a single bl item out of the bazooonga. + */ void map_clearflooritem(struct block_list *bl) { struct flooritem_data* fitem = (struct flooritem_data*)bl; @@ -1425,19 +1334,19 @@ void map_clearflooritem(struct block_list *bl) { } /*========================================== -* (m,x,y) locates a random available free cell around the given coordinates -* to place an BL_ITEM object. Scan area is 9x9, returns 1 on success. -* x and y are modified with the target cell when successful. -*------------------------------------------*/ + * (m,x,y) locates a random available free cell around the given coordinates + * to place an BL_ITEM object. Scan area is 9x9, returns 1 on success. + * x and y are modified with the target cell when successful. + *------------------------------------------*/ int map_searchrandfreecell(int16 m,int16 *x,int16 *y,int stack) { int free_cell,i,j; int free_cells[9][2]; for(free_cell=0,i=-1;i<=1;i++){ - if(i+*y<0 || i+*y>=maplist[m].ys) + if(i+*y<0 || i+*y>=map->list[m].ys) continue; for(j=-1;j<=1;j++){ - if(j+*x<0 || j+*x>=maplist[m].xs) + if(j+*x<0 || j+*x>=map->list[m].xs) continue; if(map->getcell(m,j+*x,i+*y,CELL_CHKNOPASS) && !map->getcell(m,j+*x,i+*y,CELL_CHKICEWALL)) continue; @@ -1457,23 +1366,22 @@ int map_searchrandfreecell(int16 m,int16 *x,int16 *y,int stack) { } -static int map_count_sub(struct block_list *bl,va_list ap) -{ +int map_count_sub(struct block_list *bl,va_list ap) { return 1; } /*========================================== -* Locates a random spare cell around the object given, using range as max -* distance from that spot. Used for warping functions. Use range < 0 for -* whole map range. -* Returns 1 on success. when it fails and src is available, x/y are set to src's -* src can be null as long as flag&1 -* when ~flag&1, m is not needed. -* Flag values: -* &1 = random cell must be around given m,x,y, not around src -* &2 = the target should be able to walk to the target tile. -* &4 = there shouldn't be any players around the target tile (use the no_spawn_on_player setting) -*------------------------------------------*/ + * Locates a random spare cell around the object given, using range as max + * distance from that spot. Used for warping functions. Use range < 0 for + * whole map range. + * Returns 1 on success. when it fails and src is available, x/y are set to src's + * src can be null as long as flag&1 + * when ~flag&1, m is not needed. + * Flag values: + * &1 = random cell must be around given m,x,y, not around src + * &2 = the target should be able to walk to the target tile. + * &4 = there shouldn't be any players around the target tile (use the no_spawn_on_player setting) + *------------------------------------------*/ int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int16 rx, int16 ry, int flag) { int tries, spawn=0; @@ -1506,13 +1414,13 @@ int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int1 tries = rx2*ry2; if (tries > 100) tries = 100; } else { - tries = maplist[m].xs*maplist[m].ys; + tries = map->list[m].xs*map->list[m].ys; if (tries > 500) tries = 500; } while(tries--) { - *x = (rx >= 0)?(rnd()%rx2-rx+bx):(rnd()%(maplist[m].xs-2)+1); - *y = (ry >= 0)?(rnd()%ry2-ry+by):(rnd()%(maplist[m].ys-2)+1); + *x = (rx >= 0)?(rnd()%rx2-rx+bx):(rnd()%(map->list[m].xs-2)+1); + *y = (ry >= 0)?(rnd()%ry2-ry+by):(rnd()%(map->list[m].ys-2)+1); if (*x == bx && *y == by) continue; //Avoid picking the same target tile. @@ -1523,7 +1431,7 @@ int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int1 if(flag&4) { if (spawn >= 100) return 0; //Limit of retries reached. if (spawn++ < battle_config.no_spawn_on_player - && map->foreachinarea(map_count_sub, m, *x-AREA_SIZE, *y-AREA_SIZE, + && map->foreachinarea(map->count_sub, m, *x-AREA_SIZE, *y-AREA_SIZE, *x+AREA_SIZE, *y+AREA_SIZE, BL_PC) ) continue; @@ -1537,14 +1445,14 @@ int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int1 } /*========================================== -* Add an item to location (m,x,y) -* Parameters -* @item_data item attributes -* @amount quantity -* @m, @x, @y mapid,x,y -* @first_charid, @second_charid, @third_charid, looting priority -* @flag: &1 MVP item. &2 do stacking check. -*------------------------------------------*/ + * Add an item to location (m,x,y) + * Parameters + * @item_data item attributes + * @amount quantity + * @m, @x, @y mapid,x,y + * @first_charid, @second_charid, @third_charid, looting priority + * @flag: &1 MVP item. &2 do stacking check. + *------------------------------------------*/ int map_addflooritem(struct item *item_data,int amount,int16 m,int16 x,int16 y,int first_charid,int second_charid,int third_charid,int flags) { int r; @@ -1552,7 +1460,7 @@ int map_addflooritem(struct item *item_data,int amount,int16 m,int16 x,int16 y,i nullpo_ret(item_data); - if(!map_searchrandfreecell(m,&x,&y,flags&2?1:0)) + if(!map->searchrandfreecell(m,&x,&y,flags&2?1:0)) return 0; r=rnd(); @@ -1589,9 +1497,9 @@ int map_addflooritem(struct item *item_data,int amount,int16 m,int16 x,int16 y,i } /** -* @see DBCreateData -*/ -static DBData create_charid2nick(DBKey key, va_list args) + * @see DBCreateData + */ +DBData create_charid2nick(DBKey key, va_list args) { struct charid2nick *p; CREATE(p, struct charid2nick, 1); @@ -1609,7 +1517,7 @@ void map_addnickdb(int charid, const char* nick) if( map->charid2sd(charid) ) return;// already online - p = idb_ensure(nick_db, charid, create_charid2nick); + p = idb_ensure(map->nick_db, charid, map->create_charid2nick); safestrncpy(p->nick, nick, sizeof(p->nick)); while( p->requests ) { @@ -1631,7 +1539,7 @@ void map_delnickdb(int charid, const char* name) struct map_session_data* sd; DBData data; - if (!nick_db->remove(nick_db, DB->i2key(charid), &data) || (p = DB->data2ptr(&data)) == NULL) + if (!map->nick_db->remove(map->nick_db, DB->i2key(charid), &data) || (p = DB->data2ptr(&data)) == NULL) return; while( p->requests ) { @@ -1662,7 +1570,7 @@ void map_reqnickdb(struct map_session_data * sd, int charid) return; } - p = idb_ensure(nick_db, charid, create_charid2nick); + p = idb_ensure(map->nick_db, charid, map->create_charid2nick); if( *p->nick ) { clif->solved_charname(sd->fd, charid, p->nick); return; @@ -1675,8 +1583,8 @@ void map_reqnickdb(struct map_session_data * sd, int charid) } /*========================================== -* add bl to id_db -*------------------------------------------*/ + * add bl to id_db + *------------------------------------------*/ void map_addiddb(struct block_list *bl) { nullpo_retv(bl); @@ -1684,27 +1592,27 @@ void map_addiddb(struct block_list *bl) if( bl->type == BL_PC ) { TBL_PC* sd = (TBL_PC*)bl; - idb_put(pc_db,sd->bl.id,sd); - idb_put(charid_db,sd->status.char_id,sd); + idb_put(map->pc_db,sd->bl.id,sd); + idb_put(map->charid_db,sd->status.char_id,sd); } else if( bl->type == BL_MOB ) { TBL_MOB* md = (TBL_MOB*)bl; - idb_put(mobid_db,bl->id,bl); + idb_put(map->mobid_db,bl->id,bl); if( md->state.boss ) - idb_put(bossid_db, bl->id, bl); + idb_put(map->bossid_db, bl->id, bl); } if( bl->type & BL_REGEN ) - idb_put(regen_db, bl->id, bl); + idb_put(map->regen_db, bl->id, bl); - idb_put(id_db,bl->id,bl); + idb_put(map->id_db,bl->id,bl); } /*========================================== -* remove bl from id_db -*------------------------------------------*/ + * remove bl from id_db + *------------------------------------------*/ void map_deliddb(struct block_list *bl) { nullpo_retv(bl); @@ -1712,24 +1620,24 @@ void map_deliddb(struct block_list *bl) if( bl->type == BL_PC ) { TBL_PC* sd = (TBL_PC*)bl; - idb_remove(pc_db,sd->bl.id); - idb_remove(charid_db,sd->status.char_id); + idb_remove(map->pc_db,sd->bl.id); + idb_remove(map->charid_db,sd->status.char_id); } else if( bl->type == BL_MOB ) { - idb_remove(mobid_db,bl->id); - idb_remove(bossid_db,bl->id); + idb_remove(map->mobid_db,bl->id); + idb_remove(map->bossid_db,bl->id); } if( bl->type & BL_REGEN ) - idb_remove(regen_db,bl->id); + idb_remove(map->regen_db,bl->id); - idb_remove(id_db,bl->id); + idb_remove(map->id_db,bl->id); } /*========================================== -* Standard call when a player connection is closed. -*------------------------------------------*/ + * Standard call when a player connection is closed. + *------------------------------------------*/ int map_quit(struct map_session_data *sd) { int i; @@ -1808,19 +1716,19 @@ int map_quit(struct map_session_data *sd) { unit->remove_map(&sd->ed->bl,CLR_TELEPORT,ALC_MARK); } - if( hChSys.local && maplist[sd->bl.m].channel && idb_exists(maplist[sd->bl.m].channel->users, sd->status.char_id) ) { - clif->chsys_left(maplist[sd->bl.m].channel,sd); + if( hChSys.local && map->list[sd->bl.m].channel && idb_exists(map->list[sd->bl.m].channel->users, sd->status.char_id) ) { + clif->chsys_left(map->list[sd->bl.m].channel,sd); } clif->chsys_quit(sd); unit->remove_map_pc(sd,CLR_RESPAWN); - if( maplist[sd->bl.m].instance_id >= 0 ) { // Avoid map conflicts and warnings on next login + if( map->list[sd->bl.m].instance_id >= 0 ) { // Avoid map conflicts and warnings on next login int16 m; struct point *pt; - if( maplist[sd->bl.m].save.map ) - pt = &maplist[sd->bl.m].save; + if( map->list[sd->bl.m].save.map ) + pt = &map->list[sd->bl.m].save; else pt = &sd->status.save_point; @@ -1845,16 +1753,16 @@ int map_quit(struct map_session_data *sd) { } /*========================================== -* Lookup, id to session (player,mob,npc,homon,merc..) -*------------------------------------------*/ + * Lookup, id to session (player,mob,npc,homon,merc..) + *------------------------------------------*/ struct map_session_data *map_id2sd(int id) { if (id <= 0) return NULL; - return (struct map_session_data*)idb_get(pc_db,id); + return (struct map_session_data*)idb_get(map->pc_db,id); } struct mob_data *map_id2md(int id) { if (id <= 0) return NULL; - return (struct mob_data*)idb_get(mobid_db,id); + return (struct mob_data*)idb_get(map->mobid_db,id); } struct npc_data *map_id2nd(int id) { @@ -1891,7 +1799,7 @@ const char *map_charid2nick(int charid) { if( sd ) return sd->status.name;// character is online, return it's name - p = idb_ensure(nick_db, charid, create_charid2nick); + p = idb_ensure(map->nick_db, charid, map->create_charid2nick); if( *p->nick ) return p->nick;// name in nick_db @@ -1902,14 +1810,14 @@ const char *map_charid2nick(int charid) { /// Returns the struct map_session_data of the charid or NULL if the char is not online. struct map_session_data* map_charid2sd(int charid) { - return (struct map_session_data*)idb_get(charid_db, charid); + return (struct map_session_data*)idb_get(map->charid_db, charid); } /*========================================== -* Search session data from a nick name -* (without sensitive case if necessary) -* return map_session_data pointer or NULL -*------------------------------------------*/ + * Search session data from a nick name + * (without sensitive case if necessary) + * return map_session_data pointer or NULL + *------------------------------------------*/ struct map_session_data * map_nick2sd(const char *nick) { struct map_session_data* sd; @@ -1957,29 +1865,29 @@ struct map_session_data * map_nick2sd(const char *nick) } /*========================================== -* Looksup id_db DBMap and returns BL pointer of 'id' or NULL if not found -*------------------------------------------*/ + * Looksup id_db DBMap and returns BL pointer of 'id' or NULL if not found + *------------------------------------------*/ struct block_list * map_id2bl(int id) { - return (struct block_list*)idb_get(id_db,id); + return (struct block_list*)idb_get(map->id_db,id); } /** -* Same as map->id2bl except it only checks for its existence -**/ + * Same as map->id2bl except it only checks for its existence + **/ bool map_blid_exists( int id ) { - return (idb_exists(id_db,id)); + return (idb_exists(map->id_db,id)); } /*========================================== -* Convext Mirror -*------------------------------------------*/ + * Convext Mirror + *------------------------------------------*/ struct mob_data * map_getmob_boss(int16 m) { DBIterator* iter; struct mob_data *md = NULL; bool found = false; - iter = db_iterator(bossid_db); + iter = db_iterator(map->bossid_db); for( md = (struct mob_data*)dbi_first(iter); dbi_exists(iter); md = (struct mob_data*)dbi_next(iter) ) { if( md->bl.m == m ) @@ -1996,16 +1904,16 @@ struct mob_data * map_getmob_boss(int16 m) struct mob_data * map_id2boss(int id) { if (id <= 0) return NULL; - return (struct mob_data*)idb_get(bossid_db,id); + return (struct mob_data*)idb_get(map->bossid_db,id); } /// Applies func to all the players in the db. /// Stops iterating if func returns -1. -void map_vmap_foreachpc(int (*func)(struct map_session_data* sd, va_list args), va_list args) { +void map_vforeachpc(int (*func)(struct map_session_data* sd, va_list args), va_list args) { DBIterator* iter; struct map_session_data* sd; - iter = db_iterator(pc_db); + iter = db_iterator(map->pc_db); for( sd = dbi_first(iter); dbi_exists(iter); sd = dbi_next(iter) ) { va_list argscopy; @@ -2022,22 +1930,22 @@ void map_vmap_foreachpc(int (*func)(struct map_session_data* sd, va_list args), /// Applies func to all the players in the db. /// Stops iterating if func returns -1. -/// @see map_vmap_foreachpc -void map_map_foreachpc(int (*func)(struct map_session_data* sd, va_list args), ...) { +/// @see map_vforeachpc +void map_foreachpc(int (*func)(struct map_session_data* sd, va_list args), ...) { va_list args; va_start(args, func); - map->vmap_foreachpc(func, args); + map->vforeachpc(func, args); va_end(args); } /// Applies func to all the mobs in the db. /// Stops iterating if func returns -1. -void map_vmap_foreachmob(int (*func)(struct mob_data* md, va_list args), va_list args) { +void map_vforeachmob(int (*func)(struct mob_data* md, va_list args), va_list args) { DBIterator* iter; struct mob_data* md; - iter = db_iterator(mobid_db); + iter = db_iterator(map->mobid_db); for( md = (struct mob_data*)dbi_first(iter); dbi_exists(iter); md = (struct mob_data*)dbi_next(iter) ) { va_list argscopy; int ret; @@ -2053,22 +1961,22 @@ void map_vmap_foreachmob(int (*func)(struct mob_data* md, va_list args), va_list /// Applies func to all the mobs in the db. /// Stops iterating if func returns -1. -/// @see map_vmap_foreachmob -void map_map_foreachmob(int (*func)(struct mob_data* md, va_list args), ...) { +/// @see map_vforeachmob +void map_foreachmob(int (*func)(struct mob_data* md, va_list args), ...) { va_list args; va_start(args, func); - map->vmap_foreachmob(func, args); + map->vforeachmob(func, args); va_end(args); } /// Applies func to all the npcs in the db. /// Stops iterating if func returns -1. -void map_vmap_foreachnpc(int (*func)(struct npc_data* nd, va_list args), va_list args) { +void map_vforeachnpc(int (*func)(struct npc_data* nd, va_list args), va_list args) { DBIterator* iter; struct block_list* bl; - iter = db_iterator(id_db); + iter = db_iterator(map->id_db); for( bl = (struct block_list*)dbi_first(iter); dbi_exists(iter); bl = (struct block_list*)dbi_next(iter) ) { if( bl->type == BL_NPC ) { struct npc_data* nd = (struct npc_data*)bl; @@ -2087,22 +1995,22 @@ void map_vmap_foreachnpc(int (*func)(struct npc_data* nd, va_list args), va_list /// Applies func to all the npcs in the db. /// Stops iterating if func returns -1. -/// @see map_vmap_foreachnpc -void map_map_foreachnpc(int (*func)(struct npc_data* nd, va_list args), ...) { +/// @see map_vforeachnpc +void map_foreachnpc(int (*func)(struct npc_data* nd, va_list args), ...) { va_list args; va_start(args, func); - map->vmap_foreachnpc(func, args); + map->vforeachnpc(func, args); va_end(args); } /// Applies func to everything in the db. /// Stops iteratin gif func returns -1. -void map_vmap_foreachregen(int (*func)(struct block_list* bl, va_list args), va_list args) { +void map_vforeachregen(int (*func)(struct block_list* bl, va_list args), va_list args) { DBIterator* iter; struct block_list* bl; - iter = db_iterator(regen_db); + iter = db_iterator(map->regen_db); for( bl = (struct block_list*)dbi_first(iter); dbi_exists(iter); bl = (struct block_list*)dbi_next(iter) ) { va_list argscopy; int ret; @@ -2118,22 +2026,22 @@ void map_vmap_foreachregen(int (*func)(struct block_list* bl, va_list args), va_ /// Applies func to everything in the db. /// Stops iteratin gif func returns -1. -/// @see map_vmap_foreachregen -void map_map_foreachregen(int (*func)(struct block_list* bl, va_list args), ...) { +/// @see map_vforeachregen +void map_foreachregen(int (*func)(struct block_list* bl, va_list args), ...) { va_list args; va_start(args, func); - map->vmap_foreachregen(func, args); + map->vforeachregen(func, args); va_end(args); } /// Applies func to everything in the db. /// Stops iterating if func returns -1. -void map_vmap_foreachiddb(int (*func)(struct block_list* bl, va_list args), va_list args) { +void map_vforeachiddb(int (*func)(struct block_list* bl, va_list args), va_list args) { DBIterator* iter; struct block_list* bl; - iter = db_iterator(id_db); + iter = db_iterator(map->id_db); for( bl = (struct block_list*)dbi_first(iter); dbi_exists(iter); bl = (struct block_list*)dbi_next(iter) ) { va_list argscopy; int ret; @@ -2149,12 +2057,12 @@ void map_vmap_foreachiddb(int (*func)(struct block_list* bl, va_list args), va_l /// Applies func to everything in the db. /// Stops iterating if func returns -1. -/// @see map_vmap_foreachiddb -void map_map_foreachiddb(int (*func)(struct block_list* bl, va_list args), ...) { +/// @see map_vforeachiddb +void map_foreachiddb(int (*func)(struct block_list* bl, va_list args), ...) { va_list args; va_start(args, func); - map->vmap_foreachiddb(func, args); + map->vforeachiddb(func, args); va_end(args); } @@ -2188,12 +2096,12 @@ struct s_mapiterator struct s_mapiterator* mapit_alloc(enum e_mapitflags flags, enum bl_type types) { struct s_mapiterator* iter; - iter = ers_alloc(map_iterator_ers, struct s_mapiterator); + iter = ers_alloc(map->iterator_ers, struct s_mapiterator); iter->flags = flags; iter->types = types; - if( types == BL_PC ) iter->dbi = db_iterator(pc_db); - else if( types == BL_MOB ) iter->dbi = db_iterator(mobid_db); - else iter->dbi = db_iterator(id_db); + if( types == BL_PC ) iter->dbi = db_iterator(map->pc_db); + else if( types == BL_MOB ) iter->dbi = db_iterator(map->mobid_db); + else iter->dbi = db_iterator(map->id_db); return iter; } @@ -2204,7 +2112,7 @@ void mapit_free(struct s_mapiterator* iter) { nullpo_retv(iter); dbi_destroy(iter->dbi); - ers_free(map_iterator_ers, iter); + ers_free(map->iterator_ers, iter); } /// Returns the first block_list that matches the description. @@ -2294,35 +2202,35 @@ bool mapit_exists(struct s_mapiterator* iter) { } /*========================================== -* Add npc-bl to id_db, basically register npc to map -*------------------------------------------*/ + * Add npc-bl to id_db, basically register npc to map + *------------------------------------------*/ bool map_addnpc(int16 m,struct npc_data *nd) { nullpo_ret(nd); - if( m < 0 || m >= map->map_num ) + if( m < 0 || m >= map->count ) return false; - if( maplist[m].npc_num == MAX_NPC_PER_MAP ) { - ShowWarning("too many NPCs in one map %s\n",maplist[m].name); + if( map->list[m].npc_num == MAX_NPC_PER_MAP ) { + ShowWarning("too many NPCs in one map %s\n",map->list[m].name); return false; } - maplist[m].npc[maplist[m].npc_num]=nd; - maplist[m].npc_num++; - idb_put(id_db,nd->bl.id,nd); + map->list[m].npc[map->list[m].npc_num]=nd; + map->list[m].npc_num++; + idb_put(map->id_db,nd->bl.id,nd); return true; } /*========================================= -* Dynamic Mobs [Wizputer] -*-----------------------------------------*/ + * Dynamic Mobs [Wizputer] + *-----------------------------------------*/ // Stores the spawn data entry in the mob list. // Returns the index of successful, or -1 if the list was full. int map_addmobtolist(unsigned short m, struct spawn_data *spawn) { size_t i; - ARR_FIND( 0, MAX_MOB_LIST_PER_MAP, i, maplist[m].moblist[i] == NULL ); + ARR_FIND( 0, MAX_MOB_LIST_PER_MAP, i, map->list[m].moblist[i] == NULL ); if( i < MAX_MOB_LIST_PER_MAP ) { - maplist[m].moblist[i] = spawn; + map->list[m].moblist[i] = spawn; return i; } return -1; @@ -2330,20 +2238,20 @@ int map_addmobtolist(unsigned short m, struct spawn_data *spawn) { void map_spawnmobs(int16 m) { int i, k=0; - if (maplist[m].mob_delete_timer != INVALID_TIMER) { + if (map->list[m].mob_delete_timer != INVALID_TIMER) { //Mobs have not been removed yet [Skotlex] - timer->delete(maplist[m].mob_delete_timer, map->removemobs_timer); - maplist[m].mob_delete_timer = INVALID_TIMER; + timer->delete(map->list[m].mob_delete_timer, map->removemobs_timer); + map->list[m].mob_delete_timer = INVALID_TIMER; return; } for(i=0; inum; - npc->parse_mob2(maplist[m].moblist[i]); + if(map->list[m].moblist[i]!=NULL) { + k+=map->list[m].moblist[i]->num; + npc->parse_mob2(map->list[m].moblist[i]); } if (battle_config.etc_log && k > 0) { - ShowStatus("Map %s: Spawned '"CL_WHITE"%d"CL_RESET"' mobs.\n",maplist[m].name, k); + ShowStatus("Map %s: Spawned '"CL_WHITE"%d"CL_RESET"' mobs.\n",map->list[m].name, k); } } @@ -2379,36 +2287,36 @@ int map_removemobs_timer(int tid, unsigned int tick, int id, intptr_t data) int count; const int16 m = id; - if (m < 0 || m >= map->map_num) { //Incorrect map id! + if (m < 0 || m >= map->count) { //Incorrect map id! ShowError("map_removemobs_timer error: timer %d points to invalid map %d\n",tid, m); return 0; } - if (maplist[m].mob_delete_timer != tid) { //Incorrect timer call! - ShowError("map_removemobs_timer mismatch: %d != %d (map %s)\n",maplist[m].mob_delete_timer, tid, maplist[m].name); + if (map->list[m].mob_delete_timer != tid) { //Incorrect timer call! + ShowError("map_removemobs_timer mismatch: %d != %d (map %s)\n",map->list[m].mob_delete_timer, tid, map->list[m].name); return 0; } - maplist[m].mob_delete_timer = INVALID_TIMER; - if (maplist[m].users > 0) //Map not empty! + map->list[m].mob_delete_timer = INVALID_TIMER; + if (map->list[m].users > 0) //Map not empty! return 1; - count = map->foreachinmap(map_removemobs_sub, m, BL_MOB); + count = map->foreachinmap(map->removemobs_sub, m, BL_MOB); if (battle_config.etc_log && count > 0) - ShowStatus("Map %s: Removed '"CL_WHITE"%d"CL_RESET"' mobs.\n",maplist[m].name, count); + ShowStatus("Map %s: Removed '"CL_WHITE"%d"CL_RESET"' mobs.\n",map->list[m].name, count); return 1; } void map_removemobs(int16 m) { - if (maplist[m].mob_delete_timer != INVALID_TIMER) // should never happen + if (map->list[m].mob_delete_timer != INVALID_TIMER) // should never happen return; //Mobs are already scheduled for removal - maplist[m].mob_delete_timer = timer->add(timer->gettick()+battle_config.mob_remove_delay, map->removemobs_timer, m, 0); + map->list[m].mob_delete_timer = timer->add(timer->gettick()+battle_config.mob_remove_delay, map->removemobs_timer, m, 0); } /*========================================== -* Hookup, get map_id from map_name -*------------------------------------------*/ + * Hookup, get map_id from map_name + *------------------------------------------*/ int16 map_mapname2mapid(const char* name) { unsigned short map_index; map_index = mapindex_name2id(name); @@ -2418,23 +2326,23 @@ int16 map_mapname2mapid(const char* name) { } /*========================================== -* Returns the map of the given mapindex. [Skotlex] -*------------------------------------------*/ + * Returns the map of the given mapindex. [Skotlex] + *------------------------------------------*/ int16 map_mapindex2mapid(unsigned short mapindex) { if (!mapindex || mapindex > MAX_MAPINDEX) return -1; - return index2mapid[mapindex]; + return map->index2mapid[mapindex]; } /*========================================== -* Switching Ip, port ? (like changing map_server) get ip/port from map_name -*------------------------------------------*/ + * Switching Ip, port ? (like changing map_server) get ip/port from map_name + *------------------------------------------*/ int map_mapname2ipport(unsigned short name, uint32* ip, uint16* port) { struct map_data_other_server *mdos; - mdos = (struct map_data_other_server*)uidb_get(map_db,(unsigned int)name); + mdos = (struct map_data_other_server*)uidb_get(map->map_db,(unsigned int)name); if(mdos==NULL || mdos->cell) //If gat isn't null, this is a local map. return -1; *ip=mdos->ip; @@ -2450,21 +2358,21 @@ int map_check_dir(int s_dir,int t_dir) if(s_dir == t_dir) return 0; switch(s_dir) { - case 0: if(t_dir == 7 || t_dir == 1 || t_dir == 0) return 0; break; - case 1: if(t_dir == 0 || t_dir == 2 || t_dir == 1) return 0; break; - case 2: if(t_dir == 1 || t_dir == 3 || t_dir == 2) return 0; break; - case 3: if(t_dir == 2 || t_dir == 4 || t_dir == 3) return 0; break; - case 4: if(t_dir == 3 || t_dir == 5 || t_dir == 4) return 0; break; - case 5: if(t_dir == 4 || t_dir == 6 || t_dir == 5) return 0; break; - case 6: if(t_dir == 5 || t_dir == 7 || t_dir == 6) return 0; break; - case 7: if(t_dir == 6 || t_dir == 0 || t_dir == 7) return 0; break; + case 0: if(t_dir == 7 || t_dir == 1 || t_dir == 0) return 0; break; + case 1: if(t_dir == 0 || t_dir == 2 || t_dir == 1) return 0; break; + case 2: if(t_dir == 1 || t_dir == 3 || t_dir == 2) return 0; break; + case 3: if(t_dir == 2 || t_dir == 4 || t_dir == 3) return 0; break; + case 4: if(t_dir == 3 || t_dir == 5 || t_dir == 4) return 0; break; + case 5: if(t_dir == 4 || t_dir == 6 || t_dir == 5) return 0; break; + case 6: if(t_dir == 5 || t_dir == 7 || t_dir == 6) return 0; break; + case 7: if(t_dir == 6 || t_dir == 0 || t_dir == 7) return 0; break; } return 1; } /*========================================== -* Returns the direction of the given cell, relative to 'src' -*------------------------------------------*/ + * Returns the direction of the given cell, relative to 'src' + *------------------------------------------*/ uint8 map_calc_dir(struct block_list* src, int16 x, int16 y) { uint8 dir = 0; @@ -2508,9 +2416,9 @@ uint8 map_calc_dir(struct block_list* src, int16 x, int16 y) } /*========================================== -* Randomizes target cell x,y to a random walkable cell that -* has the same distance from object as given coordinates do. [Skotlex] -*------------------------------------------*/ + * Randomizes target cell x,y to a random walkable cell that + * has the same distance from object as given coordinates do. [Skotlex] + *------------------------------------------*/ int map_random_dir(struct block_list *bl, int16 *x, int16 *y) { short xi = *x-bl->x; @@ -2546,13 +2454,13 @@ inline static struct mapcell map_gat2cell(int gat) { memset(&cell,0,sizeof(struct mapcell)); switch( gat ) { - case 0: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // walkable ground - case 1: cell.walkable = 0; cell.shootable = 0; cell.water = 0; break; // non-walkable ground - case 2: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ??? - case 3: cell.walkable = 1; cell.shootable = 1; cell.water = 1; break; // walkable water - case 4: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ??? - case 5: cell.walkable = 0; cell.shootable = 1; cell.water = 0; break; // gap (snipable) - case 6: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ??? + case 0: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // walkable ground + case 1: cell.walkable = 0; cell.shootable = 0; cell.water = 0; break; // non-walkable ground + case 2: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ??? + case 3: cell.walkable = 1; cell.shootable = 1; cell.water = 1; break; // walkable water + case 4: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ??? + case 5: cell.walkable = 0; cell.shootable = 1; cell.water = 0; break; // gap (snipable) + case 6: cell.walkable = 1; cell.shootable = 1; cell.water = 0; break; // ??? default: ShowWarning("map_gat2cell: unrecognized gat type '%d'\n", gat); break; @@ -2561,7 +2469,7 @@ inline static struct mapcell map_gat2cell(int gat) { return cell; } -static int map_cell2gat(struct mapcell cell) { +int map_cell2gat(struct mapcell cell) { if( cell.walkable == 1 && cell.shootable == 1 && cell.water == 0 ) return 0; if( cell.walkable == 0 && cell.shootable == 0 && cell.water == 0 ) return 1; if( cell.walkable == 1 && cell.shootable == 1 && cell.water == 1 ) return 3; @@ -2570,8 +2478,6 @@ static int map_cell2gat(struct mapcell cell) { ShowWarning("map_cell2gat: cell has no matching gat type\n"); return 1; // default to 'wall' } -int map_getcellp(struct map_data* m,int16 x,int16 y,cell_chk cellchk); -void map_setcell(int16 m, int16 x, int16 y, cell_t cell, bool flag); void map_cellfromcache(struct map_data *m) { char decode_buffer[MAX_MAP_SIZE]; struct map_cache_map_info *info = NULL; @@ -2587,10 +2493,10 @@ void map_cellfromcache(struct map_data *m) { CREATE(m->cell, struct mapcell, size); for( xy = 0; xy < size; ++xy ) - m->cell[xy] = map_gat2cell(decode_buffer[xy]); + m->cell[xy] = map->gat2cell(decode_buffer[xy]); - m->getcellp = map_getcellp; - m->setcell = map_setcell; + m->getcellp = map->getcellp; + m->setcell = map->setcell; for(i = 0; i < m->npc_num; i++) { npc->setcells(m->npc[i]); @@ -2599,10 +2505,10 @@ void map_cellfromcache(struct map_data *m) { } /*========================================== -* Confirm if celltype in (m,x,y) match the one given in cellchk -*------------------------------------------*/ + * Confirm if celltype in (m,x,y) match the one given in cellchk + *------------------------------------------*/ int map_getcell(int16 m,int16 x,int16 y,cell_chk cellchk) { - return (m < 0 || m >= map->map_num) ? 0 : maplist[m].getcellp(&maplist[m],x,y,cellchk); + return (m < 0 || m >= map->count) ? 0 : map->list[m].getcellp(&map->list[m],x,y,cellchk); } int map_getcellp(struct map_data* m,int16 x,int16 y,cell_chk cellchk) { @@ -2619,7 +2525,7 @@ int map_getcellp(struct map_data* m,int16 x,int16 y,cell_chk cellchk) { switch(cellchk) { // gat type retrieval case CELL_GETTYPE: - return map_cell2gat(cell); + return map->cell2gat(cell); // base gat type checks case CELL_CHKWALL: @@ -2678,69 +2584,67 @@ int map_getcellp(struct map_data* m,int16 x,int16 y,cell_chk cellchk) { /* [Ind/Hercules] */ int map_sub_getcellp(struct map_data* m,int16 x,int16 y,cell_chk cellchk) { map->cellfromcache(m); - m->getcellp = map_getcellp; - m->setcell = map_setcell; + m->getcellp = map->getcellp; + m->setcell = map->setcell; return m->getcellp(m,x,y,cellchk); } /*========================================== -* Change the type/flags of a map cell -* 'cell' - which flag to modify -* 'flag' - true = on, false = off -*------------------------------------------*/ + * Change the type/flags of a map cell + * 'cell' - which flag to modify + * 'flag' - true = on, false = off + *------------------------------------------*/ void map_setcell(int16 m, int16 x, int16 y, cell_t cell, bool flag) { int j; - if( m < 0 || m >= map->map_num || x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) + if( m < 0 || m >= map->count || x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) return; - j = x + y*maplist[m].xs; + j = x + y*map->list[m].xs; switch( cell ) { - case CELL_WALKABLE: maplist[m].cell[j].walkable = flag; break; - case CELL_SHOOTABLE: maplist[m].cell[j].shootable = flag; break; - case CELL_WATER: maplist[m].cell[j].water = flag; break; - - case CELL_NPC: maplist[m].cell[j].npc = flag; break; - case CELL_BASILICA: maplist[m].cell[j].basilica = flag; break; - case CELL_LANDPROTECTOR: maplist[m].cell[j].landprotector = flag; break; - case CELL_NOVENDING: maplist[m].cell[j].novending = flag; break; - case CELL_NOCHAT: maplist[m].cell[j].nochat = flag; break; - case CELL_MAELSTROM: maplist[m].cell[j].maelstrom = flag; break; - case CELL_ICEWALL: maplist[m].cell[j].icewall = flag; break; + case CELL_WALKABLE: map->list[m].cell[j].walkable = flag; break; + case CELL_SHOOTABLE: map->list[m].cell[j].shootable = flag; break; + case CELL_WATER: map->list[m].cell[j].water = flag; break; + + case CELL_NPC: map->list[m].cell[j].npc = flag; break; + case CELL_BASILICA: map->list[m].cell[j].basilica = flag; break; + case CELL_LANDPROTECTOR: map->list[m].cell[j].landprotector = flag; break; + case CELL_NOVENDING: map->list[m].cell[j].novending = flag; break; + case CELL_NOCHAT: map->list[m].cell[j].nochat = flag; break; + case CELL_MAELSTROM: map->list[m].cell[j].maelstrom = flag; break; + case CELL_ICEWALL: map->list[m].cell[j].icewall = flag; break; default: ShowWarning("map_setcell: invalid cell type '%d'\n", (int)cell); break; } } void map_sub_setcell(int16 m, int16 x, int16 y, cell_t cell, bool flag) { - if( m < 0 || m >= map->map_num || x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) + if( m < 0 || m >= map->count || x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) return; - map->cellfromcache(&maplist[m]); - maplist[m].setcell = map_setcell; - maplist[m].getcellp = map_getcellp; - maplist[m].setcell(m,x,y,cell,flag); + map->cellfromcache(&map->list[m]); + map->list[m].setcell = map->setcell; + map->list[m].getcellp = map->getcellp; + map->list[m].setcell(m,x,y,cell,flag); } void map_setgatcell(int16 m, int16 x, int16 y, int gat) { int j; struct mapcell cell; - if( m < 0 || m >= map->map_num || x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) + if( m < 0 || m >= map->count || x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) return; - j = x + y*maplist[m].xs; + j = x + y*map->list[m].xs; - cell = map_gat2cell(gat); - maplist[m].cell[j].walkable = cell.walkable; - maplist[m].cell[j].shootable = cell.shootable; - maplist[m].cell[j].water = cell.water; + cell = map->gat2cell(gat); + map->list[m].cell[j].walkable = cell.walkable; + map->list[m].cell[j].shootable = cell.shootable; + map->list[m].cell[j].water = cell.water; } /*========================================== * Invisible Walls *------------------------------------------*/ -static DBMap* iwall_db; - void map_iwall_nextxy(int16 x, int16 y, int8 dir, int pos, int16 *x1, int16 *y1) { if( dir == 0 || dir == 4 ) @@ -2767,7 +2671,7 @@ bool map_iwall_set(int16 m, int16 x, int16 y, int size, int8 dir, bool shootable if( size < 1 || !wall_name ) return false; - if( (iwall = (struct iwall_data *)strdb_get(iwall_db, wall_name)) != NULL ) + if( (iwall = (struct iwall_data *)strdb_get(map->iwall_db, wall_name)) != NULL ) return false; // Already Exists if( map->getcell(m, x, y, CELL_CHKNOREACH) ) @@ -2783,21 +2687,21 @@ bool map_iwall_set(int16 m, int16 x, int16 y, int size, int8 dir, bool shootable safestrncpy(iwall->wall_name, wall_name, sizeof(iwall->wall_name)); for( i = 0; i < size; i++ ) { - map_iwall_nextxy(x, y, dir, i, &x1, &y1); + map->iwall_nextxy(x, y, dir, i, &x1, &y1); if( map->getcell(m, x1, y1, CELL_CHKNOREACH) ) break; // Collision - maplist[m].setcell(m, x1, y1, CELL_WALKABLE, false); - maplist[m].setcell(m, x1, y1, CELL_SHOOTABLE, shootable); + map->list[m].setcell(m, x1, y1, CELL_WALKABLE, false); + map->list[m].setcell(m, x1, y1, CELL_SHOOTABLE, shootable); clif->changemapcell(0, m, x1, y1, map->getcell(m, x1, y1, CELL_GETTYPE), ALL_SAMEMAP); } iwall->size = i; - strdb_put(iwall_db, iwall->wall_name, iwall); - maplist[m].iwall_num++; + strdb_put(map->iwall_db, iwall->wall_name, iwall); + map->list[m].iwall_num++; return true; } @@ -2808,16 +2712,16 @@ void map_iwall_get(struct map_session_data *sd) { int16 x1, y1; int i; - if( maplist[sd->bl.m].iwall_num < 1 ) + if( map->list[sd->bl.m].iwall_num < 1 ) return; - iter = db_iterator(iwall_db); + iter = db_iterator(map->iwall_db); for( iwall = dbi_first(iter); dbi_exists(iter); iwall = dbi_next(iter) ) { if( iwall->m != sd->bl.m ) continue; for( i = 0; i < iwall->size; i++ ) { - map_iwall_nextxy(iwall->x, iwall->y, iwall->dir, i, &x1, &y1); + map->iwall_nextxy(iwall->x, iwall->y, iwall->dir, i, &x1, &y1); clif->changemapcell(sd->fd, iwall->m, x1, y1, map->getcell(iwall->m, x1, y1, CELL_GETTYPE), SELF); } } @@ -2829,26 +2733,26 @@ void map_iwall_remove(const char *wall_name) struct iwall_data *iwall; int16 i, x1, y1; - if( (iwall = (struct iwall_data *)strdb_get(iwall_db, wall_name)) == NULL ) + if( (iwall = (struct iwall_data *)strdb_get(map->iwall_db, wall_name)) == NULL ) return; // Nothing to do for( i = 0; i < iwall->size; i++ ) { - map_iwall_nextxy(iwall->x, iwall->y, iwall->dir, i, &x1, &y1); + map->iwall_nextxy(iwall->x, iwall->y, iwall->dir, i, &x1, &y1); - maplist[iwall->m].setcell(iwall->m, x1, y1, CELL_SHOOTABLE, true); - maplist[iwall->m].setcell(iwall->m, x1, y1, CELL_WALKABLE, true); + map->list[iwall->m].setcell(iwall->m, x1, y1, CELL_SHOOTABLE, true); + map->list[iwall->m].setcell(iwall->m, x1, y1, CELL_WALKABLE, true); clif->changemapcell(0, iwall->m, x1, y1, map->getcell(iwall->m, x1, y1, CELL_GETTYPE), ALL_SAMEMAP); } - maplist[iwall->m].iwall_num--; - strdb_remove(iwall_db, iwall->wall_name); + map->list[iwall->m].iwall_num--; + strdb_remove(map->iwall_db, iwall->wall_name); } /** -* @see DBCreateData -*/ -static DBData create_map_data_other_server(DBKey key, va_list args) + * @see DBCreateData + */ +DBData create_map_data_other_server(DBKey key, va_list args) { struct map_data_other_server *mdos; unsigned short mapindex = (unsigned short)key.ui; @@ -2859,13 +2763,13 @@ static DBData create_map_data_other_server(DBKey key, va_list args) } /*========================================== -* Add mapindex to db of another map server -*------------------------------------------*/ + * Add mapindex to db of another map server + *------------------------------------------*/ int map_setipport(unsigned short mapindex, uint32 ip, uint16 port) { struct map_data_other_server *mdos; - mdos= uidb_ensure(map_db,(unsigned int)mapindex, create_map_data_other_server); + mdos= uidb_ensure(map->map_db,(unsigned int)mapindex, map->create_map_data_other_server); if(mdos->cell) //Local map,Do nothing. Give priority to our own local maps over ones from another server. [Skotlex] return 0; @@ -2880,36 +2784,36 @@ int map_setipport(unsigned short mapindex, uint32 ip, uint16 port) } /** -* Delete all the other maps server management -* @see DBApply -*/ + * Delete all the other maps server management + * @see DBApply + */ int map_eraseallipport_sub(DBKey key, DBData *data, va_list va) { struct map_data_other_server *mdos = DB->data2ptr(data); if(mdos->cell == NULL) { - db_remove(map_db,key); + db_remove(map->map_db,key); aFree(mdos); } return 0; } int map_eraseallipport(void) { - map_db->foreach(map_db,map_eraseallipport_sub); + map->map_db->foreach(map->map_db,map->eraseallipport_sub); return 1; } /*========================================== -* Delete mapindex from db of another map server -*------------------------------------------*/ + * Delete mapindex from db of another map server + *------------------------------------------*/ int map_eraseipport(unsigned short mapindex, uint32 ip, uint16 port) { struct map_data_other_server *mdos; - mdos = (struct map_data_other_server*)uidb_get(map_db,(unsigned int)mapindex); + mdos = (struct map_data_other_server*)uidb_get(map->map_db,(unsigned int)mapindex); if(!mdos || mdos->cell) //Map either does not exists or is a local map. return 0; if(mdos->ip==ip && mdos->port == port) { - uidb_remove(map_db,(unsigned int)mapindex); + uidb_remove(map->map_db,(unsigned int)mapindex); aFree(mdos); return 1; } @@ -2917,10 +2821,9 @@ int map_eraseipport(unsigned short mapindex, uint32 ip, uint16 port) { } /*========================================== -* [Shinryo]: Init the mapcache -*------------------------------------------*/ -static char *map_init_mapcache(FILE *fp) -{ + * [Shinryo]: Init the mapcache + *------------------------------------------*/ +char *map_init_mapcache(FILE *fp) { size_t size = 0; char *buffer; @@ -2948,9 +2851,9 @@ static char *map_init_mapcache(FILE *fp) } /*========================================== -* Map cache reading -* [Shinryo]: Optimized some behaviour to speed this up -*==========================================*/ + * Map cache reading + * [Shinryo]: Optimized some behaviour to speed this up + *==========================================*/ int map_readfromcache(struct map_data *m, char *buffer) { int i; struct map_cache_main_header *header = (struct map_cache_main_header *)buffer; @@ -2993,15 +2896,15 @@ int map_readfromcache(struct map_data *m, char *buffer) { int map_addmap(char* mapname) { - maplist[map->map_num].instance_id = -1; - mapindex_getmapname(mapname, maplist[map->map_num++].name); + map->list[map->count].instance_id = -1; + mapindex_getmapname(mapname, map->list[map->count++].name); return 0; } -static void map_delmapid(int id) { - ShowNotice("Removing map [ %s ] from maplist"CL_CLL"\n",maplist[id].name); - memmove(maplist+id, maplist+id+1, sizeof(maplist[0])*(map->map_num-id-1)); - map->map_num--; +void map_delmapid(int id) { + ShowNotice("Removing map [ %s ] from map->list"CL_CLL"\n",map->list[id].name); + memmove(map->list+id, map->list+id+1, sizeof(map->list[0])*(map->count-id-1)); + map->count--; } int map_delmap(char* mapname) { @@ -3009,14 +2912,14 @@ int map_delmap(char* mapname) { char map_name[MAP_NAME_LENGTH]; if (strcmpi(mapname, "all") == 0) { - map->map_num = 0; + map->count = 0; return 0; } mapindex_getmapname(mapname, map_name); - for(i = 0; i < map->map_num; i++) { - if (strcmp(maplist[i].name, map_name) == 0) { - map_delmapid(i); + for(i = 0; i < map->count; i++) { + if (strcmp(map->list[i].name, map_name) == 0) { + map->delmapid(i); return 1; } } @@ -3026,7 +2929,7 @@ void map_zone_db_clear(void) { struct map_zone_data *zone; int i; - DBIterator *iter = db_iterator(zone_db); + DBIterator *iter = db_iterator(map->zone_db); for(zone = dbi_first(iter); dbi_exists(iter); zone = dbi_next(iter)) { for(i = 0; i < zone->disabled_skills_count; i++) { aFree(zone->disabled_skills[i]); @@ -3048,229 +2951,229 @@ void map_zone_db_clear(void) { } dbi_destroy(iter); - db_destroy(zone_db);/* will aFree(zone) */ + db_destroy(map->zone_db);/* will aFree(zone) */ /* clear the pk zone stuff */ - for(i = 0; i < map_zone_pk.disabled_skills_count; i++) { - aFree(map_zone_pk.disabled_skills[i]); + for(i = 0; i < map->zone_pk.disabled_skills_count; i++) { + aFree(map->zone_pk.disabled_skills[i]); } - aFree(map_zone_pk.disabled_skills); - aFree(map_zone_pk.disabled_items); - for(i = 0; i < map_zone_pk.mapflags_count; i++) { - aFree(map_zone_pk.mapflags[i]); + aFree(map->zone_pk.disabled_skills); + aFree(map->zone_pk.disabled_items); + for(i = 0; i < map->zone_pk.mapflags_count; i++) { + aFree(map->zone_pk.mapflags[i]); } - aFree(map_zone_pk.mapflags); - for(i = 0; i < map_zone_pk.disabled_commands_count; i++) { - aFree(map_zone_pk.disabled_commands[i]); + aFree(map->zone_pk.mapflags); + for(i = 0; i < map->zone_pk.disabled_commands_count; i++) { + aFree(map->zone_pk.disabled_commands[i]); } - aFree(map_zone_pk.disabled_commands); - for(i = 0; i < map_zone_pk.capped_skills_count; i++) { - aFree(map_zone_pk.capped_skills[i]); + aFree(map->zone_pk.disabled_commands); + for(i = 0; i < map->zone_pk.capped_skills_count; i++) { + aFree(map->zone_pk.capped_skills[i]); } - aFree(map_zone_pk.capped_skills); + aFree(map->zone_pk.capped_skills); /* clear the main zone stuff */ - for(i = 0; i < map_zone_all.disabled_skills_count; i++) { - aFree(map_zone_all.disabled_skills[i]); + for(i = 0; i < map->zone_all.disabled_skills_count; i++) { + aFree(map->zone_all.disabled_skills[i]); } - aFree(map_zone_all.disabled_skills); - aFree(map_zone_all.disabled_items); - for(i = 0; i < map_zone_all.mapflags_count; i++) { - aFree(map_zone_all.mapflags[i]); + aFree(map->zone_all.disabled_skills); + aFree(map->zone_all.disabled_items); + for(i = 0; i < map->zone_all.mapflags_count; i++) { + aFree(map->zone_all.mapflags[i]); } - aFree(map_zone_all.mapflags); - for(i = 0; i < map_zone_all.disabled_commands_count; i++) { - aFree(map_zone_all.disabled_commands[i]); + aFree(map->zone_all.mapflags); + for(i = 0; i < map->zone_all.disabled_commands_count; i++) { + aFree(map->zone_all.disabled_commands[i]); } - aFree(map_zone_all.disabled_commands); - for(i = 0; i < map_zone_all.capped_skills_count; i++) { - aFree(map_zone_all.capped_skills[i]); + aFree(map->zone_all.disabled_commands); + for(i = 0; i < map->zone_all.capped_skills_count; i++) { + aFree(map->zone_all.capped_skills[i]); } - aFree(map_zone_all.capped_skills); + aFree(map->zone_all.capped_skills); } void map_clean(int i) { int v; - if(maplist[i].cell && maplist[i].cell != (struct mapcell *)0xdeadbeaf) aFree(maplist[i].cell); - if(maplist[i].block) aFree(maplist[i].block); - if(maplist[i].block_mob) aFree(maplist[i].block_mob); + if(map->list[i].cell && map->list[i].cell != (struct mapcell *)0xdeadbeaf) aFree(map->list[i].cell); + if(map->list[i].block) aFree(map->list[i].block); + if(map->list[i].block_mob) aFree(map->list[i].block_mob); if(battle_config.dynamic_mobs) { //Dynamic mobs flag by [random] int j; - if(maplist[i].mob_delete_timer != INVALID_TIMER) - timer->delete(maplist[i].mob_delete_timer, map->removemobs_timer); + if(map->list[i].mob_delete_timer != INVALID_TIMER) + timer->delete(map->list[i].mob_delete_timer, map->removemobs_timer); for (j=0; jlist[i].moblist[j]) aFree(map->list[i].moblist[j]); } - if( maplist[i].unit_count ) { - for(v = 0; v < maplist[i].unit_count; v++) { - aFree(maplist[i].units[v]); + if( map->list[i].unit_count ) { + for(v = 0; v < map->list[i].unit_count; v++) { + aFree(map->list[i].units[v]); } - if( maplist[i].units ) { - aFree(maplist[i].units); - maplist[i].units = NULL; + if( map->list[i].units ) { + aFree(map->list[i].units); + map->list[i].units = NULL; } - maplist[i].unit_count = 0; + map->list[i].unit_count = 0; } - if( maplist[i].skill_count ) { - for(v = 0; v < maplist[i].skill_count; v++) { - aFree(maplist[i].skills[v]); + if( map->list[i].skill_count ) { + for(v = 0; v < map->list[i].skill_count; v++) { + aFree(map->list[i].skills[v]); } - if( maplist[i].skills ) { - aFree(maplist[i].skills); - maplist[i].skills = NULL; + if( map->list[i].skills ) { + aFree(map->list[i].skills); + map->list[i].skills = NULL; } - maplist[i].skill_count = 0; + map->list[i].skill_count = 0; } - if( maplist[i].zone_mf_count ) { - for(v = 0; v < maplist[i].zone_mf_count; v++) { - aFree(maplist[i].zone_mf[v]); + if( map->list[i].zone_mf_count ) { + for(v = 0; v < map->list[i].zone_mf_count; v++) { + aFree(map->list[i].zone_mf[v]); } - if( maplist[i].zone_mf ) { - aFree(maplist[i].zone_mf); - maplist[i].zone_mf = NULL; + if( map->list[i].zone_mf ) { + aFree(map->list[i].zone_mf); + map->list[i].zone_mf = NULL; } - maplist[i].zone_mf_count = 0; + map->list[i].zone_mf_count = 0; } - if( maplist[i].channel ) - clif->chsys_delete(maplist[i].channel); + if( map->list[i].channel ) + clif->chsys_delete(map->list[i].channel); } void do_final_maps(void) { int i, v = 0; - for( i = 0; i < map->map_num; i++ ) { + for( i = 0; i < map->count; i++ ) { - if(maplist[i].cell && maplist[i].cell != (struct mapcell *)0xdeadbeaf ) aFree(maplist[i].cell); - if(maplist[i].block) aFree(maplist[i].block); - if(maplist[i].block_mob) aFree(maplist[i].block_mob); + if(map->list[i].cell && map->list[i].cell != (struct mapcell *)0xdeadbeaf ) aFree(map->list[i].cell); + if(map->list[i].block) aFree(map->list[i].block); + if(map->list[i].block_mob) aFree(map->list[i].block_mob); if(battle_config.dynamic_mobs) { //Dynamic mobs flag by [random] int j; - if(maplist[i].mob_delete_timer != INVALID_TIMER) - timer->delete(maplist[i].mob_delete_timer, map->removemobs_timer); + if(map->list[i].mob_delete_timer != INVALID_TIMER) + timer->delete(map->list[i].mob_delete_timer, map->removemobs_timer); for (j=0; jlist[i].moblist[j]) aFree(map->list[i].moblist[j]); } - if( maplist[i].unit_count ) { - for(v = 0; v < maplist[i].unit_count; v++) { - aFree(maplist[i].units[v]); + if( map->list[i].unit_count ) { + for(v = 0; v < map->list[i].unit_count; v++) { + aFree(map->list[i].units[v]); } - if( maplist[i].units ) { - aFree(maplist[i].units); - maplist[i].units = NULL; + if( map->list[i].units ) { + aFree(map->list[i].units); + map->list[i].units = NULL; } - maplist[i].unit_count = 0; + map->list[i].unit_count = 0; } - if( maplist[i].skill_count ) { - for(v = 0; v < maplist[i].skill_count; v++) { - aFree(maplist[i].skills[v]); + if( map->list[i].skill_count ) { + for(v = 0; v < map->list[i].skill_count; v++) { + aFree(map->list[i].skills[v]); } - if( maplist[i].skills ) { - aFree(maplist[i].skills); - maplist[i].skills = NULL; + if( map->list[i].skills ) { + aFree(map->list[i].skills); + map->list[i].skills = NULL; } - maplist[i].skill_count = 0; + map->list[i].skill_count = 0; } - if( maplist[i].zone_mf_count ) { - for(v = 0; v < maplist[i].zone_mf_count; v++) { - aFree(maplist[i].zone_mf[v]); + if( map->list[i].zone_mf_count ) { + for(v = 0; v < map->list[i].zone_mf_count; v++) { + aFree(map->list[i].zone_mf[v]); } - if( maplist[i].zone_mf ) { - aFree(maplist[i].zone_mf); - maplist[i].zone_mf = NULL; + if( map->list[i].zone_mf ) { + aFree(map->list[i].zone_mf); + map->list[i].zone_mf = NULL; } - maplist[i].zone_mf_count = 0; + map->list[i].zone_mf_count = 0; } - if( maplist[i].drop_list_count ) { - maplist[i].drop_list_count = 0; + if( map->list[i].drop_list_count ) { + map->list[i].drop_list_count = 0; } - if( maplist[i].drop_list != NULL ) - aFree(maplist[i].drop_list); + if( map->list[i].drop_list != NULL ) + aFree(map->list[i].drop_list); - if( maplist[i].channel ) - clif->chsys_delete(maplist[i].channel); + if( map->list[i].channel ) + clif->chsys_delete(map->list[i].channel); } - map_zone_db_clear(); + map->zone_db_clear(); } /// Initializes map flags and adjusts them depending on configuration. void map_flags_init(void) { int i, v = 0; - for( i = 0; i < map->map_num; i++ ) { + for( i = 0; i < map->count; i++ ) { // mapflags - memset(&maplist[i].flag, 0, sizeof(maplist[i].flag)); + memset(&map->list[i].flag, 0, sizeof(map->list[i].flag)); // additional mapflag data - maplist[i].nocommand = 0; // nocommand mapflag level - maplist[i].bexp = 100; // per map base exp multiplicator - maplist[i].jexp = 100; // per map job exp multiplicator - if( maplist[i].drop_list != NULL ) - aFree(maplist[i].drop_list); - maplist[i].drop_list = NULL; - maplist[i].drop_list_count = 0; - - if( maplist[i].unit_count ) { - for(v = 0; v < maplist[i].unit_count; v++) { - aFree(maplist[i].units[v]); + map->list[i].nocommand = 0; // nocommand mapflag level + map->list[i].bexp = 100; // per map base exp multiplicator + map->list[i].jexp = 100; // per map job exp multiplicator + if( map->list[i].drop_list != NULL ) + aFree(map->list[i].drop_list); + map->list[i].drop_list = NULL; + map->list[i].drop_list_count = 0; + + if( map->list[i].unit_count ) { + for(v = 0; v < map->list[i].unit_count; v++) { + aFree(map->list[i].units[v]); } - aFree(maplist[i].units); + aFree(map->list[i].units); } - maplist[i].units = NULL; - maplist[i].unit_count = 0; + map->list[i].units = NULL; + map->list[i].unit_count = 0; - if( maplist[i].skill_count ) { - for(v = 0; v < maplist[i].skill_count; v++) { - aFree(maplist[i].skills[v]); + if( map->list[i].skill_count ) { + for(v = 0; v < map->list[i].skill_count; v++) { + aFree(map->list[i].skills[v]); } - aFree(maplist[i].skills); + aFree(map->list[i].skills); } - maplist[i].skills = NULL; - maplist[i].skill_count = 0; + map->list[i].skills = NULL; + map->list[i].skill_count = 0; // adjustments if( battle_config.pk_mode ) { - maplist[i].flag.pvp = 1; // make all maps pvp for pk_mode [Valaris] - maplist[i].zone = &map_zone_pk; + map->list[i].flag.pvp = 1; // make all maps pvp for pk_mode [Valaris] + map->list[i].zone = &map->zone_pk; } else /* align with 'All' zone */ - maplist[i].zone = &map_zone_all; + map->list[i].zone = &map->zone_all; - if( maplist[i].zone_mf_count ) { - for(v = 0; v < maplist[i].zone_mf_count; v++) { - aFree(maplist[i].zone_mf[v]); + if( map->list[i].zone_mf_count ) { + for(v = 0; v < map->list[i].zone_mf_count; v++) { + aFree(map->list[i].zone_mf[v]); } - aFree(maplist[i].zone_mf); + aFree(map->list[i].zone_mf); } - maplist[i].zone_mf = NULL; - maplist[i].zone_mf_count = 0; - maplist[i].prev_zone = maplist[i].zone; + map->list[i].zone_mf = NULL; + map->list[i].zone_mf_count = 0; + map->list[i].prev_zone = map->list[i].zone; - maplist[i].invincible_time_inc = 0; + map->list[i].invincible_time_inc = 0; - maplist[i].weapon_damage_rate = 100; - maplist[i].magic_damage_rate = 100; - maplist[i].misc_damage_rate = 100; - maplist[i].short_damage_rate = 100; - maplist[i].long_damage_rate = 100; + map->list[i].weapon_damage_rate = 100; + map->list[i].magic_damage_rate = 100; + map->list[i].misc_damage_rate = 100; + map->list[i].short_damage_rate = 100; + map->list[i].long_damage_rate = 100; } } #define NO_WATER 1000000 /* -* Reads from the .rsw for each map -* Returns water height (or NO_WATER if file doesn't exist) or other error is encountered. -* Assumed path for file is data/mapname.rsw -* Credits to LittleWolf -*/ + * Reads from the .rsw for each map + * Returns water height (or NO_WATER if file doesn't exist) or other error is encountered. + * Assumed path for file is data/mapname.rsw + * Credits to LittleWolf + */ int map_waterheight(char* mapname) { char fn[256]; @@ -3295,8 +3198,8 @@ int map_waterheight(char* mapname) } /*================================== -* .GAT format -*----------------------------------*/ + * .GAT format + *----------------------------------*/ int map_readgat (struct map_data* m) { char filename[256]; @@ -3315,7 +3218,7 @@ int map_readgat (struct map_data* m) num_cells = m->xs * m->ys; CREATE(m->cell, struct mapcell, num_cells); - water_height = map_waterheight(m->name); + water_height = map->waterheight(m->name); // Set cell properties off = 14; @@ -3329,7 +3232,7 @@ int map_readgat (struct map_data* m) if( type == 0 && water_height != NO_WATER && height > water_height ) type = 3; // Cell is 0 (walkable) but under water level, set to 3 (walkable water) - m->cell[xy] = map_gat2cell(type); + m->cell[xy] = map->gat2cell(type); } aFree(gat); @@ -3338,25 +3241,25 @@ int map_readgat (struct map_data* m) } /*====================================== -* Add/Remove map to the map_db -*--------------------------------------*/ + * Add/Remove map to the map_db + *--------------------------------------*/ void map_addmap2db(struct map_data *m) { - index2mapid[m->index] = m->m; + map->index2mapid[m->index] = m->m; } void map_removemapdb(struct map_data *m) { - index2mapid[m->index] = -1; + map->index2mapid[m->index] = -1; } /*====================================== -* Initiate maps loading stage -*--------------------------------------*/ + * Initiate maps loading stage + *--------------------------------------*/ int map_readallmaps (void) { int i; FILE* fp=NULL; int maps_removed = 0; - if( enable_grf ) + if( map->enable_grf ) ShowStatus("Loading maps (using GRF files)...\n"); else { char mapcachefilepath[254]; @@ -3368,73 +3271,73 @@ int map_readallmaps (void) { } // Init mapcache data.. [Shinryo] - map_cache_buffer = map_init_mapcache(fp); - if(!map_cache_buffer) { + map->cache_buffer = map->init_mapcache(fp); + if(!map->cache_buffer) { ShowFatalError("Failed to initialize mapcache data (%s)..\n", mapcachefilepath); exit(EXIT_FAILURE); } } - for(i = 0; i < map->map_num; i++) { + for(i = 0; i < map->count; i++) { size_t size; // show progress - if(enable_grf) - ShowStatus("Loading maps [%i/%i]: %s"CL_CLL"\r", i, map->map_num, maplist[i].name); + if(map->enable_grf) + ShowStatus("Loading maps [%i/%i]: %s"CL_CLL"\r", i, map->count, map->list[i].name); // try to load the map if( ! - (enable_grf? - map_readgat(&maplist[i]) - :map_readfromcache(&maplist[i], map_cache_buffer)) + (map->enable_grf? + map->readgat(&map->list[i]) + :map->readfromcache(&map->list[i], map->cache_buffer)) ) { - map_delmapid(i); + map->delmapid(i); maps_removed++; i--; continue; } - maplist[i].index = mapindex_name2id(maplist[i].name); + map->list[i].index = mapindex_name2id(map->list[i].name); - if ( index2mapid[map_id2index(i)] != -1 ) { - ShowWarning("Map %s already loaded!"CL_CLL"\n", maplist[i].name); - if (maplist[i].cell && maplist[i].cell != (struct mapcell *)0xdeadbeaf) { - aFree(maplist[i].cell); - maplist[i].cell = NULL; + if ( map->index2mapid[map_id2index(i)] != -1 ) { + ShowWarning("Map %s already loaded!"CL_CLL"\n", map->list[i].name); + if (map->list[i].cell && map->list[i].cell != (struct mapcell *)0xdeadbeaf) { + aFree(map->list[i].cell); + map->list[i].cell = NULL; } - map_delmapid(i); + map->delmapid(i); maps_removed++; i--; continue; } - maplist[i].m = i; - map->addmap2db(&maplist[i]); + map->list[i].m = i; + map->addmap2db(&map->list[i]); - memset(maplist[i].moblist, 0, sizeof(maplist[i].moblist)); //Initialize moblist [Skotlex] - maplist[i].mob_delete_timer = INVALID_TIMER; //Initialize timer [Skotlex] + memset(map->list[i].moblist, 0, sizeof(map->list[i].moblist)); //Initialize moblist [Skotlex] + map->list[i].mob_delete_timer = INVALID_TIMER; //Initialize timer [Skotlex] - maplist[i].bxs = (maplist[i].xs + BLOCK_SIZE - 1) / BLOCK_SIZE; - maplist[i].bys = (maplist[i].ys + BLOCK_SIZE - 1) / BLOCK_SIZE; + map->list[i].bxs = (map->list[i].xs + BLOCK_SIZE - 1) / BLOCK_SIZE; + map->list[i].bys = (map->list[i].ys + BLOCK_SIZE - 1) / BLOCK_SIZE; - size = maplist[i].bxs * maplist[i].bys * sizeof(struct block_list*); - maplist[i].block = (struct block_list**)aCalloc(size, 1); - maplist[i].block_mob = (struct block_list**)aCalloc(size, 1); + size = map->list[i].bxs * map->list[i].bys * sizeof(struct block_list*); + map->list[i].block = (struct block_list**)aCalloc(size, 1); + map->list[i].block_mob = (struct block_list**)aCalloc(size, 1); - maplist[i].getcellp = map_sub_getcellp; - maplist[i].setcell = map_sub_setcell; + map->list[i].getcellp = map->sub_getcellp; + map->list[i].setcell = map->sub_setcell; } // intialization and configuration-dependent adjustments of mapflags map->flags_init(); - if( !enable_grf ) { + if( !map->enable_grf ) { fclose(fp); } // finished map loading - ShowInfo("Successfully loaded '"CL_WHITE"%d"CL_RESET"' maps."CL_CLL"\n",map->map_num); - instance->start_id = map->map_num; // Next Map Index will be instances + ShowInfo("Successfully loaded '"CL_WHITE"%d"CL_RESET"' maps."CL_CLL"\n",map->count); + instance->start_id = map->count; // Next Map Index will be instances if (maps_removed) ShowNotice("Maps removed: '"CL_WHITE"%d"CL_RESET"'\n",maps_removed); @@ -3442,13 +3345,9 @@ int map_readallmaps (void) { return 0; } -//////////////////////////////////////////////////////////////////////// -static int map_ip_set = 0; -static int char_ip_set = 0; - /*========================================== -* Read map server configuration files (conf/map_server.conf...) -*------------------------------------------*/ + * Read map server configuration files (conf/map_server.conf...) + *------------------------------------------*/ int map_config_read(char *cfgName) { char line[1024], w1[1024], w2[1024]; FILE *fp; @@ -3488,20 +3387,20 @@ int map_config_read(char *cfgName) { else if (strcmpi(w1, "passwd") == 0) chrif->setpasswd(w2); else if (strcmpi(w1, "char_ip") == 0) - char_ip_set = chrif->setip(w2); + map->char_ip_set = chrif->setip(w2); else if (strcmpi(w1, "char_port") == 0) chrif->setport(atoi(w2)); else if (strcmpi(w1, "map_ip") == 0) - map_ip_set = clif->setip(w2); + map->ip_set = clif->setip(w2); else if (strcmpi(w1, "bind_ip") == 0) clif->setbindip(w2); else if (strcmpi(w1, "map_port") == 0) { clif->setport(atoi(w2)); - map_port = (atoi(w2)); + map->port = (atoi(w2)); } else if (strcmpi(w1, "map") == 0) - map->map_num++; + map->count++; else if (strcmpi(w1, "delmap") == 0) - map->map_num--; + map->count--; else if (strcmpi(w1, "npc") == 0) npc->addsrcfile(w2); else if (strcmpi(w1, "delnpc") == 0) @@ -3529,11 +3428,11 @@ int map_config_read(char *cfgName) { else if (strcmpi(w1, "enable_spy") == 0) map->enable_spy = config_switch(w2); else if (strcmpi(w1, "use_grf") == 0) - enable_grf = config_switch(w2); + map->enable_grf = config_switch(w2); else if (strcmpi(w1, "console_msg_log") == 0) console_msg_log = atoi(w2);//[Ind] else if (strcmpi(w1, "import") == 0) - map_config_read(w2); + map->config_read(w2); else ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName); } @@ -3568,11 +3467,11 @@ int map_config_read_sub(char *cfgName) { *ptr = '\0'; if (strcmpi(w1, "map") == 0) - map_addmap(w2); + map->addmap(w2); else if (strcmpi(w1, "delmap") == 0) map->delmap(w2); else if (strcmpi(w1, "import") == 0) - map_config_read_sub(w2); + map->config_read_sub(w2); } fclose(fp); @@ -3610,7 +3509,7 @@ void map_reloadnpc_sub(char *cfgName) if (strcmpi(w1, "npc") == 0) npc->addsrcfile(w2); else if (strcmpi(w1, "import") == 0) - map_reloadnpc_sub(w2); + map->reloadnpc_sub(w2); else ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName); } @@ -3624,9 +3523,9 @@ void map_reloadnpc(bool clear) npc->addsrcfile("clear"); // this will clear the current script list #ifdef RENEWAL - map_reloadnpc_sub("npc/re/scripts_main.conf"); + map->reloadnpc_sub("npc/re/scripts_main.conf"); #else - map_reloadnpc_sub("npc/pre-re/scripts_main.conf"); + map->reloadnpc_sub("npc/pre-re/scripts_main.conf"); #endif } @@ -3663,17 +3562,17 @@ int inter_config_read(char *cfgName) { strcpy(map->interreg_db,w2); /* map sql stuff */ else if(strcmpi(w1,"map_server_ip")==0) - strcpy(map_server_ip, w2); + strcpy(map->server_ip, w2); else if(strcmpi(w1,"map_server_port")==0) - map_server_port=atoi(w2); + map->server_port=atoi(w2); else if(strcmpi(w1,"map_server_id")==0) - strcpy(map_server_id, w2); + strcpy(map->server_id, w2); else if(strcmpi(w1,"map_server_pw")==0) - strcpy(map_server_pw, w2); + strcpy(map->server_pw, w2); else if(strcmpi(w1,"map_server_db")==0) - strcpy(map_server_db, w2); + strcpy(map->server_db, w2); else if(strcmpi(w1,"default_codepage")==0) - strcpy(default_codepage, w2); + strcpy(map->default_codepage, w2); else if(strcmpi(w1,"use_sql_item_db")==0) { map->db_use_sql_item_db = config_switch(w2); ShowStatus ("Using item database as SQL: '%s'\n", w2); @@ -3688,21 +3587,21 @@ int inter_config_read(char *cfgName) { } /* sql log db */ else if(strcmpi(w1,"log_db_ip")==0) - strcpy(log_db_ip, w2); + strcpy(logs->db_ip, w2); else if(strcmpi(w1,"log_db_id")==0) - strcpy(log_db_id, w2); + strcpy(logs->db_id, w2); else if(strcmpi(w1,"log_db_pw")==0) - strcpy(log_db_pw, w2); + strcpy(logs->db_pw, w2); else if(strcmpi(w1,"log_db_port")==0) - log_db_port = atoi(w2); + logs->db_port = atoi(w2); else if(strcmpi(w1,"log_db_db")==0) - strcpy(log_db_db, w2); + strcpy(logs->db_name, w2); /* mapreg */ else if( mapreg->config_read(w1,w2) ) continue; /* import */ else if(strcmpi(w1,"import")==0) - inter_config_read(w2); + map->inter_config_read(w2); } fclose(fp); @@ -3710,21 +3609,21 @@ int inter_config_read(char *cfgName) { } /*======================================= -* MySQL Init -*---------------------------------------*/ + * MySQL Init + *---------------------------------------*/ int map_sql_init(void) { // main db connection - mmysql_handle = SQL->Malloc(); + map->mysql_handle = SQL->Malloc(); ShowInfo("Connecting to the Map DB Server....\n"); - if( SQL_ERROR == SQL->Connect(mmysql_handle, map_server_id, map_server_pw, map_server_ip, map_server_port, map_server_db) ) + if( SQL_ERROR == SQL->Connect(map->mysql_handle, map->server_id, map->server_pw, map->server_ip, map->server_port, map->server_db) ) exit(EXIT_FAILURE); ShowStatus("connect success! (Map Server Connection)\n"); - if( strlen(default_codepage) > 0 ) - if ( SQL_ERROR == SQL->SetEncoding(mmysql_handle, default_codepage) ) - Sql_ShowDebug(mmysql_handle); + if( strlen(map->default_codepage) > 0 ) + if ( SQL_ERROR == SQL->SetEncoding(map->mysql_handle, map->default_codepage) ) + Sql_ShowDebug(map->mysql_handle); return 0; } @@ -3732,46 +3631,29 @@ int map_sql_init(void) int map_sql_close(void) { ShowStatus("Close Map DB Connection....\n"); - SQL->Free(mmysql_handle); - mmysql_handle = NULL; + SQL->Free(map->mysql_handle); + map->mysql_handle = NULL; if (logs->config.sql_logs) { - ShowStatus("Close Log DB Connection....\n"); - SQL->Free(logmysql_handle); - logmysql_handle = NULL; + logs->sql_final(); } return 0; } -int log_sql_init(void) -{ - // log db connection - logmysql_handle = SQL->Malloc(); - - ShowInfo(""CL_WHITE"[SQL]"CL_RESET": Connecting to the Log Database "CL_WHITE"%s"CL_RESET" At "CL_WHITE"%s"CL_RESET"...\n",log_db_db,log_db_ip); - if ( SQL_ERROR == SQL->Connect(logmysql_handle, log_db_id, log_db_pw, log_db_ip, log_db_port, log_db_db) ) - exit(EXIT_FAILURE); - ShowStatus(""CL_WHITE"[SQL]"CL_RESET": Successfully '"CL_GREEN"connected"CL_RESET"' to Database '"CL_WHITE"%s"CL_RESET"'.\n", log_db_db); - - if( strlen(default_codepage) > 0 ) - if ( SQL_ERROR == SQL->SetEncoding(logmysql_handle, default_codepage) ) - Sql_ShowDebug(logmysql_handle); - return 0; -} void map_zone_change2(int m, struct map_zone_data *zone) { char empty[1] = "\0"; - maplist[m].prev_zone = maplist[m].zone; + map->list[m].prev_zone = map->list[m].zone; - if( maplist[m].zone_mf_count ) + if( map->list[m].zone_mf_count ) map->zone_remove(m); map->zone_apply(m,zone,empty,empty,empty); } /* when changing from a mapflag to another during runtime */ void map_zone_change(int m, struct map_zone_data *zone, const char* start, const char* buffer, const char* filepath) { - maplist[m].prev_zone = maplist[m].zone; + map->list[m].prev_zone = map->list[m].zone; - if( maplist[m].zone_mf_count ) + if( map->list[m].zone_mf_count ) map->zone_remove(m); map->zone_apply(m,zone,start,buffer,filepath); } @@ -3780,10 +3662,10 @@ void map_zone_remove(int m) { char flag[MAP_ZONE_MAPFLAG_LENGTH], params[MAP_ZONE_MAPFLAG_LENGTH]; unsigned short k; char empty[1] = "\0"; - for(k = 0; k < maplist[m].zone_mf_count; k++) { - int len = strlen(maplist[m].zone_mf[k]),j; + for(k = 0; k < map->list[m].zone_mf_count; k++) { + int len = strlen(map->list[m].zone_mf[k]),j; params[0] = '\0'; - memcpy(flag, maplist[m].zone_mf[k], MAP_ZONE_MAPFLAG_LENGTH); + memcpy(flag, map->list[m].zone_mf[k], MAP_ZONE_MAPFLAG_LENGTH); for(j = 0; j < len; j++) { if( flag[j] == '\t' ) { memcpy(params, &flag[j+1], len - j); @@ -3792,19 +3674,19 @@ void map_zone_remove(int m) { } } - npc->parse_mapflag(maplist[m].name,empty,flag,params,empty,empty,empty); - aFree(maplist[m].zone_mf[k]); - maplist[m].zone_mf[k] = NULL; + npc->parse_mapflag(map->list[m].name,empty,flag,params,empty,empty,empty); + aFree(map->list[m].zone_mf[k]); + map->list[m].zone_mf[k] = NULL; } - aFree(maplist[m].zone_mf); - maplist[m].zone_mf = NULL; - maplist[m].zone_mf_count = 0; + aFree(map->list[m].zone_mf); + map->list[m].zone_mf = NULL; + map->list[m].zone_mf_count = 0; } static inline void map_zone_mf_cache_add(int m, char *rflag) { - RECREATE(maplist[m].zone_mf, char *, ++maplist[m].zone_mf_count); - CREATE(maplist[m].zone_mf[maplist[m].zone_mf_count - 1], char, MAP_ZONE_MAPFLAG_LENGTH); - safestrncpy(maplist[m].zone_mf[maplist[m].zone_mf_count - 1], rflag, MAP_ZONE_MAPFLAG_LENGTH); + RECREATE(map->list[m].zone_mf, char *, ++map->list[m].zone_mf_count); + CREATE(map->list[m].zone_mf[map->list[m].zone_mf_count - 1], char, MAP_ZONE_MAPFLAG_LENGTH); + safestrncpy(map->list[m].zone_mf[map->list[m].zone_mf_count - 1], rflag, MAP_ZONE_MAPFLAG_LENGTH); } /* TODO: introduce enumerations to each mapflag so instead of reading the string a number of times we read it only once and use its value wherever we need */ /* cache previous values to revert */ @@ -3820,157 +3702,157 @@ bool map_zone_mf_cache(int m, char *flag, char *params) { char savemap[32]; int savex, savey; if (state == 0) { - if( maplist[m].flag.nosave ) { + if( map->list[m].flag.nosave ) { sprintf(rflag, "nosave\tSavePoint"); map_zone_mf_cache_add(m,nosave); } } else if (!strcmpi(params, "SavePoint")) { - if( maplist[m].save.map ) { - sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(maplist[m].save.map),maplist[m].save.x,maplist[m].save.y); + if( map->list[m].save.map ) { + sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(map->list[m].save.map),map->list[m].save.x,map->list[m].save.y); } else - sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(maplist[m].save.map),maplist[m].save.x,maplist[m].save.y); + sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(map->list[m].save.map),map->list[m].save.x,map->list[m].save.y); map_zone_mf_cache_add(m,nosave); } else if (sscanf(params, "%31[^,],%d,%d", savemap, &savex, &savey) == 3) { - if( maplist[m].save.map ) { - sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(maplist[m].save.map),maplist[m].save.x,maplist[m].save.y); + if( map->list[m].save.map ) { + sprintf(rflag, "nosave\t%s,%d,%d",mapindex_id2name(map->list[m].save.map),map->list[m].save.x,map->list[m].save.y); map_zone_mf_cache_add(m,nosave); } } #endif // 0 } else if (!strcmpi(flag,"autotrade")) { - if( state && maplist[m].flag.autotrade ) + if( state && map->list[m].flag.autotrade ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"autotrade\toff"); - else if( !maplist[m].flag.autotrade ) + else if( !map->list[m].flag.autotrade ) map_zone_mf_cache_add(m,"autotrade"); } } else if (!strcmpi(flag,"allowks")) { - if( state && maplist[m].flag.allowks ) + if( state && map->list[m].flag.allowks ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"allowks\toff"); - else if( !maplist[m].flag.allowks ) + else if( !map->list[m].flag.allowks ) map_zone_mf_cache_add(m,"allowks"); } } else if (!strcmpi(flag,"town")) { - if( state && maplist[m].flag.town ) + if( state && map->list[m].flag.town ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"town\toff"); - else if( !maplist[m].flag.town ) + else if( !map->list[m].flag.town ) map_zone_mf_cache_add(m,"town"); } } else if (!strcmpi(flag,"nomemo")) { - if( state && maplist[m].flag.nomemo ) + if( state && map->list[m].flag.nomemo ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nomemo\toff"); - else if( !maplist[m].flag.nomemo ) + else if( !map->list[m].flag.nomemo ) map_zone_mf_cache_add(m,"nomemo"); } } else if (!strcmpi(flag,"noteleport")) { - if( state && maplist[m].flag.noteleport ) + if( state && map->list[m].flag.noteleport ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"noteleport\toff"); - else if( !maplist[m].flag.noteleport ) + else if( !map->list[m].flag.noteleport ) map_zone_mf_cache_add(m,"noteleport"); } } else if (!strcmpi(flag,"nowarp")) { - if( state && maplist[m].flag.nowarp ) + if( state && map->list[m].flag.nowarp ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nowarp\toff"); - else if( !maplist[m].flag.nowarp ) + else if( !map->list[m].flag.nowarp ) map_zone_mf_cache_add(m,"nowarp"); } } else if (!strcmpi(flag,"nowarpto")) { - if( state && maplist[m].flag.nowarpto ) + if( state && map->list[m].flag.nowarpto ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nowarpto\toff"); - else if( !maplist[m].flag.nowarpto ) + else if( !map->list[m].flag.nowarpto ) map_zone_mf_cache_add(m,"nowarpto"); } } else if (!strcmpi(flag,"noreturn")) { - if( state && maplist[m].flag.noreturn ) + if( state && map->list[m].flag.noreturn ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"noreturn\toff"); - else if( maplist[m].flag.noreturn ) + else if( map->list[m].flag.noreturn ) map_zone_mf_cache_add(m,"noreturn"); } } else if (!strcmpi(flag,"monster_noteleport")) { - if( state && maplist[m].flag.monster_noteleport ) + if( state && map->list[m].flag.monster_noteleport ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"monster_noteleport\toff"); - else if( maplist[m].flag.monster_noteleport ) + else if( map->list[m].flag.monster_noteleport ) map_zone_mf_cache_add(m,"monster_noteleport"); } } else if (!strcmpi(flag,"nobranch")) { - if( state && maplist[m].flag.nobranch ) + if( state && map->list[m].flag.nobranch ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nobranch\toff"); - else if( maplist[m].flag.nobranch ) + else if( map->list[m].flag.nobranch ) map_zone_mf_cache_add(m,"nobranch"); } } else if (!strcmpi(flag,"nopenalty")) { - if( state && maplist[m].flag.noexppenalty ) /* they are applied together, no need to check both */ + if( state && map->list[m].flag.noexppenalty ) /* they are applied together, no need to check both */ ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nopenalty\toff"); - else if( maplist[m].flag.noexppenalty ) + else if( map->list[m].flag.noexppenalty ) map_zone_mf_cache_add(m,"nopenalty"); } } else if (!strcmpi(flag,"pvp")) { - if( state && maplist[m].flag.pvp ) + if( state && map->list[m].flag.pvp ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"pvp\toff"); - else if( maplist[m].flag.pvp ) + else if( map->list[m].flag.pvp ) map_zone_mf_cache_add(m,"pvp"); } } else if (!strcmpi(flag,"pvp_noparty")) { - if( state && maplist[m].flag.pvp_noparty ) + if( state && map->list[m].flag.pvp_noparty ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"pvp_noparty\toff"); - else if( maplist[m].flag.pvp_noparty ) + else if( map->list[m].flag.pvp_noparty ) map_zone_mf_cache_add(m,"pvp_noparty"); } } else if (!strcmpi(flag,"pvp_noguild")) { - if( state && maplist[m].flag.pvp_noguild ) + if( state && map->list[m].flag.pvp_noguild ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"pvp_noguild\toff"); - else if( maplist[m].flag.pvp_noguild ) + else if( map->list[m].flag.pvp_noguild ) map_zone_mf_cache_add(m,"pvp_noguild"); } } else if (!strcmpi(flag, "pvp_nightmaredrop")) { - if( state && maplist[m].flag.pvp_nightmaredrop ) + if( state && map->list[m].flag.pvp_nightmaredrop ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"pvp_nightmaredrop\toff"); - else if( maplist[m].flag.pvp_nightmaredrop ) + else if( map->list[m].flag.pvp_nightmaredrop ) map_zone_mf_cache_add(m,"pvp_nightmaredrop"); } #if 0 /* not yet fully supported */ @@ -3992,262 +3874,262 @@ bool map_zone_mf_cache(int m, char *flag, char *params) { if (drop_id != 0) { int i; for (i = 0; i < MAX_DROP_PER_MAP; i++) { - if (maplist[m].drop_list[i].drop_id == 0){ - maplist[m].drop_list[i].drop_id = drop_id; - maplist[m].drop_list[i].drop_type = drop_type; - maplist[m].drop_list[i].drop_per = drop_per; + if (map->list[m].drop_list[i].drop_id == 0){ + map->list[m].drop_list[i].drop_id = drop_id; + map->list[m].drop_list[i].drop_type = drop_type; + map->list[m].drop_list[i].drop_per = drop_per; break; } } - maplist[m].flag.pvp_nightmaredrop = 1; + map->list[m].flag.pvp_nightmaredrop = 1; } } else if (!state) //Disable - maplist[m].flag.pvp_nightmaredrop = 0; + map->list[m].flag.pvp_nightmaredrop = 0; #endif // 0 } else if (!strcmpi(flag,"pvp_nocalcrank")) { - if( state && maplist[m].flag.pvp_nocalcrank ) + if( state && map->list[m].flag.pvp_nocalcrank ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"pvp_nocalcrank\toff"); - else if( maplist[m].flag.pvp_nocalcrank ) + else if( map->list[m].flag.pvp_nocalcrank ) map_zone_mf_cache_add(m,"pvp_nocalcrank"); } } else if (!strcmpi(flag,"gvg")) { - if( state && maplist[m].flag.gvg ) + if( state && map->list[m].flag.gvg ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"gvg\toff"); - else if( maplist[m].flag.gvg ) + else if( map->list[m].flag.gvg ) map_zone_mf_cache_add(m,"gvg"); } } else if (!strcmpi(flag,"gvg_noparty")) { - if( state && maplist[m].flag.gvg_noparty ) + if( state && map->list[m].flag.gvg_noparty ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"gvg_noparty\toff"); - else if( maplist[m].flag.gvg_noparty ) + else if( map->list[m].flag.gvg_noparty ) map_zone_mf_cache_add(m,"gvg_noparty"); } } else if (!strcmpi(flag,"gvg_dungeon")) { - if( state && maplist[m].flag.gvg_dungeon ) + if( state && map->list[m].flag.gvg_dungeon ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"gvg_dungeon\toff"); - else if( maplist[m].flag.gvg_dungeon ) + else if( map->list[m].flag.gvg_dungeon ) map_zone_mf_cache_add(m,"gvg_dungeon"); } } else if (!strcmpi(flag,"gvg_castle")) { - if( state && maplist[m].flag.gvg_castle ) + if( state && map->list[m].flag.gvg_castle ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"gvg_castle\toff"); - else if( maplist[m].flag.gvg_castle ) + else if( map->list[m].flag.gvg_castle ) map_zone_mf_cache_add(m,"gvg_castle"); } } else if (!strcmpi(flag,"battleground")) { - if( state && maplist[m].flag.battleground ) + if( state && map->list[m].flag.battleground ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"battleground\toff"); - else if( maplist[m].flag.battleground ) + else if( map->list[m].flag.battleground ) map_zone_mf_cache_add(m,"battleground"); } } else if (!strcmpi(flag,"noexppenalty")) { - if( state && maplist[m].flag.noexppenalty ) + if( state && map->list[m].flag.noexppenalty ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"noexppenalty\toff"); - else if( maplist[m].flag.noexppenalty ) + else if( map->list[m].flag.noexppenalty ) map_zone_mf_cache_add(m,"noexppenalty"); } } else if (!strcmpi(flag,"nozenypenalty")) { - if( state && maplist[m].flag.nozenypenalty ) + if( state && map->list[m].flag.nozenypenalty ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nozenypenalty\toff"); - else if( maplist[m].flag.nozenypenalty ) + else if( map->list[m].flag.nozenypenalty ) map_zone_mf_cache_add(m,"nozenypenalty"); } } else if (!strcmpi(flag,"notrade")) { - if( state && maplist[m].flag.notrade ) + if( state && map->list[m].flag.notrade ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"notrade\toff"); - else if( maplist[m].flag.notrade ) + else if( map->list[m].flag.notrade ) map_zone_mf_cache_add(m,"notrade"); } } else if (!strcmpi(flag,"novending")) { - if( state && maplist[m].flag.novending ) + if( state && map->list[m].flag.novending ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"novending\toff"); - else if( maplist[m].flag.novending ) + else if( map->list[m].flag.novending ) map_zone_mf_cache_add(m,"novending"); } } else if (!strcmpi(flag,"nodrop")) { - if( state && maplist[m].flag.nodrop ) + if( state && map->list[m].flag.nodrop ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nodrop\toff"); - else if( maplist[m].flag.nodrop ) + else if( map->list[m].flag.nodrop ) map_zone_mf_cache_add(m,"nodrop"); } } else if (!strcmpi(flag,"noskill")) { - if( state && maplist[m].flag.noskill ) + if( state && map->list[m].flag.noskill ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"noskill\toff"); - else if( maplist[m].flag.noskill ) + else if( map->list[m].flag.noskill ) map_zone_mf_cache_add(m,"noskill"); } } else if (!strcmpi(flag,"noicewall")) { - if( state && maplist[m].flag.noicewall ) + if( state && map->list[m].flag.noicewall ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"noicewall\toff"); - else if( maplist[m].flag.noicewall ) + else if( map->list[m].flag.noicewall ) map_zone_mf_cache_add(m,"noicewall"); } } else if (!strcmpi(flag,"snow")) { - if( state && maplist[m].flag.snow ) + if( state && map->list[m].flag.snow ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"snow\toff"); - else if( maplist[m].flag.snow ) + else if( map->list[m].flag.snow ) map_zone_mf_cache_add(m,"snow"); } } else if (!strcmpi(flag,"clouds")) { - if( state && maplist[m].flag.clouds ) + if( state && map->list[m].flag.clouds ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"clouds\toff"); - else if( maplist[m].flag.clouds ) + else if( map->list[m].flag.clouds ) map_zone_mf_cache_add(m,"clouds"); } } else if (!strcmpi(flag,"clouds2")) { - if( state && maplist[m].flag.clouds2 ) + if( state && map->list[m].flag.clouds2 ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"clouds2\toff"); - else if( maplist[m].flag.clouds2 ) + else if( map->list[m].flag.clouds2 ) map_zone_mf_cache_add(m,"clouds2"); } } else if (!strcmpi(flag,"fog")) { - if( state && maplist[m].flag.fog ) + if( state && map->list[m].flag.fog ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"fog\toff"); - else if( maplist[m].flag.fog ) + else if( map->list[m].flag.fog ) map_zone_mf_cache_add(m,"fog"); } } else if (!strcmpi(flag,"fireworks")) { - if( state && maplist[m].flag.fireworks ) + if( state && map->list[m].flag.fireworks ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"fireworks\toff"); - else if( maplist[m].flag.fireworks ) + else if( map->list[m].flag.fireworks ) map_zone_mf_cache_add(m,"fireworks"); } } else if (!strcmpi(flag,"sakura")) { - if( state && maplist[m].flag.sakura ) + if( state && map->list[m].flag.sakura ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"sakura\toff"); - else if( maplist[m].flag.sakura ) + else if( map->list[m].flag.sakura ) map_zone_mf_cache_add(m,"sakura"); } } else if (!strcmpi(flag,"leaves")) { - if( state && maplist[m].flag.leaves ) + if( state && map->list[m].flag.leaves ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"leaves\toff"); - else if( maplist[m].flag.leaves ) + else if( map->list[m].flag.leaves ) map_zone_mf_cache_add(m,"leaves"); } } else if (!strcmpi(flag,"nightenabled")) { - if( state && maplist[m].flag.nightenabled ) + if( state && map->list[m].flag.nightenabled ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nightenabled\toff"); - else if( maplist[m].flag.nightenabled ) + else if( map->list[m].flag.nightenabled ) map_zone_mf_cache_add(m,"nightenabled"); } } else if (!strcmpi(flag,"noexp")) { - if( state && maplist[m].flag.nobaseexp ) + if( state && map->list[m].flag.nobaseexp ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"noexp\toff"); - else if( maplist[m].flag.nobaseexp ) + else if( map->list[m].flag.nobaseexp ) map_zone_mf_cache_add(m,"noexp"); } } else if (!strcmpi(flag,"nobaseexp")) { - if( state && maplist[m].flag.nobaseexp ) + if( state && map->list[m].flag.nobaseexp ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nobaseexp\toff"); - else if( maplist[m].flag.nobaseexp ) + else if( map->list[m].flag.nobaseexp ) map_zone_mf_cache_add(m,"nobaseexp"); } } else if (!strcmpi(flag,"nojobexp")) { - if( state && maplist[m].flag.nojobexp ) + if( state && map->list[m].flag.nojobexp ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nojobexp\toff"); - else if( maplist[m].flag.nojobexp ) + else if( map->list[m].flag.nojobexp ) map_zone_mf_cache_add(m,"nojobexp"); } } else if (!strcmpi(flag,"noloot")) { - if( state && maplist[m].flag.nomobloot ) + if( state && map->list[m].flag.nomobloot ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"noloot\toff"); - else if( maplist[m].flag.nomobloot ) + else if( map->list[m].flag.nomobloot ) map_zone_mf_cache_add(m,"noloot"); } } else if (!strcmpi(flag,"nomobloot")) { - if( state && maplist[m].flag.nomobloot ) + if( state && map->list[m].flag.nomobloot ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nomobloot\toff"); - else if( maplist[m].flag.nomobloot ) + else if( map->list[m].flag.nomobloot ) map_zone_mf_cache_add(m,"nomobloot"); } } else if (!strcmpi(flag,"nomvploot")) { - if( state && maplist[m].flag.nomvploot ) + if( state && map->list[m].flag.nomvploot ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nomvploot\toff"); - else if( maplist[m].flag.nomvploot ) + else if( map->list[m].flag.nomvploot ) map_zone_mf_cache_add(m,"nomvploot"); } } else if (!strcmpi(flag,"nocommand")) { @@ -4255,79 +4137,79 @@ bool map_zone_mf_cache(int m, char *flag, char *params) { if( state && sscanf(params, "%d", &state) == 1 ) { sprintf(rflag, "nocommand\t%s",params); map_zone_mf_cache_add(m,rflag); - } else if( !state && maplist[m].nocommand ) { - sprintf(rflag, "nocommand\t%d",maplist[m].nocommand); + } else if( !state && map->list[m].nocommand ) { + sprintf(rflag, "nocommand\t%d",map->list[m].nocommand); map_zone_mf_cache_add(m,rflag); - } else if( maplist[m].nocommand ) { + } else if( map->list[m].nocommand ) { map_zone_mf_cache_add(m,"nocommand\toff"); } } else if (!strcmpi(flag,"jexp")) { if( !state ) { - if( maplist[m].jexp != 100 ) { - sprintf(rflag,"jexp\t%d",maplist[m].jexp); + if( map->list[m].jexp != 100 ) { + sprintf(rflag,"jexp\t%d",map->list[m].jexp); map_zone_mf_cache_add(m,rflag); } } if( sscanf(params, "%d", &state) == 1 ) { - if( state != maplist[m].jexp ) { + if( state != map->list[m].jexp ) { sprintf(rflag,"jexp\t%s",params); map_zone_mf_cache_add(m,rflag); } } } else if (!strcmpi(flag,"bexp")) { if( !state ) { - if( maplist[m].bexp != 100 ) { - sprintf(rflag,"bexp\t%d",maplist[m].jexp); + if( map->list[m].bexp != 100 ) { + sprintf(rflag,"bexp\t%d",map->list[m].jexp); map_zone_mf_cache_add(m,rflag); } } if( sscanf(params, "%d", &state) == 1 ) { - if( state != maplist[m].bexp ) { + if( state != map->list[m].bexp ) { sprintf(rflag,"bexp\t%s",params); map_zone_mf_cache_add(m,rflag); } } } else if (!strcmpi(flag,"loadevent")) { - if( state && maplist[m].flag.loadevent ) + if( state && map->list[m].flag.loadevent ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"loadevent\toff"); - else if( maplist[m].flag.loadevent ) + else if( map->list[m].flag.loadevent ) map_zone_mf_cache_add(m,"loadevent"); } } else if (!strcmpi(flag,"nochat")) { - if( state && maplist[m].flag.nochat ) + if( state && map->list[m].flag.nochat ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nochat\toff"); - else if( maplist[m].flag.nochat ) + else if( map->list[m].flag.nochat ) map_zone_mf_cache_add(m,"nochat"); } } else if (!strcmpi(flag,"partylock")) { - if( state && maplist[m].flag.partylock ) + if( state && map->list[m].flag.partylock ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"partylock\toff"); - else if( maplist[m].flag.partylock ) + else if( map->list[m].flag.partylock ) map_zone_mf_cache_add(m,"partylock"); } } else if (!strcmpi(flag,"guildlock")) { - if( state && maplist[m].flag.guildlock ) + if( state && map->list[m].flag.guildlock ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"guildlock\toff"); - else if( maplist[m].flag.guildlock ) + else if( map->list[m].flag.guildlock ) map_zone_mf_cache_add(m,"guildlock"); } } else if (!strcmpi(flag,"reset")) { - if( state && maplist[m].flag.reset ) + if( state && map->list[m].flag.reset ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"reset\toff"); - else if( maplist[m].flag.reset ) + else if( map->list[m].flag.reset ) map_zone_mf_cache_add(m,"reset"); } } else if (!strcmpi(flag,"adjust_unit_duration")) { @@ -4349,14 +4231,14 @@ bool map_zone_mf_cache(int m, char *flag, char *params) { if( modifier[0] == '\0' || !( skill_id = skill->name2id(skill_name) ) || !skill->get_unit_id( skill->name2id(skill_name), 0) || atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX ) { ;/* we dont mind it, the server will take care of it next. */ } else { - int idx = maplist[m].unit_count; + int idx = map->list[m].unit_count; k = 0; - ARR_FIND(0, idx, k, maplist[m].units[k]->skill_id == skill_id); + ARR_FIND(0, idx, k, map->list[m].units[k]->skill_id == skill_id); if( k < idx ) { - if( atoi(modifier) != maplist[m].units[k]->modifier ) { - sprintf(rflag,"adjust_unit_duration\t%s\t%d",skill_name,maplist[m].units[k]->modifier); + if( atoi(modifier) != map->list[m].units[k]->modifier ) { + sprintf(rflag,"adjust_unit_duration\t%s\t%d",skill_name,map->list[m].units[k]->modifier); map_zone_mf_cache_add(m,rflag); } } else { @@ -4383,14 +4265,14 @@ bool map_zone_mf_cache(int m, char *flag, char *params) { if( modifier[0] == '\0' || !( skill_id = skill->name2id(skill_name) ) || atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX ) { ;/* we dont mind it, the server will take care of it next. */ } else { - int idx = maplist[m].skill_count; + int idx = map->list[m].skill_count; k = 0; - ARR_FIND(0, idx, k, maplist[m].skills[k]->skill_id == skill_id); + ARR_FIND(0, idx, k, map->list[m].skills[k]->skill_id == skill_id); if( k < idx ) { - if( atoi(modifier) != maplist[m].skills[k]->modifier ) { - sprintf(rflag,"adjust_skill_damage\t%s\t%d",skill_name,maplist[m].skills[k]->modifier); + if( atoi(modifier) != map->list[m].skills[k]->modifier ) { + sprintf(rflag,"adjust_skill_damage\t%s\t%d",skill_name,map->list[m].skills[k]->modifier); map_zone_mf_cache_add(m,rflag); } } else { @@ -4400,94 +4282,94 @@ bool map_zone_mf_cache(int m, char *flag, char *params) { } } else if (!strcmpi(flag,"zone")) { - ShowWarning("You can't add a zone through a zone! ERROR, skipping for '%s'...\n",maplist[m].name); + ShowWarning("You can't add a zone through a zone! ERROR, skipping for '%s'...\n",map->list[m].name); return true; } else if ( !strcmpi(flag,"nomapchannelautojoin") ) { - if( state && maplist[m].flag.chsysnolocalaj ) + if( state && map->list[m].flag.chsysnolocalaj ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"nomapchannelautojoin\toff"); - else if( maplist[m].flag.chsysnolocalaj ) + else if( map->list[m].flag.chsysnolocalaj ) map_zone_mf_cache_add(m,"nomapchannelautojoin"); } } else if ( !strcmpi(flag,"invincible_time_inc") ) { if( !state ) { - if( maplist[m].invincible_time_inc != 0 ) { - sprintf(rflag,"invincible_time_inc\t%d",maplist[m].invincible_time_inc); + if( map->list[m].invincible_time_inc != 0 ) { + sprintf(rflag,"invincible_time_inc\t%d",map->list[m].invincible_time_inc); map_zone_mf_cache_add(m,rflag); } } if( sscanf(params, "%d", &state) == 1 ) { - if( state != maplist[m].invincible_time_inc ) { + if( state != map->list[m].invincible_time_inc ) { sprintf(rflag,"invincible_time_inc\t%s",params); map_zone_mf_cache_add(m,rflag); } } } else if ( !strcmpi(flag,"noknockback") ) { - if( state && maplist[m].flag.noknockback ) + if( state && map->list[m].flag.noknockback ) ;/* nothing to do */ else { if( state ) map_zone_mf_cache_add(m,"noknockback\toff"); - else if( maplist[m].flag.noknockback ) + else if( map->list[m].flag.noknockback ) map_zone_mf_cache_add(m,"noknockback"); } } else if ( !strcmpi(flag,"weapon_damage_rate") ) { if( !state ) { - if( maplist[m].weapon_damage_rate != 100 ) { - sprintf(rflag,"weapon_damage_rate\t%d",maplist[m].weapon_damage_rate); + if( map->list[m].weapon_damage_rate != 100 ) { + sprintf(rflag,"weapon_damage_rate\t%d",map->list[m].weapon_damage_rate); map_zone_mf_cache_add(m,rflag); } } if( sscanf(params, "%d", &state) == 1 ) { - if( state != maplist[m].weapon_damage_rate ) { + if( state != map->list[m].weapon_damage_rate ) { sprintf(rflag,"weapon_damage_rate\t%s",params); map_zone_mf_cache_add(m,rflag); } } } else if ( !strcmpi(flag,"magic_damage_rate") ) { if( !state ) { - if( maplist[m].magic_damage_rate != 100 ) { - sprintf(rflag,"magic_damage_rate\t%d",maplist[m].magic_damage_rate); + if( map->list[m].magic_damage_rate != 100 ) { + sprintf(rflag,"magic_damage_rate\t%d",map->list[m].magic_damage_rate); map_zone_mf_cache_add(m,rflag); } } if( sscanf(params, "%d", &state) == 1 ) { - if( state != maplist[m].magic_damage_rate ) { + if( state != map->list[m].magic_damage_rate ) { sprintf(rflag,"magic_damage_rate\t%s",params); map_zone_mf_cache_add(m,rflag); } } } else if ( !strcmpi(flag,"misc_damage_rate") ) { if( !state ) { - if( maplist[m].misc_damage_rate != 100 ) { - sprintf(rflag,"misc_damage_rate\t%d",maplist[m].misc_damage_rate); + if( map->list[m].misc_damage_rate != 100 ) { + sprintf(rflag,"misc_damage_rate\t%d",map->list[m].misc_damage_rate); map_zone_mf_cache_add(m,rflag); } } if( sscanf(params, "%d", &state) == 1 ) { - if( state != maplist[m].misc_damage_rate ) { + if( state != map->list[m].misc_damage_rate ) { sprintf(rflag,"misc_damage_rate\t%s",params); map_zone_mf_cache_add(m,rflag); } } } else if ( !strcmpi(flag,"short_damage_rate") ) { if( !state ) { - if( maplist[m].short_damage_rate != 100 ) { - sprintf(rflag,"short_damage_rate\t%d",maplist[m].short_damage_rate); + if( map->list[m].short_damage_rate != 100 ) { + sprintf(rflag,"short_damage_rate\t%d",map->list[m].short_damage_rate); map_zone_mf_cache_add(m,rflag); } } if( sscanf(params, "%d", &state) == 1 ) { - if( state != maplist[m].short_damage_rate ) { + if( state != map->list[m].short_damage_rate ) { sprintf(rflag,"short_damage_rate\t%s",params); map_zone_mf_cache_add(m,rflag); } } } else if ( !strcmpi(flag,"long_damage_rate") ) { if( !state ) { - if( maplist[m].long_damage_rate != 100 ) { - sprintf(rflag,"long_damage_rate\t%d",maplist[m].long_damage_rate); + if( map->list[m].long_damage_rate != 100 ) { + sprintf(rflag,"long_damage_rate\t%d",map->list[m].long_damage_rate); map_zone_mf_cache_add(m,rflag); } } if( sscanf(params, "%d", &state) == 1 ) { - if( state != maplist[m].long_damage_rate ) { + if( state != map->list[m].long_damage_rate ) { sprintf(rflag,"long_damage_rate\t%s",params); map_zone_mf_cache_add(m,rflag); } @@ -4499,7 +4381,7 @@ void map_zone_apply(int m, struct map_zone_data *zone, const char* start, const int i; char empty[1] = "\0"; char flag[MAP_ZONE_MAPFLAG_LENGTH], params[MAP_ZONE_MAPFLAG_LENGTH]; - maplist[m].zone = zone; + map->list[m].zone = zone; for(i = 0; i < zone->mapflags_count; i++) { int len = strlen(zone->mapflags[i]); int k; @@ -4513,10 +4395,10 @@ void map_zone_apply(int m, struct map_zone_data *zone, const char* start, const } } - if( map_zone_mf_cache(m,flag,params) ) + if( map->zone_mf_cache(m,flag,params) ) continue; - npc->parse_mapflag(maplist[m].name,empty,flag,params,start,buffer,filepath); + npc->parse_mapflag(map->list[m].name,empty,flag,params,start,buffer,filepath); } } /* used on npc load and reload to apply all "Normal" and "PK Mode" zones */ @@ -4526,7 +4408,7 @@ void map_zone_init(void) { char empty[1] = "\0"; int i,k,j; - zone = &map_zone_all; + zone = &map->zone_all; for(i = 0; i < zone->mapflags_count; i++) { int len = strlen(zone->mapflags[i]); @@ -4540,17 +4422,17 @@ void map_zone_init(void) { } } - for(j = 0; j < map->map_num; j++) { - if( maplist[j].zone == zone ) { - if( map_zone_mf_cache(j,flag,params) ) + for(j = 0; j < map->count; j++) { + if( map->list[j].zone == zone ) { + if( map->zone_mf_cache(j,flag,params) ) break; - npc->parse_mapflag(maplist[j].name,empty,flag,params,empty,empty,empty); + npc->parse_mapflag(map->list[j].name,empty,flag,params,empty,empty,empty); } } } if( battle_config.pk_mode ) { - zone = &map_zone_pk; + zone = &map->zone_pk; for(i = 0; i < zone->mapflags_count; i++) { int len = strlen(zone->mapflags[i]); params[0] = '\0'; @@ -4562,11 +4444,11 @@ void map_zone_init(void) { break; } } - for(j = 0; j < map->map_num; j++) { - if( maplist[j].zone == zone ) { - if( map_zone_mf_cache(j,flag,params) ) + for(j = 0; j < map->count; j++) { + if( map->list[j].zone == zone ) { + if( map->zone_mf_cache(j,flag,params) ) break; - npc->parse_mapflag(maplist[j].name,empty,flag,params,empty,empty,empty); + npc->parse_mapflag(map->list[j].name,empty,flag,params,empty,empty,empty); } } } @@ -4694,7 +4576,7 @@ void read_map_zone_db(void) { continue; } - if( strdb_exists(zone_db, zonename) ) { + if( strdb_exists(map->zone_db, zonename) ) { ShowError("map_zone_db: duplicate zone name '%s', skipping...\n",zonename); config_setting_remove_elem(zones,i);/* remove from the tree */ --zone_count; @@ -4704,10 +4586,10 @@ void read_map_zone_db(void) { /* is this the global template? */ if( strncmpi(zonename,MAP_ZONE_NORMAL_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) { - zone = &map_zone_all; + zone = &map->zone_all; is_all = true; } else if( strncmpi(zonename,MAP_ZONE_PK_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) { - zone = &map_zone_pk; + zone = &map->zone_pk; is_all = true; } else { CREATE( zone, struct map_zone_data, 1 ); @@ -4722,14 +4604,14 @@ void read_map_zone_db(void) { for(h = 0; h < config_setting_length(skills); h++) { config_setting_t *skillinfo = config_setting_get_elem(skills, h); name = config_setting_name(skillinfo); - if( !map_zone_str2skillid(name) ) { + if( !map->zone_str2skillid(name) ) { ShowError("map_zone_db: unknown skill (%s) in disabled_skills for zone '%s', skipping skill...\n",name,zone->name); config_setting_remove_elem(skills,h); --disabled_skills_count; --h; continue; } - if( !map_zone_bl_type(config_setting_get_string_elem(skills,h),&subtype) )/* we dont remove it from the three due to inheritance */ + if( !map->zone_bl_type(config_setting_get_string_elem(skills,h),&subtype) )/* we dont remove it from the three due to inheritance */ --disabled_skills_count; } /* all ok, process */ @@ -4740,10 +4622,10 @@ void read_map_zone_db(void) { enum bl_type type; name = config_setting_name(skillinfo); - if( (type = map_zone_bl_type(config_setting_get_string_elem(skills,h),&subtype)) ) { /* only add if enabled */ + if( (type = map->zone_bl_type(config_setting_get_string_elem(skills,h),&subtype)) ) { /* only add if enabled */ CREATE( entry, struct map_zone_disabled_skill_entry, 1 ); - entry->nameid = map_zone_str2skillid(name); + entry->nameid = map->zone_str2skillid(name); entry->type = type; entry->subtype = subtype; @@ -4760,7 +4642,7 @@ void read_map_zone_db(void) { for(h = 0; h < config_setting_length(items); h++) { config_setting_t *item = config_setting_get_elem(items, h); name = config_setting_name(item); - if( !map_zone_str2itemid(name) ) { + if( !map->zone_str2itemid(name) ) { ShowError("map_zone_db: unknown item (%s) in disabled_items for zone '%s', skipping item...\n",name,zone->name); config_setting_remove_elem(items,h); --disabled_items_count; @@ -4777,7 +4659,7 @@ void read_map_zone_db(void) { if( config_setting_get_bool(item) ) { /* only add if enabled */ name = config_setting_name(item); - zone->disabled_items[v++] = map_zone_str2itemid(name); + zone->disabled_items[v++] = map->zone_str2itemid(name); } } @@ -4841,14 +4723,14 @@ void read_map_zone_db(void) { for(h = 0; h < config_setting_length(caps); h++) { config_setting_t *cap = config_setting_get_elem(caps, h); name = config_setting_name(cap); - if( !map_zone_str2skillid(name) ) { + if( !map->zone_str2skillid(name) ) { ShowError("map_zone_db: unknown skill (%s) in skill_damage_cap for zone '%s', skipping skill...\n",name,zone->name); config_setting_remove_elem(caps,h); --capped_skills_count; --h; continue; } - if( !map_zone_bl_type(config_setting_get_string_elem(cap,1),&subtype) )/* we dont remove it from the three due to inheritance */ + if( !map->zone_bl_type(config_setting_get_string_elem(cap,1),&subtype) )/* we dont remove it from the three due to inheritance */ --capped_skills_count; } /* all ok, process */ @@ -4859,10 +4741,10 @@ void read_map_zone_db(void) { enum bl_type type; name = config_setting_name(cap); - if( (type = map_zone_bl_type(config_setting_get_string_elem(cap,1),&subtype)) ) { /* only add if enabled */ + if( (type = map->zone_bl_type(config_setting_get_string_elem(cap,1),&subtype)) ) { /* only add if enabled */ CREATE( entry, struct map_zone_skill_damage_cap_entry, 1 ); - entry->nameid = map_zone_str2skillid(name); + entry->nameid = map->zone_str2skillid(name); entry->cap = config_setting_get_int_elem(cap,0); entry->type = type; entry->subtype = subtype; @@ -4873,7 +4755,7 @@ void read_map_zone_db(void) { } if( !is_all ) /* global template doesn't go into db -- since it isn't a alloc'd piece of data */ - strdb_put(zone_db, zonename, zone); + strdb_put(map->zone_db, zonename, zone); } @@ -4913,17 +4795,17 @@ void read_map_zone_db(void) { name = config_setting_get_string_elem(inherit_tree, h); config_setting_lookup_string(zone_e, "name", &zonename);/* will succeed for we validated it earlier */ - if( !(izone = strdb_get(zone_db, name)) ) { + if( !(izone = strdb_get(map->zone_db, name)) ) { ShowError("map_zone_db: Unknown zone '%s' being inherit by zone '%s', skipping...\n",name,zonename); continue; } if( strncmpi(zonename,MAP_ZONE_NORMAL_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) { - zone = &map_zone_all; + zone = &map->zone_all; } else if( strncmpi(zonename,MAP_ZONE_PK_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) { - zone = &map_zone_pk; + zone = &map->zone_pk; } else - zone = strdb_get(zone_db, zonename);/* will succeed for we just put it in here */ + zone = strdb_get(map->zone_db, zonename);/* will succeed for we just put it in here */ disabled_skills_count_i = izone->disabled_skills_count; disabled_items_count_i = izone->disabled_items_count; @@ -4940,7 +4822,7 @@ void read_map_zone_db(void) { int k; for(k = 0; k < disabled_skills_count; k++) { config_setting_t *skillinfo = config_setting_get_elem(skills, k); - if( map_zone_str2skillid(config_setting_name(skillinfo)) == izone->disabled_skills[j]->nameid ) { + if( map->zone_str2skillid(config_setting_name(skillinfo)) == izone->disabled_skills[j]->nameid ) { break; } } @@ -4966,7 +4848,7 @@ void read_map_zone_db(void) { name = config_setting_name(item); - if( map_zone_str2itemid(name) == izone->disabled_items[j] ) { + if( map->zone_str2itemid(name) == izone->disabled_items[j] ) { if( config_setting_get_bool(item) ) continue; break; @@ -5033,7 +4915,7 @@ void read_map_zone_db(void) { int k; for(k = 0; k < capped_skills_count; k++) { config_setting_t *cap = config_setting_get_elem(caps, k); - if( map_zone_str2skillid(config_setting_name(cap)) == izone->capped_skills[j]->nameid ) { + if( map->zone_str2skillid(config_setting_name(cap)) == izone->capped_skills[j]->nameid ) { break; } } @@ -5059,8 +4941,8 @@ void read_map_zone_db(void) { } /** -* @see DBApply -*/ + * @see DBApply + */ int map_db_final(DBKey key, DBData *data, va_list ap) { struct map_data_other_server *mdos = DB->data2ptr(data); @@ -5071,8 +4953,8 @@ int map_db_final(DBKey key, DBData *data, va_list ap) { } /** -* @see DBApply -*/ + * @see DBApply + */ int nick_db_final(DBKey key, DBData *data, va_list args) { struct charid2nick* p = DB->data2ptr(data); @@ -5094,39 +4976,39 @@ int cleanup_sub(struct block_list *bl, va_list ap) { nullpo_ret(bl); switch(bl->type) { - case BL_PC: - map->quit((struct map_session_data *) bl); - break; - case BL_NPC: - npc->unload((struct npc_data *)bl,false); - break; - case BL_MOB: - unit->free(bl,CLR_OUTSIGHT); - break; - case BL_PET: - //There is no need for this, the pet is removed together with the player. [Skotlex] - break; - case BL_ITEM: - map->clearflooritem(bl); - break; - case BL_SKILL: - skill->delunit((struct skill_unit *) bl); - break; + case BL_PC: + map->quit((struct map_session_data *) bl); + break; + case BL_NPC: + npc->unload((struct npc_data *)bl,false); + break; + case BL_MOB: + unit->free(bl,CLR_OUTSIGHT); + break; + case BL_PET: + //There is no need for this, the pet is removed together with the player. [Skotlex] + break; + case BL_ITEM: + map->clearflooritem(bl); + break; + case BL_SKILL: + skill->delunit((struct skill_unit *) bl); + break; } return 1; } /** -* @see DBApply -*/ -static int cleanup_db_sub(DBKey key, DBData *data, va_list va) { + * @see DBApply + */ +int cleanup_db_sub(DBKey key, DBData *data, va_list va) { return map->cleanup_sub(DB->data2ptr(data), va); } /*========================================== -* map destructor -*------------------------------------------*/ + * map destructor + *------------------------------------------*/ void do_final(void) { int i; @@ -5136,7 +5018,7 @@ void do_final(void) ShowStatus("Terminating...\n"); hChSys.closing = true; HPM->event(HPET_FINAL); - if (cpsd) aFree(cpsd); + if (map->cpsd) aFree(map->cpsd); //Ladies and babies first. iter = mapit_getallusers(); @@ -5148,14 +5030,14 @@ void do_final(void) npc->do_clear_npc(); // remove all objects on maps - for (i = 0; i < map->map_num; i++) { - ShowStatus("Cleaning up maps [%d/%d]: %s..."CL_CLL"\r", i+1, map->map_num, maplist[i].name); - if (maplist[i].m >= 0) + for (i = 0; i < map->count; i++) { + ShowStatus("Cleaning up maps [%d/%d]: %s..."CL_CLL"\r", i+1, map->count, map->list[i].name); + if (map->list[i].m >= 0) map->foreachinmap(map->cleanup_sub, i, BL_ALL); } - ShowStatus("Cleaned up %d maps."CL_CLL"\n", map->map_num); + ShowStatus("Cleaned up %d maps."CL_CLL"\n", map->count); - id_db->foreach(id_db,cleanup_db_sub); + map->id_db->foreach(map->id_db,map->cleanup_db_sub); chrif->char_reset_offline(); chrif->flush_fifo(); @@ -5182,37 +5064,36 @@ void do_final(void) bg->final(); duel->final(); elemental->final(); - do_final_maps(); + map->list_final(); vending->final(); - map_db->destroy(map_db, map_db_final); + map->map_db->destroy(map->map_db, map->db_final); mapindex_final(); - if(enable_grf) + if(map->enable_grf) grfio_final(); - id_db->destroy(id_db, NULL); - pc_db->destroy(pc_db, NULL); - mobid_db->destroy(mobid_db, NULL); - bossid_db->destroy(bossid_db, NULL); - nick_db->destroy(nick_db, nick_db_final); - charid_db->destroy(charid_db, NULL); - iwall_db->destroy(iwall_db, NULL); - regen_db->destroy(regen_db, NULL); + db_destroy(map->id_db); + db_destroy(map->pc_db); + db_destroy(map->mobid_db); + db_destroy(map->bossid_db); + map->nick_db->destroy(map->nick_db, map->nick_db_final); + db_destroy(map->charid_db); + db_destroy(map->iwall_db); + db_destroy(map->regen_db); - map_sql_close(); - ers_destroy(map_iterator_ers); + map->sql_close(); + ers_destroy(map->iterator_ers); - aFree(maplist); + aFree(map->list); - if( !enable_grf ) - aFree(map_cache_buffer); + if( !map->enable_grf ) + aFree(map->cache_buffer); ShowStatus("Finished.\n"); } -static int map_abort_sub(struct map_session_data* sd, va_list ap) -{ +int map_abort_sub(struct map_session_data* sd, va_list ap) { chrif->save(sd,1); return 1; } @@ -5233,19 +5114,19 @@ void do_abort(void) run = 1; if (!chrif->isconnected()) { - if (pc_db->size(pc_db)) - ShowFatalError("Server has crashed without a connection to the char-server, %u characters can't be saved!\n", pc_db->size(pc_db)); + if (db_size(map->pc_db)) + ShowFatalError("Server has crashed without a connection to the char-server, %u characters can't be saved!\n", db_size(map->pc_db)); return; } ShowError("Server received crash signal! Attempting to save all online characters!\n"); - map->map_foreachpc(map_abort_sub); + map->foreachpc(map->abort_sub); chrif->flush_fifo(); } /*====================================================== * Map-Server Version Screen [MC Cameri] *------------------------------------------------------*/ -static void map_helpscreen(bool do_exit) +void map_helpscreen(bool do_exit) { ShowInfo("Usage: %s [options]\n", SERVER_NAME); ShowInfo("\n"); @@ -5266,9 +5147,9 @@ static void map_helpscreen(bool do_exit) } /*====================================================== -* Map-Server Version Screen [MC Cameri] -*------------------------------------------------------*/ -static void map_versionscreen(bool do_exit) { + * Map-Server Version Screen [MC Cameri] + *------------------------------------------------------*/ +void map_versionscreen(bool do_exit) { const char *svn = get_svn_revision(); const char *git = get_git_hash(); ShowInfo(CL_WHITE"Hercules version: %s" CL_RESET"\n", git[0] != HERC_UNKNOWN_VER ? git : svn[0] != HERC_UNKNOWN_VER ? svn : "Unknown"); @@ -5303,7 +5184,7 @@ void do_shutdown(void) } } -static bool map_arg_next_value(const char* option, int i, int argc) +bool map_arg_next_value(const char* option, int i, int argc) { if( i >= argc-1 ) { ShowWarning("Missing value for option '%s'.\n", option); @@ -5327,15 +5208,15 @@ CPCMD(gm_position) { return; } - if( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) { + if( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) { ShowError("gm:info '"CL_WHITE"%d %d"CL_RESET"' is out of '"CL_WHITE"%s"CL_RESET"' map bounds!\n",x,y,map_name); return; } ShowInfo("HCP: updated console's game position to '"CL_WHITE"%d %d %s"CL_RESET"'\n",x,y,map_name); - cpsd->bl.x = x; - cpsd->bl.y = y; - cpsd->bl.m = m; + map->cpsd->bl.x = x; + map->cpsd->bl.y = y; + map->cpsd->bl.m = m; } CPCMD(gm_use) { @@ -5343,23 +5224,23 @@ CPCMD(gm_use) { ShowError("gm:use invalid syntax. use '"CL_WHITE"gm:use @command "CL_RESET"'\n"); return; } - cpsd->fd = -2; - if( !atcommand->parse(cpsd->fd, cpsd, line, 0) ) + map->cpsd->fd = -2; + if( !atcommand->parse(map->cpsd->fd, map->cpsd, line, 0) ) ShowInfo("HCP: '"CL_WHITE"%s"CL_RESET"' failed\n",line); else ShowInfo("HCP: '"CL_WHITE"%s"CL_RESET"' was used\n",line); - cpsd->fd = 0; + map->cpsd->fd = 0; } /* Hercules Console Parser */ void map_cp_defaults(void) { #ifdef CONSOLE_INPUT /* default HCP data */ - cpsd = pc->get_dummy_sd(); - strcpy(cpsd->status.name, "Hercules Console"); - cpsd->bl.x = MAP_DEFAULT_X; - cpsd->bl.y = MAP_DEFAULT_Y; - cpsd->bl.m = map->mapname2mapid(MAP_DEFAULT); + map->cpsd = pc->get_dummy_sd(); + strcpy(map->cpsd->status.name, "Hercules Console"); + map->cpsd->bl.x = MAP_DEFAULT_X; + map->cpsd->bl.y = MAP_DEFAULT_Y; + map->cpsd->bl.m = map->mapname2mapid(MAP_DEFAULT); console->addCommand("gm:info",CPCMD_A(gm_position)); console->addCommand("gm:use",CPCMD_A(gm_use)); @@ -5409,7 +5290,7 @@ void map_hp_symbols(void) { /* partial */ HPM->share(mapit,"mapit"); /* sql link */ - HPM->share(mmysql_handle,"sql_handle"); + HPM->share(map->mysql_handle,"sql_handle"); /* specific */ HPM->share(atcommand->create,"addCommand"); HPM->share(script->addScript,"addScript"); @@ -5417,7 +5298,7 @@ void map_hp_symbols(void) { HPM->share(HPM_map_getFromMSD,"getFromMSD"); HPM->share(HPM_map_removeFromMSD,"removeFromMSD"); /* vars */ - HPM->share(maplist,"maplist"); + HPM->share(map->list,"map->list"); } void map_load_defaults(void) { @@ -5470,44 +5351,6 @@ int do_init(int argc, char *argv[]) map_defaults(); - map->map_num = 0; - - sprintf(map->db_path ,"db"); - sprintf(map->help_txt ,"conf/help.txt"); - sprintf(map->help2_txt ,"conf/help2.txt"); - sprintf(map->charhelp_txt ,"conf/charhelp.txt"); - - sprintf(map->wisp_server_name ,"Server"); // can be modified in char-server configuration file - - map->autosave_interval = DEFAULT_AUTOSAVE_INTERVAL; - map->minsave_interval = 100; - map->save_settings = 0xFFFF; - map->agit_flag = 0; - map->agit2_flag = 0; - map->night_flag = 0; // 0=day, 1=night [Yor] - map->enable_spy = 0; //To enable/disable @spy commands, which consume too much cpu time when sending packets. [Skotlex] - - map->db_use_sql_item_db = 0; - map->db_use_sql_mob_db = 0; - map->db_use_sql_mob_skill_db = 0; - - sprintf(map->item_db_db, "item_db"); - sprintf(map->item_db2_db, "item_db2"); - sprintf(map->item_db_re_db, "item_db_re"); - sprintf(map->mob_db_db, "mob_db"); - sprintf(map->mob_db2_db, "mob_db2"); - sprintf(map->mob_skill_db_db, "mob_skill_db"); - sprintf(map->mob_skill_db2_db, "mob_skill_db2"); - sprintf(map->interreg_db, "interreg"); - - map->INTER_CONF_NAME="conf/inter-server.conf"; - map->LOG_CONF_NAME="conf/logs.conf"; - map->MAP_CONF_NAME = "conf/map-server.conf"; - map->BATTLE_CONF_FILENAME = "conf/battle.conf"; - map->ATCOMMAND_CONF_FILENAME = "conf/atcommand.conf"; - map->SCRIPT_CONF_NAME = "conf/script.conf"; - map->MSG_CONF_NAME = "conf/messages.conf"; - map->GRF_PATH_FILENAME = "conf/grf-files.txt"; rnd_init(); for( i = 1; i < argc ; i++ ) { @@ -5520,32 +5363,32 @@ int do_init(int argc, char *argv[]) arg++; if( strcmp(arg, "help") == 0 ) { - map_helpscreen(true); + map->helpscreen(true); } else if( strcmp(arg, "version") == 0 ) { - map_versionscreen(true); + map->versionscreen(true); } else if( strcmp(arg, "map-config") == 0 ) { - if( map_arg_next_value(arg, i, argc) ) + if( map->arg_next_value(arg, i, argc) ) map->MAP_CONF_NAME = argv[++i]; } else if( strcmp(arg, "battle-config") == 0 ) { - if( map_arg_next_value(arg, i, argc) ) + if( map->arg_next_value(arg, i, argc) ) map->BATTLE_CONF_FILENAME = argv[++i]; } else if( strcmp(arg, "atcommand-config") == 0 ) { - if( map_arg_next_value(arg, i, argc) ) + if( map->arg_next_value(arg, i, argc) ) map->ATCOMMAND_CONF_FILENAME = argv[++i]; } else if( strcmp(arg, "script-config") == 0 ) { - if( map_arg_next_value(arg, i, argc) ) + if( map->arg_next_value(arg, i, argc) ) map->SCRIPT_CONF_NAME = argv[++i]; } else if( strcmp(arg, "msg-config") == 0 ) { - if( map_arg_next_value(arg, i, argc) ) + if( map->arg_next_value(arg, i, argc) ) map->MSG_CONF_NAME = argv[++i]; } else if( strcmp(arg, "grf-path-file") == 0 ) { - if( map_arg_next_value(arg, i, argc) ) + if( map->arg_next_value(arg, i, argc) ) map->GRF_PATH_FILENAME = argv[++i]; } else if( strcmp(arg, "inter-config") == 0 ) { - if( map_arg_next_value(arg, i, argc) ) + if( map->arg_next_value(arg, i, argc) ) map->INTER_CONF_NAME = argv[++i]; } else if( strcmp(arg, "log-config") == 0 ) { - if( map_arg_next_value(arg, i, argc) ) + if( map->arg_next_value(arg, i, argc) ) map->LOG_CONF_NAME = argv[++i]; } else if( strcmp(arg, "run-once") == 0 ) { // close the map-server as soon as its done.. for testing [Celest] runflag = CORE_ST_STOP; @@ -5553,32 +5396,33 @@ int do_init(int argc, char *argv[]) ShowError("Unknown option '%s'.\n", argv[i]); exit(EXIT_FAILURE); } - } else switch( arg[0] ) {// short option - case '?': - case 'h': - map_helpscreen(true); - break; - case 'v': - map_versionscreen(true); - break; - default: - ShowError("Unknown option '%s'.\n", argv[i]); - exit(EXIT_FAILURE); + } else { + switch( arg[0] ) {// short option + case '?': + case 'h': + map->helpscreen(true); + break; + case 'v': + map->versionscreen(true); + break; + default: + ShowError("Unknown option '%s'.\n", argv[i]); + exit(EXIT_FAILURE); + } } } - memset(&index2mapid, -1, sizeof(index2mapid)); map_load_defaults(); - map_config_read(map->MAP_CONF_NAME); - CREATE(maplist,struct map_data,map->map_num); - map->map_num = 0; - map_config_read_sub(map->MAP_CONF_NAME); + map->config_read(map->MAP_CONF_NAME); + CREATE(map->list,struct map_data,map->count); + map->count = 0; + map->config_read_sub(map->MAP_CONF_NAME); // loads npcs map->reloadnpc(false); chrif->checkdefaultlogin(); - if (!map_ip_set || !char_ip_set) { + if (!map->ip_set || !map->char_ip_set) { char ip_str[16]; ip2str(addr_[0], ip_str); @@ -5591,46 +5435,45 @@ int do_init(int argc, char *argv[]) ShowInfo("Defaulting to %s as our IP address\n", ip_str); - if (!map_ip_set) + if (!map->ip_set) clif->setip(ip_str); - if (!char_ip_set) + if (!map->char_ip_set) chrif->setip(ip_str); } battle->config_read(map->BATTLE_CONF_FILENAME); atcommand->msg_read(map->MSG_CONF_NAME); script->config_read(map->SCRIPT_CONF_NAME); - inter_config_read(map->INTER_CONF_NAME); + map->inter_config_read(map->INTER_CONF_NAME); logs->config_read(map->LOG_CONF_NAME); - id_db = idb_alloc(DB_OPT_BASE); - pc_db = idb_alloc(DB_OPT_BASE); //Added for reliable map->id2sd() use. [Skotlex] - mobid_db = idb_alloc(DB_OPT_BASE); //Added to lower the load of the lazy mob ai. [Skotlex] - bossid_db = idb_alloc(DB_OPT_BASE); // Used for Convex Mirror quick MVP search - map_db = uidb_alloc(DB_OPT_BASE); - nick_db = idb_alloc(DB_OPT_BASE); - charid_db = idb_alloc(DB_OPT_BASE); - regen_db = idb_alloc(DB_OPT_BASE); // efficient status_natural_heal processing + map->id_db = idb_alloc(DB_OPT_BASE); + map->pc_db = idb_alloc(DB_OPT_BASE); //Added for reliable map->id2sd() use. [Skotlex] + map->mobid_db = idb_alloc(DB_OPT_BASE); //Added to lower the load of the lazy mob ai. [Skotlex] + map->bossid_db = idb_alloc(DB_OPT_BASE); // Used for Convex Mirror quick MVP search + map->map_db = uidb_alloc(DB_OPT_BASE); + map->nick_db = idb_alloc(DB_OPT_BASE); + map->charid_db = idb_alloc(DB_OPT_BASE); + map->regen_db = idb_alloc(DB_OPT_BASE); // efficient status_natural_heal processing + map->iwall_db = strdb_alloc(DB_OPT_RELEASE_DATA,2*NAME_LENGTH+2+1); // [Zephyrus] Invisible Walls + map->zone_db = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA, MAP_ZONE_NAME_LENGTH); - iwall_db = strdb_alloc(DB_OPT_RELEASE_DATA,2*NAME_LENGTH+2+1); // [Zephyrus] Invisible Walls - zone_db = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA, MAP_ZONE_NAME_LENGTH); + map->iterator_ers = ers_new(sizeof(struct s_mapiterator),"map.c::map_iterator_ers",ERS_OPT_NONE); - map_iterator_ers = ers_new(sizeof(struct s_mapiterator),"map.c::map_iterator_ers",ERS_OPT_NONE); - - map_sql_init(); + map->sql_init(); if (logs->config.sql_logs) - log_sql_init(); + logs->sql_init(); mapindex_init(); - if(enable_grf) + if(map->enable_grf) grfio_init(map->GRF_PATH_FILENAME); - map_readallmaps(); + map->readallmaps(); - timer->add_func_list(map_freeblock_timer, "map_freeblock_timer"); - timer->add_func_list(map_clearflooritem_timer, "map_clearflooritem_timer"); - timer->add_func_list(map_removemobs_timer, "map_removemobs_timer"); - timer->add_interval(timer->gettick()+1000, map_freeblock_timer, 0, 0, 60*1000); + timer->add_func_list(map->freeblock_timer, "map_freeblock_timer"); + timer->add_func_list(map->clearflooritem_timer, "map_clearflooritem_timer"); + timer->add_func_list(map->removemobs_timer, "map_removemobs_timer"); + timer->add_interval(timer->gettick()+1000, map->freeblock_timer, 0, 0, 60*1000); HPM->load_sub = HPM_map_plugin_load_sub; HPM->symbol_defaults_sub = map_hp_symbols; @@ -5646,7 +5489,7 @@ int do_init(int argc, char *argv[]) script->init(); itemdb->init(); skill->init(); - read_map_zone_db();/* read after item and skill initalization */ + map->read_zone_db();/* read after item and skill initalization */ mob->init(); pc->init(); status->init(); @@ -5669,13 +5512,13 @@ int do_init(int argc, char *argv[]) if (battle_config.pk_mode) ShowNotice("Server is running on '"CL_WHITE"PK Mode"CL_RESET"'.\n"); - Sql_HerculesUpdateCheck(mmysql_handle); + Sql_HerculesUpdateCheck(map->mysql_handle); #ifdef CONSOLE_INPUT - console->setSQL(mmysql_handle); + console->setSQL(map->mysql_handle); #endif - ShowStatus("Server is '"CL_GREEN"ready"CL_RESET"' and listening on port '"CL_WHITE"%d"CL_RESET"'.\n\n", map_port); + ShowStatus("Server is '"CL_GREEN"ready"CL_RESET"' and listening on port '"CL_WHITE"%d"CL_RESET"'.\n\n", map->port); if( runflag != CORE_ST_STOP ) { shutdown_callback = map->do_shutdown; @@ -5697,6 +5540,89 @@ int do_init(int argc, char *argv[]) void map_defaults(void) { map = &map_s; + /* */ + map->count = 0; + + sprintf(map->db_path ,"db"); + sprintf(map->help_txt ,"conf/help.txt"); + sprintf(map->help2_txt ,"conf/help2.txt"); + sprintf(map->charhelp_txt ,"conf/charhelp.txt"); + + sprintf(map->wisp_server_name ,"Server"); // can be modified in char-server configuration file + + map->autosave_interval = DEFAULT_AUTOSAVE_INTERVAL; + map->minsave_interval = 100; + map->save_settings = 0xFFFF; + map->agit_flag = 0; + map->agit2_flag = 0; + map->night_flag = 0; // 0=day, 1=night [Yor] + map->enable_spy = 0; //To enable/disable @spy commands, which consume too much cpu time when sending packets. [Skotlex] + + map->db_use_sql_item_db = 0; + map->db_use_sql_mob_db = 0; + map->db_use_sql_mob_skill_db = 0; + + sprintf(map->item_db_db, "item_db"); + sprintf(map->item_db2_db, "item_db2"); + sprintf(map->item_db_re_db, "item_db_re"); + sprintf(map->mob_db_db, "mob_db"); + sprintf(map->mob_db2_db, "mob_db2"); + sprintf(map->mob_skill_db_db, "mob_skill_db"); + sprintf(map->mob_skill_db2_db, "mob_skill_db2"); + sprintf(map->interreg_db, "interreg"); + + map->INTER_CONF_NAME="conf/inter-server.conf"; + map->LOG_CONF_NAME="conf/logs.conf"; + map->MAP_CONF_NAME = "conf/map-server.conf"; + map->BATTLE_CONF_FILENAME = "conf/battle.conf"; + map->ATCOMMAND_CONF_FILENAME = "conf/atcommand.conf"; + map->SCRIPT_CONF_NAME = "conf/script.conf"; + map->MSG_CONF_NAME = "conf/messages.conf"; + map->GRF_PATH_FILENAME = "conf/grf-files.txt"; + + map->default_codepage[0] = '\0'; + map->server_port = 3306; + sprintf(map->server_ip,"127.0.0.1"); + sprintf(map->server_id,"ragnarok"); + sprintf(map->server_pw,"ragnarok"); + sprintf(map->server_db,"ragnarok"); + map->mysql_handle = NULL; + + map->port = 0; + map->users = 0; + map->ip_set = 0; + map->char_ip_set = 0; + map->enable_grf = 0; + + memset(&map->index2mapid, -1, sizeof(map->index2mapid)); + + map->id_db = NULL; + map->pc_db = NULL; + map->mobid_db = NULL; + map->bossid_db = NULL; + map->map_db = NULL; + map->nick_db = NULL; + map->charid_db = NULL; + map->regen_db = NULL; + map->zone_db = NULL; + map->iwall_db = NULL; + + //all in a big chunk, respects order + memset(map->block_free,0,sizeof(map->block_free) + + sizeof(map->block_free_count) + + sizeof(map->block_free_lock) + + sizeof(map->bl_list) + + sizeof(map->bl_list_count) + + sizeof(map->bl_head) + + sizeof(map->zone_all) + + sizeof(map->zone_pk) + ); + + map->cpsd = NULL; + map->list = NULL; + + map->iterator_ers = NULL; + map->cache_buffer = NULL; /* funcs */ map->zone_init = map_zone_init; map->zone_remove = map_zone_remove; @@ -5742,16 +5668,16 @@ void map_defaults(void) { map->charid2nick = map_charid2nick; map->charid2sd = map_charid2sd; - map->vmap_foreachpc = map_vmap_foreachpc; - map->map_foreachpc = map_map_foreachpc; - map->vmap_foreachmob = map_vmap_foreachmob; - map->map_foreachmob = map_map_foreachmob; - map->vmap_foreachnpc = map_vmap_foreachnpc; - map->map_foreachnpc = map_map_foreachnpc; - map->vmap_foreachregen = map_vmap_foreachregen; - map->map_foreachregen = map_map_foreachregen; - map->vmap_foreachiddb = map_vmap_foreachiddb; - map->map_foreachiddb = map_map_foreachiddb; + map->vforeachpc = map_vforeachpc; + map->foreachpc = map_foreachpc; + map->vforeachmob = map_vforeachmob; + map->foreachmob = map_foreachmob; + map->vforeachnpc = map_vforeachnpc; + map->foreachnpc = map_foreachnpc; + map->vforeachregen = map_vforeachregen; + map->foreachregen = map_foreachregen; + map->vforeachiddb = map_vforeachiddb; + map->foreachiddb = map_foreachiddb; map->vforeachinrange = map_vforeachinrange; map->foreachinrange = map_foreachinrange; @@ -5819,7 +5745,57 @@ void map_defaults(void) { map->do_shutdown = do_shutdown; - /* FIXME: temporary until the map.c "Hercules Renewal Phase One" design is complete. [Ind] */ + map->freeblock_timer = map_freeblock_timer; + map->searchrandfreecell = map_searchrandfreecell; + map->count_sub = map_count_sub; + map->create_charid2nick = create_charid2nick; + map->removemobs_sub = map_removemobs_sub; + map->gat2cell = map_gat2cell; + map->cell2gat = map_cell2gat; + map->getcellp = map_getcellp; + map->setcell = map_setcell; + map->sub_getcellp = map_sub_getcellp; + map->sub_setcell = map_sub_setcell; + map->iwall_nextxy = map_iwall_nextxy; + map->create_map_data_other_server = create_map_data_other_server; + map->eraseallipport_sub = map_eraseallipport_sub; + map->init_mapcache = map_init_mapcache; + map->readfromcache = map_readfromcache; + map->addmap = map_addmap; + map->delmapid = map_delmapid; + map->zone_db_clear = map_zone_db_clear; + map->list_final = do_final_maps; + map->waterheight = map_waterheight; + map->readgat = map_readgat; + map->readallmaps = map_readallmaps; + map->config_read = map_config_read; + map->config_read_sub = map_config_read_sub; + map->reloadnpc_sub = map_reloadnpc_sub; + map->inter_config_read = inter_config_read; + map->sql_init = map_sql_init; + map->sql_close = map_sql_close; + map->zone_mf_cache = map_zone_mf_cache; + map->zone_str2itemid = map_zone_str2itemid; + map->zone_str2skillid = map_zone_str2skillid; + map->zone_bl_type = map_zone_bl_type; + map->read_zone_db = read_map_zone_db; + map->db_final = map_db_final; + map->nick_db_final = nick_db_final; + map->cleanup_db_sub = cleanup_db_sub; + map->abort_sub = map_abort_sub; + map->helpscreen = map_helpscreen; + map->versionscreen = map_versionscreen; + map->arg_next_value = map_arg_next_value; + +#ifdef CELL_NOSTACK + map->addblcell = map_addblcell; + map->delblcell = map_delblcell; +#endif + + /** + * mapit interface + **/ + mapit = &mapit_s; mapit->alloc = mapit_alloc; diff --git a/src/map/map.h b/src/map/map.h index 69152ec57..67fdfcf96 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -11,6 +11,7 @@ #include "../common/mapindex.h" #include "../common/db.h" #include "../config/core.h" +#include "../common/sql.h" #include "atcommand.h" #include @@ -40,6 +41,11 @@ enum E_MAPSERVER_ST { #define MAX_VENDING 12 #define MAX_MAP_SIZE 512*512 // Wasn't there something like this already? Can't find it.. [Shinryo] +#define BLOCK_SIZE 8 +#define block_free_max 1048576 +#define BL_LIST_MAX 1048576 + + // Added definitions for WoESE objects. [L0ne_W0lf] enum MOBID { MOBID_EMPERIUM = 1288, @@ -67,10 +73,12 @@ enum MOBID { #define JOBL_UPPER 0x1000 //4096 #define JOBL_BABY 0x2000 //8192 #define JOBL_THIRD 0x4000 //16384 + // For filtering and quick checking. #define MAPID_BASEMASK 0x00ff #define MAPID_UPPERMASK 0x0fff #define MAPID_THIRDMASK (JOBL_THIRD|MAPID_UPPERMASK) + //First Jobs //Note the oddity of the novice: //Super Novices are considered the 2-1 version of the novice! Novices are considered a first class type. @@ -215,13 +223,13 @@ enum { #define EVENT_NAME_LENGTH ( NAME_LENGTH * 2 + 3 ) #define DEFAULT_AUTOSAVE_INTERVAL 5*60*1000 // Specifies maps where players may hit each other -#define map_flag_vs(m) (maplist[m].flag.pvp || maplist[m].flag.gvg_dungeon || maplist[m].flag.gvg || ((map->agit_flag || map->agit2_flag) && maplist[m].flag.gvg_castle) || maplist[m].flag.battleground) +#define map_flag_vs(m) (map->list[m].flag.pvp || map->list[m].flag.gvg_dungeon || map->list[m].flag.gvg || ((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle) || map->list[m].flag.battleground) // Specifies maps that have special GvG/WoE restrictions -#define map_flag_gvg(m) (maplist[m].flag.gvg || ((map->agit_flag || map->agit2_flag) && maplist[m].flag.gvg_castle)) +#define map_flag_gvg(m) (map->list[m].flag.gvg || ((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle)) // Specifies if the map is tagged as GvG/WoE (regardless of map->agit_flag status) -#define map_flag_gvg2(m) (maplist[m].flag.gvg || maplist[m].flag.gvg_castle) +#define map_flag_gvg2(m) (map->list[m].flag.gvg || map->list[m].flag.gvg_castle) // No Kill Steal Protection -#define map_flag_ks(m) (maplist[m].flag.town || maplist[m].flag.pvp || maplist[m].flag.gvg || maplist[m].flag.battleground) +#define map_flag_ks(m) (map->list[m].flag.town || map->list[m].flag.pvp || map->list[m].flag.gvg || map->list[m].flag.battleground) //This stackable implementation does not means a BL can be more than one type at a time, but it's // meant to make it easier to check for multiple types at a time on invocations such as map_foreach* calls [Skotlex] @@ -460,19 +468,19 @@ typedef enum { struct mapcell { // terrain flags unsigned char -walkable : 1, -shootable : 1, -water : 1; + walkable : 1, + shootable : 1, + water : 1; // dynamic flags unsigned char -npc : 1, -basilica : 1, -landprotector : 1, -novending : 1, -nochat : 1, -maelstrom : 1, -icewall : 1; + npc : 1, + basilica : 1, + landprotector : 1, + novending : 1, + nochat : 1, + maelstrom : 1, + icewall : 1; #ifdef CELL_NOSTACK unsigned char cell_bl; //Holds amount of bls in this cell. @@ -525,9 +533,6 @@ struct map_zone_skill_damage_cap_entry { #define MAP_ZONE_PK_NAME "PK Mode" #define MAP_ZONE_MAPFLAG_LENGTH 50 -//TODO place it in the map interface -DBMap *zone_db;/* string => struct map_zone_data */ - struct map_zone_data { char name[MAP_ZONE_NAME_LENGTH];/* 20'd */ struct map_zone_disabled_skill_entry **disabled_skills; @@ -542,9 +547,6 @@ struct map_zone_data { int capped_skills_count; }; -struct map_zone_data map_zone_all;/* used as a base on all maps */ -struct map_zone_data map_zone_pk;/* used for (pk_mode) */ - struct map_drop_list { int drop_id; int drop_type; @@ -696,10 +698,7 @@ struct map_data_other_server { uint16 port; }; - -struct map_data *maplist; - -#define map_id2index(id) maplist[(id)].index +#define map_id2index(id) map->list[(id)].index /// Bitfield of flags for the iterator. enum e_mapitflags { @@ -718,7 +717,7 @@ struct mapit_interface { struct block_list* (*next) (struct s_mapiterator* iter); struct block_list* (*prev) (struct s_mapiterator* iter); bool (*exists) (struct s_mapiterator* iter); -} mapit_s; +}; struct mapit_interface *mapit; @@ -743,11 +742,29 @@ typedef struct elemental_data TBL_ELEM; #define BL_CAST(type_, bl) \ ( ((bl) == (struct block_list*)NULL || (bl)->type != (type_)) ? (T ## type_ *)NULL : (T ## type_ *)(bl) ) -#include "../common/sql.h" +struct charid_request { + struct charid_request* next; + int charid;// who want to be notified of the nick +}; +struct charid2nick { + char nick[NAME_LENGTH]; + struct charid_request* requests;// requests of notification on this nick +}; +// This is the main header found at the very beginning of the map cache +struct map_cache_main_header { + uint32 file_size; + uint16 map_count; +}; + +// This is the header appended before every compressed map cells info in the map cache +struct map_cache_map_info { + char name[MAP_NAME_LENGTH]; + int16 xs; + int16 ys; + int32 len; +}; -extern Sql* mmysql_handle; -extern Sql* logmysql_handle; /*===================================== * Interface : map.h @@ -757,7 +774,7 @@ extern Sql* logmysql_handle; struct map_interface { /* vars */ - int map_num; + int count; int autosave_interval; int minsave_interval; @@ -796,6 +813,47 @@ struct map_interface { char mob_skill_db2_db[32]; char interreg_db[32]; + char default_codepage[32]; + + int server_port; + char server_ip[32]; + char server_id[32]; + char server_pw[32]; + char server_db[32]; + Sql* mysql_handle; + + int port; + int users; + int enable_grf; //To enable/disable reading maps from GRF files, bypassing mapcache [blackhole89] + int ip_set; + int char_ip_set; + + int16 index2mapid[MAX_MAPINDEX]; + /* */ + DBMap* id_db; // int id -> struct block_list* + DBMap* pc_db; // int id -> struct map_session_data* + DBMap* mobid_db; // int id -> struct mob_data* + DBMap* bossid_db; // int id -> struct mob_data* (MVP db) + DBMap* map_db; // unsigned int mapindex -> struct map_data_other_server* + DBMap* nick_db; // int char_id -> struct charid2nick* (requested names of offline characters) + DBMap* charid_db; // int char_id -> struct map_session_data* + DBMap* regen_db; // int id -> struct block_list* (status_natural_heal processing) + DBMap* zone_db; // string => struct map_zone_data + DBMap* iwall_db; + /* order respected by map_defaults() in order to zero */ + /* from block_free until zone_pk */ + struct block_list *block_free[block_free_max]; + int block_free_count, block_free_lock; + struct block_list *bl_list[BL_LIST_MAX]; + int bl_list_count; + struct block_list bl_head; + struct map_zone_data zone_all;/* used as a base on all maps */ + struct map_zone_data zone_pk;/* used for (pk_mode) */ + struct map_session_data *cpsd; + struct map_data *list; + /* [Ind/Hercules] */ + struct eri *iterator_ers; + char *cache_buffer; // Has the uncompressed gat data of all maps, so just one allocation has to be made /* funcs */ void (*zone_init) (void); void (*zone_remove) (int m); @@ -818,17 +876,17 @@ struct map_interface { // blocklist manipulation int (*addblock) (struct block_list* bl); int (*delblock) (struct block_list* bl); - int (*moveblock) (struct block_list *, int, int, unsigned int); + int (*moveblock) (struct block_list *bl, int x1, int y1, unsigned int tick); //blocklist nb in one cell int (*count_oncell) (int16 m,int16 x,int16 y,int type); - struct skill_unit * (*find_skill_unit_oncell) (struct block_list *,int16 x,int16 y,uint16 skill_id,struct skill_unit *, int flag); + struct skill_unit * (*find_skill_unit_oncell) (struct block_list* target,int16 x,int16 y,uint16 skill_id,struct skill_unit* out_unit, int flag); // search and creation int (*get_new_object_id) (void); int (*search_freecell) (struct block_list *src, int16 m, int16 *x, int16 *y, int16 rx, int16 ry, int flag); // - int (*quit) (struct map_session_data *); + int (*quit) (struct map_session_data *sd); // npc - bool (*addnpc) (int16 m,struct npc_data *); + bool (*addnpc) (int16 m,struct npc_data *nd); // map item int (*clearflooritem_timer) (int tid, unsigned int tick, int id, intptr_t data); int (*removemobs_timer) (int tid, unsigned int tick, int id, intptr_t data); @@ -841,16 +899,16 @@ struct map_interface { const char* (*charid2nick) (int charid); struct map_session_data* (*charid2sd) (int charid); - void (*vmap_foreachpc) (int (*func)(struct map_session_data* sd, va_list args), va_list args); - void (*map_foreachpc) (int (*func)(struct map_session_data* sd, va_list args), ...); - void (*vmap_foreachmob) (int (*func)(struct mob_data* md, va_list args), va_list args); - void (*map_foreachmob) (int (*func)(struct mob_data* md, va_list args), ...); - void (*vmap_foreachnpc) (int (*func)(struct npc_data* nd, va_list args), va_list args); - void (*map_foreachnpc) (int (*func)(struct npc_data* nd, va_list args), ...); - void (*vmap_foreachregen) (int (*func)(struct block_list* bl, va_list args), va_list args); - void (*map_foreachregen) (int (*func)(struct block_list* bl, va_list args), ...); - void (*vmap_foreachiddb) (int (*func)(struct block_list* bl, va_list args), va_list args); - void (*map_foreachiddb) (int (*func)(struct block_list* bl, va_list args), ...); + void (*vforeachpc) (int (*func)(struct map_session_data* sd, va_list args), va_list args); + void (*foreachpc) (int (*func)(struct map_session_data* sd, va_list args), ...); + void (*vforeachmob) (int (*func)(struct mob_data* md, va_list args), va_list args); + void (*foreachmob) (int (*func)(struct mob_data* md, va_list args), ...); + void (*vforeachnpc) (int (*func)(struct npc_data* nd, va_list args), va_list args); + void (*foreachnpc) (int (*func)(struct npc_data* nd, va_list args), ...); + void (*vforeachregen) (int (*func)(struct block_list* bl, va_list args), va_list args); + void (*foreachregen) (int (*func)(struct block_list* bl, va_list args), ...); + void (*vforeachiddb) (int (*func)(struct block_list* bl, va_list args), va_list args); + void (*foreachiddb) (int (*func)(struct block_list* bl, va_list args), ...); int (*vforeachinrange) (int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int type, va_list ap); int (*foreachinrange) (int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int type, ...); @@ -887,10 +945,10 @@ struct map_interface { int (*setipport) (unsigned short mapindex, uint32 ip, uint16 port); int (*eraseipport) (unsigned short mapindex, uint32 ip, uint16 port); int (*eraseallipport) (void); - void (*addiddb) (struct block_list *); + void (*addiddb) (struct block_list *bl); void (*deliddb) (struct block_list *bl); /* */ - struct map_session_data * (*nick2sd) (const char*); + struct map_session_data * (*nick2sd) (const char *nick); struct mob_data * (*getmob_boss) (int16 m); struct mob_data * (*id2boss) (int id); // reload config file looking only for npcs @@ -918,6 +976,52 @@ struct map_interface { void (*clean) (int i); void (*do_shutdown) (void); + + int (*freeblock_timer) (int tid, unsigned int tick, int id, intptr_t data); + int (*searchrandfreecell) (int16 m, int16 *x, int16 *y, int stack); + int (*count_sub) (struct block_list *bl, va_list ap); + DBData (*create_charid2nick) (DBKey key, va_list args); + int (*removemobs_sub) (struct block_list *bl, va_list ap); + struct mapcell (*gat2cell) (int gat); + int (*cell2gat) (struct mapcell cell); + int (*getcellp) (struct map_data *m, int16 x, int16 y, cell_chk cellchk); + void (*setcell) (int16 m, int16 x, int16 y, cell_t cell, bool flag); + int (*sub_getcellp) (struct map_data *m, int16 x, int16 y, cell_chk cellchk); + void (*sub_setcell) (int16 m, int16 x, int16 y, cell_t cell, bool flag); + void (*iwall_nextxy) (int16 x, int16 y, int8 dir, int pos, int16 *x1, int16 *y1); + DBData (*create_map_data_other_server) (DBKey key, va_list args); + int (*eraseallipport_sub) (DBKey key, DBData *data, va_list va); + char* (*init_mapcache) (FILE *fp); + int (*readfromcache) (struct map_data *m, char *buffer); + int (*addmap) (char *mapname); + void (*delmapid) (int id); + void (*zone_db_clear) (void); + void (*list_final) (void); + int (*waterheight) (char *mapname); + int (*readgat) (struct map_data *m); + int (*readallmaps) (void); + int (*config_read) (char *cfgName); + int (*config_read_sub) (char *cfgName); + void (*reloadnpc_sub) (char *cfgName); + int (*inter_config_read) (char *cfgName); + int (*sql_init) (void); + int (*sql_close) (void); + bool (*zone_mf_cache) (int m, char *flag, char *params); + unsigned short (*zone_str2itemid) (const char *name); + unsigned short (*zone_str2skillid) (const char *name); + enum bl_type (*zone_bl_type) (const char *entry, enum map_zone_skill_subtype *subtype); + void (*read_zone_db) (void); + int (*db_final) (DBKey key, DBData *data, va_list ap); + int (*nick_db_final) (DBKey key, DBData *data, va_list args); + int (*cleanup_db_sub) (DBKey key, DBData *data, va_list va); + int (*abort_sub) (struct map_session_data *sd, va_list ap); + void (*helpscreen) (bool do_exit); + void (*versionscreen) (bool do_exit); + bool (*arg_next_value) (const char *option, int i, int argc); +#ifdef CELL_NOSTACK + void (*addblcell) (struct block_list *bl); + void (*delblcell) (struct block_list *bl); +#endif }; struct map_interface *map; diff --git a/src/map/mapreg_sql.c b/src/map/mapreg_sql.c index 0a0b8f75f..902b7c39b 100644 --- a/src/map/mapreg_sql.c +++ b/src/map/mapreg_sql.c @@ -10,7 +10,7 @@ #include "../common/sql.h" #include "../common/strlib.h" #include "../common/timer.h" -#include "map.h" // mmysql_handle +#include "map.h" // map->mysql_handle #include "script.h" #include "mapreg.h" #include @@ -55,9 +55,9 @@ bool mapreg_setreg(int uid, int val) { if(name[1] != '@') {// write new variable to database char tmp_str[32*2+1]; - SQL->EscapeStringLen(mmysql_handle, tmp_str, name, strnlen(name, 32)); - if( SQL_ERROR == SQL->Query(mmysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%d','%d')", mapreg->table, tmp_str, i, val) ) - Sql_ShowDebug(mmysql_handle); + SQL->EscapeStringLen(map->mysql_handle, tmp_str, name, strnlen(name, 32)); + if( SQL_ERROR == SQL->Query(map->mysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%d','%d')", mapreg->table, tmp_str, i, val) ) + Sql_ShowDebug(map->mysql_handle); } idb_put(mapreg->db, uid, m); } @@ -68,8 +68,8 @@ bool mapreg_setreg(int uid, int val) { idb_remove(mapreg->db,uid); if( name[1] != '@' ) {// Remove from database because it is unused. - if( SQL_ERROR == SQL->Query(mmysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%d'", mapreg->table, name, i) ) - Sql_ShowDebug(mmysql_handle); + if( SQL_ERROR == SQL->Query(map->mysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%d'", mapreg->table, name, i) ) + Sql_ShowDebug(map->mysql_handle); } } @@ -85,8 +85,8 @@ bool mapreg_setregstr(int uid, const char* str) { if( str == NULL || *str == 0 ) { if(name[1] != '@') { - if( SQL_ERROR == SQL->Query(mmysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%d'", mapreg->table, name, i) ) - Sql_ShowDebug(mmysql_handle); + if( SQL_ERROR == SQL->Query(map->mysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%d'", mapreg->table, name, i) ) + Sql_ShowDebug(map->mysql_handle); } if( (m = idb_get(mapreg->str_db,uid)) ) { if( m->u.str != NULL ) @@ -113,10 +113,10 @@ bool mapreg_setregstr(int uid, const char* str) { if(name[1] != '@') { //put returned null, so we must insert. char tmp_str[32*2+1]; char tmp_str2[255*2+1]; - SQL->EscapeStringLen(mmysql_handle, tmp_str, name, strnlen(name, 32)); - SQL->EscapeStringLen(mmysql_handle, tmp_str2, str, strnlen(str, 255)); - if( SQL_ERROR == SQL->Query(mmysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%d','%s')", mapreg->table, tmp_str, i, tmp_str2) ) - Sql_ShowDebug(mmysql_handle); + SQL->EscapeStringLen(map->mysql_handle, tmp_str, name, strnlen(name, 32)); + SQL->EscapeStringLen(map->mysql_handle, tmp_str2, str, strnlen(str, 255)); + if( SQL_ERROR == SQL->Query(map->mysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%d','%s')", mapreg->table, tmp_str, i, tmp_str2) ) + Sql_ShowDebug(map->mysql_handle); } idb_put(mapreg->str_db, uid, m); } @@ -133,7 +133,7 @@ void script_load_mapreg(void) { | varname | index | value | +-------------------------+ */ - SqlStmt* stmt = SQL->StmtMalloc(mmysql_handle); + SqlStmt* stmt = SQL->StmtMalloc(map->mysql_handle); char varname[32+1]; int index; char value[255+1]; @@ -199,8 +199,8 @@ void script_save_mapreg(void) { int i = (m->uid & 0xff000000) >> 24; const char* name = script->get_str(num); - if( SQL_ERROR == SQL->Query(mmysql_handle, "UPDATE `%s` SET `value`='%d' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, m->u.i, name, i) ) - Sql_ShowDebug(mmysql_handle); + if( SQL_ERROR == SQL->Query(map->mysql_handle, "UPDATE `%s` SET `value`='%d' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, m->u.i, name, i) ) + Sql_ShowDebug(map->mysql_handle); m->save = false; } } @@ -217,9 +217,9 @@ void script_save_mapreg(void) { const char* name = script->get_str(num); char tmp_str2[2*255+1]; - SQL->EscapeStringLen(mmysql_handle, tmp_str2, m->u.str, safestrnlen(m->u.str, 255)); - if( SQL_ERROR == SQL->Query(mmysql_handle, "UPDATE `%s` SET `value`='%s' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, tmp_str2, name, i) ) - Sql_ShowDebug(mmysql_handle); + SQL->EscapeStringLen(map->mysql_handle, tmp_str2, m->u.str, safestrnlen(m->u.str, 255)); + if( SQL_ERROR == SQL->Query(map->mysql_handle, "UPDATE `%s` SET `value`='%s' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, tmp_str2, name, i) ) + Sql_ShowDebug(map->mysql_handle); m->save = false; } } diff --git a/src/map/mob.c b/src/map/mob.c index 7d04937e7..7023bcb9d 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -173,11 +173,11 @@ void mvptomb_destroy(struct mob_data *md) { map->delblock(&nd->bl); - ARR_FIND( 0, maplist[m].npc_num, i, maplist[m].npc[i] == nd ); - if( !(i == maplist[m].npc_num) ) { - maplist[m].npc_num--; - maplist[m].npc[i] = maplist[m].npc[maplist[m].npc_num]; - maplist[m].npc[maplist[m].npc_num] = NULL; + ARR_FIND( 0, map->list[m].npc_num, i, map->list[m].npc[i] == nd ); + if( !(i == map->list[m].npc_num) ) { + map->list[m].npc_num--; + map->list[m].npc[i] = map->list[m].npc[map->list[m].npc_num]; + map->list[m].npc[map->list[m].npc_num] = NULL; } map->deliddb(&nd->bl); @@ -363,7 +363,7 @@ bool mob_ksprotected (struct block_list *src, struct block_list *target) t_sd = BL_CAST(BL_PC,s_bl); do { - if( maplist[md->bl.m].flag.allowks || map_flag_ks(md->bl.m) ) + if( map->list[md->bl.m].flag.allowks || map_flag_ks(md->bl.m) ) return false; // Ignores GVG, PVP and AllowKS map flags if( md->db->mexp || md->master_id ) @@ -638,12 +638,12 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam if( !has_index ) { guardian = -1; } else if( guardian < 0 || guardian >= MAX_GUARDIANS ) { - ShowError("mob_spawn_guardian: Invalid guardian index %d for guardian %d (castle map %s)\n", guardian, class_, maplist[m].name); + ShowError("mob_spawn_guardian: Invalid guardian index %d for guardian %d (castle map %s)\n", guardian, class_, map->list[m].name); return 0; } if((x<=0 || y<=0) && !map->search_freecell(NULL, m, &x, &y, -1,-1, 1)) { - ShowWarning("mob_spawn_guardian: Couldn't locate a spawn cell for guardian class %d (index %d) at castle map %s\n",class_, guardian, maplist[m].name); + ShowWarning("mob_spawn_guardian: Couldn't locate a spawn cell for guardian class %d (index %d) at castle map %s\n",class_, guardian, map->list[m].name); return 0; } data.x = x; @@ -653,13 +653,13 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam if (!mob->parse_dataset(&data)) return 0; - gc=guild->mapname2gc(maplist[m].name); + gc=guild->mapname2gc(map->list[m].name); if (gc == NULL) { - ShowError("mob_spawn_guardian: No castle set at map %s\n", maplist[m].name); + ShowError("mob_spawn_guardian: No castle set at map %s\n", map->list[m].name); return 0; } if (!gc->guild_id) - ShowWarning("mob_spawn_guardian: Spawning guardian %d on a castle with no guild (castle map %s)\n", class_, maplist[m].name); + ShowWarning("mob_spawn_guardian: Spawning guardian %d on a castle with no guild (castle map %s)\n", class_, map->list[m].name); else g = guild->search(gc->guild_id); @@ -670,7 +670,7 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam && md2->guardian_data && md2->guardian_data->number == guardian ) { - ShowError("mob_spawn_guardian: Attempted to spawn guardian in position %d which already has a guardian (castle map %s)\n", guardian, maplist[m].name); + ShowError("mob_spawn_guardian: Attempted to spawn guardian in position %d which already has a guardian (castle map %s)\n", guardian, map->list[m].name); return 0; } } @@ -732,7 +732,7 @@ int mob_spawn_bg(const char* mapname, short x, short y, const char* mobname, int data.class_ = class_; if( (x <= 0 || y <= 0) && !map->search_freecell(NULL, m, &x, &y, -1,-1, 1) ) { - ShowWarning("mob_spawn_bg: Couldn't locate a spawn cell for guardian class %d (bg_id %d) at map %s\n",class_, bg_id, maplist[m].name); + ShowWarning("mob_spawn_bg: Couldn't locate a spawn cell for guardian class %d (bg_id %d) at map %s\n",class_, bg_id, map->list[m].name); return 0; } @@ -963,7 +963,7 @@ int mob_spawn (struct mob_data *md) mob->mvptomb_destroy(md); map->addblock(&md->bl); - if( maplist[md->bl.m].users ) + if( map->list[md->bl.m].users ) clif->spawn(&md->bl); skill->unit_move(&md->bl,tick,1); mob->skill_use(md, tick, MSC_SPAWN); @@ -1068,7 +1068,7 @@ int mob_ai_sub_hard_activesearch(struct block_list *bl,va_list ap) battle->check_range(&md->bl,bl,md->db->range2) ) { //Pick closest target? - if( maplist[bl->m].icewall_num && + if( map->list[bl->m].icewall_num && !path->search_long(NULL,bl->m,md->bl.x,md->bl.y,bl->x,bl->y,CELL_CHKICEWALL) ) { if( !check_distance_bl(&md->bl, bl, status_get_range(&md->bl) ) ) @@ -1337,7 +1337,7 @@ int mob_randomwalk(struct mob_data *md,unsigned int tick) if(i==retrycount){ md->move_fail_count++; if(md->move_fail_count>1000){ - ShowWarning("MOB can't move. random spawn %d, class = %d, at %s (%d,%d)\n",md->bl.id,md->class_,maplist[md->bl.m].name, md->bl.x, md->bl.y); + ShowWarning("MOB can't move. random spawn %d, class = %d, at %s (%d,%d)\n",md->bl.id,md->class_,map->list[md->bl.m].name, md->bl.x, md->bl.y); md->move_fail_count=0; mob->spawn(md); } @@ -1683,7 +1683,7 @@ int mob_ai_sub_lazy(struct mob_data *md, va_list args) tick = va_arg(args,unsigned int); - if (battle_config.mob_ai&0x20 && maplist[md->bl.m].users>0) + if (battle_config.mob_ai&0x20 && map->list[md->bl.m].users>0) return (int)mob->ai_sub_hard(md, tick); if (md->bl.prev==NULL || md->status.hp == 0) @@ -1720,7 +1720,7 @@ int mob_ai_sub_lazy(struct mob_data *md, va_list args) } if( DIFF_TICK(md->next_walktime,tick) < 0 && (status_get_mode(&md->bl)&MD_CANMOVE) && unit->can_move(&md->bl) ) { - if( maplist[md->bl.m].users > 0 ) + if( map->list[md->bl.m].users > 0 ) { if( rnd()%1000 < MOB_LAZYMOVEPERC(md) ) mob->randomwalk(md, tick); @@ -1741,7 +1741,7 @@ int mob_ai_sub_lazy(struct mob_data *md, va_list args) * Negligent processing for mob outside PC field of view (interval timer function) *------------------------------------------*/ int mob_ai_lazy(int tid, unsigned int tick, int id, intptr_t data) { - map->map_foreachmob(mob->ai_sub_lazy,tick); + map->foreachmob(mob->ai_sub_lazy,tick); return 0; } @@ -1751,9 +1751,9 @@ int mob_ai_lazy(int tid, unsigned int tick, int id, intptr_t data) { int mob_ai_hard(int tid, unsigned int tick, int id, intptr_t data) { if (battle_config.mob_ai&0x20) - map->map_foreachmob(mob->ai_sub_lazy,tick); + map->foreachmob(mob->ai_sub_lazy,tick); else - map->map_foreachpc(mob->ai_sub_foreachclient,tick); + map->foreachpc(mob->ai_sub_foreachclient,tick); return 0; } @@ -2145,9 +2145,9 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { } if( !(type&2) //No exp - && (!maplist[m].flag.pvp || battle_config.pvp_exp) //Pvp no exp rule [MouseJstr] + && (!map->list[m].flag.pvp || battle_config.pvp_exp) //Pvp no exp rule [MouseJstr] && (!md->master_id || !md->special_state.ai) //Only player-summoned mobs do not give exp. [Skotlex] - && (!maplist[m].flag.nobaseexp || !maplist[m].flag.nojobexp) //Gives Exp + && (!map->list[m].flag.nobaseexp || !map->list[m].flag.nojobexp) //Gives Exp ) { //Experience calculation. int bonus = 100; //Bonus on top of your share (common to all attackers). if (md->sc.data[SC_RICHMANKIM]) @@ -2209,15 +2209,15 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { zeny*=rnd()%250; } - if (maplist[m].flag.nobaseexp || !md->db->base_exp) + if (map->list[m].flag.nobaseexp || !md->db->base_exp) base_exp = 0; else - base_exp = (unsigned int)cap_value(md->db->base_exp * per * bonus/100. * maplist[m].bexp/100., 1, UINT_MAX); + base_exp = (unsigned int)cap_value(md->db->base_exp * per * bonus/100. * map->list[m].bexp/100., 1, UINT_MAX); - if (maplist[m].flag.nojobexp || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost. + if (map->list[m].flag.nojobexp || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost. job_exp = 0; else - job_exp = (unsigned int)cap_value(md->db->job_exp * per * bonus/100. * maplist[m].jexp/100., 1, UINT_MAX); + job_exp = (unsigned int)cap_value(md->db->job_exp * per * bonus/100. * map->list[m].jexp/100., 1, UINT_MAX); if ( (temp = tmpsd[i]->status.party_id) > 0 ) { int j; @@ -2271,7 +2271,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { } //End EXP giving. - if( !(type&1) && !maplist[m].flag.nomobloot && !md->state.rebirth && ( + if( !(type&1) && !map->list[m].flag.nomobloot && !md->state.rebirth && ( !md->special_state.ai || //Non special mob battle_config.alchemist_summon_reward == 2 || //All summoned give drops (md->special_state.ai==2 && battle_config.alchemist_summon_reward == 1) //Marine Sphere Drops items. @@ -2439,7 +2439,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { double exp; //mapflag: noexp check [Lorky] - if (maplist[m].flag.nobaseexp || type&2) + if (map->list[m].flag.nobaseexp || type&2) exp =1; else { exp = md->db->mexp; @@ -2454,7 +2454,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { pc->gainexp(mvp_sd, &md->bl, mexp,0, false); log_mvp[1] = mexp; - if( !(maplist[m].flag.nomvploot || type&1) ) { + if( !(map->list[m].flag.nomvploot || type&1) ) { /* pose them randomly in the list -- so on 100% drop servers it wont always drop the same item */ int mdrop_id[MAX_MVP_DROP]; int mdrop_p[MAX_MVP_DROP]; @@ -2598,7 +2598,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { return 5; // Note: Actually, it's 4. Oh well... // MvP tomb [GreenBox] - if (battle_config.mvp_tomb_enabled && md->spawn->state.boss && maplist[md->bl.m].flag.notomb != 1) + if (battle_config.mvp_tomb_enabled && md->spawn->state.boss && map->list[md->bl.m].flag.notomb != 1) mob->mvptomb_create(md, mvp_sd ? mvp_sd->status.name : NULL, time(NULL)); if( !rebirth ) { @@ -3354,12 +3354,12 @@ int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, cons (skill->db[idx].inf2&(INF2_WEDDING_SKILL|INF2_GUILD_SKILL)) ) continue; - for(h = 0; h < maplist[sd->bl.m].zone->disabled_skills_count; h++) { - if( skill_id == maplist[sd->bl.m].zone->disabled_skills[h]->nameid && maplist[sd->bl.m].zone->disabled_skills[h]->subtype == MZS_CLONE ) { + for(h = 0; h < map->list[sd->bl.m].zone->disabled_skills_count; h++) { + if( skill_id == map->list[sd->bl.m].zone->disabled_skills[h]->nameid && map->list[sd->bl.m].zone->disabled_skills[h]->subtype == MZS_CLONE ) { break; } } - if( h < maplist[sd->bl.m].zone->disabled_skills_count ) + if( h < map->list[sd->bl.m].zone->disabled_skills_count ) continue; //Normal aggressive mob, disable skills that cannot help them fight //against players (those with flags UF_NOMOB and UF_NOPC are specific @@ -3890,13 +3890,13 @@ int mob_read_sqldb(void) { uint32 lines = 0, count = 0; // retrieve all rows from the mob database - if( SQL_ERROR == SQL->Query(mmysql_handle, "SELECT * FROM `%s`", mob_db_name[fi]) ) { - Sql_ShowDebug(mmysql_handle); + if( SQL_ERROR == SQL->Query(map->mysql_handle, "SELECT * FROM `%s`", mob_db_name[fi]) ) { + Sql_ShowDebug(map->mysql_handle); continue; } // process rows one by one - while( SQL_SUCCESS == SQL->NextRow(mmysql_handle) ) { + while( SQL_SUCCESS == SQL->NextRow(map->mysql_handle) ) { // wrap the result into a TXT-compatible format char line[1024]; char* str[31+2*MAX_MVP_DROP+2*MAX_MOB_DROP]; @@ -3908,7 +3908,7 @@ int mob_read_sqldb(void) { { char* data; size_t len; - SQL->GetData(mmysql_handle, i, &data, &len); + SQL->GetData(map->mysql_handle, i, &data, &len); strcpy(p, data); str[i] = p; @@ -3922,7 +3922,7 @@ int mob_read_sqldb(void) { } // free the query result - SQL->FreeResult(mmysql_handle); + SQL->FreeResult(map->mysql_handle); ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, mob_db_name[fi]); } @@ -4454,13 +4454,13 @@ int mob_read_sqlskilldb(void) { uint32 lines = 0, count = 0; // retrieve all rows from the mob skill database - if( SQL_ERROR == SQL->Query(mmysql_handle, "SELECT * FROM `%s`", mob_skill_db_name[fi]) ) { - Sql_ShowDebug(mmysql_handle); + if( SQL_ERROR == SQL->Query(map->mysql_handle, "SELECT * FROM `%s`", mob_skill_db_name[fi]) ) { + Sql_ShowDebug(map->mysql_handle); continue; } // process rows one by one - while( SQL_SUCCESS == SQL->NextRow(mmysql_handle) ) { + while( SQL_SUCCESS == SQL->NextRow(map->mysql_handle) ) { // wrap the result into a TXT-compatible format char* str[19]; char* dummy = ""; @@ -4468,7 +4468,7 @@ int mob_read_sqlskilldb(void) { ++lines; for( i = 0; i < 19; ++i ) { - SQL->GetData(mmysql_handle, i, &str[i], NULL); + SQL->GetData(map->mysql_handle, i, &str[i], NULL); if( str[i] == NULL ) str[i] = dummy; // get rid of NULL columns } @@ -4479,7 +4479,7 @@ int mob_read_sqlskilldb(void) { } // free the query result - SQL->FreeResult(mmysql_handle); + SQL->FreeResult(map->mysql_handle); ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, mob_skill_db_name[fi]); } diff --git a/src/map/mob.h b/src/map/mob.h index f4cbd77c6..210983675 100644 --- a/src/map/mob.h +++ b/src/map/mob.h @@ -245,8 +245,8 @@ struct item_drop_list { #define mob_stop_walking(md, type) unit->stop_walking(&(md)->bl, type) #define mob_stop_attack(md) unit->stop_attack(&(md)->bl) -#define mob_is_battleground(md) ( maplist[(md)->bl.m].flag.battleground && ((md)->class_ == MOBID_BARRICADE2 || ((md)->class_ >= MOBID_FOOD_STOR && (md)->class_ <= MOBID_PINK_CRYST)) ) -#define mob_is_gvg(md) (maplist[(md)->bl.m].flag.gvg_castle && ( (md)->class_ == MOBID_EMPERIUM || (md)->class_ == MOBID_BARRICADE1 || (md)->class_ == MOBID_GUARIDAN_STONE1 || (md)->class_ == MOBID_GUARIDAN_STONE2) ) +#define mob_is_battleground(md) ( map->list[(md)->bl.m].flag.battleground && ((md)->class_ == MOBID_BARRICADE2 || ((md)->class_ >= MOBID_FOOD_STOR && (md)->class_ <= MOBID_PINK_CRYST)) ) +#define mob_is_gvg(md) (map->list[(md)->bl.m].flag.gvg_castle && ( (md)->class_ == MOBID_EMPERIUM || (md)->class_ == MOBID_BARRICADE1 || (md)->class_ == MOBID_GUARIDAN_STONE1 || (md)->class_ == MOBID_GUARIDAN_STONE2) ) #define mob_is_treasure(md) (((md)->class_ >= MOBID_TREAS01 && (md)->class_ <= MOBID_TREAS40) || ((md)->class_ >= MOBID_TREAS41 && (md)->class_ <= MOBID_TREAS49)) struct mob_interface { diff --git a/src/map/npc.c b/src/map/npc.c index 21e4221da..a28724238 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -881,53 +881,53 @@ int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y) //if(sd->npc_id) // return 1; - for(i=0;ioption&OPTION_INVISIBLE) { + for(i=0;ilist[m].npc_num;i++) { + if (map->list[m].npc[i]->option&OPTION_INVISIBLE) { f=0; // a npc was found, but it is disabled; don't print warning continue; } - switch(maplist[m].npc[i]->subtype) { + switch(map->list[m].npc[i]->subtype) { case WARP: - xs=maplist[m].npc[i]->u.warp.xs; - ys=maplist[m].npc[i]->u.warp.ys; + xs=map->list[m].npc[i]->u.warp.xs; + ys=map->list[m].npc[i]->u.warp.ys; break; case SCRIPT: - xs=maplist[m].npc[i]->u.scr.xs; - ys=maplist[m].npc[i]->u.scr.ys; + xs=map->list[m].npc[i]->u.scr.xs; + ys=map->list[m].npc[i]->u.scr.ys; break; default: continue; } - if( x >= maplist[m].npc[i]->bl.x-xs && x <= maplist[m].npc[i]->bl.x+xs - && y >= maplist[m].npc[i]->bl.y-ys && y <= maplist[m].npc[i]->bl.y+ys ) + if( x >= map->list[m].npc[i]->bl.x-xs && x <= map->list[m].npc[i]->bl.x+xs + && y >= map->list[m].npc[i]->bl.y-ys && y <= map->list[m].npc[i]->bl.y+ys ) break; } - if( i == maplist[m].npc_num ) { + if( i == map->list[m].npc_num ) { if( f == 1 ) // no npc found - ShowError("npc_touch_areanpc : stray NPC cell/NPC not found in the block on coordinates '%s',%d,%d\n", maplist[m].name, x, y); + ShowError("npc_touch_areanpc : stray NPC cell/NPC not found in the block on coordinates '%s',%d,%d\n", map->list[m].name, x, y); return 1; } - switch(maplist[m].npc[i]->subtype) { + switch(map->list[m].npc[i]->subtype) { case WARP: if( pc_ishiding(sd) || (sd->sc.count && sd->sc.data[SC_CAMOUFLAGE]) ) break; // hidden chars cannot use warps - pc->setpos(sd,maplist[m].npc[i]->u.warp.mapindex,maplist[m].npc[i]->u.warp.x,maplist[m].npc[i]->u.warp.y,CLR_OUTSIGHT); + pc->setpos(sd,map->list[m].npc[i]->u.warp.mapindex,map->list[m].npc[i]->u.warp.x,map->list[m].npc[i]->u.warp.y,CLR_OUTSIGHT); break; case SCRIPT: - for (j = i; j < maplist[m].npc_num; j++) { - if (maplist[m].npc[j]->subtype != WARP) { + for (j = i; j < map->list[m].npc_num; j++) { + if (map->list[m].npc[j]->subtype != WARP) { continue; } - if ((sd->bl.x >= (maplist[m].npc[j]->bl.x - maplist[m].npc[j]->u.warp.xs) - && sd->bl.x <= (maplist[m].npc[j]->bl.x + maplist[m].npc[j]->u.warp.xs)) - && (sd->bl.y >= (maplist[m].npc[j]->bl.y - maplist[m].npc[j]->u.warp.ys) - && sd->bl.y <= (maplist[m].npc[j]->bl.y + maplist[m].npc[j]->u.warp.ys)) + if ((sd->bl.x >= (map->list[m].npc[j]->bl.x - map->list[m].npc[j]->u.warp.xs) + && sd->bl.x <= (map->list[m].npc[j]->bl.x + map->list[m].npc[j]->u.warp.xs)) + && (sd->bl.y >= (map->list[m].npc[j]->bl.y - map->list[m].npc[j]->u.warp.ys) + && sd->bl.y <= (map->list[m].npc[j]->bl.y + map->list[m].npc[j]->u.warp.ys)) ) { if( pc_ishiding(sd) || (sd->sc.count && sd->sc.data[SC_CAMOUFLAGE]) ) break; // hidden chars cannot use warps - pc->setpos(sd,maplist[m].npc[j]->u.warp.mapindex,maplist[m].npc[j]->u.warp.x,maplist[m].npc[j]->u.warp.y,CLR_OUTSIGHT); + pc->setpos(sd,map->list[m].npc[j]->u.warp.mapindex,map->list[m].npc[j]->u.warp.x,map->list[m].npc[j]->u.warp.y,CLR_OUTSIGHT); found_warp = 1; break; } @@ -937,7 +937,7 @@ int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y) break; } - if( npc->ontouch_event(sd,maplist[m].npc[i]) > 0 && npc->ontouch2_event(sd,maplist[m].npc[i]) > 0 ) + if( npc->ontouch_event(sd,map->list[m].npc[i]) > 0 && npc->ontouch2_event(sd,map->list[m].npc[i]) > 0 ) { // failed to run OnTouch event, so just click the npc struct unit_data *ud = unit->bl2ud(&sd->bl); if( ud && ud->walkpath.path_pos < ud->walkpath.path_len ) @@ -945,8 +945,8 @@ int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y) clif->fixpos(&sd->bl); ud->walkpath.path_pos = ud->walkpath.path_len; } - sd->areanpc_id = maplist[m].npc[i]->bl.id; - npc->click(sd,maplist[m].npc[i]); + sd->areanpc_id = map->list[m].npc[i]->bl.id; + npc->click(sd,map->list[m].npc[i]); } break; } @@ -962,42 +962,42 @@ int npc_touch_areanpc2(struct mob_data *md) struct event_data* ev; int xs, ys; - for( i = 0; i < maplist[m].npc_num; i++ ) { - if( maplist[m].npc[i]->option&OPTION_INVISIBLE ) + for( i = 0; i < map->list[m].npc_num; i++ ) { + if( map->list[m].npc[i]->option&OPTION_INVISIBLE ) continue; - switch( maplist[m].npc[i]->subtype ) { + switch( map->list[m].npc[i]->subtype ) { case WARP: if( !( battle_config.mob_warp&1 ) ) continue; - xs = maplist[m].npc[i]->u.warp.xs; - ys = maplist[m].npc[i]->u.warp.ys; + xs = map->list[m].npc[i]->u.warp.xs; + ys = map->list[m].npc[i]->u.warp.ys; break; case SCRIPT: - xs = maplist[m].npc[i]->u.scr.xs; - ys = maplist[m].npc[i]->u.scr.ys; + xs = map->list[m].npc[i]->u.scr.xs; + ys = map->list[m].npc[i]->u.scr.ys; break; default: continue; // Keep Searching } - if( x >= maplist[m].npc[i]->bl.x-xs && x <= maplist[m].npc[i]->bl.x+xs && y >= maplist[m].npc[i]->bl.y-ys && y <= maplist[m].npc[i]->bl.y+ys ) { + if( x >= map->list[m].npc[i]->bl.x-xs && x <= map->list[m].npc[i]->bl.x+xs && y >= map->list[m].npc[i]->bl.y-ys && y <= map->list[m].npc[i]->bl.y+ys ) { // In the npc touch area - switch( maplist[m].npc[i]->subtype ) { + switch( map->list[m].npc[i]->subtype ) { case WARP: - xs = map->mapindex2mapid(maplist[m].npc[i]->u.warp.mapindex); + xs = map->mapindex2mapid(map->list[m].npc[i]->u.warp.mapindex); if( m < 0 ) break; // Cannot Warp between map servers - if( unit->warp(&md->bl, xs, maplist[m].npc[i]->u.warp.x, maplist[m].npc[i]->u.warp.y, CLR_OUTSIGHT) == 0 ) + if( unit->warp(&md->bl, xs, map->list[m].npc[i]->u.warp.x, map->list[m].npc[i]->u.warp.y, CLR_OUTSIGHT) == 0 ) return 1; // Warped break; case SCRIPT: - if( maplist[m].npc[i]->bl.id == md->areanpc_id ) + if( map->list[m].npc[i]->bl.id == md->areanpc_id ) break; // Already touch this NPC - snprintf(eventname, ARRAYLENGTH(eventname), "%s::OnTouchNPC", maplist[m].npc[i]->exname); + snprintf(eventname, ARRAYLENGTH(eventname), "%s::OnTouchNPC", map->list[m].npc[i]->exname); if( (ev = (struct event_data*)strdb_get(npc->ev_db, eventname)) == NULL || ev->nd == NULL ) break; // No OnTouchNPC Event - md->areanpc_id = maplist[m].npc[i]->bl.id; + md->areanpc_id = map->list[m].npc[i]->bl.id; id = md->bl.id; // Stores Unique ID script->run(ev->nd->u.scr.script, ev->pos, md->bl.id, ev->nd->bl.id); if( map->id2md(id) == NULL ) return 1; // Not Warped, but killed @@ -1023,8 +1023,8 @@ int npc_check_areanpc(int flag, int16 m, int16 x, int16 y, int16 range) { if (range < 0) return 0; x0 = max(x-range, 0); y0 = max(y-range, 0); - x1 = min(x+range, maplist[m].xs-1); - y1 = min(y+range, maplist[m].ys-1); + x1 = min(x+range, map->list[m].xs-1); + y1 = min(y+range, map->list[m].ys-1); //First check for npc_cells on the range given i = 0; @@ -1037,35 +1037,35 @@ int npc_check_areanpc(int flag, int16 m, int16 x, int16 y, int16 range) { if (!i) return 0; //No NPC_CELLs. //Now check for the actual NPC on said range. - for(i=0;ioption&OPTION_INVISIBLE) + for(i=0;ilist[m].npc_num;i++) { + if (map->list[m].npc[i]->option&OPTION_INVISIBLE) continue; - switch(maplist[m].npc[i]->subtype) { + switch(map->list[m].npc[i]->subtype) { case WARP: if (!(flag&1)) continue; - xs=maplist[m].npc[i]->u.warp.xs; - ys=maplist[m].npc[i]->u.warp.ys; + xs=map->list[m].npc[i]->u.warp.xs; + ys=map->list[m].npc[i]->u.warp.ys; break; case SCRIPT: if (!(flag&2)) continue; - xs=maplist[m].npc[i]->u.scr.xs; - ys=maplist[m].npc[i]->u.scr.ys; + xs=map->list[m].npc[i]->u.scr.xs; + ys=map->list[m].npc[i]->u.scr.ys; break; default: continue; } - if( x1 >= maplist[m].npc[i]->bl.x-xs && x0 <= maplist[m].npc[i]->bl.x+xs - && y1 >= maplist[m].npc[i]->bl.y-ys && y0 <= maplist[m].npc[i]->bl.y+ys ) + if( x1 >= map->list[m].npc[i]->bl.x-xs && x0 <= map->list[m].npc[i]->bl.x+xs + && y1 >= map->list[m].npc[i]->bl.y-ys && y0 <= map->list[m].npc[i]->bl.y+ys ) break; // found a npc } - if (i==maplist[m].npc_num) + if (i==map->list[m].npc_num) return 0; - return (maplist[m].npc[i]->bl.id); + return (map->list[m].npc[i]->bl.id); } /*========================================== @@ -1410,7 +1410,7 @@ int npc_cashshop_buy(struct map_session_data *sd, int nameid, int amount, int po if( (double)nd->u.shop.shop_item[i].value * amount > INT_MAX ) { ShowWarning("npc_cashshop_buy: Item '%s' (%d) price overflow attempt!\n", item->name, nameid); ShowDebug("(NPC:'%s' (%s,%d,%d), player:'%s' (%d/%d), value:%d, amount:%d)\n", - nd->exname, maplist[nd->bl.m].name, nd->bl.x, nd->bl.y, + nd->exname, map->list[nd->bl.m].name, nd->bl.x, nd->bl.y, sd->status.name, sd->status.account_id, sd->status.char_id, nd->u.shop.shop_item[i].value, amount); return 5; @@ -1707,13 +1707,13 @@ int npc_remove_map(struct npc_data* nd) { clif->clearunit_area(&nd->bl,CLR_RESPAWN); npc->unsetcells(nd); map->delblock(&nd->bl); - //Remove npc from maplist[].npc list. [Skotlex] - ARR_FIND( 0, maplist[m].npc_num, i, maplist[m].npc[i] == nd ); - if( i == maplist[m].npc_num ) return 2; //failed to find it? + //Remove npc from map->list[].npc list. [Skotlex] + ARR_FIND( 0, map->list[m].npc_num, i, map->list[m].npc[i] == nd ); + if( i == map->list[m].npc_num ) return 2; //failed to find it? - maplist[m].npc_num--; - maplist[m].npc[i] = maplist[m].npc[maplist[m].npc_num]; - maplist[m].npc[maplist[m].npc_num] = NULL; + map->list[m].npc_num--; + map->list[m].npc[i] = map->list[m].npc[map->list[m].npc_num]; + map->list[m].npc[map->list[m].npc_num] = NULL; return 0; } @@ -1759,7 +1759,7 @@ int npc_unload_dup_sub(struct npc_data* nd, va_list args) //Removes all npcs that are duplicates of the passed one. [Skotlex] void npc_unload_duplicates(struct npc_data* nd) { - map->map_foreachnpc(npc->unload_dup_sub,nd->bl.id); + map->foreachnpc(npc->unload_dup_sub,nd->bl.id); } //Removes an npc from map and db. @@ -2054,7 +2054,7 @@ struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short map->addblock(&nd->bl); status->set_viewdata(&nd->bl, nd->class_); nd->ud = &npc->base_ud; - if( maplist[nd->bl.m].users ) + if( map->list[nd->bl.m].users ) clif->spawn(&nd->bl); strdb_put(npc->name_db, nd->exname, nd); @@ -2086,8 +2086,8 @@ const char* npc_parse_warp(char* w1, char* w2, char* w3, char* w4, const char* s return strchr(start,'\n');// skip and continue } - if( m != -1 && ( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) ) { - ShowError("npc_parse_warp: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", maplist[m].name, x, y, maplist[m].xs, maplist[m].ys,filepath,strline(buffer,start-buffer)); + if( m != -1 && ( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) ) { + ShowError("npc_parse_warp: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", map->list[m].name, x, y, map->list[m].xs, map->list[m].ys,filepath,strline(buffer,start-buffer)); return strchr(start,'\n');;//try next } @@ -2119,7 +2119,7 @@ const char* npc_parse_warp(char* w1, char* w2, char* w3, char* w4, const char* s map->addblock(&nd->bl); status->set_viewdata(&nd->bl, nd->class_); nd->ud = &npc->base_ud; - if( maplist[nd->bl.m].users ) + if( map->list[nd->bl.m].users ) clif->spawn(&nd->bl); strdb_put(npc->name_db, nd->exname, nd); @@ -2152,8 +2152,8 @@ const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const char* s m = map->mapname2mapid(mapname); } - if( m != -1 && ( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) ) { - ShowError("npc_parse_shop: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", maplist[m].name, x, y, maplist[m].xs, maplist[m].ys,filepath,strline(buffer,start-buffer)); + if( m != -1 && ( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) ) { + ShowError("npc_parse_shop: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", map->list[m].name, x, y, map->list[m].xs, map->list[m].ys,filepath,strline(buffer,start-buffer)); return strchr(start,'\n');;//try next } @@ -2232,7 +2232,7 @@ const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const char* s status->set_viewdata(&nd->bl, nd->class_); nd->ud = &npc->base_ud; nd->dir = dir; - if( maplist[nd->bl.m].users ) + if( map->list[nd->bl.m].users ) clif->spawn(&nd->bl); } else {// 'floating' shop? map->addiddb(&nd->bl); @@ -2419,7 +2419,7 @@ const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, const char* map->addblock(&nd->bl); if( class_ >= 0 ) { status->set_viewdata(&nd->bl, nd->class_); - if( maplist[nd->bl.m].users ) + if( map->list[nd->bl.m].users ) clif->spawn(&nd->bl); } } else { @@ -2509,8 +2509,8 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch m = map->mapname2mapid(mapname); } - if( m != -1 && ( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) ) { - ShowError("npc_parse_duplicate: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", maplist[m].name, x, y, maplist[m].xs, maplist[m].ys,filepath,strline(buffer,start-buffer)); + if( m != -1 && ( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) ) { + ShowError("npc_parse_duplicate: out-of-bounds coordinates (\"%s\",%d,%d), map is %dx%d, in file '%s', line '%d'\n", map->list[m].name, x, y, map->list[m].xs, map->list[m].ys,filepath,strline(buffer,start-buffer)); return end;//try next } @@ -2575,7 +2575,7 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch map->addblock(&nd->bl); if( class_ >= 0 ) { status->set_viewdata(&nd->bl, nd->class_); - if( maplist[nd->bl.m].users ) + if( map->list[nd->bl.m].users ) clif->spawn(&nd->bl); } } else { @@ -2605,12 +2605,12 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch int npc_duplicate4instance(struct npc_data *snd, int16 m) { char newname[NAME_LENGTH]; - if( m == -1 || maplist[m].instance_id == -1 ) + if( m == -1 || map->list[m].instance_id == -1 ) return 1; - snprintf(newname, ARRAYLENGTH(newname), "dup_%d_%d", maplist[m].instance_id, snd->bl.id); + snprintf(newname, ARRAYLENGTH(newname), "dup_%d_%d", map->list[m].instance_id, snd->bl.id); if( npc->name2id(newname) != NULL ) { // Name already in use - ShowError("npc_duplicate4instance: the npcname (%s) is already in use while trying to duplicate npc %s in instance %d.\n", newname, snd->exname, maplist[m].instance_id); + ShowError("npc_duplicate4instance: the npcname (%s) is already in use while trying to duplicate npc %s in instance %d.\n", newname, snd->exname, map->list[m].instance_id); return 1; } @@ -2619,8 +2619,8 @@ int npc_duplicate4instance(struct npc_data *snd, int16 m) { int dm = map->mapindex2mapid(snd->u.warp.mapindex), im; if( dm < 0 ) return 1; - if( ( im = instance->mapid2imapid(dm, maplist[m].instance_id) ) == -1 ) { - ShowError("npc_duplicate4instance: warp (%s) leading to instanced map (%s), but instance map is not attached to current instance.\n", maplist[dm].name, snd->exname); + if( ( im = instance->mapid2imapid(dm, map->list[m].instance_id) ) == -1 ) { + ShowError("npc_duplicate4instance: warp (%s) leading to instanced map (%s), but instance map is not attached to current instance.\n", map->list[dm].name, snd->exname); return 1; } @@ -2646,14 +2646,14 @@ int npc_duplicate4instance(struct npc_data *snd, int16 m) { map->addblock(&wnd->bl); status->set_viewdata(&wnd->bl, wnd->class_); wnd->ud = &npc->base_ud; - if( maplist[wnd->bl.m].users ) + if( map->list[wnd->bl.m].users ) clif->spawn(&wnd->bl); strdb_put(npc->name_db, wnd->exname, wnd); } else { static char w1[50], w2[50], w3[50], w4[50]; const char* stat_buf = "- call from instancing subsystem -\n"; - snprintf(w1, sizeof(w1), "%s,%d,%d,%d", maplist[m].name, snd->bl.x, snd->bl.y, snd->dir); + snprintf(w1, sizeof(w1), "%s,%d,%d,%d", map->list[m].name, snd->bl.x, snd->bl.y, snd->dir); snprintf(w2, sizeof(w2), "duplicate(%s)", snd->exname); snprintf(w3, sizeof(w3), "%s::%s", snd->name, newname); @@ -2686,14 +2686,14 @@ void npc_setcells(struct npc_data* nd) { return; // Other types doesn't have touch area } - if (m < 0 || xs < 0 || ys < 0 || maplist[m].cell == (struct mapcell *)0xdeadbeaf) //invalid range or map + if (m < 0 || xs < 0 || ys < 0 || map->list[m].cell == (struct mapcell *)0xdeadbeaf) //invalid range or map return; for (i = y-ys; i <= y+ys; i++) { for (j = x-xs; j <= x+xs; j++) { if (map->getcell(m, j, i, CELL_CHKNOPASS)) continue; - maplist[m].setcell(m, j, i, CELL_NPC, true); + map->list[m].setcell(m, j, i, CELL_NPC, true); } } } @@ -2718,20 +2718,20 @@ void npc_unsetcells(struct npc_data* nd) { ys = nd->u.scr.ys; } - if (m < 0 || xs < 0 || ys < 0 || maplist[m].cell == (struct mapcell *)0xdeadbeaf) + if (m < 0 || xs < 0 || ys < 0 || map->list[m].cell == (struct mapcell *)0xdeadbeaf) return; //Locate max range on which we can locate npc cells //FIXME: does this really do what it's supposed to do? [ultramage] for(x0 = x-xs; x0 > 0 && map->getcell(m, x0, y, CELL_CHKNPC); x0--); - for(x1 = x+xs; x1 < maplist[m].xs-1 && map->getcell(m, x1, y, CELL_CHKNPC); x1++); + for(x1 = x+xs; x1 < map->list[m].xs-1 && map->getcell(m, x1, y, CELL_CHKNPC); x1++); for(y0 = y-ys; y0 > 0 && map->getcell(m, x, y0, CELL_CHKNPC); y0--); - for(y1 = y+ys; y1 < maplist[m].ys-1 && map->getcell(m, x, y1, CELL_CHKNPC); y1++); + for(y1 = y+ys; y1 < map->list[m].ys-1 && map->getcell(m, x, y1, CELL_CHKNPC); y1++); //Erase this npc's cells for (i = y-ys; i <= y+ys; i++) for (j = x-xs; j <= x+xs; j++) - maplist[m].setcell(m, j, i, CELL_NPC, false); + map->list[m].setcell(m, j, i, CELL_NPC, false); //Re-deploy NPC cells for other nearby npcs. map->foreachinarea( npc->unsetcells_sub, m, x0, y0, x1, y1, BL_NPC, nd->bl.id ); @@ -2742,8 +2742,8 @@ void npc_movenpc(struct npc_data* nd, int16 x, int16 y) const int16 m = nd->bl.m; if (m < 0 || nd->bl.prev == NULL) return; //Not on a map. - x = cap_value(x, 0, maplist[m].xs-1); - y = cap_value(y, 0, maplist[m].ys-1); + x = cap_value(x, 0, map->list[m].xs-1); + y = cap_value(y, 0, map->list[m].ys-1); map->foreachinrange(clif->outsight, &nd->bl, AREA_SIZE, BL_PC, &nd->bl); map->moveblock(&nd->bl, x, y, timer->gettick()); @@ -2759,7 +2759,7 @@ void npc_setdisplayname(struct npc_data* nd, const char* newname) nullpo_retv(nd); safestrncpy(nd->name, newname, sizeof(nd->name)); - if( maplist[nd->bl.m].users ) + if( map->list[nd->bl.m].users ) clif->charnameack(0, &nd->bl); } @@ -2773,11 +2773,11 @@ void npc_setclass(struct npc_data* nd, short class_) { if( nd->class_ == class_ ) return; - if( maplist[nd->bl.m].users ) + if( map->list[nd->bl.m].users ) clif->clearunit_area(&nd->bl, CLR_OUTSIGHT);// fade out nd->class_ = class_; status->set_viewdata(&nd->bl, class_); - if( maplist[nd->bl.m].users ) + if( map->list[nd->bl.m].users ) clif->spawn(&nd->bl);// fade in } @@ -2931,8 +2931,8 @@ const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const char* st return strchr(start,'\n');// skip and continue mobspawn.m = (unsigned short)m; - if( x < 0 || x >= maplist[mobspawn.m].xs || y < 0 || y >= maplist[mobspawn.m].ys ) { - ShowError("npc_parse_mob: Spawn coordinates out of range: %s (%d,%d), map size is (%d,%d) - %s %s (file '%s', line '%d').\n", maplist[mobspawn.m].name, x, y, (maplist[mobspawn.m].xs-1), (maplist[mobspawn.m].ys-1), w1, w3, filepath, strline(buffer,start-buffer)); + if( x < 0 || x >= map->list[mobspawn.m].xs || y < 0 || y >= map->list[mobspawn.m].ys ) { + ShowError("npc_parse_mob: Spawn coordinates out of range: %s (%d,%d), map size is (%d,%d) - %s %s (file '%s', line '%d').\n", map->list[mobspawn.m].name, x, y, (map->list[mobspawn.m].xs-1), (map->list[mobspawn.m].ys-1), w1, w3, filepath, strline(buffer,start-buffer)); return strchr(start,'\n');// skip and continue } @@ -3044,7 +3044,7 @@ const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const char* st // check if target map has players // (usually shouldn't occur when map server is just starting, // but not the case when we do @reloadscript - if( maplist[data->m].users > 0 ) { + if( map->list[data->m].users > 0 ) { npc->parse_mob2(data); } } else { @@ -3088,68 +3088,68 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char if (state == 0) ; //Map flag disabled. else if (!strcmpi(w4, "SavePoint")) { - maplist[m].save.map = 0; - maplist[m].save.x = -1; - maplist[m].save.y = -1; + map->list[m].save.map = 0; + map->list[m].save.x = -1; + map->list[m].save.y = -1; } else if (sscanf(w4, "%31[^,],%d,%d", savemap, &savex, &savey) == 3) { - maplist[m].save.map = mapindex_name2id(savemap); - maplist[m].save.x = savex; - maplist[m].save.y = savey; - if (!maplist[m].save.map) { + map->list[m].save.map = mapindex_name2id(savemap); + map->list[m].save.x = savex; + map->list[m].save.y = savey; + if (!map->list[m].save.map) { ShowWarning("npc_parse_mapflag: Specified save point map '%s' for mapflag 'nosave' not found (file '%s', line '%d'), using 'SavePoint'.\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", savemap, filepath, strline(buffer,start-buffer), w1, w2, w3, w4); - maplist[m].save.x = -1; - maplist[m].save.y = -1; + map->list[m].save.x = -1; + map->list[m].save.y = -1; } } - maplist[m].flag.nosave = state; + map->list[m].flag.nosave = state; } else if (!strcmpi(w3,"autotrade")) - maplist[m].flag.autotrade=state; + map->list[m].flag.autotrade=state; else if (!strcmpi(w3,"allowks")) - maplist[m].flag.allowks=state; // [Kill Steal Protection] + map->list[m].flag.allowks=state; // [Kill Steal Protection] else if (!strcmpi(w3,"town")) - maplist[m].flag.town=state; + map->list[m].flag.town=state; else if (!strcmpi(w3,"nomemo")) - maplist[m].flag.nomemo=state; + map->list[m].flag.nomemo=state; else if (!strcmpi(w3,"noteleport")) - maplist[m].flag.noteleport=state; + map->list[m].flag.noteleport=state; else if (!strcmpi(w3,"nowarp")) - maplist[m].flag.nowarp=state; + map->list[m].flag.nowarp=state; else if (!strcmpi(w3,"nowarpto")) - maplist[m].flag.nowarpto=state; + map->list[m].flag.nowarpto=state; else if (!strcmpi(w3,"noreturn")) - maplist[m].flag.noreturn=state; + map->list[m].flag.noreturn=state; else if (!strcmpi(w3,"monster_noteleport")) - maplist[m].flag.monster_noteleport=state; + map->list[m].flag.monster_noteleport=state; else if (!strcmpi(w3,"nobranch")) - maplist[m].flag.nobranch=state; + map->list[m].flag.nobranch=state; else if (!strcmpi(w3,"nopenalty")) { - maplist[m].flag.noexppenalty=state; - maplist[m].flag.nozenypenalty=state; + map->list[m].flag.noexppenalty=state; + map->list[m].flag.nozenypenalty=state; } else if (!strcmpi(w3,"pvp")) { struct map_zone_data *zone; - maplist[m].flag.pvp = state; - if( state && (maplist[m].flag.gvg || maplist[m].flag.gvg_dungeon || maplist[m].flag.gvg_castle) ) { - maplist[m].flag.gvg = 0; - maplist[m].flag.gvg_dungeon = 0; - maplist[m].flag.gvg_castle = 0; - ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing GvG flags from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer)); - } - if( state && maplist[m].flag.battleground ) { - maplist[m].flag.battleground = 0; - ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing BattleGround flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer)); - } - if( state && (zone = strdb_get(zone_db, MAP_ZONE_PVP_NAME)) && maplist[m].zone != zone ) { + map->list[m].flag.pvp = state; + if( state && (map->list[m].flag.gvg || map->list[m].flag.gvg_dungeon || map->list[m].flag.gvg_castle) ) { + map->list[m].flag.gvg = 0; + map->list[m].flag.gvg_dungeon = 0; + map->list[m].flag.gvg_castle = 0; + ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing GvG flags from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer)); + } + if( state && map->list[m].flag.battleground ) { + map->list[m].flag.battleground = 0; + ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing BattleGround flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer)); + } + if( state && (zone = strdb_get(map->zone_db, MAP_ZONE_PVP_NAME)) && map->list[m].zone != zone ) { map->zone_change(m,zone,start,buffer,filepath); } else if ( !state ) { - maplist[m].zone = &map_zone_pk; + map->list[m].zone = &map->zone_pk; } } else if (!strcmpi(w3,"pvp_noparty")) - maplist[m].flag.pvp_noparty=state; + map->list[m].flag.pvp_noparty=state; else if (!strcmpi(w3,"pvp_noguild")) - maplist[m].flag.pvp_noguild=state; + map->list[m].flag.pvp_noguild=state; else if (!strcmpi(w3, "pvp_nightmaredrop")) { char drop_arg1[16], drop_arg2[16]; int drop_per = 0; @@ -3167,145 +3167,145 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char drop_type = 3; if (drop_id != 0) { - RECREATE(maplist[m].drop_list, struct map_drop_list, ++maplist[m].drop_list_count); - maplist[m].drop_list[maplist[m].drop_list_count-1].drop_id = drop_id; - maplist[m].drop_list[maplist[m].drop_list_count-1].drop_type = drop_type; - maplist[m].drop_list[maplist[m].drop_list_count-1].drop_per = drop_per; - maplist[m].flag.pvp_nightmaredrop = 1; + RECREATE(map->list[m].drop_list, struct map_drop_list, ++map->list[m].drop_list_count); + map->list[m].drop_list[map->list[m].drop_list_count-1].drop_id = drop_id; + map->list[m].drop_list[map->list[m].drop_list_count-1].drop_type = drop_type; + map->list[m].drop_list[map->list[m].drop_list_count-1].drop_per = drop_per; + map->list[m].flag.pvp_nightmaredrop = 1; } } else if (!state) //Disable - maplist[m].flag.pvp_nightmaredrop = 0; + map->list[m].flag.pvp_nightmaredrop = 0; } else if (!strcmpi(w3,"pvp_nocalcrank")) - maplist[m].flag.pvp_nocalcrank=state; + map->list[m].flag.pvp_nocalcrank=state; else if (!strcmpi(w3,"gvg")) { struct map_zone_data *zone; - maplist[m].flag.gvg = state; - if( state && maplist[m].flag.pvp ) { - maplist[m].flag.pvp = 0; - ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing PvP flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer)); + map->list[m].flag.gvg = state; + if( state && map->list[m].flag.pvp ) { + map->list[m].flag.pvp = 0; + ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing PvP flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer)); } - if( state && maplist[m].flag.battleground ) { - maplist[m].flag.battleground = 0; - ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing BattleGround flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer)); + if( state && map->list[m].flag.battleground ) { + map->list[m].flag.battleground = 0; + ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing BattleGround flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer)); } - if( state && (zone = strdb_get(zone_db, MAP_ZONE_GVG_NAME)) && maplist[m].zone != zone ) { + if( state && (zone = strdb_get(map->zone_db, MAP_ZONE_GVG_NAME)) && map->list[m].zone != zone ) { map->zone_change(m,zone,start,buffer,filepath); } } else if (!strcmpi(w3,"gvg_noparty")) - maplist[m].flag.gvg_noparty=state; + map->list[m].flag.gvg_noparty=state; else if (!strcmpi(w3,"gvg_dungeon")) { - maplist[m].flag.gvg_dungeon=state; - if (state) maplist[m].flag.pvp=0; + map->list[m].flag.gvg_dungeon=state; + if (state) map->list[m].flag.pvp=0; } else if (!strcmpi(w3,"gvg_castle")) { - maplist[m].flag.gvg_castle=state; - if (state) maplist[m].flag.pvp=0; + map->list[m].flag.gvg_castle=state; + if (state) map->list[m].flag.pvp=0; } else if (!strcmpi(w3,"battleground")) { struct map_zone_data *zone; if( state ) { if( sscanf(w4, "%d", &state) == 1 ) - maplist[m].flag.battleground = state; + map->list[m].flag.battleground = state; else - maplist[m].flag.battleground = 1; // Default value + map->list[m].flag.battleground = 1; // Default value } else - maplist[m].flag.battleground = 0; + map->list[m].flag.battleground = 0; - if( maplist[m].flag.battleground && maplist[m].flag.pvp ) { - maplist[m].flag.pvp = 0; - ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing PvP flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer)); + if( map->list[m].flag.battleground && map->list[m].flag.pvp ) { + map->list[m].flag.pvp = 0; + ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing PvP flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer)); } - if( maplist[m].flag.battleground && (maplist[m].flag.gvg || maplist[m].flag.gvg_dungeon || maplist[m].flag.gvg_castle) ) { - maplist[m].flag.gvg = 0; - maplist[m].flag.gvg_dungeon = 0; - maplist[m].flag.gvg_castle = 0; - ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing GvG flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer)); + if( map->list[m].flag.battleground && (map->list[m].flag.gvg || map->list[m].flag.gvg_dungeon || map->list[m].flag.gvg_castle) ) { + map->list[m].flag.gvg = 0; + map->list[m].flag.gvg_dungeon = 0; + map->list[m].flag.gvg_castle = 0; + ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing GvG flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer)); } - if( state && (zone = strdb_get(zone_db, MAP_ZONE_BG_NAME)) && maplist[m].zone != zone ) { + if( state && (zone = strdb_get(map->zone_db, MAP_ZONE_BG_NAME)) && map->list[m].zone != zone ) { map->zone_change(m,zone,start,buffer,filepath); } } else if (!strcmpi(w3,"noexppenalty")) - maplist[m].flag.noexppenalty=state; + map->list[m].flag.noexppenalty=state; else if (!strcmpi(w3,"nozenypenalty")) - maplist[m].flag.nozenypenalty=state; + map->list[m].flag.nozenypenalty=state; else if (!strcmpi(w3,"notrade")) - maplist[m].flag.notrade=state; + map->list[m].flag.notrade=state; else if (!strcmpi(w3,"novending")) - maplist[m].flag.novending=state; + map->list[m].flag.novending=state; else if (!strcmpi(w3,"nodrop")) - maplist[m].flag.nodrop=state; + map->list[m].flag.nodrop=state; else if (!strcmpi(w3,"noskill")) - maplist[m].flag.noskill=state; + map->list[m].flag.noskill=state; else if (!strcmpi(w3,"noicewall")) - maplist[m].flag.noicewall=state; + map->list[m].flag.noicewall=state; else if (!strcmpi(w3,"snow")) - maplist[m].flag.snow=state; + map->list[m].flag.snow=state; else if (!strcmpi(w3,"clouds")) - maplist[m].flag.clouds=state; + map->list[m].flag.clouds=state; else if (!strcmpi(w3,"clouds2")) - maplist[m].flag.clouds2=state; + map->list[m].flag.clouds2=state; else if (!strcmpi(w3,"fog")) - maplist[m].flag.fog=state; + map->list[m].flag.fog=state; else if (!strcmpi(w3,"fireworks")) - maplist[m].flag.fireworks=state; + map->list[m].flag.fireworks=state; else if (!strcmpi(w3,"sakura")) - maplist[m].flag.sakura=state; + map->list[m].flag.sakura=state; else if (!strcmpi(w3,"leaves")) - maplist[m].flag.leaves=state; + map->list[m].flag.leaves=state; else if (!strcmpi(w3,"nightenabled")) - maplist[m].flag.nightenabled=state; + map->list[m].flag.nightenabled=state; else if (!strcmpi(w3,"noexp")) { - maplist[m].flag.nobaseexp=state; - maplist[m].flag.nojobexp=state; + map->list[m].flag.nobaseexp=state; + map->list[m].flag.nojobexp=state; } else if (!strcmpi(w3,"nobaseexp")) - maplist[m].flag.nobaseexp=state; + map->list[m].flag.nobaseexp=state; else if (!strcmpi(w3,"nojobexp")) - maplist[m].flag.nojobexp=state; + map->list[m].flag.nojobexp=state; else if (!strcmpi(w3,"noloot")) { - maplist[m].flag.nomobloot=state; - maplist[m].flag.nomvploot=state; + map->list[m].flag.nomobloot=state; + map->list[m].flag.nomvploot=state; } else if (!strcmpi(w3,"nomobloot")) - maplist[m].flag.nomobloot=state; + map->list[m].flag.nomobloot=state; else if (!strcmpi(w3,"nomvploot")) - maplist[m].flag.nomvploot=state; + map->list[m].flag.nomvploot=state; else if (!strcmpi(w3,"nocommand")) { if (state) { if (sscanf(w4, "%d", &state) == 1) - maplist[m].nocommand =state; + map->list[m].nocommand =state; else //No level specified, block everyone. - maplist[m].nocommand =100; + map->list[m].nocommand =100; } else - maplist[m].nocommand=0; + map->list[m].nocommand=0; } else if (!strcmpi(w3,"jexp")) { - maplist[m].jexp = (state) ? atoi(w4) : 100; - if( maplist[m].jexp < 0 ) maplist[m].jexp = 100; - maplist[m].flag.nojobexp = (maplist[m].jexp==0)?1:0; + map->list[m].jexp = (state) ? atoi(w4) : 100; + if( map->list[m].jexp < 0 ) map->list[m].jexp = 100; + map->list[m].flag.nojobexp = (map->list[m].jexp==0)?1:0; } else if (!strcmpi(w3,"bexp")) { - maplist[m].bexp = (state) ? atoi(w4) : 100; - if( maplist[m].bexp < 0 ) maplist[m].bexp = 100; - maplist[m].flag.nobaseexp = (maplist[m].bexp==0)?1:0; + map->list[m].bexp = (state) ? atoi(w4) : 100; + if( map->list[m].bexp < 0 ) map->list[m].bexp = 100; + map->list[m].flag.nobaseexp = (map->list[m].bexp==0)?1:0; } else if (!strcmpi(w3,"loadevent")) - maplist[m].flag.loadevent=state; + map->list[m].flag.loadevent=state; else if (!strcmpi(w3,"nochat")) - maplist[m].flag.nochat=state; + map->list[m].flag.nochat=state; else if (!strcmpi(w3,"partylock")) - maplist[m].flag.partylock=state; + map->list[m].flag.partylock=state; else if (!strcmpi(w3,"guildlock")) - maplist[m].flag.guildlock=state; + map->list[m].flag.guildlock=state; else if (!strcmpi(w3,"reset")) - maplist[m].flag.reset=state; + map->list[m].flag.reset=state; else if (!strcmpi(w3,"notomb")) - maplist[m].flag.notomb=state; + map->list[m].flag.notomb=state; else if (!strcmpi(w3,"adjust_unit_duration")) { int skill_id, k; char skill_name[MAP_ZONE_MAPFLAG_LENGTH], modifier[MAP_ZONE_MAPFLAG_LENGTH]; @@ -3323,41 +3323,41 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char } if( modifier[0] == '\0' ) { - ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer)); + ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer)); } else if( !( skill_id = skill->name2id(skill_name) ) || !skill->get_unit_id( skill->name2id(skill_name), 0) ) { - ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n",skill_name, maplist[m].name, filepath, strline(buffer,start-buffer)); + ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n",skill_name, map->list[m].name, filepath, strline(buffer,start-buffer)); } else if ( atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX ) { - ShowWarning("npc_parse_mapflag: Invalid modifier '%d' for skill '%s' for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", atoi(modifier), skill_name, maplist[m].name, filepath, strline(buffer,start-buffer)); + ShowWarning("npc_parse_mapflag: Invalid modifier '%d' for skill '%s' for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", atoi(modifier), skill_name, map->list[m].name, filepath, strline(buffer,start-buffer)); } else { - int idx = maplist[m].unit_count; + int idx = map->list[m].unit_count; - ARR_FIND(0, idx, k, maplist[m].units[k]->skill_id == skill_id); + ARR_FIND(0, idx, k, map->list[m].units[k]->skill_id == skill_id); if( k < idx ) { if( atoi(modifier) != 100 ) - maplist[m].units[k]->modifier = (unsigned short)atoi(modifier); + map->list[m].units[k]->modifier = (unsigned short)atoi(modifier); else { /* remove */ int cursor = 0; - aFree(maplist[m].units[k]); - maplist[m].units[k] = NULL; + aFree(map->list[m].units[k]); + map->list[m].units[k] = NULL; for( k = 0; k < idx; k++ ) { - if( maplist[m].units[k] == NULL ) + if( map->list[m].units[k] == NULL ) continue; - maplist[m].units[cursor] = maplist[m].units[k]; + map->list[m].units[cursor] = map->list[m].units[k]; cursor++; } - if( !( maplist[m].unit_count = cursor ) ) { - aFree(maplist[m].units); - maplist[m].units = NULL; + if( !( map->list[m].unit_count = cursor ) ) { + aFree(map->list[m].units); + map->list[m].units = NULL; } } } else if( atoi(modifier) != 100 ) { - RECREATE(maplist[m].units, struct mapflag_skill_adjust*, ++maplist[m].unit_count); - CREATE(maplist[m].units[idx],struct mapflag_skill_adjust,1); - maplist[m].units[idx]->skill_id = (unsigned short)skill_id; - maplist[m].units[idx]->modifier = (unsigned short)atoi(modifier); + RECREATE(map->list[m].units, struct mapflag_skill_adjust*, ++map->list[m].unit_count); + CREATE(map->list[m].units[idx],struct mapflag_skill_adjust,1); + map->list[m].units[idx]->skill_id = (unsigned short)skill_id; + map->list[m].units[idx]->modifier = (unsigned short)atoi(modifier); } } } else if (!strcmpi(w3,"adjust_skill_damage")) { @@ -3377,68 +3377,68 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char } if( modifier[0] == '\0' ) { - ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", maplist[m].name, filepath, strline(buffer,start-buffer)); + ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", map->list[m].name, filepath, strline(buffer,start-buffer)); } else if( !( skill_id = skill->name2id(skill_name) ) ) { - ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", skill_name, maplist[m].name, filepath, strline(buffer,start-buffer)); + ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", skill_name, map->list[m].name, filepath, strline(buffer,start-buffer)); } else if ( atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX ) { - ShowWarning("npc_parse_mapflag: Invalid modifier '%d' for skill '%s' for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", atoi(modifier), skill_name, maplist[m].name, filepath, strline(buffer,start-buffer)); + ShowWarning("npc_parse_mapflag: Invalid modifier '%d' for skill '%s' for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", atoi(modifier), skill_name, map->list[m].name, filepath, strline(buffer,start-buffer)); } else { - int idx = maplist[m].skill_count; + int idx = map->list[m].skill_count; - ARR_FIND(0, idx, k, maplist[m].skills[k]->skill_id == skill_id); + ARR_FIND(0, idx, k, map->list[m].skills[k]->skill_id == skill_id); if( k < idx ) { if( atoi(modifier) != 100 ) - maplist[m].skills[k]->modifier = (unsigned short)atoi(modifier); + map->list[m].skills[k]->modifier = (unsigned short)atoi(modifier); else { /* remove */ int cursor = 0; - aFree(maplist[m].skills[k]); - maplist[m].skills[k] = NULL; + aFree(map->list[m].skills[k]); + map->list[m].skills[k] = NULL; for( k = 0; k < idx; k++ ) { - if( maplist[m].skills[k] == NULL ) + if( map->list[m].skills[k] == NULL ) continue; - maplist[m].skills[cursor] = maplist[m].skills[k]; + map->list[m].skills[cursor] = map->list[m].skills[k]; cursor++; } - if( !( maplist[m].skill_count = cursor ) ) { - aFree(maplist[m].skills); - maplist[m].skills = NULL; + if( !( map->list[m].skill_count = cursor ) ) { + aFree(map->list[m].skills); + map->list[m].skills = NULL; } } } else if( atoi(modifier) != 100 ) { - RECREATE(maplist[m].skills, struct mapflag_skill_adjust*, ++maplist[m].skill_count); - CREATE(maplist[m].skills[idx],struct mapflag_skill_adjust,1); - maplist[m].skills[idx]->skill_id = (unsigned short)skill_id; - maplist[m].skills[idx]->modifier = (unsigned short)atoi(modifier); + RECREATE(map->list[m].skills, struct mapflag_skill_adjust*, ++map->list[m].skill_count); + CREATE(map->list[m].skills[idx],struct mapflag_skill_adjust,1); + map->list[m].skills[idx]->skill_id = (unsigned short)skill_id; + map->list[m].skills[idx]->modifier = (unsigned short)atoi(modifier); } } } else if (!strcmpi(w3,"zone")) { struct map_zone_data *zone; - if( !(zone = strdb_get(zone_db, w4)) ) { - ShowWarning("npc_parse_mapflag: Invalid zone '%s'! removing flag from %s (file '%s', line '%d').\n", w4, maplist[m].name, filepath, strline(buffer,start-buffer)); - } else if( maplist[m].zone != zone ) { + if( !(zone = strdb_get(map->zone_db, w4)) ) { + ShowWarning("npc_parse_mapflag: Invalid zone '%s'! removing flag from %s (file '%s', line '%d').\n", w4, map->list[m].name, filepath, strline(buffer,start-buffer)); + } else if( map->list[m].zone != zone ) { map->zone_change(m,zone,start,buffer,filepath); } } else if ( !strcmpi(w3,"nomapchannelautojoin") ) { - maplist[m].flag.chsysnolocalaj = state; + map->list[m].flag.chsysnolocalaj = state; } else if ( !strcmpi(w3,"invincible_time_inc") ) { - maplist[m].invincible_time_inc = (state) ? atoi(w4) : 0; + map->list[m].invincible_time_inc = (state) ? atoi(w4) : 0; } else if ( !strcmpi(w3,"noknockback") ) { - maplist[m].flag.noknockback = state; + map->list[m].flag.noknockback = state; } else if ( !strcmpi(w3,"weapon_damage_rate") ) { - maplist[m].weapon_damage_rate = (state) ? atoi(w4) : 100; + map->list[m].weapon_damage_rate = (state) ? atoi(w4) : 100; } else if ( !strcmpi(w3,"magic_damage_rate") ) { - maplist[m].magic_damage_rate = (state) ? atoi(w4) : 100; + map->list[m].magic_damage_rate = (state) ? atoi(w4) : 100; } else if ( !strcmpi(w3,"misc_damage_rate") ) { - maplist[m].misc_damage_rate = (state) ? atoi(w4) : 100; + map->list[m].misc_damage_rate = (state) ? atoi(w4) : 100; } else if ( !strcmpi(w3,"short_damage_rate") ) { - maplist[m].short_damage_rate = (state) ? atoi(w4) : 100; + map->list[m].short_damage_rate = (state) ? atoi(w4) : 100; } else if ( !strcmpi(w3,"long_damage_rate") ) { - maplist[m].long_damage_rate = (state) ? atoi(w4) : 100; + map->list[m].long_damage_rate = (state) ? atoi(w4) : 100; } else ShowError("npc_parse_mapflag: unrecognized mapflag '%s' (file '%s', line '%d').\n", w3, filepath, strline(buffer,start-buffer)); @@ -3560,7 +3560,7 @@ void npc_parsesrcfile(const char* filepath, bool runOnInit) p = strchr(p,'\n');// next line continue; } - if (x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys) { + if (x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys) { ShowError("npc_parsesrcfile: Unknown coordinates ('%d', '%d') for map '%s' in file '%s', line '%d'. Skipping line...\n", x, y, mapname, filepath, strline(buffer,p-buffer)); if( strcasecmp(w2,"script") == 0 && count > 3 ) { @@ -3742,20 +3742,20 @@ int npc_reload(void) { mapit->free(iter); if(battle_config.dynamic_mobs) {// dynamic check by [random] - for (m = 0; m < map->map_num; m++) { + for (m = 0; m < map->count; m++) { for (i = 0; i < MAX_MOB_LIST_PER_MAP; i++) { - if (maplist[m].moblist[i] != NULL) { - aFree(maplist[m].moblist[i]); - maplist[m].moblist[i] = NULL; + if (map->list[m].moblist[i] != NULL) { + aFree(map->list[m].moblist[i]); + map->list[m].moblist[i] = NULL; } - if( maplist[m].mob_delete_timer != INVALID_TIMER ) + if( map->list[m].mob_delete_timer != INVALID_TIMER ) { // Mobs were removed anyway,so delete the timer [Inkfish] - timer->delete(maplist[m].mob_delete_timer, map->removemobs_timer); - maplist[m].mob_delete_timer = INVALID_TIMER; + timer->delete(map->list[m].mob_delete_timer, map->removemobs_timer); + map->list[m].mob_delete_timer = INVALID_TIMER; } } - if (maplist[m].npc_num > 0) - ShowWarning("npc_reload: %d npcs weren't removed at map %s!\n", maplist[m].npc_num, maplist[m].name); + if (map->list[m].npc_num > 0) + ShowWarning("npc_reload: %d npcs weren't removed at map %s!\n", map->list[m].npc_num, map->list[m].name); } } @@ -3865,24 +3865,24 @@ void npc_debug_warps_sub(struct npc_data* nd) { if (map->getcell(m, nd->u.warp.x, nd->u.warp.y, CELL_CHKNPC)) { ShowWarning("Warp %s at %s(%d,%d) warps directly on top of an area npc at %s(%d,%d)\n", nd->name, - maplist[nd->bl.m].name, nd->bl.x, nd->bl.y, - maplist[m].name, nd->u.warp.x, nd->u.warp.y + map->list[nd->bl.m].name, nd->bl.x, nd->bl.y, + map->list[m].name, nd->u.warp.x, nd->u.warp.y ); } if (map->getcell(m, nd->u.warp.x, nd->u.warp.y, CELL_CHKNOPASS)) { ShowWarning("Warp %s at %s(%d,%d) warps to a non-walkable tile at %s(%d,%d)\n", nd->name, - maplist[nd->bl.m].name, nd->bl.x, nd->bl.y, - maplist[m].name, nd->u.warp.x, nd->u.warp.y + map->list[nd->bl.m].name, nd->bl.x, nd->bl.y, + map->list[m].name, nd->u.warp.x, nd->u.warp.y ); } } static void npc_debug_warps(void) { int16 m, i; - for (m = 0; m < map->map_num; m++) - for (i = 0; i < maplist[m].npc_num; i++) - npc->debug_warps_sub(maplist[m].npc[i]); + for (m = 0; m < map->count; m++) + for (i = 0; i < map->list[m].npc_num; i++) + npc->debug_warps_sub(map->list[m].npc[i]); } /*========================================== diff --git a/src/map/party.c b/src/map/party.c index a3fd5019f..1694adf2c 100644 --- a/src/map/party.c +++ b/src/map/party.c @@ -630,7 +630,7 @@ bool party_changeleader(struct map_session_data *sd, struct map_session_data *ts return false; } - if( maplist[sd->bl.m].flag.partylock ) { + if( map->list[sd->bl.m].flag.partylock ) { clif->message(sd->fd, msg_txt(287)); return false; } diff --git a/src/map/path.c b/src/map/path.c index 79e004601..a47677cf5 100644 --- a/src/map/path.c +++ b/src/map/path.c @@ -68,9 +68,9 @@ int path_blownpos(int16 m,int16 x0,int16 y0,int16 dx,int16 dy,int count) { struct map_data *md; - if( !maplist[m].cell ) + if( !map->list[m].cell ) return -1; - md = &maplist[m]; + md = &map->list[m]; if( count>25 ){ //Cap to prevent too much processing...? ShowWarning("path_blownpos: count too many %d !\n",count); @@ -121,9 +121,9 @@ bool path_search_long(struct shootpath_data *spd,int16 m,int16 x0,int16 y0,int16 if( spd == NULL ) spd = &s_spd; // use dummy output variable - if (!maplist[m].cell) + if (!map->list[m].cell) return false; - md = &maplist[m]; + md = &map->list[m]; dx = (x1 - x0); if (dx < 0) { @@ -255,9 +255,9 @@ bool path_search(struct walkpath_data *wpd, int16 m, int16 x0, int16 y0, int16 x if (wpd == NULL) wpd = &s_wpd; // use dummy output variable - if (!maplist[m].cell) + if (!map->list[m].cell) return false; - md = &maplist[m]; + md = &map->list[m]; #ifdef CELL_NOSTACK //Do not check starting cell as that would get you stuck. diff --git a/src/map/pc.c b/src/map/pc.c index 17734dfe8..58972a204 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -136,7 +136,7 @@ int pc_invincible_timer(int tid, unsigned int tick, int id, intptr_t data) { void pc_setinvincibletimer(struct map_session_data* sd, int val) { nullpo_retv(sd); - val += maplist[sd->bl.m].invincible_time_inc; + val += map->list[sd->bl.m].invincible_time_inc; if( sd->invincible_timer != INVALID_TIMER ) timer->delete(sd->invincible_timer,pc->invincible_timer); @@ -547,8 +547,8 @@ int pc_makesavestatus(struct map_session_data *sd) sd->status.last_point.y = sd->bl.y; } - if(maplist[sd->bl.m].flag.nosave || maplist[sd->bl.m].instance_id >= 0) { - struct map_data *m=&maplist[sd->bl.m]; + if(map->list[sd->bl.m].flag.nosave || map->list[sd->bl.m].instance_id >= 0) { + struct map_data *m=&map->list[sd->bl.m]; if(m->save.map) memcpy(&sd->status.last_point,&m->save,sizeof(sd->status.last_point)); else @@ -1273,9 +1273,9 @@ int pc_reg_received(struct map_session_data *sd) sd->vd.class_ = INVISIBLE_CLASS; clif->message(sd->fd, msg_txt(11)); // Invisible: On // decrement the number of pvp players on the map - maplist[sd->bl.m].users_pvp--; + map->list[sd->bl.m].users_pvp--; - if( maplist[sd->bl.m].flag.pvp && !maplist[sd->bl.m].flag.pvp_nocalcrank && sd->pvp_timer != INVALID_TIMER ) {// unregister the player for ranking + if( map->list[sd->bl.m].flag.pvp && !map->list[sd->bl.m].flag.pvp_nocalcrank && sd->pvp_timer != INVALID_TIMER ) {// unregister the player for ranking timer->delete( sd->pvp_timer, pc->calc_pvprank_timer ); sd->pvp_timer = INVALID_TIMER; } @@ -3998,7 +3998,7 @@ int pc_dropitem(struct map_session_data *sd,int n,int amount) ) return 0; - if( maplist[sd->bl.m].flag.nodrop ) { + if( map->list[sd->bl.m].flag.nodrop ) { clif->message (sd->fd, msg_txt(271)); return 0; //Can't drop items in nodrop mapflag maps. } @@ -4126,7 +4126,7 @@ int pc_isUseitem(struct map_session_data *sd,int n) break; case 601: // Fly Wing case 12212: // Giant Fly Wing - if( maplist[sd->bl.m].flag.noteleport || map_flag_gvg2(sd->bl.m) ) { + if( map->list[sd->bl.m].flag.noteleport || map_flag_gvg2(sd->bl.m) ) { clif->skill_mapinfomessage(sd,0); return 0; } @@ -4143,14 +4143,14 @@ int pc_isUseitem(struct map_session_data *sd,int n) clif->message(sd->fd, msg_txt(663)); return 0; } - if( nameid != 601 && nameid != 12212 && maplist[sd->bl.m].flag.noreturn ) + if( nameid != 601 && nameid != 12212 && map->list[sd->bl.m].flag.noreturn ) return 0; break; case 604: // Dead Branch case 12024: // Red Pouch case 12103: // Bloody Branch case 12109: // Poring Box - if( maplist[sd->bl.m].flag.nobranch || map_flag_gvg2(sd->bl.m) ) + if( map->list[sd->bl.m].flag.nobranch || map_flag_gvg2(sd->bl.m) ) return 0; break; case 12210: // Bubble Gum @@ -4191,7 +4191,7 @@ int pc_isUseitem(struct map_session_data *sd,int n) break; case 12213: //Neuralizer - if( !maplist[sd->bl.m].flag.reset ) + if( !map->list[sd->bl.m].flag.reset ) return 0; break; } @@ -4365,8 +4365,8 @@ int pc_useitem(struct map_session_data *sd,int n) { } /* on restricted maps the item is consumed but the effect is not used */ - for(i = 0; i < maplist[sd->bl.m].zone->disabled_items_count; i++) { - if( maplist[sd->bl.m].zone->disabled_items[i] == nameid ) { + for(i = 0; i < map->list[sd->bl.m].zone->disabled_items_count; i++) { + if( map->list[sd->bl.m].zone->disabled_items[i] == nameid ) { clif->msg(sd, ITEM_CANT_USE_AREA); // This item cannot be used within this area if( battle_config.item_restricted_consumption_type ) { clif->useitemack(sd,n,sd->status.inventory[n].amount-1,true); @@ -4636,7 +4636,7 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, uint16 skil md_status= status->get_status_data(bl); if( md->master_id || md_status->mode&MD_BOSS || mob_is_treasure(md) || - maplist[bl->m].flag.nomobloot || // check noloot map flag [Lorky] + map->list[bl->m].flag.nomobloot || // check noloot map flag [Lorky] (battle_config.skill_steal_max_tries && //Reached limit of steal attempts. [Lupus] md->state.steal_flag++ >= battle_config.skill_steal_max_tries) ) { //Can't steal from @@ -4744,7 +4744,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y pc->setrestartvalue(sd,1); } - if( maplist[m].flag.src4instance ) { + if( map->list[m].flag.src4instance ) { struct party_data *p; bool stop = false; int i = 0, j = 0; @@ -4752,7 +4752,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y if( sd->instances ) { for( i = 0; i < sd->instances; i++ ) { if( sd->instance[i] >= 0 ) { - ARR_FIND(0, instance->list[sd->instance[i]].num_map, j, maplist[instance->list[sd->instance[i]].map[j]].instance_src_map == m && !maplist[instance->list[sd->instance[i]].map[j]].custom_name); + ARR_FIND(0, instance->list[sd->instance[i]].num_map, j, map->list[instance->list[sd->instance[i]].map[j]].instance_src_map == m && !map->list[instance->list[sd->instance[i]].map[j]].custom_name); if( j != instance->list[sd->instance[i]].num_map ) break; } @@ -4766,7 +4766,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y if ( !stop && sd->status.party_id && (p = party->search(sd->status.party_id)) && p->instances ) { for( i = 0; i < p->instances; i++ ) { if( p->instance[i] >= 0 ) { - ARR_FIND(0, instance->list[p->instance[i]].num_map, j, maplist[instance->list[p->instance[i]].map[j]].instance_src_map == m && !maplist[instance->list[p->instance[i]].map[j]].custom_name); + ARR_FIND(0, instance->list[p->instance[i]].num_map, j, map->list[instance->list[p->instance[i]].map[j]].instance_src_map == m && !map->list[instance->list[p->instance[i]].map[j]].custom_name); if( j != instance->list[p->instance[i]].num_map ) break; } @@ -4780,7 +4780,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y if ( !stop && sd->status.guild_id && sd->guild && sd->guild->instances ) { for( i = 0; i < sd->guild->instances; i++ ) { if( sd->guild->instance[i] >= 0 ) { - ARR_FIND(0, instance->list[sd->guild->instance[i]].num_map, j, maplist[instance->list[sd->guild->instance[i]].map[j]].instance_src_map == m && !maplist[instance->list[sd->guild->instance[i]].map[j]].custom_name); + ARR_FIND(0, instance->list[sd->guild->instance[i]].num_map, j, map->list[instance->list[sd->guild->instance[i]].map[j]].instance_src_map == m && !map->list[instance->list[sd->guild->instance[i]].map[j]].custom_name); if( j != instance->list[sd->guild->instance[i]].num_map ) break; } @@ -4803,13 +4803,13 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y for( i = 0; i < sd->queues_count; i++ ) { struct hQueue *queue; if( (queue = script->queue(sd->queues[i])) && queue->onMapChange[0] != '\0' ) { - pc->setregstr(sd, script->add_str("QMapChangeTo"), maplist[m].name); + pc->setregstr(sd, script->add_str("QMapChangeTo"), map->list[m].name); npc->event(sd, queue->onMapChange, 0); } } - if( maplist[m].cell == (struct mapcell *)0xdeadbeaf ) - map->cellfromcache(&maplist[m]); + if( map->list[m].cell == (struct mapcell *)0xdeadbeaf ) + map->cellfromcache(&map->list[m]); if (sd->sc.count) { // Cancel some map related stuff. if (sd->sc.data[SC_JAILED]) return 1; //You may not get out! @@ -4842,13 +4842,13 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y if (sd->regen.state.gc) sd->regen.state.gc = 0; // make sure vending is allowed here - if (sd->state.vending && maplist[m].flag.novending) { + if (sd->state.vending && map->list[m].flag.novending) { clif->message (sd->fd, msg_txt(276)); // "You can't open a shop on this map" vending->close(sd); } - if( hChSys.local && maplist[sd->bl.m].channel && idb_exists(maplist[sd->bl.m].channel->users, sd->status.char_id) ) { - clif->chsys_left(maplist[sd->bl.m].channel,sd); + if( hChSys.local && map->list[sd->bl.m].channel && idb_exists(map->list[sd->bl.m].channel->users, sd->status.char_id) ) { + clif->chsys_left(map->list[sd->bl.m].channel,sd); } } @@ -4877,15 +4877,15 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y return 0; } - if( x < 0 || x >= maplist[m].xs || y < 0 || y >= maplist[m].ys ) { + if( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) { ShowError("pc_setpos: attempt to place player %s (%d:%d) on invalid coordinates (%s-%d,%d)\n", sd->status.name, sd->status.account_id, sd->status.char_id, mapindex_id2name(mapindex),x,y); x = y = 0; // make it random } if( x == 0 && y == 0 ) {// pick a random walkable cell do { - x=rnd()%(maplist[m].xs-2)+1; - y=rnd()%(maplist[m].ys-2)+1; + x=rnd()%(map->list[m].xs-2)+1; + y=rnd()%(map->list[m].ys-2)+1; } while(map->getcell(m,x,y,CELL_CHKNOPASS)); } @@ -4906,7 +4906,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y sd->bl.x = sd->ud.to_x = x; sd->bl.y = sd->ud.to_y = y; - if( sd->status.guild_id > 0 && maplist[m].flag.gvg_castle ) { // Increased guild castle regen [Valaris] + if( sd->status.guild_id > 0 && map->list[m].flag.gvg_castle ) { // Increased guild castle regen [Valaris] struct guild_castle *gc = guild->mapindex2gc(sd->mapindex); if(gc && gc->guild_id == sd->status.guild_id) sd->regen.state.gc = 1; @@ -4951,12 +4951,12 @@ int pc_randomwarp(struct map_session_data *sd, clr_type type) { m=sd->bl.m; - if (maplist[sd->bl.m].flag.noteleport) //Teleport forbidden + if (map->list[sd->bl.m].flag.noteleport) //Teleport forbidden return 0; do { - x=rnd()%(maplist[m].xs-2)+1; - y=rnd()%(maplist[m].ys-2)+1; + x=rnd()%(map->list[m].xs-2)+1; + y=rnd()%(map->list[m].ys-2)+1; } while( map->getcell(m,x,y,CELL_CHKNOPASS) && (i++) < 1000 ); if (i < 1000) @@ -4975,7 +4975,7 @@ int pc_memo(struct map_session_data* sd, int pos) { nullpo_ret(sd); // check mapflags - if( sd->bl.m >= 0 && (maplist[sd->bl.m].flag.nomemo || maplist[sd->bl.m].flag.nowarpto) && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE) ) { + if( sd->bl.m >= 0 && (map->list[sd->bl.m].flag.nomemo || map->list[sd->bl.m].flag.nowarpto) && !pc->has_permission(sd, PC_PERM_WARP_ANYWHERE) ) { clif->skill_mapinfomessage(sd, 1); // "Saved point cannot be memorized." return 0; } @@ -5833,7 +5833,7 @@ int pc_gainexp(struct map_session_data *sd, struct block_list *src, unsigned int if(sd->bl.prev == NULL || pc_isdead(sd)) return 0; - if(!battle_config.pvp_exp && maplist[sd->bl.m].flag.pvp) // [MouseJstr] + if(!battle_config.pvp_exp && map->list[sd->bl.m].flag.pvp) // [MouseJstr] return 0; // no exp on pvp maps if(sd->status.guild_id>0) @@ -6651,7 +6651,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) { if(sd->status.pet_id > 0 && sd->pd) { struct pet_data *pd = sd->pd; - if( !maplist[sd->bl.m].flag.noexppenalty ) { + if( !map->list[sd->bl.m].flag.noexppenalty ) { pet->set_intimate(pd, pd->pet.intimate - pd->petDB->die); if( pd->pet.intimate < 0 ) pd->pet.intimate = 0; @@ -6809,7 +6809,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) { } if( battle_config.bone_drop==2 - || (battle_config.bone_drop==1 && maplist[sd->bl.m].flag.pvp) + || (battle_config.bone_drop==1 && map->list[sd->bl.m].flag.pvp) ) { struct item item_tmp; memset(&item_tmp,0,sizeof(item_tmp)); @@ -6843,7 +6843,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) { // changed penalty options, added death by player if pk_mode [Valaris] if( battle_config.death_penalty_type && (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE // only novices will receive no penalty - && !maplist[sd->bl.m].flag.noexppenalty && !map_flag_gvg2(sd->bl.m) + && !map->list[sd->bl.m].flag.noexppenalty && !map_flag_gvg2(sd->bl.m) && !sd->sc.data[SC_BABY] && !sd->sc.data[SC_CASH_DEATHPENALTY] ) { unsigned int base_penalty =0; @@ -6881,7 +6881,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) { clif->updatestatus(sd,SP_JOBEXP); } } - if(battle_config.zeny_penalty > 0 && !maplist[sd->bl.m].flag.nozenypenalty) + if(battle_config.zeny_penalty > 0 && !map->list[sd->bl.m].flag.nozenypenalty) { base_penalty = (unsigned int)((double)sd->status.zeny * (double)battle_config.zeny_penalty / 10000.); if(base_penalty) @@ -6889,12 +6889,12 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) { } } - if(maplist[sd->bl.m].flag.pvp_nightmaredrop) { + if(map->list[sd->bl.m].flag.pvp_nightmaredrop) { // Moved this outside so it works when PVP isn't enabled and during pk mode [Ancyker] - for(j=0;jbl.m].drop_list_count;j++){ - int id = maplist[sd->bl.m].drop_list[j].drop_id; - int type = maplist[sd->bl.m].drop_list[j].drop_type; - int per = maplist[sd->bl.m].drop_list[j].drop_per; + for(j=0;jlist[sd->bl.m].drop_list_count;j++){ + int id = map->list[sd->bl.m].drop_list[j].drop_id; + int type = map->list[sd->bl.m].drop_list[j].drop_type; + int per = map->list[sd->bl.m].drop_list[j].drop_per; if(id == 0) continue; if(id == -1){ @@ -6940,7 +6940,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) { } // pvp // disable certain pvp functions on pk_mode [Valaris] - if( maplist[sd->bl.m].flag.pvp && !battle_config.pk_mode && !maplist[sd->bl.m].flag.pvp_nocalcrank ) { + if( map->list[sd->bl.m].flag.pvp && !battle_config.pk_mode && !map->list[sd->bl.m].flag.pvp_nocalcrank ) { sd->pvp_point -= 5; sd->pvp_lost++; if( src && src->type == BL_PC ) @@ -8992,7 +8992,7 @@ int pc_calc_pvprank_sub(struct block_list *bl,va_list ap) int pc_calc_pvprank(struct map_session_data *sd) { int old; struct map_data *m; - m=&maplist[sd->bl.m]; + m=&map->list[sd->bl.m]; old=sd->pvp_rank; sd->pvp_rank=1; map->foreachinmap(pc_calc_pvprank_sub,sd->bl.m,BL_PC,sd); @@ -9259,7 +9259,7 @@ int pc_autosave(int tid, unsigned int tick, int id, intptr_t data) } int pc_daynight_timer_sub(struct map_session_data *sd,va_list ap) { - if (sd->state.night != map->night_flag && maplist[sd->bl.m].flag.nightenabled) { //Night/day state does not match. + if (sd->state.night != map->night_flag && map->list[sd->bl.m].flag.nightenabled) { //Night/day state does not match. clif->status_change(&sd->bl, SI_SKE, map->night_flag, 0, 0, 0, 0); //New night effect by dynamix [Skotlex] sd->state.night = map->night_flag; return 1; @@ -9280,7 +9280,7 @@ int map_day_timer(int tid, unsigned int tick, int id, intptr_t data) { return 0; //Already day. map->night_flag = 0; // 0=day, 1=night [Yor] - map->map_foreachpc(pc->daynight_timer_sub); + map->foreachpc(pc->daynight_timer_sub); strcpy(tmp_soutput, (data == 0) ? msg_txt(502) : msg_txt(60)); // The day has arrived! intif->broadcast(tmp_soutput, strlen(tmp_soutput) + 1, BC_DEFAULT); return 0; @@ -9300,7 +9300,7 @@ int map_night_timer(int tid, unsigned int tick, int id, intptr_t data) { return 0; //Already nigth. map->night_flag = 1; // 0=day, 1=night [Yor] - map->map_foreachpc(pc->daynight_timer_sub); + map->foreachpc(pc->daynight_timer_sub); strcpy(tmp_soutput, (data == 0) ? msg_txt(503) : msg_txt(59)); // The night has fallen... intif->broadcast(tmp_soutput, strlen(tmp_soutput) + 1, BC_DEFAULT); return 0; diff --git a/src/map/pet.c b/src/map/pet.c index 811ac9f09..023059a6b 100644 --- a/src/map/pet.c +++ b/src/map/pet.c @@ -934,7 +934,7 @@ int pet_ai_sub_foreachclient(struct map_session_data *sd,va_list ap) } int pet_ai_hard(int tid, unsigned int tick, int id, intptr_t data) { - map->map_foreachpc(pet->ai_sub_foreachclient,tick); + map->foreachpc(pet->ai_sub_foreachclient,tick); return 0; } diff --git a/src/map/script.c b/src/map/script.c index 875ecd841..879ca8c84 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -172,13 +172,13 @@ void script_reportsrc(struct script_state *st) { switch( bl->type ) { case BL_NPC: if( bl->m >= 0 ) - ShowDebug("Source (NPC): %s at %s (%d,%d)\n", ((struct npc_data *)bl)->name, maplist[bl->m].name, bl->x, bl->y); + ShowDebug("Source (NPC): %s at %s (%d,%d)\n", ((struct npc_data *)bl)->name, map->list[bl->m].name, bl->x, bl->y); else ShowDebug("Source (NPC): %s (invisible/not on a map)\n", ((struct npc_data *)bl)->name); break; default: if( bl->m >= 0 ) - ShowDebug("Source (Non-NPC type %d): name %s at %s (%d,%d)\n", bl->type, status->get_name(bl), maplist[bl->m].name, bl->x, bl->y); + ShowDebug("Source (Non-NPC type %d): name %s at %s (%d,%d)\n", bl->type, status->get_name(bl), map->list[bl->m].name, bl->x, bl->y); else ShowDebug("Source (Non-NPC type %d): name %s (invisible/not on a map)\n", bl->type, status->get_name(bl)); break; @@ -3285,7 +3285,7 @@ void run_script_main(struct script_state *st) { nd = map->id2nd(st->oid); if( nd && nd->bl.m >= 0 ) - st->instance_id = maplist[nd->bl.m].instance_id; + st->instance_id = map->list[nd->bl.m].instance_id; else st->instance_id = -1; @@ -4623,7 +4623,7 @@ BUILDIN(warpparty) if( !(pl_sd = p->data[i].sd) || pl_sd->status.party_id != p_id ) continue; - if( str2 && strcmp(str2, maplist[pl_sd->bl.m].name) != 0 ) + if( str2 && strcmp(str2, map->list[pl_sd->bl.m].name) != 0 ) continue; if( pc_isdead(pl_sd) ) @@ -4632,20 +4632,20 @@ BUILDIN(warpparty) switch( type ) { case 0: // Random - if(!maplist[pl_sd->bl.m].flag.nowarp) + if(!map->list[pl_sd->bl.m].flag.nowarp) pc->randomwarp(pl_sd,CLR_TELEPORT); break; case 1: // SavePointAll - if(!maplist[pl_sd->bl.m].flag.noreturn) + if(!map->list[pl_sd->bl.m].flag.noreturn) pc->setpos(pl_sd,pl_sd->status.save_point.map,pl_sd->status.save_point.x,pl_sd->status.save_point.y,CLR_TELEPORT); break; case 2: // SavePoint - if(!maplist[pl_sd->bl.m].flag.noreturn) + if(!map->list[pl_sd->bl.m].flag.noreturn) pc->setpos(pl_sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,CLR_TELEPORT); break; case 3: // Leader case 4: // m,x,y - if(!maplist[pl_sd->bl.m].flag.noreturn && !maplist[pl_sd->bl.m].flag.nowarp) + if(!map->list[pl_sd->bl.m].flag.noreturn && !map->list[pl_sd->bl.m].flag.nowarp) pc->setpos(pl_sd,mapindex,x,y,CLR_TELEPORT); break; } @@ -4693,19 +4693,19 @@ BUILDIN(warpguild) switch( type ) { case 0: // Random - if(!maplist[pl_sd->bl.m].flag.nowarp) + if(!map->list[pl_sd->bl.m].flag.nowarp) pc->randomwarp(pl_sd,CLR_TELEPORT); break; case 1: // SavePointAll - if(!maplist[pl_sd->bl.m].flag.noreturn) + if(!map->list[pl_sd->bl.m].flag.noreturn) pc->setpos(pl_sd,pl_sd->status.save_point.map,pl_sd->status.save_point.x,pl_sd->status.save_point.y,CLR_TELEPORT); break; case 2: // SavePoint - if(!maplist[pl_sd->bl.m].flag.noreturn) + if(!map->list[pl_sd->bl.m].flag.noreturn) pc->setpos(pl_sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,CLR_TELEPORT); break; case 3: // m,x,y - if(!maplist[pl_sd->bl.m].flag.noreturn && !maplist[pl_sd->bl.m].flag.nowarp) + if(!map->list[pl_sd->bl.m].flag.noreturn && !map->list[pl_sd->bl.m].flag.nowarp) pc->setpos(pl_sd,mapindex_name2id(str),x,y,CLR_TELEPORT); break; } @@ -6715,7 +6715,7 @@ BUILDIN(strcharinfo) } break; case 3: - script_pushconststr(st,maplist[sd->bl.m].name); + script_pushconststr(st,map->list[sd->bl.m].name); break; default: ShowWarning("buildin_strcharinfo: unknown parameter.\n"); @@ -6767,7 +6767,7 @@ BUILDIN(strnpcinfo) { name = aStrdup(nd->exname); break; case 4: // map name - name = aStrdup(maplist[nd->bl.m].name); + name = aStrdup(map->list[nd->bl.m].name); break; } @@ -8314,7 +8314,7 @@ BUILDIN(monster) return false; } - if (maplist[m].flag.src4instance && st->instance_id >= 0) { // Try to redirect to the instance map, not the src map + if (map->list[m].flag.src4instance && st->instance_id >= 0) { // Try to redirect to the instance map, not the src map if ((m = instance->mapid2imapid(m, st->instance_id)) < 0) { ShowError("buildin_monster: Trying to spawn monster (%d) on instance map (%s) without instance attached.\n", class_, mapn); return false; @@ -8412,7 +8412,7 @@ BUILDIN(areamonster) ShowWarning("buildin_areamonster: Attempted to spawn monster class %d on non-existing map '%s'\n",class_, mapn); return false; } - if (maplist[m].flag.src4instance && st->instance_id >= 0) { // Try to redirect to the instance map, not the src map + if (map->list[m].flag.src4instance && st->instance_id >= 0) { // Try to redirect to the instance map, not the src map if ((m = instance->mapid2imapid(m, st->instance_id)) < 0) { ShowError("buildin_areamonster: Trying to spawn monster (%d) on instance map (%s) without instance attached.\n", class_, mapn); return false; @@ -8474,7 +8474,7 @@ BUILDIN(killmonster) { if( (m=map->mapname2mapid(mapname))<0 ) return true; - if( maplist[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 ) + if( map->list[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 ) return true; if( script_hasdata(st,4) ) { @@ -8514,7 +8514,7 @@ BUILDIN(killmonsterall) { if( (m = map->mapname2mapid(mapname))<0 ) return true; - if( maplist[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 ) + if( map->list[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 ) return true; if( script_hasdata(st,3) ) { @@ -9085,7 +9085,7 @@ BUILDIN(getusers) { } if(bl) { - val = maplist[bl->m].users; + val = map->list[bl->m].users; } break; case 1: @@ -9168,7 +9168,7 @@ BUILDIN(getmapusers) { script_pushint(st,-1); return true; } - script_pushint(st,maplist[m].users); + script_pushint(st,map->list[m].users); return true; } /*========================================== @@ -9988,7 +9988,7 @@ BUILDIN(warpwaitingpc) { for( i = 0; i < n && cd->users > 0; i++ ) { sd = cd->usersd[0]; - if( strcmp(map_name,"SavePoint") == 0 && maplist[sd->bl.m].flag.noteleport ) { + if( strcmp(map_name,"SavePoint") == 0 && map->list[sd->bl.m].flag.noteleport ) { // can't teleport on this map break; } @@ -10082,10 +10082,10 @@ BUILDIN(setmapflagnosave) { mapindex = mapindex_name2id(str2); if(m >= 0 && mapindex) { - maplist[m].flag.nosave=1; - maplist[m].save.map=mapindex; - maplist[m].save.x=x; - maplist[m].save.y=y; + map->list[m].flag.nosave=1; + map->list[m].save.map=mapindex; + map->list[m].save.x=x; + map->list[m].save.y=y; } return true; @@ -10102,56 +10102,56 @@ BUILDIN(getmapflag) m = map->mapname2mapid(str); if(m >= 0) { switch(i) { - case MF_NOMEMO: script_pushint(st,maplist[m].flag.nomemo); break; - case MF_NOTELEPORT: script_pushint(st,maplist[m].flag.noteleport); break; - case MF_NOSAVE: script_pushint(st,maplist[m].flag.nosave); break; - case MF_NOBRANCH: script_pushint(st,maplist[m].flag.nobranch); break; - case MF_NOPENALTY: script_pushint(st,maplist[m].flag.noexppenalty); break; - case MF_NOZENYPENALTY: script_pushint(st,maplist[m].flag.nozenypenalty); break; - case MF_PVP: script_pushint(st,maplist[m].flag.pvp); break; - case MF_PVP_NOPARTY: script_pushint(st,maplist[m].flag.pvp_noparty); break; - case MF_PVP_NOGUILD: script_pushint(st,maplist[m].flag.pvp_noguild); break; - case MF_GVG: script_pushint(st,maplist[m].flag.gvg); break; - case MF_GVG_NOPARTY: script_pushint(st,maplist[m].flag.gvg_noparty); break; - case MF_NOTRADE: script_pushint(st,maplist[m].flag.notrade); break; - case MF_NOSKILL: script_pushint(st,maplist[m].flag.noskill); break; - case MF_NOWARP: script_pushint(st,maplist[m].flag.nowarp); break; - case MF_PARTYLOCK: script_pushint(st,maplist[m].flag.partylock); break; - case MF_NOICEWALL: script_pushint(st,maplist[m].flag.noicewall); break; - case MF_SNOW: script_pushint(st,maplist[m].flag.snow); break; - case MF_FOG: script_pushint(st,maplist[m].flag.fog); break; - case MF_SAKURA: script_pushint(st,maplist[m].flag.sakura); break; - case MF_LEAVES: script_pushint(st,maplist[m].flag.leaves); break; - case MF_CLOUDS: script_pushint(st,maplist[m].flag.clouds); break; - case MF_CLOUDS2: script_pushint(st,maplist[m].flag.clouds2); break; - case MF_FIREWORKS: script_pushint(st,maplist[m].flag.fireworks); break; - case MF_GVG_CASTLE: script_pushint(st,maplist[m].flag.gvg_castle); break; - case MF_GVG_DUNGEON: script_pushint(st,maplist[m].flag.gvg_dungeon); break; - case MF_NIGHTENABLED: script_pushint(st,maplist[m].flag.nightenabled); break; - case MF_NOBASEEXP: script_pushint(st,maplist[m].flag.nobaseexp); break; - case MF_NOJOBEXP: script_pushint(st,maplist[m].flag.nojobexp); break; - case MF_NOMOBLOOT: script_pushint(st,maplist[m].flag.nomobloot); break; - case MF_NOMVPLOOT: script_pushint(st,maplist[m].flag.nomvploot); break; - case MF_NORETURN: script_pushint(st,maplist[m].flag.noreturn); break; - case MF_NOWARPTO: script_pushint(st,maplist[m].flag.nowarpto); break; - case MF_NIGHTMAREDROP: script_pushint(st,maplist[m].flag.pvp_nightmaredrop); break; - case MF_NOCOMMAND: script_pushint(st,maplist[m].nocommand); break; - case MF_NODROP: script_pushint(st,maplist[m].flag.nodrop); break; - case MF_JEXP: script_pushint(st,maplist[m].jexp); break; - case MF_BEXP: script_pushint(st,maplist[m].bexp); break; - case MF_NOVENDING: script_pushint(st,maplist[m].flag.novending); break; - case MF_LOADEVENT: script_pushint(st,maplist[m].flag.loadevent); break; - case MF_NOCHAT: script_pushint(st,maplist[m].flag.nochat); break; - case MF_NOEXPPENALTY: script_pushint(st,maplist[m].flag.noexppenalty ); break; - case MF_GUILDLOCK: script_pushint(st,maplist[m].flag.guildlock); break; - case MF_TOWN: script_pushint(st,maplist[m].flag.town); break; - case MF_AUTOTRADE: script_pushint(st,maplist[m].flag.autotrade); break; - case MF_ALLOWKS: script_pushint(st,maplist[m].flag.allowks); break; - case MF_MONSTER_NOTELEPORT: script_pushint(st,maplist[m].flag.monster_noteleport); break; - case MF_PVP_NOCALCRANK: script_pushint(st,maplist[m].flag.pvp_nocalcrank); break; - case MF_BATTLEGROUND: script_pushint(st,maplist[m].flag.battleground); break; - case MF_RESET: script_pushint(st,maplist[m].flag.reset); break; - case MF_NOTOMB: script_pushint(st,maplist[m].flag.notomb); break; + case MF_NOMEMO: script_pushint(st,map->list[m].flag.nomemo); break; + case MF_NOTELEPORT: script_pushint(st,map->list[m].flag.noteleport); break; + case MF_NOSAVE: script_pushint(st,map->list[m].flag.nosave); break; + case MF_NOBRANCH: script_pushint(st,map->list[m].flag.nobranch); break; + case MF_NOPENALTY: script_pushint(st,map->list[m].flag.noexppenalty); break; + case MF_NOZENYPENALTY: script_pushint(st,map->list[m].flag.nozenypenalty); break; + case MF_PVP: script_pushint(st,map->list[m].flag.pvp); break; + case MF_PVP_NOPARTY: script_pushint(st,map->list[m].flag.pvp_noparty); break; + case MF_PVP_NOGUILD: script_pushint(st,map->list[m].flag.pvp_noguild); break; + case MF_GVG: script_pushint(st,map->list[m].flag.gvg); break; + case MF_GVG_NOPARTY: script_pushint(st,map->list[m].flag.gvg_noparty); break; + case MF_NOTRADE: script_pushint(st,map->list[m].flag.notrade); break; + case MF_NOSKILL: script_pushint(st,map->list[m].flag.noskill); break; + case MF_NOWARP: script_pushint(st,map->list[m].flag.nowarp); break; + case MF_PARTYLOCK: script_pushint(st,map->list[m].flag.partylock); break; + case MF_NOICEWALL: script_pushint(st,map->list[m].flag.noicewall); break; + case MF_SNOW: script_pushint(st,map->list[m].flag.snow); break; + case MF_FOG: script_pushint(st,map->list[m].flag.fog); break; + case MF_SAKURA: script_pushint(st,map->list[m].flag.sakura); break; + case MF_LEAVES: script_pushint(st,map->list[m].flag.leaves); break; + case MF_CLOUDS: script_pushint(st,map->list[m].flag.clouds); break; + case MF_CLOUDS2: script_pushint(st,map->list[m].flag.clouds2); break; + case MF_FIREWORKS: script_pushint(st,map->list[m].flag.fireworks); break; + case MF_GVG_CASTLE: script_pushint(st,map->list[m].flag.gvg_castle); break; + case MF_GVG_DUNGEON: script_pushint(st,map->list[m].flag.gvg_dungeon); break; + case MF_NIGHTENABLED: script_pushint(st,map->list[m].flag.nightenabled); break; + case MF_NOBASEEXP: script_pushint(st,map->list[m].flag.nobaseexp); break; + case MF_NOJOBEXP: script_pushint(st,map->list[m].flag.nojobexp); break; + case MF_NOMOBLOOT: script_pushint(st,map->list[m].flag.nomobloot); break; + case MF_NOMVPLOOT: script_pushint(st,map->list[m].flag.nomvploot); break; + case MF_NORETURN: script_pushint(st,map->list[m].flag.noreturn); break; + case MF_NOWARPTO: script_pushint(st,map->list[m].flag.nowarpto); break; + case MF_NIGHTMAREDROP: script_pushint(st,map->list[m].flag.pvp_nightmaredrop); break; + case MF_NOCOMMAND: script_pushint(st,map->list[m].nocommand); break; + case MF_NODROP: script_pushint(st,map->list[m].flag.nodrop); break; + case MF_JEXP: script_pushint(st,map->list[m].jexp); break; + case MF_BEXP: script_pushint(st,map->list[m].bexp); break; + case MF_NOVENDING: script_pushint(st,map->list[m].flag.novending); break; + case MF_LOADEVENT: script_pushint(st,map->list[m].flag.loadevent); break; + case MF_NOCHAT: script_pushint(st,map->list[m].flag.nochat); break; + case MF_NOEXPPENALTY: script_pushint(st,map->list[m].flag.noexppenalty ); break; + case MF_GUILDLOCK: script_pushint(st,map->list[m].flag.guildlock); break; + case MF_TOWN: script_pushint(st,map->list[m].flag.town); break; + case MF_AUTOTRADE: script_pushint(st,map->list[m].flag.autotrade); break; + case MF_ALLOWKS: script_pushint(st,map->list[m].flag.allowks); break; + case MF_MONSTER_NOTELEPORT: script_pushint(st,map->list[m].flag.monster_noteleport); break; + case MF_PVP_NOCALCRANK: script_pushint(st,map->list[m].flag.pvp_nocalcrank); break; + case MF_BATTLEGROUND: script_pushint(st,map->list[m].flag.battleground); break; + case MF_RESET: script_pushint(st,map->list[m].flag.reset); break; + case MF_NOTOMB: script_pushint(st,map->list[m].flag.notomb); break; } } @@ -10197,77 +10197,77 @@ BUILDIN(setmapflag) { if(m >= 0) { switch(i) { - case MF_NOMEMO: maplist[m].flag.nomemo = 1; break; - case MF_NOTELEPORT: maplist[m].flag.noteleport = 1; break; - case MF_NOSAVE: maplist[m].flag.nosave = 1; break; - case MF_NOBRANCH: maplist[m].flag.nobranch = 1; break; - case MF_NOPENALTY: maplist[m].flag.noexppenalty = 1; maplist[m].flag.nozenypenalty = 1; break; - case MF_NOZENYPENALTY: maplist[m].flag.nozenypenalty = 1; break; + case MF_NOMEMO: map->list[m].flag.nomemo = 1; break; + case MF_NOTELEPORT: map->list[m].flag.noteleport = 1; break; + case MF_NOSAVE: map->list[m].flag.nosave = 1; break; + case MF_NOBRANCH: map->list[m].flag.nobranch = 1; break; + case MF_NOPENALTY: map->list[m].flag.noexppenalty = 1; map->list[m].flag.nozenypenalty = 1; break; + case MF_NOZENYPENALTY: map->list[m].flag.nozenypenalty = 1; break; case MF_PVP: - maplist[m].flag.pvp = 1; + map->list[m].flag.pvp = 1; if( !battle_config.pk_mode ) { map->foreachinmap(script->mapflag_pvp_sub,m,BL_PC); } break; - case MF_PVP_NOPARTY: maplist[m].flag.pvp_noparty = 1; break; - case MF_PVP_NOGUILD: maplist[m].flag.pvp_noguild = 1; break; + case MF_PVP_NOPARTY: map->list[m].flag.pvp_noparty = 1; break; + case MF_PVP_NOGUILD: map->list[m].flag.pvp_noguild = 1; break; case MF_GVG: { struct block_list bl; - maplist[m].flag.gvg = 1; + map->list[m].flag.gvg = 1; clif->map_property_mapall(m, MAPPROPERTY_AGITZONE); bl.type = BL_NUL; bl.m = m; clif->maptypeproperty2(&bl,ALL_SAMEMAP); } break; - case MF_GVG_NOPARTY: maplist[m].flag.gvg_noparty = 1; break; - case MF_NOTRADE: maplist[m].flag.notrade = 1; break; - case MF_NOSKILL: maplist[m].flag.noskill = 1; break; - case MF_NOWARP: maplist[m].flag.nowarp = 1; break; - case MF_PARTYLOCK: maplist[m].flag.partylock = 1; break; - case MF_NOICEWALL: maplist[m].flag.noicewall = 1; break; - case MF_SNOW: maplist[m].flag.snow = 1; break; - case MF_FOG: maplist[m].flag.fog = 1; break; - case MF_SAKURA: maplist[m].flag.sakura = 1; break; - case MF_LEAVES: maplist[m].flag.leaves = 1; break; - case MF_CLOUDS: maplist[m].flag.clouds = 1; break; - case MF_CLOUDS2: maplist[m].flag.clouds2 = 1; break; - case MF_FIREWORKS: maplist[m].flag.fireworks = 1; break; - case MF_GVG_CASTLE: maplist[m].flag.gvg_castle = 1; break; - case MF_GVG_DUNGEON: maplist[m].flag.gvg_dungeon = 1; break; - case MF_NIGHTENABLED: maplist[m].flag.nightenabled = 1; break; - case MF_NOBASEEXP: maplist[m].flag.nobaseexp = 1; break; - case MF_NOJOBEXP: maplist[m].flag.nojobexp = 1; break; - case MF_NOMOBLOOT: maplist[m].flag.nomobloot = 1; break; - case MF_NOMVPLOOT: maplist[m].flag.nomvploot = 1; break; - case MF_NORETURN: maplist[m].flag.noreturn = 1; break; - case MF_NOWARPTO: maplist[m].flag.nowarpto = 1; break; - case MF_NIGHTMAREDROP: maplist[m].flag.pvp_nightmaredrop = 1; break; + case MF_GVG_NOPARTY: map->list[m].flag.gvg_noparty = 1; break; + case MF_NOTRADE: map->list[m].flag.notrade = 1; break; + case MF_NOSKILL: map->list[m].flag.noskill = 1; break; + case MF_NOWARP: map->list[m].flag.nowarp = 1; break; + case MF_PARTYLOCK: map->list[m].flag.partylock = 1; break; + case MF_NOICEWALL: map->list[m].flag.noicewall = 1; break; + case MF_SNOW: map->list[m].flag.snow = 1; break; + case MF_FOG: map->list[m].flag.fog = 1; break; + case MF_SAKURA: map->list[m].flag.sakura = 1; break; + case MF_LEAVES: map->list[m].flag.leaves = 1; break; + case MF_CLOUDS: map->list[m].flag.clouds = 1; break; + case MF_CLOUDS2: map->list[m].flag.clouds2 = 1; break; + case MF_FIREWORKS: map->list[m].flag.fireworks = 1; break; + case MF_GVG_CASTLE: map->list[m].flag.gvg_castle = 1; break; + case MF_GVG_DUNGEON: map->list[m].flag.gvg_dungeon = 1; break; + case MF_NIGHTENABLED: map->list[m].flag.nightenabled = 1; break; + case MF_NOBASEEXP: map->list[m].flag.nobaseexp = 1; break; + case MF_NOJOBEXP: map->list[m].flag.nojobexp = 1; break; + case MF_NOMOBLOOT: map->list[m].flag.nomobloot = 1; break; + case MF_NOMVPLOOT: map->list[m].flag.nomvploot = 1; break; + case MF_NORETURN: map->list[m].flag.noreturn = 1; break; + case MF_NOWARPTO: map->list[m].flag.nowarpto = 1; break; + case MF_NIGHTMAREDROP: map->list[m].flag.pvp_nightmaredrop = 1; break; case MF_ZONE: { char zone[6] = "zone\0"; char empty[1] = "\0"; char params[MAP_ZONE_MAPFLAG_LENGTH]; memcpy(params, val2, MAP_ZONE_MAPFLAG_LENGTH); - npc->parse_mapflag(maplist[m].name, empty, zone, params, empty, empty, empty); + npc->parse_mapflag(map->list[m].name, empty, zone, params, empty, empty, empty); } break; - case MF_NOCOMMAND: maplist[m].nocommand = (val <= 0) ? 100 : val; break; - case MF_NODROP: maplist[m].flag.nodrop = 1; break; - case MF_JEXP: maplist[m].jexp = (val <= 0) ? 100 : val; break; - case MF_BEXP: maplist[m].bexp = (val <= 0) ? 100 : val; break; - case MF_NOVENDING: maplist[m].flag.novending = 1; break; - case MF_LOADEVENT: maplist[m].flag.loadevent = 1; break; - case MF_NOCHAT: maplist[m].flag.nochat = 1; break; - case MF_NOEXPPENALTY: maplist[m].flag.noexppenalty = 1; break; - case MF_GUILDLOCK: maplist[m].flag.guildlock = 1; break; - case MF_TOWN: maplist[m].flag.town = 1; break; - case MF_AUTOTRADE: maplist[m].flag.autotrade = 1; break; - case MF_ALLOWKS: maplist[m].flag.allowks = 1; break; - case MF_MONSTER_NOTELEPORT: maplist[m].flag.monster_noteleport = 1; break; - case MF_PVP_NOCALCRANK: maplist[m].flag.pvp_nocalcrank = 1; break; - case MF_BATTLEGROUND: maplist[m].flag.battleground = (val <= 0 || val > 2) ? 1 : val; break; - case MF_RESET: maplist[m].flag.reset = 1; break; - case MF_NOTOMB: maplist[m].flag.notomb = 1; break; + case MF_NOCOMMAND: map->list[m].nocommand = (val <= 0) ? 100 : val; break; + case MF_NODROP: map->list[m].flag.nodrop = 1; break; + case MF_JEXP: map->list[m].jexp = (val <= 0) ? 100 : val; break; + case MF_BEXP: map->list[m].bexp = (val <= 0) ? 100 : val; break; + case MF_NOVENDING: map->list[m].flag.novending = 1; break; + case MF_LOADEVENT: map->list[m].flag.loadevent = 1; break; + case MF_NOCHAT: map->list[m].flag.nochat = 1; break; + case MF_NOEXPPENALTY: map->list[m].flag.noexppenalty = 1; break; + case MF_GUILDLOCK: map->list[m].flag.guildlock = 1; break; + case MF_TOWN: map->list[m].flag.town = 1; break; + case MF_AUTOTRADE: map->list[m].flag.autotrade = 1; break; + case MF_ALLOWKS: map->list[m].flag.allowks = 1; break; + case MF_MONSTER_NOTELEPORT: map->list[m].flag.monster_noteleport = 1; break; + case MF_PVP_NOCALCRANK: map->list[m].flag.pvp_nocalcrank = 1; break; + case MF_BATTLEGROUND: map->list[m].flag.battleground = (val <= 0 || val > 2) ? 1 : val; break; + case MF_RESET: map->list[m].flag.reset = 1; break; + case MF_NOTOMB: map->list[m].flag.notomb = 1; break; } } @@ -10284,75 +10284,75 @@ BUILDIN(removemapflag) { m = map->mapname2mapid(str); if(m >= 0) { switch(i) { - case MF_NOMEMO: maplist[m].flag.nomemo = 0; break; - case MF_NOTELEPORT: maplist[m].flag.noteleport = 0; break; - case MF_NOSAVE: maplist[m].flag.nosave = 0; break; - case MF_NOBRANCH: maplist[m].flag.nobranch = 0; break; - case MF_NOPENALTY: maplist[m].flag.noexppenalty = 0; maplist[m].flag.nozenypenalty = 0; break; - case MF_NOZENYPENALTY: maplist[m].flag.nozenypenalty = 0; break; + case MF_NOMEMO: map->list[m].flag.nomemo = 0; break; + case MF_NOTELEPORT: map->list[m].flag.noteleport = 0; break; + case MF_NOSAVE: map->list[m].flag.nosave = 0; break; + case MF_NOBRANCH: map->list[m].flag.nobranch = 0; break; + case MF_NOPENALTY: map->list[m].flag.noexppenalty = 0; map->list[m].flag.nozenypenalty = 0; break; + case MF_NOZENYPENALTY: map->list[m].flag.nozenypenalty = 0; break; case MF_PVP: { struct block_list bl; bl.type = BL_NUL; bl.m = m; - maplist[m].flag.pvp = 0; + map->list[m].flag.pvp = 0; clif->map_property_mapall(m, MAPPROPERTY_NOTHING); clif->maptypeproperty2(&bl,ALL_SAMEMAP); } break; - case MF_PVP_NOPARTY: maplist[m].flag.pvp_noparty = 0; break; - case MF_PVP_NOGUILD: maplist[m].flag.pvp_noguild = 0; break; + case MF_PVP_NOPARTY: map->list[m].flag.pvp_noparty = 0; break; + case MF_PVP_NOGUILD: map->list[m].flag.pvp_noguild = 0; break; case MF_GVG: { struct block_list bl; bl.type = BL_NUL; bl.m = m; - maplist[m].flag.gvg = 0; + map->list[m].flag.gvg = 0; clif->map_property_mapall(m, MAPPROPERTY_NOTHING); clif->maptypeproperty2(&bl,ALL_SAMEMAP); } break; - case MF_GVG_NOPARTY: maplist[m].flag.gvg_noparty = 0; break; - case MF_NOTRADE: maplist[m].flag.notrade = 0; break; - case MF_NOSKILL: maplist[m].flag.noskill = 0; break; - case MF_NOWARP: maplist[m].flag.nowarp = 0; break; - case MF_PARTYLOCK: maplist[m].flag.partylock = 0; break; - case MF_NOICEWALL: maplist[m].flag.noicewall = 0; break; - case MF_SNOW: maplist[m].flag.snow = 0; break; - case MF_FOG: maplist[m].flag.fog = 0; break; - case MF_SAKURA: maplist[m].flag.sakura = 0; break; - case MF_LEAVES: maplist[m].flag.leaves = 0; break; - case MF_CLOUDS: maplist[m].flag.clouds = 0; break; - case MF_CLOUDS2: maplist[m].flag.clouds2 = 0; break; - case MF_FIREWORKS: maplist[m].flag.fireworks = 0; break; - case MF_GVG_CASTLE: maplist[m].flag.gvg_castle = 0; break; - case MF_GVG_DUNGEON: maplist[m].flag.gvg_dungeon = 0; break; - case MF_NIGHTENABLED: maplist[m].flag.nightenabled = 0; break; - case MF_NOBASEEXP: maplist[m].flag.nobaseexp = 0; break; - case MF_NOJOBEXP: maplist[m].flag.nojobexp = 0; break; - case MF_NOMOBLOOT: maplist[m].flag.nomobloot = 0; break; - case MF_NOMVPLOOT: maplist[m].flag.nomvploot = 0; break; - case MF_NORETURN: maplist[m].flag.noreturn = 0; break; - case MF_NOWARPTO: maplist[m].flag.nowarpto = 0; break; - case MF_NIGHTMAREDROP: maplist[m].flag.pvp_nightmaredrop = 0; break; + case MF_GVG_NOPARTY: map->list[m].flag.gvg_noparty = 0; break; + case MF_NOTRADE: map->list[m].flag.notrade = 0; break; + case MF_NOSKILL: map->list[m].flag.noskill = 0; break; + case MF_NOWARP: map->list[m].flag.nowarp = 0; break; + case MF_PARTYLOCK: map->list[m].flag.partylock = 0; break; + case MF_NOICEWALL: map->list[m].flag.noicewall = 0; break; + case MF_SNOW: map->list[m].flag.snow = 0; break; + case MF_FOG: map->list[m].flag.fog = 0; break; + case MF_SAKURA: map->list[m].flag.sakura = 0; break; + case MF_LEAVES: map->list[m].flag.leaves = 0; break; + case MF_CLOUDS: map->list[m].flag.clouds = 0; break; + case MF_CLOUDS2: map->list[m].flag.clouds2 = 0; break; + case MF_FIREWORKS: map->list[m].flag.fireworks = 0; break; + case MF_GVG_CASTLE: map->list[m].flag.gvg_castle = 0; break; + case MF_GVG_DUNGEON: map->list[m].flag.gvg_dungeon = 0; break; + case MF_NIGHTENABLED: map->list[m].flag.nightenabled = 0; break; + case MF_NOBASEEXP: map->list[m].flag.nobaseexp = 0; break; + case MF_NOJOBEXP: map->list[m].flag.nojobexp = 0; break; + case MF_NOMOBLOOT: map->list[m].flag.nomobloot = 0; break; + case MF_NOMVPLOOT: map->list[m].flag.nomvploot = 0; break; + case MF_NORETURN: map->list[m].flag.noreturn = 0; break; + case MF_NOWARPTO: map->list[m].flag.nowarpto = 0; break; + case MF_NIGHTMAREDROP: map->list[m].flag.pvp_nightmaredrop = 0; break; case MF_ZONE: - map->zone_change2(m, maplist[m].prev_zone); + map->zone_change2(m, map->list[m].prev_zone); break; - case MF_NOCOMMAND: maplist[m].nocommand = 0; break; - case MF_NODROP: maplist[m].flag.nodrop = 0; break; - case MF_JEXP: maplist[m].jexp = 0; break; - case MF_BEXP: maplist[m].bexp = 0; break; - case MF_NOVENDING: maplist[m].flag.novending = 0; break; - case MF_LOADEVENT: maplist[m].flag.loadevent = 0; break; - case MF_NOCHAT: maplist[m].flag.nochat = 0; break; - case MF_NOEXPPENALTY: maplist[m].flag.noexppenalty = 0; break; - case MF_GUILDLOCK: maplist[m].flag.guildlock = 0; break; - case MF_TOWN: maplist[m].flag.town = 0; break; - case MF_AUTOTRADE: maplist[m].flag.autotrade = 0; break; - case MF_ALLOWKS: maplist[m].flag.allowks = 0; break; - case MF_MONSTER_NOTELEPORT: maplist[m].flag.monster_noteleport = 0; break; - case MF_PVP_NOCALCRANK: maplist[m].flag.pvp_nocalcrank = 0; break; - case MF_BATTLEGROUND: maplist[m].flag.battleground = 0; break; - case MF_RESET: maplist[m].flag.reset = 0; break; - case MF_NOTOMB: maplist[m].flag.notomb = 0; break; + case MF_NOCOMMAND: map->list[m].nocommand = 0; break; + case MF_NODROP: map->list[m].flag.nodrop = 0; break; + case MF_JEXP: map->list[m].jexp = 0; break; + case MF_BEXP: map->list[m].bexp = 0; break; + case MF_NOVENDING: map->list[m].flag.novending = 0; break; + case MF_LOADEVENT: map->list[m].flag.loadevent = 0; break; + case MF_NOCHAT: map->list[m].flag.nochat = 0; break; + case MF_NOEXPPENALTY: map->list[m].flag.noexppenalty = 0; break; + case MF_GUILDLOCK: map->list[m].flag.guildlock = 0; break; + case MF_TOWN: map->list[m].flag.town = 0; break; + case MF_AUTOTRADE: map->list[m].flag.autotrade = 0; break; + case MF_ALLOWKS: map->list[m].flag.allowks = 0; break; + case MF_MONSTER_NOTELEPORT: map->list[m].flag.monster_noteleport = 0; break; + case MF_PVP_NOCALCRANK: map->list[m].flag.pvp_nocalcrank = 0; break; + case MF_BATTLEGROUND: map->list[m].flag.battleground = 0; break; + case MF_RESET: map->list[m].flag.reset = 0; break; + case MF_NOTOMB: map->list[m].flag.notomb = 0; break; } } @@ -10368,11 +10368,16 @@ BUILDIN(pvpon) { str = script_getstr(st,2); m = map->mapname2mapid(str); - if( m < 0 || maplist[m].flag.pvp ) + if( m < 0 || map->list[m].flag.pvp ) return true; // nothing to do - map->zone_change2(m, strdb_get(zone_db, MAP_ZONE_PVP_NAME)); - maplist[m].flag.pvp = 1; + if( !strdb_exists(map->zone_db,MAP_ZONE_PVP_NAME) ) { + ShowError("buildin_pvpon: zone_db missing '%s'\n",MAP_ZONE_PVP_NAME); + return true; + } + + map->zone_change2(m, strdb_get(map->zone_db, MAP_ZONE_PVP_NAME)); + map->list[m].flag.pvp = 1; clif->map_property_mapall(m, MAPPROPERTY_FREEPVPZONE); bl.type = BL_NUL; bl.m = m; @@ -10418,11 +10423,11 @@ BUILDIN(pvpoff) { str=script_getstr(st,2); m = map->mapname2mapid(str); - if(m < 0 || !maplist[m].flag.pvp) + if(m < 0 || !map->list[m].flag.pvp) return true; //fixed Lupus - map->zone_change2(m, maplist[m].prev_zone); - maplist[m].flag.pvp = 0; + map->zone_change2(m, map->list[m].prev_zone); + map->list[m].flag.pvp = 0; clif->map_property_mapall(m, MAPPROPERTY_NOTHING); bl.type = BL_NUL; bl.m = m; @@ -10441,10 +10446,16 @@ BUILDIN(gvgon) { str=script_getstr(st,2); m = map->mapname2mapid(str); - if(m >= 0 && !maplist[m].flag.gvg) { + if(m >= 0 && !map->list[m].flag.gvg) { struct block_list bl; - map->zone_change2(m, strdb_get(zone_db, MAP_ZONE_GVG_NAME)); - maplist[m].flag.gvg = 1; + + if( !strdb_exists(map->zone_db,MAP_ZONE_GVG_NAME) ) { + ShowError("buildin_gvgon: zone_db missing '%s'\n",MAP_ZONE_GVG_NAME); + return true; + } + + map->zone_change2(m, strdb_get(map->zone_db, MAP_ZONE_GVG_NAME)); + map->list[m].flag.gvg = 1; clif->map_property_mapall(m, MAPPROPERTY_AGITZONE); bl.type = BL_NUL; bl.m = m; @@ -10459,10 +10470,10 @@ BUILDIN(gvgoff) { str=script_getstr(st,2); m = map->mapname2mapid(str); - if(m >= 0 && maplist[m].flag.gvg) { + if(m >= 0 && map->list[m].flag.gvg) { struct block_list bl; - map->zone_change2(m, maplist[m].prev_zone); - maplist[m].flag.gvg = 0; + map->zone_change2(m, map->list[m].prev_zone); + map->list[m].flag.gvg = 0; clif->map_property_mapall(m, MAPPROPERTY_NOTHING); bl.type = BL_NUL; bl.m = m; @@ -10542,7 +10553,7 @@ BUILDIN(maprespawnguildid) { return true; //Catch ALL players (in case some are 'between maps' on execution time) - map->map_foreachpc(script->buildin_maprespawnguildid_sub_pc,m,g_id,flag); + map->foreachpc(script->buildin_maprespawnguildid_sub_pc,m,g_id,flag); if (flag&4) //Remove script mobs. map->foreachinmap(script->buildin_maprespawnguildid_sub_mob,m,BL_MOB); return true; @@ -10969,7 +10980,7 @@ BUILDIN(mobcount) { return true; } - if( maplist[m].flag.src4instance && maplist[m].instance_id == -1 && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 ) { + if( map->list[m].flag.src4instance && map->list[m].instance_id == -1 && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 ) { script_pushint(st,-1); return true; } @@ -11690,7 +11701,7 @@ BUILDIN(playBGMall) { map->foreachinmap(script->playBGM_sub, m, BL_PC, name); } else { // entire server - map->map_foreachpc(script->playBGM_foreachpc_sub, name); + map->foreachpc(script->playBGM_foreachpc_sub, name); } return true; @@ -12565,7 +12576,7 @@ BUILDIN(getmapxy) x= bl->x; y= bl->y; - safestrncpy(mapname, maplist[bl->m].name, MAP_NAME_LENGTH); + safestrncpy(mapname, map->list[bl->m].name, MAP_NAME_LENGTH); //Set MapName$ num=st->stack->stack_data[st->start+2].u.num; @@ -14003,16 +14014,16 @@ int buildin_query_sql_sub(struct script_state* st, Sql* handle) return true; } BUILDIN(query_sql) { - return script->buildin_query_sql_sub(st, mmysql_handle); + return script->buildin_query_sql_sub(st, map->mysql_handle); } BUILDIN(query_logsql) { - if( !logs->config.sql_logs ) {// logmysql_handle == NULL + if( !logs->config.sql_logs ) {// logs->mysql_handle == NULL ShowWarning("buildin_query_logsql: SQL logs are disabled, query '%s' will not be executed.\n", script_getstr(st,2)); script_pushint(st,-1); return false; } - return script->buildin_query_sql_sub(st, logmysql_handle); + return script->buildin_query_sql_sub(st, logs->mysql_handle); } //Allows escaping of a given string. @@ -14025,7 +14036,7 @@ BUILDIN(escape_sql) str = script_getstr(st,2); len = strlen(str); esc_str = (char*)aMalloc(len*2+1); - SQL->EscapeStringLen(mmysql_handle, esc_str, str, len); + SQL->EscapeStringLen(map->mysql_handle, esc_str, str, len); script_pushstr(st, esc_str); return true; } @@ -15125,7 +15136,7 @@ BUILDIN(setcell) { for( y = y1; y <= y2; ++y ) for( x = x1; x <= x2; ++x ) - maplist[m].setcell(m, x, y, type, flag); + map->list[m].setcell(m, x, y, type, flag); return true; } @@ -15597,8 +15608,8 @@ BUILDIN(bg_updatescore) { if( (m = map->mapname2mapid(str)) < 0 ) return true; - maplist[m].bgscore_lion = script_getnum(st,3); - maplist[m].bgscore_eagle = script_getnum(st,4); + map->list[m].bgscore_lion = script_getnum(st,3); + map->list[m].bgscore_eagle = script_getnum(st,4); clif->bg_updatescore(m); return true; @@ -15704,7 +15715,7 @@ BUILDIN(instance_attachmap) { script_pushconststr(st, ""); return true; } - script_pushconststr(st, maplist[m].name); + script_pushconststr(st, map->list[m].name); return true; } @@ -15859,7 +15870,7 @@ BUILDIN(has_instance) { if( sd->instances ) { for( i = 0; i < sd->instances; i++ ) { if( sd->instance[i] >= 0 ) { - ARR_FIND(0, instance->list[sd->instance[i]].num_map, j, maplist[instance->list[sd->instance[i]].map[j]].instance_src_map == m); + ARR_FIND(0, instance->list[sd->instance[i]].num_map, j, map->list[instance->list[sd->instance[i]].map[j]].instance_src_map == m); if( j != instance->list[sd->instance[i]].num_map ) break; } @@ -15870,7 +15881,7 @@ BUILDIN(has_instance) { if( instance_id == -1 && sd->status.party_id && (p = party->search(sd->status.party_id)) && p->instances ) { for( i = 0; i < p->instances; i++ ) { if( p->instance[i] >= 0 ) { - ARR_FIND(0, instance->list[p->instance[i]].num_map, j, maplist[instance->list[p->instance[i]].map[j]].instance_src_map == m); + ARR_FIND(0, instance->list[p->instance[i]].num_map, j, map->list[instance->list[p->instance[i]].map[j]].instance_src_map == m); if( j != instance->list[p->instance[i]].num_map ) break; } @@ -15881,7 +15892,7 @@ BUILDIN(has_instance) { if( instance_id == -1 && sd->guild && sd->guild->instances ) { for( i = 0; i < sd->guild->instances; i++ ) { if( sd->guild->instance[i] >= 0 ) { - ARR_FIND(0, instance->list[sd->guild->instance[i]].num_map, j, maplist[instance->list[sd->guild->instance[i]].map[j]].instance_src_map == m); + ARR_FIND(0, instance->list[sd->guild->instance[i]].num_map, j, map->list[instance->list[sd->guild->instance[i]].map[j]].instance_src_map == m); if( j != instance->list[sd->guild->instance[i]].num_map ) break; } @@ -15896,7 +15907,7 @@ BUILDIN(has_instance) { return true; } - script_pushconststr(st, maplist[m].name); + script_pushconststr(st, map->list[m].name); return true; } int buildin_instance_warpall_sub(struct block_list *bl,va_list ap) { @@ -15927,7 +15938,7 @@ BUILDIN(instance_warpall) { else return true; - if( (m = map->mapname2mapid(mapn)) < 0 || (maplist[m].flag.src4instance && (m = instance->mapid2imapid(m, instance_id)) < 0) ) + if( (m = map->mapname2mapid(mapn)) < 0 || (map->list[m].flag.src4instance && (m = instance->mapid2imapid(m, instance_id)) < 0) ) return true; mapindex = map_id2index(m); @@ -16065,7 +16076,7 @@ BUILDIN(areamobuseskill) { return true; } - if( maplist[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 ) + if( map->list[m].flag.src4instance && st->instance_id >= 0 && (m = instance->mapid2imapid(m, st->instance_id)) < 0 ) return true; center.m = m; diff --git a/src/map/skill.c b/src/map/skill.c index 127eb1aa2..dd87f27d9 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -475,7 +475,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd) case AL_WARP: case RETURN_TO_ELDICASTES: case ALL_GUARDIAN_RECALL: - if(maplist[m].flag.nowarp) { + if(map->list[m].flag.nowarp) { clif->skill_mapinfomessage(sd,0); return 1; } @@ -483,7 +483,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd) case AL_TELEPORT: case SC_FATALMENACE: case SC_DIMENSIONDOOR: - if(maplist[m].flag.noteleport) { + if(map->list[m].flag.noteleport) { clif->skill_mapinfomessage(sd,0); return 1; } @@ -491,7 +491,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd) case WE_CALLPARTNER: case WE_CALLPARENT: case WE_CALLBABY: - if (maplist[m].flag.nomemo) { + if (map->list[m].flag.nomemo) { clif->skill_mapinfomessage(sd,1); return 1; } @@ -510,7 +510,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd) return 0; // always allowed case WZ_ICEWALL: // noicewall flag [Valaris] - if (maplist[m].flag.noicewall) { + if (map->list[m].flag.noicewall) { clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); return 1; } @@ -523,8 +523,8 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd) break; case GD_EMERGENCYCALL: if( !(battle_config.emergency_call&((map->agit_flag || map->agit2_flag)?2:1)) - || !(battle_config.emergency_call&(maplist[m].flag.gvg || maplist[m].flag.gvg_castle?8:4)) - || (battle_config.emergency_call&16 && maplist[m].flag.nowarpto && !maplist[m].flag.gvg_castle) + || !(battle_config.emergency_call&(map->list[m].flag.gvg || map->list[m].flag.gvg_castle?8:4)) + || (battle_config.emergency_call&16 && map->list[m].flag.nowarpto && !map->list[m].flag.gvg_castle) ) { clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); return 1; @@ -560,7 +560,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd) break; } - return (maplist[m].flag.noskill); + return (map->list[m].flag.noskill); } int skillnotok_hom(uint16 skill_id, struct homun_data *hd) @@ -2015,7 +2015,7 @@ int skill_blown(struct block_list* src, struct block_list* target, int count, in nullpo_ret(src); - if (src != target && maplist[src->m].flag.noknockback) + if (src != target && map->list[src->m].flag.noknockback) return 0; //No knocking if (count == 0) return 0; //Actual knockback distance is 0. @@ -3526,7 +3526,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint uint8 dir = map->calc_dir(bl, src->x, src->y); // teleport to target (if not on WoE grounds) - if( !map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 0, 1) ) + if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 0, 1) ) clif->slide(src, bl->x, bl->y); // cause damage and knockback if the path to target was a straight one @@ -3634,7 +3634,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint if( dir > 2 && dir < 6 ) y = -i; else if( dir == 7 || dir < 2 ) y = i; else y = 0; - if( (mbl == src || (!map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground) ) // only NJ_ISSEN don't have slide effect in GVG + if( (mbl == src || (!map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground) ) // only NJ_ISSEN don't have slide effect in GVG && unit->movepos(src, mbl->x+x, mbl->y+y, 1, 1) ) { clif->slide(src, src->x, src->y); @@ -4011,7 +4011,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint sc_start(src,SC_HIDING,100,skill_lv,skill->get_time(skill_id,skill_lv)); break; case NJ_KIRIKAGE: - if( !map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground ) { + if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground ) { //You don't move on GVG grounds. short x, y; map->search_freecell(bl, 0, &x, &y, 1, 1, 0); @@ -4284,7 +4284,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } break; case LG_PINPOINTATTACK: - if( !map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 1, 1) ) + if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 1, 1) ) clif->slide(src,bl->x,bl->y); skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); break; @@ -4309,7 +4309,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; case SR_KNUCKLEARROW: - if( !map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 1, 1) ) { + if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 1, 1) ) { clif->slide(src,bl->x,bl->y); clif->fixpos(src); // Aegis send this packet too. } @@ -5044,7 +5044,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; } skill->area_temp[0] = 5 - skill->area_temp[0]; // The actual penalty... - if (skill->area_temp[0] > 0 && !maplist[src->m].flag.noexppenalty) { //Apply penalty + if (skill->area_temp[0] > 0 && !map->list[src->m].flag.noexppenalty) { //Apply penalty sd->status.base_exp -= min(sd->status.base_exp, pc->nextbaseexp(sd) * skill->area_temp[0] * 2/1000); //0.2% penalty per each. sd->status.job_exp -= min(sd->status.job_exp, pc->nextjobexp(sd) * skill->area_temp[0] * 2/1000); clif->updatestatus(sd,SP_BASEEXP); @@ -5060,7 +5060,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case ALL_RESURRECTION: - if(sd && (map_flag_gvg2(bl->m) || maplist[bl->m].flag.battleground)) { + if(sd && (map_flag_gvg2(bl->m) || map->list[bl->m].flag.battleground)) { //No reviving in WoE grounds! clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); break; @@ -5072,7 +5072,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if (tsc && tsc->data[SC_HELLPOWER]) break; - if (maplist[bl->m].flag.pvp && dstsd && dstsd->pvp_point < 0) + if (map->list[bl->m].flag.pvp && dstsd && dstsd->pvp_point < 0) break; switch(skill_lv){ @@ -6258,7 +6258,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case AL_TELEPORT: if(sd) { - if (maplist[bl->m].flag.noteleport && skill_lv <= 2) { + if (map->list[bl->m].flag.noteleport && skill_lv <= 2) { clif->skill_mapinfomessage(sd,0); break; } @@ -6631,8 +6631,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui int x,y, dir = unit->getdir(src); //Fails on noteleport maps, except for GvG and BG maps [Skotlex] - if( maplist[src->m].flag.noteleport - && !(maplist[src->m].flag.battleground || map_flag_gvg2(src->m)) + if( map->list[src->m].flag.noteleport + && !(map->list[src->m].flag.battleground || map_flag_gvg2(src->m)) ) { x = src->x; y = src->y; @@ -7442,7 +7442,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui for(i = 0; i < g->max_member; i++, j++) { if (j>8) j=0; if ((dstsd = g->member[i].sd) != NULL && sd != dstsd && !dstsd->state.autotrade && !pc_isdead(dstsd)) { - if (maplist[dstsd->bl.m].flag.nowarp && !map_flag_gvg2(dstsd->bl.m)) + if (map->list[dstsd->bl.m].flag.nowarp && !map_flag_gvg2(dstsd->bl.m)) continue; if(map->getcell(src->m,src->x+dx[j],src->y+dy[j],CELL_CHKNOREACH)) dx[j] = dy[j] = 0; @@ -8452,7 +8452,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } break; case LG_INSPIRATION: - if( sd && !maplist[sd->bl.m].flag.noexppenalty && sd->status.base_level != MAX_LEVEL ) { + if( sd && !map->list[sd->bl.m].flag.noexppenalty && sd->status.base_level != MAX_LEVEL ) { sd->status.base_exp -= min(sd->status.base_exp, pc->nextbaseexp(sd) * 1 / 100); // 1% penalty. sd->status.job_exp -= min(sd->status.job_exp, pc->nextjobexp(sd) * 1 / 100); clif->updatestatus(sd,SP_BASEEXP); @@ -9887,7 +9887,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui } break; case NJ_SHADOWJUMP: - if( !map_flag_gvg2(src->m) && !maplist[src->m].flag.battleground ) { //You don't move on GVG grounds. + if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground ) { //You don't move on GVG grounds. unit->movepos(src, x, y, 1, 0); clif->slide(src,x,y); } @@ -10422,11 +10422,11 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_ unit_flag = skill->get_unit_flag(skill_id); layout = skill->get_unit_layout(skill_id,skill_lv,src,x,y); - if( maplist[src->m].unit_count ) { - ARR_FIND(0, maplist[src->m].unit_count, i, maplist[src->m].units[i]->skill_id == skill_id ); + if( map->list[src->m].unit_count ) { + ARR_FIND(0, map->list[src->m].unit_count, i, map->list[src->m].units[i]->skill_id == skill_id ); - if( i < maplist[src->m].unit_count ) { - limit = limit * maplist[src->m].units[i]->modifier / 100; + if( i < map->list[src->m].unit_count ) { + limit = limit * map->list[src->m].units[i]->modifier / 100; } } @@ -10523,7 +10523,7 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_ ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, i, req.itemid[i] && (req.itemid[i] == ITEMID_TRAP || req.itemid[i] == ITEMID_TRAP_ALLOY)); if( req.itemid[i] ) req_item = req.itemid[i]; - if( map_flag_gvg2(src->m) || maplist[src->m].flag.battleground ) + if( map_flag_gvg2(src->m) || map->list[src->m].flag.battleground ) limit *= 4; // longer trap times in WOE [celest] if( battle_config.vs_traps_bctall && map_flag_vs(src->m) && (src->type&battle_config.vs_traps_bctall) ) target = BCT_ALL; @@ -11613,7 +11613,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns break; case UNT_DIMENSIONDOOR: - if( tsd && !maplist[bl->m].flag.noteleport ) + if( tsd && !map->list[bl->m].flag.noteleport ) pc->randomwarp(tsd,3); else if( bl->type == BL_MOB && battle_config.mob_warp&8 ) unit->warp(bl,-1,-1,-1,3); @@ -13974,7 +13974,7 @@ int skill_delay_fix (struct block_list *bl, uint16 skill_id, uint16 skill_lv) { time /= 2; break; case AS_SONICBLOW: - if (!map_flag_gvg2(bl->m) && !maplist[bl->m].flag.battleground && sc->data[SC_SOULLINK]->val2 == SL_ASSASIN) + if (!map_flag_gvg2(bl->m) && !map->list[bl->m].flag.battleground && sc->data[SC_SOULLINK]->val2 == SL_ASSASIN) time /= 2; break; } @@ -14502,7 +14502,7 @@ void skill_unitsetmapcell (struct skill_unit *src, uint16 skill_id, uint16 skill for( y = src->bl.y - range; y <= src->bl.y + range; ++y ) for( x = src->bl.x - range; x <= src->bl.x + range; ++x ) - maplist[src->bl.m].setcell(src->bl.m, x, y, cell, flag); + map->list[src->bl.m].setcell(src->bl.m, x, y, cell, flag); } /*========================================== @@ -15056,7 +15056,7 @@ struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int map->setgatcell(su->bl.m,su->bl.x,su->bl.y,5); clif->changemapcell(0,su->bl.m,su->bl.x,su->bl.y,5,AREA); skill->unitsetmapcell(su,WZ_ICEWALL,group->skill_lv,CELL_ICEWALL,true); - maplist[su->bl.m].icewall_num++; + map->list[su->bl.m].icewall_num++; break; case SA_LANDPROTECTOR: skill->unitsetmapcell(su,SA_LANDPROTECTOR,group->skill_lv,CELL_LANDPROTECTOR,true); @@ -15111,7 +15111,7 @@ int skill_delunit (struct skill_unit* su) { map->setgatcell(su->bl.m,su->bl.x,su->bl.y,su->val2); clif->changemapcell(0,su->bl.m,su->bl.x,su->bl.y,su->val2,ALL_SAMEMAP); // hack to avoid clientside cell bug skill->unitsetmapcell(su,WZ_ICEWALL,group->skill_lv,CELL_ICEWALL,false); - maplist[su->bl.m].icewall_num--; + map->list[su->bl.m].icewall_num--; break; case SA_LANDPROTECTOR: skill->unitsetmapcell(su,SA_LANDPROTECTOR,group->skill_lv,CELL_LANDPROTECTOR,false); @@ -15536,13 +15536,13 @@ int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap) { if(group->val1) { sd = map->charid2sd(group->val1); group->val1 = 0; - if (sd && !maplist[sd->bl.m].flag.nowarp) + if (sd && !map->list[sd->bl.m].flag.nowarp) pc->setpos(sd,map_id2index(su->bl.m),su->bl.x,su->bl.y,CLR_TELEPORT); } if(group->val2) { sd = map->charid2sd(group->val2); group->val2 = 0; - if (sd && !maplist[sd->bl.m].flag.nowarp) + if (sd && !map->list[sd->bl.m].flag.nowarp) pc->setpos(sd,map_id2index(su->bl.m),su->bl.x,su->bl.y,CLR_TELEPORT); } skill->delunit(su); diff --git a/src/map/status.c b/src/map/status.c index 978380a20..6953312f8 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1172,7 +1172,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp, if ((sce=sc->data[SC_ENDURE]) && !sce->val4 && !sc->data[SC_LKCONCENTRATION]) { //Endure count is only reduced by non-players on non-gvg maps. //val4 signals infinite endure. [Skotlex] - if (src && src->type != BL_PC && !map_flag_gvg2(target->m) && !maplist[target->m].flag.battleground && --(sce->val2) < 0) + if (src && src->type != BL_PC && !map_flag_gvg2(target->m) && !map->list[target->m].flag.battleground && --(sce->val2) < 0) status_change_end(target, SC_ENDURE, INVALID_TIMER); } if ((sce=sc->data[SC_GRAVITATION]) && sce->val3 == BCT_SELF) { @@ -1532,12 +1532,12 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin if( src && !(src->type == BL_PC && ((TBL_PC*)src)->skillitem)) { // Items that cast skills using 'itemskill' will not be handled by map_zone_db. int i; - for(i = 0; i < maplist[src->m].zone->disabled_skills_count; i++) { - if( skill_id == maplist[src->m].zone->disabled_skills[i]->nameid && (maplist[src->m].zone->disabled_skills[i]->type&src->type) ) { + for(i = 0; i < map->list[src->m].zone->disabled_skills_count; i++) { + if( skill_id == map->list[src->m].zone->disabled_skills[i]->nameid && (map->list[src->m].zone->disabled_skills[i]->type&src->type) ) { if( src->type == BL_PC ) clif->msg((TBL_PC*)src, SKILL_CANT_USE_AREA); // This skill cannot be used within this area - else if( src->type == BL_MOB && maplist[src->m].zone->disabled_skills[i]->subtype != MZS_NONE ) { - if( (st->mode&MD_BOSS) && !(maplist[src->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) + else if( src->type == BL_MOB && map->list[src->m].zone->disabled_skills[i]->subtype != MZS_NONE ) { + if( (st->mode&MD_BOSS) && !(map->list[src->m].zone->disabled_skills[i]->subtype&MZS_BOSS) ) break; } return 0; @@ -2120,9 +2120,9 @@ int status_calc_mob_(struct mob_data* md, bool first) { if(flag&4) { // Strengthen Guardians - custom value +10% / lv struct guild_castle *gc; - gc=guild->mapname2gc(maplist[md->bl.m].name); + gc=guild->mapname2gc(map->list[md->bl.m].name); if (!gc) - ShowError("status_calc_mob: No castle set at map %s\n", maplist[md->bl.m].name); + ShowError("status_calc_mob: No castle set at map %s\n", map->list[md->bl.m].name); else if(gc->castle_id < 24 || md->class_ == MOBID_EMPERIUM) { #ifdef RENEWAL @@ -2450,13 +2450,13 @@ int status_calc_pc_(struct map_session_data* sd, bool first) { if(!sd->inventory_data[index]) continue; - for(k = 0; k < maplist[sd->bl.m].zone->disabled_items_count; k++) { - if( maplist[sd->bl.m].zone->disabled_items[k] == sd->inventory_data[index]->nameid ) { + for(k = 0; k < map->list[sd->bl.m].zone->disabled_items_count; k++) { + if( map->list[sd->bl.m].zone->disabled_items[k] == sd->inventory_data[index]->nameid ) { break; } } - if( k < maplist[sd->bl.m].zone->disabled_items_count ) + if( k < map->list[sd->bl.m].zone->disabled_items_count ) continue; bstatus->def += sd->inventory_data[index]->def; @@ -2595,13 +2595,13 @@ int status_calc_pc_(struct map_session_data* sd, bool first) { if(!data) continue; - for(k = 0; k < maplist[sd->bl.m].zone->disabled_items_count; k++) { - if( maplist[sd->bl.m].zone->disabled_items[k] == data->nameid ) { + for(k = 0; k < map->list[sd->bl.m].zone->disabled_items_count; k++) { + if( map->list[sd->bl.m].zone->disabled_items[k] == data->nameid ) { break; } } - if( k < maplist[sd->bl.m].zone->disabled_items_count ) + if( k < map->list[sd->bl.m].zone->disabled_items_count ) continue; if(first && data->equip_script) {//Execute equip-script on login @@ -4675,7 +4675,7 @@ signed short status_calc_flee(struct block_list *bl, struct status_change *sc, i if( bl->type == BL_PC ) { if( map_flag_gvg2(bl->m) ) flee -= flee * battle_config.gvg_flee_penalty/100; - else if( maplist[bl->m].flag.battleground ) + else if( map->list[bl->m].flag.battleground ) flee -= flee * battle_config.bg_flee_penalty/100; } @@ -5479,7 +5479,7 @@ short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int } unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion) { - if( !sc || !sc->count || map_flag_gvg2(bl->m) || maplist[bl->m].flag.battleground ) + if( !sc || !sc->count || map_flag_gvg2(bl->m) || map->list[bl->m].flag.battleground ) return cap_value(dmotion,0,USHRT_MAX); /** * It has been confirmed on official servers that MvP mobs have no dmotion even without endure @@ -7221,7 +7221,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val break; case SC_ENDURE: val2 = 7; // Hit-count [Celest] - if( !(flag&1) && (bl->type&(BL_PC|BL_MER)) && !map_flag_gvg(bl->m) && !maplist[bl->m].flag.battleground && !val4 ) { + if( !(flag&1) && (bl->type&(BL_PC|BL_MER)) && !map_flag_gvg(bl->m) && !map->list[bl->m].flag.battleground && !val4 ) { struct map_session_data *tsd; if( sd ) { int i; @@ -7516,7 +7516,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val if (sc->data[SC_SOULLINK] && sc->data[SC_SOULLINK]->val2 == SL_ROGUE) val3 -= 40; val4 = 10+val1*2; //SP cost. - if (map_flag_gvg(bl->m) || maplist[bl->m].flag.battleground) val4 *= 5; + if (map_flag_gvg(bl->m) || map->list[bl->m].flag.battleground) val4 *= 5; break; case SC_CLOAKING: if (!sd) //Monsters should be able to walk with no penalties. [Skotlex] @@ -7714,7 +7714,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val // Inherits Status From Source const enum sc_type types[] = { SC_AUTOGUARD, SC_DEFENDER, SC_REFLECTSHIELD, SC_ENDURE }; enum sc_type type2; - int i = (map_flag_gvg(bl->m) || maplist[bl->m].flag.battleground)?2:3; + int i = (map_flag_gvg(bl->m) || map->list[bl->m].flag.battleground)?2:3; while( i >= 0 ) { type2 = types[i]; if( d_sc->data[type2] ) @@ -11227,7 +11227,7 @@ int status_natural_heal(struct block_list* bl, va_list args) { //Natural heal main timer. int status_natural_heal_timer(int tid, unsigned int tick, int id, intptr_t data) { status->natural_heal_diff_tick = DIFF_TICK(tick,status->natural_heal_prev_tick); - map->map_foreachregen(status->natural_heal); + map->foreachregen(status->natural_heal); status->natural_heal_prev_tick = tick; return 0; } diff --git a/src/map/trade.c b/src/map/trade.c index b3082515a..8dd30371b 100644 --- a/src/map/trade.c +++ b/src/map/trade.c @@ -31,7 +31,7 @@ void trade_traderequest(struct map_session_data *sd, struct map_session_data *ta { nullpo_retv(sd); - if (maplist[sd->bl.m].flag.notrade) { + if (map->list[sd->bl.m].flag.notrade) { clif->message (sd->fd, msg_txt(272)); return; //Can't trade in notrade mapflag maps. } diff --git a/src/map/unit.c b/src/map/unit.c index 85d00515c..a7aca10b9 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -792,13 +792,13 @@ int unit_warp(struct block_list *bl,short m,short x,short y,clr_type type) switch (bl->type) { case BL_MOB: - if (maplist[bl->m].flag.monster_noteleport && ((TBL_MOB*)bl)->master_id == 0) + if (map->list[bl->m].flag.monster_noteleport && ((TBL_MOB*)bl)->master_id == 0) return 1; - if (m != bl->m && maplist[m].flag.nobranch && battle_config.mob_warp&4 && !(((TBL_MOB *)bl)->master_id)) + if (m != bl->m && map->list[m].flag.nobranch && battle_config.mob_warp&4 && !(((TBL_MOB *)bl)->master_id)) return 1; break; case BL_PC: - if (maplist[bl->m].flag.noteleport) + if (map->list[bl->m].flag.noteleport) return 1; break; } @@ -806,17 +806,17 @@ int unit_warp(struct block_list *bl,short m,short x,short y,clr_type type) if (x<0 || y<0) { //Random map position. if (!map->search_freecell(NULL, m, &x, &y, -1, -1, 1)) { - ShowWarning("unit_warp failed. Unit Id:%d/Type:%d, target position map %d (%s) at [%d,%d]\n", bl->id, bl->type, m, maplist[m].name, x, y); + ShowWarning("unit_warp failed. Unit Id:%d/Type:%d, target position map %d (%s) at [%d,%d]\n", bl->id, bl->type, m, map->list[m].name, x, y); return 2; } } else if (map->getcell(m,x,y,CELL_CHKNOREACH)) { //Invalid target cell - ShowWarning("unit_warp: Specified non-walkable target cell: %d (%s) at [%d,%d]\n", m, maplist[m].name, x,y); + ShowWarning("unit_warp: Specified non-walkable target cell: %d (%s) at [%d,%d]\n", m, map->list[m].name, x,y); if (!map->search_freecell(NULL, m, &x, &y, 4, 4, 1)) { //Can't find a nearby cell - ShowWarning("unit_warp failed. Unit Id:%d/Type:%d, target position map %d (%s) at [%d,%d]\n", bl->id, bl->type, m, maplist[m].name, x, y); + ShowWarning("unit_warp failed. Unit Id:%d/Type:%d, target position map %d (%s) at [%d,%d]\n", bl->id, bl->type, m, map->list[m].name, x, y); return 2; } } @@ -1955,7 +1955,7 @@ int unit_skillcastcancel(struct block_list *bl,int type) return 0; if (sd && (sd->special_state.no_castcancel2 || - ((sd->sc.data[SC_UNLIMITED_HUMMING_VOICE] || sd->special_state.no_castcancel) && !map_flag_gvg(bl->m) && !maplist[bl->m].flag.battleground))) //fixed flags being read the wrong way around [blackhole89] + ((sd->sc.data[SC_UNLIMITED_HUMMING_VOICE] || sd->special_state.no_castcancel) && !map_flag_gvg(bl->m) && !map->list[bl->m].flag.battleground))) //fixed flags being read the wrong way around [blackhole89] return 0; } @@ -2174,7 +2174,7 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i guild->send_dot_remove(sd); bg->send_dot_remove(sd); - if( maplist[bl->m].users <= 0 || sd->state.debug_remove_map ) { + if( map->list[bl->m].users <= 0 || sd->state.debug_remove_map ) { // this is only place where map users is decreased, if the mobs were removed too soon then this function was executed too many times [FlavioJS] if( sd->debug_file == NULL || !(sd->state.debug_remove_map) ) { sd->debug_file = ""; @@ -2188,17 +2188,17 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i " Please report this!!!\n", sd->status.account_id, sd->status.char_id, sd->state.active, sd->state.connect_new, sd->state.rewarp, sd->state.changemap, sd->state.debug_remove_map, - maplist[bl->m].name, maplist[bl->m].users, + map->list[bl->m].name, map->list[bl->m].users, sd->debug_file, sd->debug_line, sd->debug_func, file, line, func); - } else if (--maplist[bl->m].users == 0 && battle_config.dynamic_mobs) //[Skotlex] + } else if (--map->list[bl->m].users == 0 && battle_config.dynamic_mobs) //[Skotlex] map->removemobs(bl->m); if( !(sd->sc.option&OPTION_INVISIBLE) ) { // decrement the number of active pvp players on the map - --maplist[bl->m].users_pvp; + --map->list[bl->m].users_pvp; } - if( maplist[bl->m].instance_id >= 0 ) { - instance->list[maplist[bl->m].instance_id].users--; - instance->check_idle(maplist[bl->m].instance_id); + if( map->list[bl->m].instance_id >= 0 ) { + instance->list[map->list[bl->m].instance_id].users--; + instance->check_idle(map->list[bl->m].instance_id); } sd->state.debug_remove_map = 1; // temporary state to track double remove_map's [FlavioJS] sd->debug_file = file; @@ -2340,7 +2340,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) { duel->reject(sd->duel_invite, sd); // Notify friends that this char logged out. [Skotlex] - map->map_foreachpc(clif->friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 0); + map->foreachpc(clif->friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 0); party->send_logout(sd); guild->send_memberinfoshort(sd,0); pc->cleareventtimer(sd); -- cgit v1.2.3-70-g09d2