summaryrefslogtreecommitdiff
path: root/src/map/skill.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/skill.c')
-rw-r--r--src/map/skill.c388
1 files changed, 189 insertions, 199 deletions
diff --git a/src/map/skill.c b/src/map/skill.c
index 2d992d24f..81095b4ac 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -384,16 +384,16 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
hp += hp * sc->data[SC_OFFERTORIUM]->val2 / 100;
}
sc = status->get_sc(target);
- if( sc && sc->count ) {
- if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish]
+ if (sc && sc->count) {
+ if(sc->data[SC_CRITICALWOUND] && heal) // Critical Wound has no effect on offensive heal. [Inkfish]
hp -= hp * sc->data[SC_CRITICALWOUND]->val2/100;
- if( sc->data[SC_DEATHHURT] && heal )
+ if(sc->data[SC_DEATHHURT] && heal)
hp -= hp * 20/100;
- if( sc->data[SC_HEALPLUS] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN )
+ if(sc->data[SC_HEALPLUS] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN)
hp += hp * sc->data[SC_HEALPLUS]->val1/100; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish]
- if( sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 2)
+ if(sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 2)
hp += hp / 10;
- if ( sc && sc->data[SC_VITALITYACTIVATION] )
+ if (sc->data[SC_VITALITYACTIVATION])
hp = hp * 150 / 100;
}
@@ -1367,7 +1367,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
if( sd && sd->special_state.bonus_coma ) {
rate = sd->weapon_coma_ele[tstatus->def_ele];
rate += sd->weapon_coma_race[tstatus->race];
- rate += sd->weapon_coma_race[tstatus->mode&MD_BOSS?RC_BOSS:RC_NONBOSS];
+ rate += sd->weapon_coma_race[(tstatus->mode&MD_BOSS) ? RC_BOSS : RC_NONBOSS];
if (rate)
status->change_start(src, bl, SC_COMA, rate, 0, 0, src->id, 0, 0, SCFLAG_NONE);
}
@@ -1533,7 +1533,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
rate = skill->delay_fix(src, temp, auto_skill_lv);
if (DIFF_TICK(ud->canact_tick, tick + rate) < 0){
ud->canact_tick = tick+rate;
- if ( battle_config.display_status_timers && sd )
+ if (battle_config.display_status_timers)
clif->status_change(src, SI_POSTDELAY, 1, rate, 0, 0, 0);
}
}
@@ -1885,7 +1885,7 @@ int skill_counter_additional_effect(struct block_list* src, struct block_list *b
rate = skill->delay_fix(bl, auto_skill_id, auto_skill_lv);
if (DIFF_TICK(ud->canact_tick, tick + rate) < 0){
ud->canact_tick = tick+rate;
- if ( battle_config.display_status_timers && dstsd )
+ if (battle_config.display_status_timers)
clif->status_change(bl, SI_POSTDELAY, 1, rate, 0, 0, 0);
}
}
@@ -1920,12 +1920,13 @@ void skill_counter_additional_effect_unknown(struct block_list* src, struct bloc
* - flag is a BCT_ flag to indicate which type of adjustment should be used
* (BCT_ENEMY/BCT_PARTY/BCT_SELF) are the valid values.
*------------------------------------------------------------------------*/
-int skill_break_equip (struct block_list *bl, unsigned short where, int rate, int flag) {
+int skill_break_equip (struct block_list *bl, unsigned short where, int rate, int flag)
+{
const int where_list[4] = {EQP_WEAPON, EQP_ARMOR, EQP_SHIELD, EQP_HELM};
const enum sc_type scatk[4] = {SC_NOEQUIPWEAPON, SC_NOEQUIPARMOR, SC_NOEQUIPSHIELD, SC_NOEQUIPHELM};
const enum sc_type scdef[4] = {SC_PROTECTWEAPON, SC_PROTECTARMOR, SC_PROTECTSHIELD, SC_PROTECTHELM};
struct status_change *sc = status->get_sc(bl);
- int i,j;
+ int i;
TBL_PC *sd;
sd = BL_CAST(BL_PC, bl);
if (sc && !sc->count)
@@ -1973,7 +1974,7 @@ int skill_break_equip (struct block_list *bl, unsigned short where, int rate, in
return 0;
if (sd) {
for (i = 0; i < EQI_MAX; i++) {
- j = sd->equip_index[i];
+ int j = sd->equip_index[i];
if (j < 0 || sd->status.inventory[j].attribute == 1 || !sd->inventory_data[j])
continue;
@@ -2258,16 +2259,16 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr
#endif
{
short s_ele = skill->get_ele(skill_id, skill_lv);
-
+
if (s_ele == -1) // the skill takes the weapon's element
s_ele = sstatus->rhw.ele;
else if (s_ele == -2) //Use status element
s_ele = status_get_attack_sc_element(src,status->get_sc(src));
else if( s_ele == -3 ) //Use random element
s_ele = rnd()%ELE_MAX;
-
+
dmg.damage = battle->attr_fix(bl, bl, dmg.damage, s_ele, status_get_element(bl), status_get_element_level(bl));
-
+
if( sc && sc->data[SC_ENERGYCOAT] ) {
struct status_data *st = status->get_status_data(bl);
int per = 100*st->sp / st->max_sp -1; //100% should be counted as the 80~99% interval
@@ -2296,7 +2297,7 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr
if( (skill_id == AL_INCAGI || skill_id == AL_BLESSING ||
skill_id == CASH_BLESSING || skill_id == CASH_INCAGI ||
- skill_id == MER_INCAGI || skill_id == MER_BLESSING) && tsd->sc.data[SC_PROPERTYUNDEAD] )
+ skill_id == MER_INCAGI || skill_id == MER_BLESSING) && tsd && tsd->sc.data[SC_PROPERTYUNDEAD] )
damage = 1;
if( damage && sc && sc->data[SC_GENSOU] && dmg.flag&BF_MAGIC ){
@@ -2520,14 +2521,14 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr
case RA_CLUSTERBOMB:
case RA_FIRINGTRAP:
case RA_ICEBOUNDTRAP:
- dmg.dmotion = clif->skill_damage(src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id,flag&SD_LEVEL?-1:skill_lv, 5);
+ dmg.dmotion = clif->skill_damage(src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, (flag&SD_LEVEL) ? -1 : skill_lv, 5);
if( dsrc != src ) // avoid damage display redundancy
break;
case HT_LANDMINE:
dmg.dmotion = clif->skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, type);
break;
case WZ_SIGHTBLASTER:
- dmg.dmotion = clif->skill_damage(src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, flag&SD_LEVEL?-1:skill_lv, 5);
+ dmg.dmotion = clif->skill_damage(src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, (flag&SD_LEVEL) ? -1 : skill_lv, 5);
break;
case AB_DUPLELIGHT_MELEE:
case AB_DUPLELIGHT_MAGIC:
@@ -2642,7 +2643,7 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr
if (ud && DIFF_TICK(ud->attackabletime, tick + type) < 0)
ud->attackabletime = tick + type;
}
-
+
shadow_flag = skill->check_shadowform(bl, damage, dmg.div_);
if( !dmg.amotion ) {
@@ -2690,11 +2691,11 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr
break;
}
-
+
/* monsters with skill lv higher than MAX_SKILL_LEVEL may get this value beyond the max depending on conditions, we cap to the system's limit */
if( dsrc && dsrc->type == BL_MOB && skill_lv > MAX_SKILL_LEVEL && dmg.blewcount > 25 )
dmg.blewcount = 25;
-
+
//blown-specific handling
switch( skill_id ) {
case LG_OVERBRAND_BRANDISH:
@@ -2840,9 +2841,9 @@ void skill_attack_display_unknown(int *attack_type, struct block_list* src, stru
if (bl->type == BL_SKILL ) {
TBL_SKILL *su = (TBL_SKILL*)bl;
if (su->group && skill->get_inf2(su->group->skill_id) & INF2_TRAP) // show damage on trap targets
- clif->skill_damage(src, bl, *tick, dmg->amotion, dmg->dmotion, *damage, dmg->div_, *skill_id, *flag & SD_LEVEL ? -1 : *skill_lv, 5);
+ clif->skill_damage(src, bl, *tick, dmg->amotion, dmg->dmotion, *damage, dmg->div_, *skill_id, (*flag & SD_LEVEL) ? -1 : *skill_lv, 5);
}
- dmg->dmotion = clif->skill_damage(dsrc, bl, *tick, dmg->amotion, dmg->dmotion, *damage, dmg->div_, *skill_id, *flag & SD_LEVEL ? -1 : *skill_lv, *type);
+ dmg->dmotion = clif->skill_damage(dsrc, bl, *tick, dmg->amotion, dmg->dmotion, *damage, dmg->div_, *skill_id, (*flag & SD_LEVEL) ? -1 : *skill_lv, *type);
}
int skill_attack_copy_unknown(int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) {
@@ -3248,22 +3249,20 @@ int skill_timerskill(int tid, int64 tick, int id, intptr_t data) {
/**
* Warlock
**/
- case WL_CHAINLIGHTNING_ATK: {
- struct block_list *nbl = NULL; // Next Target of Chain
- skill->attack(BF_MAGIC, src, src, target, skl->skill_id, skl->skill_lv, tick, (9-skl->type)); // Hit a Lightning on the current Target
- skill->toggle_magicpower(src, skl->skill_id); // only the first hit will be amplify
-
- if( skl->type < (4 + skl->skill_lv - 1) && skl->x < 3 )
- { // Remaining Chains Hit
- nbl = battle->get_enemy_area(src, target->x, target->y, (skl->type>2)?2:3, // After 2 bounces, it will bounce to other targets in 7x7 range.
- BL_CHAR|BL_SKILL, target->id); // Search for a new Target around current one...
- if( nbl == NULL)
- skl->x++;
- else
- skl->x = 0;
-
- skill->addtimerskill(src, tick + 651, (nbl?nbl:target)->id, skl->x, 0, WL_CHAINLIGHTNING_ATK, skl->skill_lv, skl->type + 1, skl->flag);
- }
+ case WL_CHAINLIGHTNING_ATK:
+ skill->attack(BF_MAGIC, src, src, target, skl->skill_id, skl->skill_lv, tick, (9-skl->type)); // Hit a Lightning on the current Target
+ skill->toggle_magicpower(src, skl->skill_id); // only the first hit will be amplify
+
+ if (skl->type < (4 + skl->skill_lv - 1) && skl->x < 3) {
+ // Remaining Chains Hit
+ struct block_list *nbl = battle->get_enemy_area(src, target->x, target->y, (skl->type>2)?2:3, /* After 2 bounces, it will bounce to other targets in 7x7 range. */
+ BL_CHAR|BL_SKILL, target->id); // Search for a new Target around current one...
+ if (nbl == NULL)
+ skl->x++;
+ else
+ skl->x = 0;
+
+ skill->addtimerskill(src, tick + 651, (nbl?nbl:target)->id, skl->x, 0, WL_CHAINLIGHTNING_ATK, skl->skill_lv, skl->type + 1, skl->flag);
}
break;
case WL_TETRAVORTEX_FIRE:
@@ -3795,7 +3794,7 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1
short x, y, i = 2; // Move 2 cells for Issen(from target)
struct block_list *mbl = bl;
short dir = 0;
-
+
skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
if( skill_id == MO_EXTREMITYFIST ) {
@@ -4294,7 +4293,7 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
skill->blown(src,bl,distance_bl(src,bl)-1,unit->getdir(src),0);
- if( sd && tsd && sd->status.party_id && sd->status.party_id && sd->status.party_id == tsd->status.party_id ) // Don't damage party members.
+ if( sd && tsd && sd->status.party_id && tsd->status.party_id && sd->status.party_id == tsd->status.party_id ) // Don't damage party members.
; // No damage to Members
else
skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
@@ -4371,16 +4370,17 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1
break;
case WL_TETRAVORTEX:
- if( sc ){
+ if (sc) {
int i = SC_SUMMON5, x = 0;
int types[][2] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}};
- for(; i >= SC_SUMMON1; i--){
- if( sc->data[i] ){
- int skillid = WL_TETRAVORTEX_FIRE + (sc->data[i]->val1 - WLS_FIRE) + (sc->data[i]->val1 == WLS_WIND) - (sc->data[i]->val1 == WLS_WATER), sc_index = 0, rate = 0;
- if( x < 4 ){
+ for(; i >= SC_SUMMON1; i--) {
+ if (sc->data[i]) {
+ int skillid = WL_TETRAVORTEX_FIRE + (sc->data[i]->val1 - WLS_FIRE) + (sc->data[i]->val1 == WLS_WIND) - (sc->data[i]->val1 == WLS_WATER);
+ if (x < 4) {
+ int sc_index = 0, rate = 0;
types[x][0] = (sc->data[i]->val1 - WLS_FIRE) + 1;
types[x][1] = 25; // 25% each for equal sharing
- if( x == 3 ){
+ if (x == 3) {
x = 0;
sc_index = types[rnd()%4][0];
for(; x < 4; x++)
@@ -4397,14 +4397,16 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1
break;
case WL_RELEASE:
- if( sd ) {
- int i, cooldown;
+ if (sd) {
+ int i;
clif->skill_nodamage(src, bl, skill_id, skill_lv, 1);
skill->toggle_magicpower(src, skill_id);
// Priority is to release SpellBook
- if( sc && sc->data[SC_READING_SB] ) { // SpellBook
+ if (sc && sc->data[SC_READING_SB]) {
+ // SpellBook
uint16 spell_skill_id, spell_skill_lv, point, s = 0;
int spell[SC_SPELLBOOK7-SC_SPELLBOOK1 + 1];
+ int cooldown;
for(i = SC_SPELLBOOK7; i >= SC_SPELLBOOK1; i--) // List all available spell to be released
if( sc->data[i] ) spell[s++] = i;
@@ -4418,9 +4420,11 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1
spell_skill_lv = sc->data[i]->val2;
point = sc->data[i]->val3;
status_change_end(src, (sc_type)i, INVALID_TIMER);
- }else //something went wrong :(
+ } else {
+ //something went wrong :(
break;
-
+ }
+
if( sc->data[SC_READING_SB]->val2 > point )
sc->data[SC_READING_SB]->val2 -= point;
else // Last spell to be released
@@ -4949,11 +4953,11 @@ int skill_castend_id(int tid, int64 tick, int id, intptr_t data) {
else
inf = 0;
- if(inf2 & (INF2_PARTY_ONLY|INF2_GUILD_ONLY) && src != target)
- {
- inf |=
- (inf2&INF2_PARTY_ONLY?BCT_PARTY:0)|
- (inf2&INF2_GUILD_ONLY?BCT_GUILD:0);
+ if (inf2 & (INF2_PARTY_ONLY|INF2_GUILD_ONLY) && src != target) {
+ if (inf2&INF2_PARTY_ONLY)
+ inf |= BCT_PARTY;
+ if (inf2&INF2_GUILD_ONLY)
+ inf |= BCT_GUILD;
//Remove neutral targets (but allow enemy if skill is designed to be so)
inf &= ~BCT_NEUTRAL;
}
@@ -5074,11 +5078,11 @@ int skill_castend_id(int tid, int64 tick, int id, intptr_t data) {
// SC_MAGICPOWER needs to switch states before any damage is actually dealt
skill->toggle_magicpower(src, ud->skill_id);
-
- /* On aegis damage skills are also increase by camouflage. Need confirmation on kRO.
+
+#if 0 // On aegis damage skills are also increase by camouflage. Need confirmation on kRO.
if( ud->skill_id != RA_CAMOUFLAGE ) // only normal attack and auto cast skills benefit from its bonuses
status_change_end(src,SC_CAMOUFLAGE, INVALID_TIMER);
- */
+#endif // 0
if (skill->get_casttype(ud->skill_id) == CAST_NODAMAGE)
skill->castend_nodamage_id(src,target,ud->skill_id,ud->skill_lv,tick,flag);
@@ -5888,12 +5892,10 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
clif->skill_nodamage(src,bl,skill_id,skill_lv,
sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv)));
break;
-
case KN_AUTOCOUNTER:
sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv));
skill->addtimerskill(src, tick + 100, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag);
break;
-
case SO_STRIKING:
if (sd) {
int bonus = 25 + 10 * skill_lv;
@@ -5905,7 +5907,6 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
);
}
break;
-
case NPC_STOP:
if( clif->skill_nodamage(src,bl,skill_id,skill_lv,
sc_start2(src,bl,type,100,skill_lv,src->id,skill->get_time(skill_id,skill_lv)) ) )
@@ -6881,7 +6882,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
break;
}
}
-
+
if( (i = pc->skillheal_bonus(sd, skill_id)) ) {
hp += hp * i / 100;
sp += sp * i / 100;
@@ -7360,7 +7361,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
//If mode gets set by NPC_EMOTION then the target should be reset [Playtester]
if(skill_id == NPC_EMOTION && md->db->skill[md->skill_idx].val[1])
mob->unlocktarget(md,tick);
-
+
if(md->db->skill[md->skill_idx].val[1] || md->db->skill[md->skill_idx].val[2])
sc_start4(src, src, type, 100, skill_lv,
md->db->skill[md->skill_idx].val[1],
@@ -7693,8 +7694,8 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
case CG_TAROTCARD:
{
- int eff, count = -1;
- if( tsc && tsc->data[type] ){
+ int count = -1;
+ if (tsc && tsc->data[type]) {
map->freeblock_unlock();
return 0;
}
@@ -7707,7 +7708,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
}
status_zap(src,0,skill->db[skill->get_index(skill_id)].sp[skill_lv]); // consume sp only if succeeded [Inkfish]
do {
- eff = rnd() % 14;
+ int eff = rnd() % 14;
if( eff == 5 )
clif->specialeffect(src, 528, AREA);
else
@@ -8396,7 +8397,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
break;
case AB_CHEAL:
if( sd == NULL || sd->status.party_id == 0 || flag&1 ) {
- if( sd && tstatus && !battle->check_undead(tstatus->race, tstatus->def_ele) && !tsc->data[SC_BERSERK] ) {
+ if (sd && tstatus && !battle->check_undead(tstatus->race, tstatus->def_ele) && !(tsc && tsc->data[SC_BERSERK])) {
int lv = pc->checkskill(sd, AL_HEAL);
int heal = skill->calc_heal(src, bl, AL_HEAL, lv, true);
@@ -8473,9 +8474,9 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
//As of the behavior in official server Clearance is just a super version of Dispell skill. [Jobbie]
if( bl->type != BL_MOB && battle->check_target(src,bl,BCT_PARTY) <= 0 && sd ) // Only affect mob, party or self.
break;
-
+
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
-
+
if((dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER) || rnd()%100 >= 60 + 8 * skill_lv) {
if (sd)
clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
@@ -9421,7 +9422,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
int duration = 3000;
if( !sd->ed )
break;
-
+
switch(sd->ed->db->class_){
case 2115:case 2124:
case 2118:case 2121:
@@ -9432,11 +9433,11 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
duration = 9000;
break;
}
-
+
sd->skill_id_old = skill_id;
elemental->action(sd->ed, bl, tick);
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
-
+
skill->blockpc_start(sd, skill_id, duration);
}
break;
@@ -9778,12 +9779,12 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
case MH_PYROCLASTIC:
if( hd ){
struct block_list *s_bl = battle->get_master(src);
-
+
if(s_bl)
sc_start2(src, s_bl, type, 100, skill_lv, hd->homunculus.level, skill->get_time(skill_id, skill_lv)); //start on master
-
+
sc_start2(src, bl, type, 100, skill_lv, hd->homunculus.level, skill->get_time(skill_id, skill_lv));
-
+
skill->blockhomun_start(hd, skill_id, skill->get_cooldown(skill_id, skill_lv));
}
break;
@@ -9881,9 +9882,9 @@ bool skill_castend_nodamage_id_unknown(struct block_list *src, struct block_list
/*==========================================
*
*------------------------------------------*/
-int skill_castend_pos(int tid, int64 tick, int id, intptr_t data) {
+int skill_castend_pos(int tid, int64 tick, int id, intptr_t data)
+{
struct block_list* src = map->id2bl(id);
- int maxcount;
struct map_session_data *sd;
struct unit_data *ud = unit->bl2ud(src);
struct mob_data *md;
@@ -9913,6 +9914,7 @@ int skill_castend_pos(int tid, int64 tick, int id, intptr_t data) {
ud->skilltimer = INVALID_TIMER;
do {
+ int maxcount;
if( status->isdead(src) )
break;
@@ -10041,10 +10043,10 @@ int skill_castend_pos(int tid, int64 tick, int id, intptr_t data) {
}
static int check_npc_chaospanic(struct block_list* bl, va_list args) {
TBL_NPC* nd = (TBL_NPC*)bl;
-
+
if( nd->option&(OPTION_HIDE|OPTION_INVISIBLE) || nd->class_ != 45 )
return 0;
-
+
return 1;
}
/* skill count without self */
@@ -10436,7 +10438,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
clif->skill_fail(sd,skill_id,USESKILL_FAIL,0);
return 1;
}
-
+
skill->clear_unitgroup(src);
if( skill->unitsetting(src,skill_id,skill_lv,x,y,0) )
sc_start4(src,src,type,100,skill_lv,0,0,src->id,skill->get_time(skill_id,skill_lv));
@@ -10971,13 +10973,13 @@ int skill_dance_overlap_sub(struct block_list* bl, va_list ap) {
int skill_dance_overlap(struct skill_unit* su, int flag) {
if (!su || !su->group || !(su->group->state.song_dance&0x1))
return 0;
-
+
if (su->val1 != su->group->skill_id) {
//Reset state
su->val1 = su->group->skill_id;
su->val2 &= ~UF_ENSEMBLE;
}
-
+
return map->foreachincell(skill->dance_overlap_sub, su->bl.m,su->bl.x,su->bl.y,BL_SKILL, su,flag);
}
@@ -11011,9 +11013,9 @@ bool skill_dance_switch(struct skill_unit* su, int flag) {
}
prevflag = flag;
- if( !flag ) {
+ if (!flag) {
//Transform
- uint16 skill_id = su->val2&UF_SONG ? BA_DISSONANCE : DC_UGLYDANCE;
+ uint16 skill_id = (su->val2&UF_SONG) ? BA_DISSONANCE : DC_UGLYDANCE;
// backup
backup.skill_id = group->skill_id;
@@ -11073,7 +11075,7 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_
limit = limit * map->list[src->m].units[i]->modifier / 100;
}
}
-
+
sd = BL_CAST(BL_PC, src);
st = status->get_status_data(src);
sc = status->get_sc(src); // for traps, firewall and fogwall - celest
@@ -11418,7 +11420,7 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_
group->target_flag=target;
group->bl_flag= skill->get_unit_bl_target(skill_id);
group->state.ammo_consume = (sd && sd->state.arrow_atk && skill_id != GS_GROUNDDRIFT); //Store if this skill needs to consume ammo.
- group->state.song_dance = (unit_flag&(UF_DANCE|UF_SONG)?1:0)|(unit_flag&UF_ENSEMBLE?2:0); //Signals if this is a song/dance/duet
+ group->state.song_dance = ((unit_flag&(UF_DANCE|UF_SONG)) ? 1 : 0)|((unit_flag&UF_ENSEMBLE) ? 2 : 0); //Signals if this is a song/dance/duet
group->state.guildaura = ( skill_id >= GD_LEADERSHIP && skill_id <= GD_HAWKEYES )?1:0;
group->item_id = req_item;
//if tick is greater than current, do not invoke onplace function just yet. [Skotlex]
@@ -11440,7 +11442,7 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_
}
if (
sc_start4(src,src, SC_DANCING, 100, skill_id, group->group_id, skill_lv,
- (group->state.song_dance&2?BCT_SELF:0), limit+1000) &&
+ (group->state.song_dance&2) ? BCT_SELF : 0, limit+1000) &&
sd && group->state.song_dance&2 && skill_id != CG_HERMODE //Hermod is a encore with a warp!
)
skill->check_pc_partner(sd, skill_id, &skill_lv, 1, 1);
@@ -12147,8 +12149,8 @@ int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *bl, int6
|| (sg->src_id == bl->id && !(tsc && tsc->data[SC_SOULLINK] && tsc->data[SC_SOULLINK]->val2 == SL_BARDDANCER))
)
break;
-
- sc_start4(ss, bl, type, 100, sg->skill_lv, sg->val1, sg->val2, 0, sg->limit);
+
+ sc_start4(ss, bl, type, 100, sg->skill_lv, sg->val1, sg->val2, 0, sg->limit);
break;
case UNT_TATAMIGAESHI:
case UNT_DEMONSTRATION:
@@ -13178,7 +13180,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
if( skill_lv < 1 || skill_lv > MAX_SKILL_LEVEL )
return 0;
-
+
require = skill->get_requirement(sd,skill_id,skill_lv);
//Can only update state when weapon/arrow info is checked.
@@ -13226,7 +13228,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
return 0;
if(sc->data[SC_BLADESTOP])
break;
- if( sc && sc->data[SC_COMBOATTACK] ) {
+ if (sc->data[SC_COMBOATTACK]) {
if( sc->data[SC_COMBOATTACK]->val1 == MO_TRIPLEATTACK )
break;
clif->skill_fail(sd, skill_id, USESKILL_FAIL_COMBOSKILL, MO_TRIPLEATTACK);
@@ -13371,11 +13373,11 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
break;
case CG_MOONLIT: //Check there's no wall in the range+1 area around the caster. [Skotlex]
{
- int i,x,y,range = skill->get_splash(skill_id, skill_lv)+1;
+ int i,range = skill->get_splash(skill_id, skill_lv)+1;
int size = range*2+1;
for (i=0;i<size*size;i++) {
- x = sd->bl.x+(i%size-range);
- y = sd->bl.y+(i/size-range);
+ int x = sd->bl.x+(i%size-range);
+ int y = sd->bl.y+(i/size-range);
if (map->getcell(sd->bl.m,x,y,CELL_CHKWALL)) {
clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
return 0;
@@ -14034,7 +14036,7 @@ int skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
}
case NC_SILVERSNIPER:
case NC_MAGICDECOY: {
- int c = 0, j;
+ int c = 0;
int maxcount = skill->get_maxcount(skill_id,skill_lv);
int mob_class = 2042;
if( skill_id == NC_MAGICDECOY )
@@ -14042,7 +14044,8 @@ int skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
if( battle_config.land_skill_limit && maxcount > 0 && ( battle_config.land_skill_limit&BL_PC ) ) {
if( skill_id == NC_MAGICDECOY ) {
- for( j = mob_class; j <= 2046; j++ )
+ int j;
+ for(j = mob_class; j <= 2046; j++)
map->foreachinmap(skill->check_condition_mob_master_sub, sd->bl.m, BL_MOB, sd->bl.id, j, skill_id, &c);
} else
map->foreachinmap(skill->check_condition_mob_master_sub, sd->bl.m, BL_MOB, sd->bl.id, mob_class, skill_id, &c);
@@ -14163,8 +14166,7 @@ int skill_consume_requirement( struct map_session_data *sd, uint16 skill_id, uin
req = skill->get_requirement(sd,skill_id,skill_lv);
- if( type&1 ) {
-
+ if (type&1) {
switch( skill_id ) {
case CG_TAROTCARD: // TarotCard will consume sp in skill_cast_nodamage_id [Inkfish]
case MC_IDENTIFY:
@@ -14175,7 +14177,7 @@ int skill_consume_requirement( struct map_session_data *sd, uint16 skill_id, uin
req.sp = 0;
break;
}
-
+
if(req.hp || req.sp)
status_zap(&sd->bl, req.hp, req.sp);
@@ -14632,7 +14634,7 @@ int skill_castfix_sc (struct block_list *bl, int time) {
if( time < 0 )
return 0;
-
+
if( bl->type == BL_MOB ) // mobs casttime is fixed nothing to alter.
return time;
@@ -15128,22 +15130,20 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
{
nullpo_retv(sd);
- if (idx >= 0 && idx < MAX_INVENTORY)
- {
- int i = 0, ep = 0, per;
- int material[5] = {
- 0,
- ITEMID_PHRACON,
- ITEMID_EMVERETARCON,
- ITEMID_ORIDECON,
- ITEMID_ORIDECON,
- };
+ if (idx >= 0 && idx < MAX_INVENTORY) {
struct item *item;
struct item_data *ditem = sd->inventory_data[idx];
item = &sd->status.inventory[idx];
- if(item->nameid > 0 && ditem->type == IT_WEAPON)
- {
+ if (item->nameid > 0 && ditem->type == IT_WEAPON) {
+ int material[5] = {
+ 0,
+ ITEMID_PHRACON,
+ ITEMID_EMVERETARCON,
+ ITEMID_ORIDECON,
+ ITEMID_ORIDECON,
+ };
+ int i = 0, per;
if( ditem->flag.no_refine ) {
// if the item isn't refinable
clif->skill_fail(sd,sd->menuskill_id,USESKILL_FAIL_LEVEL,0);
@@ -15159,15 +15159,16 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
}
per = status->get_refine_chance(ditem->wlv, (int)item->refine) * 10;
-
+
// Aegis leaked formula. [malufett]
if( sd->status.class_ == JOB_MECHANIC_T )
per += 100;
else
per += 5 * ((signed int)sd->status.job_level - 50);
-
+
pc->delitem(sd, i, 1, 0, 0, LOG_TYPE_OTHER);
if (per > rnd() % 1000) {
+ int ep = 0;
logs->pick_pc(sd, LOG_TYPE_OTHER, -1, item, ditem);
item->refine++;
logs->pick_pc(sd, LOG_TYPE_OTHER, 1, item, ditem);
@@ -15510,7 +15511,7 @@ int skill_graffitiremover (struct block_list *bl, va_list ap) {
if(bl->type != BL_SKILL)
return 0;
-
+
su = ((struct skill_unit *)bl);
if((su->group) && (su->group->unit_id == UNT_GRAFFITI))
@@ -15542,9 +15543,9 @@ int skill_detonator(struct block_list *bl, va_list ap) {
if( bl->type != BL_SKILL )
return 0;
-
+
su = (struct skill_unit *)bl;
-
+
if( !su->group || su->group->src_id != src->id )
return 0;
@@ -15594,10 +15595,10 @@ int skill_cell_overlap(struct block_list *bl, va_list ap) {
if( su == NULL || su->group == NULL || (*alive) == 0 )
return 0;
-
+
if( su->group->state.guildaura ) /* guild auras are not canceled! */
return 0;
-
+
switch (skill_id) {
case SA_LANDPROTECTOR:
if( su->group->skill_id == SA_LANDPROTECTOR ) {//Check for offensive Land Protector to delete both. [Skotlex]
@@ -15907,16 +15908,16 @@ bool skill_check_camouflage(struct block_list *bl, struct status_change_entry *s
return wall;
}
-bool skill_check_shadowform(struct block_list *bl, int64 damage, int hit){
+bool skill_check_shadowform(struct block_list *bl, int64 damage, int hit)
+{
struct status_change *sc;
- struct block_list *src;
nullpo_retr(false, bl);
sc = status->get_sc(bl);
- if( sc && sc->data[SC__SHADOWFORM] && damage ) {
- src = map->id2bl(sc->data[SC__SHADOWFORM]->val2);
+ if (sc && sc->data[SC__SHADOWFORM] && damage) {
+ struct block_list *src = map->id2bl(sc->data[SC__SHADOWFORM]->val2);
if( !src || src->m != bl->m ) {
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
@@ -16113,12 +16114,14 @@ struct skill_unit_group* skill_initunitgroup (struct block_list* src, int count,
if(i == MAX_SKILLUNITGROUP) {
// array is full, make room by discarding oldest group
int j=0;
- int64 maxdiff = 0, x, tick = timer->gettick();
- for(i=0;i<MAX_SKILLUNITGROUP && ud->skillunit[i];i++)
- if( (x=DIFF_TICK(tick,ud->skillunit[i]->tick)) > maxdiff ) {
- maxdiff = x;
+ int64 maxdiff = 0, tick = timer->gettick();
+ for(i=0;i<MAX_SKILLUNITGROUP && ud->skillunit[i];i++) {
+ int64 diff = DIFF_TICK(tick,ud->skillunit[i]->tick);
+ if (diff > maxdiff) {
+ maxdiff = diff;
j = i;
}
+ }
skill->del_unitgroup(ud->skillunit[j],ALC_MARK);
//Since elements must have shifted, we use the last slot.
i = MAX_SKILLUNITGROUP-1;
@@ -16304,8 +16307,9 @@ int skill_clear_unitgroup (struct block_list *src)
/*==========================================
*
*------------------------------------------*/
-struct skill_unit_group_tickset *skill_unitgrouptickset_search(struct block_list *bl, struct skill_unit_group *group, int64 tick) {
- int i,j=-1,k,s,id;
+struct skill_unit_group_tickset *skill_unitgrouptickset_search(struct block_list *bl, struct skill_unit_group *group, int64 tick)
+{
+ int i,j=-1,s,id;
struct unit_data *ud;
struct skill_unit_group_tickset *set;
@@ -16324,7 +16328,7 @@ struct skill_unit_group_tickset *skill_unitgrouptickset_search(struct block_list
id = s = group->group_id;
for (i=0; i<MAX_SKILLUNITGROUPTICKSET; i++) {
- k = (i+s) % MAX_SKILLUNITGROUPTICKSET;
+ int k = (i+s) % MAX_SKILLUNITGROUPTICKSET;
if (set[k].id == id)
return &set[k];
else if (j==-1 && (DIFF_TICK(tick,set[k].tick)>0 || set[k].id==0))
@@ -16841,14 +16845,15 @@ int skill_can_produce_mix (struct map_session_data *sd, int nameid, int trigger,
}
}
- for(j=0;j<MAX_PRODUCE_RESOURCE;j++){
- int id,x,y;
- if( (id=skill->produce_db[i].mat_id[j]) <= 0 )
+ for (j = 0; j < MAX_PRODUCE_RESOURCE; j++) {
+ int id = skill->produce_db[i].mat_id[j];
+ if (id <= 0)
continue;
if (skill->produce_db[i].mat_amount[j] <= 0) {
if (pc->search_inventory(sd,id) == INDEX_NOT_FOUND)
return 0;
} else {
+ int x, y;
for(y=0,x=0;y<MAX_INVENTORY;y++)
if( sd->status.inventory[y].nameid == id )
x+=sd->status.inventory[y].amount;
@@ -17657,7 +17662,7 @@ int skill_select_menu(struct map_session_data *sd,uint16 skill_id) {
aslvl = sd->sc.data[SC_STOP]->val1;
status_change_end(&sd->bl,SC_STOP,INVALID_TIMER);
}
-
+
idx = skill->get_index(skill_id);
if( skill_id >= GS_GLITTERING || skill->get_type(skill_id) != BF_MAGIC ||
@@ -17681,8 +17686,8 @@ int skill_elementalanalysis(struct map_session_data* sd, int n, uint16 skill_lv,
if( n <= 0 )
return 1;
- for( i = 0; i < n; i++ ) {
- int nameid, add_amount, del_amount, idx, product, flag;
+ for (i = 0; i < n; i++) {
+ int nameid, add_amount, del_amount, idx, product;
struct item tmp_item;
idx = item_list[i*2+0]-2;
@@ -17730,8 +17735,9 @@ int skill_elementalanalysis(struct map_session_data* sd, int n, uint16 skill_lv,
tmp_item.amount = add_amount;
tmp_item.identify = 1;
- if( tmp_item.amount ) {
- if( (flag = pc->additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_CONSUME)) ) {
+ if (tmp_item.amount) {
+ int flag = pc->additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_CONSUME);
+ if (flag) {
clif->additem(sd,0,0,flag);
map->addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
}
@@ -17835,21 +17841,21 @@ int skill_blockpc_end(int tid, int64 tick, int id, intptr_t data) {
if( ( cd = idb_get(skill->cd_db,sd->status.char_id) ) ) {
int i;
-
+
for( i = 0; i < cd->cursor; i++ ) {
if( cd->entry[i]->skidx == data )
break;
}
-
+
if (i == cd->cursor) {
ShowError("skill_blockpc_end: '%s': no data found for '%"PRIdPTR"'\n", sd->status.name, data);
} else {
int cursor = 0;
-
+
ers_free(skill->cd_entry_ers, cd->entry[i]);
-
+
cd->entry[i] = NULL;
-
+
for( i = 0, cursor = 0; i < cd->cursor; i++ ) {
if( !cd->entry[i] )
continue;
@@ -17857,14 +17863,14 @@ int skill_blockpc_end(int tid, int64 tick, int id, intptr_t data) {
cd->entry[cursor] = cd->entry[i];
cursor++;
}
-
+
if( (cd->cursor = cursor) == 0 ) {
idb_remove(skill->cd_db,sd->status.char_id);
ers_free(skill->cd_ers, cd);
}
}
}
-
+
sd->blockskill[data] = false;
return 1;
}
@@ -17890,15 +17896,14 @@ int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick)
sd->blockskill[idx] = false;
return -1;
}
-
+
if( battle_config.display_status_timers )
clif->skill_cooldown(sd, skill_id, tick);
-
+
if( !(cd = idb_get(skill->cd_db,sd->status.char_id)) ) {// create a new skill cooldown object for map storage
cd = ers_alloc(skill->cd_ers, struct skill_cd);
-
+
idb_put( skill->cd_db, sd->status.char_id, cd );
-
} else {
int i;
@@ -17906,7 +17911,7 @@ int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick)
if( cd->entry[i] && cd->entry[i]->skidx == idx )
break;
}
-
+
if( i != cd->cursor ) {/* duplicate, update necessary */
cd->entry[i]->duration = tick;
#if PACKETVER >= 20120604
@@ -17919,9 +17924,9 @@ int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick)
int cursor;
/** somehow, the timer vanished. (bugreport:8367) **/
ers_free(skill->cd_entry_ers, cd->entry[i]);
-
+
cd->entry[i] = NULL;
-
+
for( i = 0, cursor = 0; i < cd->cursor; i++ ) {
if( !cd->entry[i] )
continue;
@@ -17929,20 +17934,19 @@ int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick)
cd->entry[cursor] = cd->entry[i];
cursor++;
}
-
+
cd->cursor = cursor;
}
}
-
}
-
+
if( cd->cursor == MAX_SKILL_TREE ) {
ShowError("skill_blockpc_start: '%s' got over '%d' skill cooldowns, no room to save!\n",sd->status.name,MAX_SKILL_TREE);
return -1;
}
-
+
cd->entry[cd->cursor] = ers_alloc(skill->cd_entry_ers,struct skill_cd_entry);
-
+
cd->entry[cd->cursor]->duration = tick;
#if PACKETVER >= 20120604
cd->entry[cd->cursor]->total = tick;
@@ -17951,7 +17955,7 @@ int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick)
cd->entry[cd->cursor]->skill_id = skill_id;
cd->entry[cd->cursor]->started = now;
cd->entry[cd->cursor]->timer = timer->add(now+tick,skill->blockpc_end,sd->bl.id,idx);
-
+
cd->cursor++;
sd->blockskill[idx] = true;
@@ -18041,23 +18045,9 @@ void skill_usave_trigger(struct map_session_data *sd) {
/*
*
*/
-int skill_split_str (char *str, char **val, int num) {
- int i;
-
- for( i = 0; i < num && str; i++ ) {
- val[i] = str;
- str = strchr(str,',');
- if( str )
- *str++=0;
- }
-
- return i;
-}
-/*
- *
- */
-int skill_split_atoi (char *str, int *val) {
- int i, j, diff, step = 1;
+int skill_split_atoi(char *str, int *val)
+{
+ int i, j, step = 1;
for (i=0; i<MAX_SKILL_LEVEL; i++) {
if (!str) break;
@@ -18076,7 +18066,7 @@ int skill_split_atoi (char *str, int *val) {
}
//Check for linear change with increasing steps until we reach half of the data acquired.
for (step = 1; step <= i/2; step++) {
- diff = val[i-1] - val[i-step-1];
+ int diff = val[i-1] - val[i-step-1];
for(j = i-1; j >= step; j--)
if ((val[j]-val[j-step]) != diff)
break;
@@ -18100,8 +18090,9 @@ int skill_split_atoi (char *str, int *val) {
/*
*
*/
-void skill_init_unit_layout (void) {
- int i,j,size,pos = 0;
+void skill_init_unit_layout (void)
+{
+ int i,j,pos = 0;
//when != it was already cleared during skill_defaults() no need to repeat
if( runflag == MAPSERVER_ST_RUNNING )
@@ -18109,7 +18100,7 @@ void skill_init_unit_layout (void) {
// standard square layouts go first
for (i=0; i<=MAX_SQUARE_LAYOUT; i++) {
- size = i*2+1;
+ int size = i*2+1;
skill->unit_layout[i].count = size*size;
for (j=0; j<size*size; j++) {
skill->unit_layout[i].dx[j] = (j%size-i);
@@ -18122,7 +18113,7 @@ void skill_init_unit_layout (void) {
for (i=0;i<MAX_SKILL_DB;i++) {
if (!skill->db[i].unit_id[0] || skill->db[i].unit_layout_type[0] != -1)
continue;
-
+
switch (skill->db[i].nameid) {
case MG_FIREWALL:
case WZ_ICEWALL:
@@ -18541,16 +18532,16 @@ void skill_cooldown_save(struct map_session_data * sd) {
int i;
struct skill_cd* cd = NULL;
int64 now = 0;
-
+
// always check to make sure the session properly exists
nullpo_retv(sd);
-
+
if( !(cd = idb_get(skill->cd_db, sd->status.char_id)) ) {// no skill cooldown is associated with this character
return;
}
-
+
now = timer->gettick();
-
+
// process each individual cooldown associated with the character
for( i = 0; i < cd->cursor; i++ ) {
cd->entry[i]->duration = DIFF_TICK32(cd->entry[i]->started+cd->entry[i]->duration,now);
@@ -18560,7 +18551,7 @@ void skill_cooldown_save(struct map_session_data * sd) {
}
}
}
-
+
/**
* reload stored skill cooldowns when a player logs in.
* @param sd the affected player structure
@@ -18578,9 +18569,9 @@ void skill_cooldown_load(struct map_session_data * sd) {
}
clif->cooldown_list(sd->fd,cd);
-
+
now = timer->gettick();
-
+
// process each individual cooldown associated with the character
for( i = 0; i < cd->cursor; i++ ) {
cd->entry[i]->started = now;
@@ -18608,7 +18599,7 @@ bool skill_parse_row_skilldb(char* split[], int columns, int current) {
idx = skill->get_index(skill_id);
if( !idx ) // invalid skill id
return false;
-
+
skill->db[idx].nameid = skill_id;
skill->split_atoi(split[1],skill->db[idx].range);
skill->db[idx].hit = atoi(split[2]);
@@ -18639,7 +18630,7 @@ bool skill_parse_row_skilldb(char* split[], int columns, int current) {
safestrncpy(skill->db[idx].desc, trim(split[16]), sizeof(skill->db[idx].desc));
strdb_iput(skill->name2id_db, skill->db[idx].name, skill_id);
script->set_constant2(skill->db[idx].name,(int)skill_id,0);
-
+
return true;
}
@@ -18820,7 +18811,7 @@ bool skill_parse_row_producedb(char* split[], int columns, int current) {
skill->produce_db[current].mat_id[y] = atoi(split[x]);
skill->produce_db[current].mat_amount[y] = atoi(split[x+1]);
}
-
+
return true;
}
@@ -18987,7 +18978,7 @@ bool skill_parse_row_changematerialdb(char* split[], int columns, int current) {
void skill_readdb(bool minimal) {
// init skill db structures
db_clear(skill->name2id_db);
-
+
/* when != it was called during init and this procedure was already performed by skill_defaults() */
if( runflag == MAPSERVER_ST_RUNNING ) {
memset(skill->db,0,sizeof(skill->db)
@@ -19043,9 +19034,9 @@ void skill_reload (void) {
struct s_mapiterator *iter;
struct map_session_data *sd;
int i,c,k;
-
+
skill->read_db(false);
-
+
//[Ind/Hercules] refresh index cache
for(c = 0; c < CLASS_COUNT; c++) {
for( i = 0; i < MAX_SKILL_TREE; i++ ) {
@@ -19091,7 +19082,7 @@ int do_init_skill(bool minimal) {
ers_chunk_size(skill->cd_entry_ers, 100);
ers_chunk_size(skill->unit_ers, 150);
ers_chunk_size(skill->timer_ers, 150);
-
+
timer->add_func_list(skill->unit_timer,"skill_unit_timer");
timer->add_func_list(skill->castend_id,"skill_castend_id");
timer->add_func_list(skill->castend_pos,"skill_castend_pos");
@@ -19099,12 +19090,11 @@ int do_init_skill(bool minimal) {
timer->add_func_list(skill->blockpc_end, "skill_blockpc_end");
timer->add_interval(timer->gettick()+SKILLUNITTIMER_INTERVAL,skill->unit_timer,0,0,SKILLUNITTIMER_INTERVAL);
-
+
return 0;
}
int do_final_skill(void) {
-
db_destroy(skill->name2id_db);
db_destroy(skill->group_db);
db_destroy(skill->unit_db);
@@ -19121,7 +19111,7 @@ int do_final_skill(void) {
void skill_defaults(void) {
const int skill_enchant_eff[5] = { 10, 14, 17, 19, 20 };
const int skill_deluge_eff[5] = { 5, 9, 12, 14, 15 };
-
+
skill = &skill_s;
skill->init = do_init_skill;
skill->final = do_final_skill;