Changeset 24 for src/map/skill.c

Show
Ignore:
Timestamp:
07/07/08 22:48:26 (17 years ago)
Author:
jinshiro
Message:
 
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/map/skill.c

    r23 r24  
    4242#define GD_SKILLRANGEMIN 900 
    4343#define GD_SKILLRANGEMAX GD_SKILLRANGEMIN+MAX_GUILDSKILL 
    44 #define HM_SKILLRANGEMIN 1000 
     44#define HM_SKILLRANGEMIN 1100 //I know for a fact this will cause authok problems where it is, but perhaps it's changed now. 
    4545#define HM_SKILLRANGEMAX HM_SKILLRANGEMIN+MAX_HOMUNSKILL 
    4646 
     
    283283        struct status_change* sc; 
    284284        sc = status_get_sc(bl); 
    285  
     285         
    286286        // Never copy NPC/Wedding Skills 
    287287        if (skill_get_inf2(skillid)&(INF2_NPC_SKILL|INF2_WEDDING_SKILL)) 
     
    300300        if ((skillid == AL_INCAGI || skillid == AL_BLESSING)) 
    301301                return 0; 
    302  
     302                 
    303303        return 1; 
    304304} 
     
    306306// [MouseJstr] - skill ok to cast? and when? 
    307307int skillnotok (int skillid, struct map_session_data *sd) 
    308 { 
     308{        
    309309        int i,m; 
    310310        nullpo_retr (1, sd); 
    311311        m = sd->bl.m; 
    312312        i = skill_get_index(skillid); 
    313  
     313         
    314314        if (i == 0) 
    315315                return 1; // invalid skill id 
    316  
     316         
    317317        if (battle_config.gm_skilluncond && pc_isGM(sd) >= battle_config.gm_skilluncond) 
    318318                return 0;  // GMs can do any damn thing they want 
     
    354354                                return 1; 
    355355                        } 
    356                         break; 
     356                        break;   
    357357                case MC_VENDING: 
    358358                case MC_IDENTIFY: 
     
    387387        if (i == 0) 
    388388                return 1; // invalid skill id 
    389  
     389         
    390390        if (hd->blockskill[i] > 0) 
    391391                return 1; 
     
    396396 
    397397struct s_skill_unit_layout* skill_get_unit_layout (int skillid, int skilllv, struct block_list* src, int x, int y) 
    398 { 
     398{        
    399399        int pos = skill_get_unit_layout_type(skillid,skilllv); 
    400400        int dir; 
     
    420420 
    421421/*========================================== 
    422  * 
     422 *  
    423423 *------------------------------------------*/ 
    424424int skill_additional_effect (struct block_list* src, struct block_list *bl, int skillid, int skilllv, int attack_type, unsigned int tick) 
     
    450450        if (!tsc) //skill additional effect is about adding effects to the target... 
    451451                //So if the target can't be inflicted with statuses, this is pointless. 
    452                 return 0; 
     452                return 0;        
    453453 
    454454        switch(skillid) 
     
    482482                                                (2000 - 4*sstatus->agi - 2*sstatus->dex))) 
    483483                                        ; //Stance triggered 
    484                                 else if(sc->data[SC_READYTURN] && 
     484                                else if(sc->data[SC_READYTURN] &&  
    485485                                        sc_start(src,SC_COMBO, 15, TK_TURNKICK, 
    486486                                                (2000 - 4*sstatus->agi - 2*sstatus->dex))) 
     
    492492                                                rate += rate*sc->data[SC_SKILLRATE_UP]->val2/100; 
    493493                                                status_change_end(src,SC_SKILLRATE_UP,-1); 
    494                                         } 
     494                                        }  
    495495                                        sc_start4(src,SC_COMBO, rate, TK_COUNTER, bl->id,0,0, 
    496496                                                (2000 - 4*sstatus->agi - 2*sstatus->dex)); 
     
    610610        case CR_GRANDCROSS: 
    611611        case NPC_GRANDDARKNESS: 
    612                 if(tstatus->race == RC_UNDEAD || tstatus->race == RC_DEMON) 
     612                //Chance to cause blind status vs demon and undead element, but not against players 
     613                if(!dstsd && (battle_check_undead(tstatus->race,tstatus->def_ele) || tstatus->race == RC_DEMON)) 
    613614                        sc_start(bl,SC_BLIND,100,skilllv,skill_get_time2(skillid,skilllv)); 
    614615                break; 
     
    662663        case NPC_PETRIFYATTACK: 
    663664                sc_start4(bl,status_skill2sc(skillid),50+10*skilllv, 
    664                         skilllv,0,0,skill_get_time(skillid,skilllv), 
     665                        skilllv,0,0,skill_get_time(skillid,skilllv),  
    665666                        skill_get_time2(skillid,skilllv)); 
    666667                break; 
     
    680681                sc_start(bl,SC_BLEEDING,(20*skilllv),skilllv,skill_get_time2(skillid,skilllv)); 
    681682                break; 
    682         case NPC_MENTALBREAKER: 
     683        case NPC_MENTALBREAKER:  
    683684        {       //Based on observations by Tharis, Mental Breaker should do SP damage 
    684685                //equal to Matk*skLevel. 
     
    785786                        if (tsc->data[SC_ADRENALINE2]) 
    786787                                status_change_end(bl, SC_ADRENALINE2, -1); 
    787                 } 
     788                }                
    788789                break; 
    789790        case TK_TURNKICK: 
     
    821822                sc_start(bl,SC_CRITICALWOUND,100,skilllv,skill_get_time2(skillid,skilllv)); 
    822823                break; 
     824//This has weird Structure compared to the other stuff here. 
    823825        case NC_GHOULTOUCH:     //Necro Ghoul Touch [Brain] 
    824         if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed 
    825                 sc_start(bl,SC_POISON,10000,skilllv,skill_get_time2(skillid,skilllv)); 
    826         break; 
     826                if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed 
     827                        sc_start(bl,SC_POISON,10000,skilllv,skill_get_time2(skillid,skilllv)); 
     828                break; 
    827829        case NC_PWSUFFER:       //Necro Power Word: Suffer [Brain] 
    828830        case WL_PWAGONY:        //Warlock Power Word: Agony [Brain] 
    829         if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed 
    830                 sc_start(bl,skillid==NC_PWSUFFER?SC_SUFFER:SC_AGONY,1000,skilllv,skill_get_time2(skillid,skilllv)); 
    831         break; 
     831                if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed 
     832                        sc_start(bl,skillid==NC_PWSUFFER?SC_SUFFER:SC_AGONY,1000,skilllv,skill_get_time2(skillid,skilllv)); 
     833                break; 
    832834        case WL_SEARING:        //Warlock Searing Pain [Brain] 
    833         //The DoT is only initiated if target isnt burning already. 
    834         if(!tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) 
    835                 sc_start(bl,SC_SEARING,10000,skilllv,skill_get_time2(skillid,skilllv)); 
    836         break; 
     835                //The DoT is only initiated if target isnt burning already. 
     836                if(!tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) 
     837                        sc_start(bl,SC_SEARING,10000,skilllv,skill_get_time2(skillid,skilllv)); 
     838                break; 
    837839        case WL_IMMOLATE:       //Warlock Immolate [Brain] 
    838         //The DoT is only initiated if target isnt in immolate, but must be in searing pain status 
    839         if(tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) 
    840                 sc_start(bl,SC_IMMOLATE,10000,skilllv,skill_get_time2(skillid,skilllv)); 
    841         break; 
     840                //The DoT is only initiated if target isnt in immolate, but must be in searing pain status 
     841                if(tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) 
     842                        sc_start(bl,SC_IMMOLATE,10000,skilllv,skill_get_time2(skillid,skilllv)); 
     843                break; 
    842844        case WL_SHADOWBURN:     //Warlock Shadow Burn [Brain] 
    843         sc_start(bl,SC_STUN,10000,skilllv,skill_get_time(skillid,skilllv)); 
    844         break; 
    845         //Mercenary Skills [Brainstorm] 
    846 /*      case MS_BASH: 
    847         sc_start(bl,SC_STUN,5*(skilllv-5),skilllv,skill_get_time(skillid,skilllv)); 
    848         break; 
    849         case MER_CRASH: 
    850         sc_start(bl,SC_STUN,6*skilllv,skilllv,skill_get_time(skillid,skilllv)); 
    851         break;*/ 
     845                sc_start(bl,SC_STUN,10000,skilllv,skill_get_time(skillid,skilllv)); 
     846                break; 
     847 
    852848        } 
    853849 
     
    961957        if(sd && sd->classchange && attack_type&BF_WEAPON && 
    962958                dstmd && !(tstatus->mode&MD_BOSS) && 
    963                 (rand()%10000 < sd->classchange)) 
     959                (rand()%10000 < sd->classchange))  
    964960        { 
    965961                struct mob_db *mob; 
     
    970966                                class_ = rand() % MAX_MOB_DB; 
    971967                        } while (!mobdb_checkid(class_)); 
    972  
     968                         
    973969                        rate = rand() % 1000000; 
    974970                        mob = mob_db(class_); 
     
    984980 
    985981/* Splitted off from skill_additional_effect, which is never called when the 
    986  * attack skill kills the enemy. Place in this function counter status effects 
    987  * when using skills (eg: Asura's sp regen penalty, or counter-status effects 
     982 * attack skill kills the enemy. Place in this function counter status effects  
     983 * when using skills (eg: Asura's sp regen penalty, or counter-status effects  
    988984 * from cards) that will take effect on the source, not the target. [Skotlex] 
    989  * Note: Currently this function only applies to Extremity Fist and BF_WEAPON 
     985 * Note: Currently this function only applies to Extremity Fist and BF_WEAPON  
    990986 * type of skills, so not every instance of skill_additional_effect needs a call 
    991987 * to this one. 
     
    997993        struct map_session_data *dstsd=NULL; 
    998994        struct status_change *tsc; 
    999  
     995         
    1000996        nullpo_retr(0, src); 
    1001997        nullpo_retr(0, bl); 
     
    10151011                if(tsc && tsc->data[SC_KAAHI] && tsc->data[SC_KAAHI]->val4 == -1) 
    10161012                        tsc->data[SC_KAAHI]->val4 = add_timer( 
    1017                                 tick+skill_get_time2(SL_KAAHI,tsc->data[SC_KAAHI]->val1), 
     1013                                tick+skill_get_time2(SL_KAAHI,tsc->data[SC_KAAHI]->val1),  
    10181014                                kaahi_heal_timer, bl->id, SC_KAAHI); //Activate heal. 
    10191015                break; 
     
    10471043                status_heal(src, 0, status_get_lv(bl)*(95+15*rate)/100, 2); 
    10481044        } 
    1049  
     1045//was hard to pinpoint this place. 
    10501046        // Warlock Soul Steal [Brain] 
    1051         if(sd && skillid && attack_type&BF_MAGIC && status_isdead(bl) 
    1052         && !(skill_get_inf(skillid)&(INF_GROUND_SKILL|INF_SELF_SKILL)) 
    1053         && (rate=pc_checkskill(sd,WL_SOULSTEAL))>0){// Wont work with area/ground spells (hellfire) 
    1054         if (pc_issit(sd)) pc_setstand(sd); 
    1055         clif_skill_nodamage(src,bl,WL_SOULSTEAL,rate,1); 
    1056         clif_specialeffect(src, 253, AREA); // Absorb Mana effect on caster 
    1057         status_heal(src, 0, status_get_lv(bl)*(90+10*rate)/100, 2); 
    1058         if(rand()%100 < rate) skill_additem(src,src,15020,1); //Chance to "steal" the target soul 
     1047        if(sd && skillid && attack_type&BF_MAGIC && status_isdead(bl)  
     1048                && !(skill_get_inf(skillid)&(INF_GROUND_SKILL|INF_SELF_SKILL)) 
     1049                && (rate=pc_checkskill(sd,WL_SOULSTEAL))>0){// Wont work with area/ground spells (hellfire) 
     1050                if (pc_issit(sd)) pc_setstand(sd); 
     1051                clif_skill_nodamage(src,bl,WL_SOULSTEAL,rate,1); 
     1052                clif_specialeffect(src, 253, AREA); // Absorb Mana effect on caster 
     1053                status_heal(src, 0, status_get_lv(bl)*(90+10*rate)/100, 2); 
     1054                if(rand()%100 < rate) skill_additem(src,src,15020,1); //Chance to "steal" the target soul 
    10591055        } 
    10601056 
     
    10691065                                rate+=dstsd->addeff2[i].arrow_rate; 
    10701066                        if (!rate) continue; 
    1071  
     1067                         
    10721068                        if ((dstsd->addeff2[i].flag&(ATF_LONG|ATF_SHORT)) != (ATF_LONG|ATF_SHORT)) 
    10731069                        {       //Trigger has range consideration. 
     
    10781074                        type = dstsd->addeff2[i].id; 
    10791075                        time = skill_get_time2(status_sc2skill(type),7); 
    1080  
     1076                         
    10811077                        if (dstsd->addeff2[i].flag&ATF_TARGET) 
    10821078                                status_change_start(src,type,rate,7,0,0,0,time,0); 
    1083  
     1079                         
    10841080                        if (dstsd->addeff2[i].flag&ATF_SELF && !status_isdead(bl)) 
    10851081                                status_change_start(bl,type,rate,7,0,0,0,time,0); 
     
    10891085        // Trigger counter-spells to retaliate against damage causing skills. 
    10901086        if(dstsd && !status_isdead(bl) && src != bl && dstsd->autospell2[0].id && 
    1091                 !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE)) 
     1087                !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE))  
    10921088        { 
    10931089                struct block_list *tbl; 
     
    11091105                        if (attack_type&BF_LONG) 
    11101106                                 rate>>=1; 
    1111  
     1107                         
    11121108                        if (skillnotok(skillid, dstsd)) 
    11131109                                continue; 
     
    11181114                        else 
    11191115                                tbl = src; 
    1120  
     1116                         
    11211117                        switch (skill_get_casttype(skillid)) { 
    11221118                                case CAST_GROUND: 
     
    11421138        //Auto-script when attacked 
    11431139        if(dstsd && !status_isdead(bl) && src != bl && dstsd->autoscript2[0].script && 
    1144                 !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE)) 
     1140                !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE))  
    11451141        { 
    11461142                int i; 
     
    11661162   (BCT_ENEMY/BCT_PARTY/BCT_SELF) are the valid values. 
    11671163--------------------------------------------------------------------------*/ 
    1168 int skill_break_equip (struct block_list *bl, unsigned short where, int rate, int flag) 
     1164int skill_break_equip (struct block_list *bl, unsigned short where, int rate, int flag)  
    11691165{ 
    11701166        const int where_list[4]     = {EQP_WEAPON, EQP_ARMOR, EQP_SHIELD, EQP_HELM}; 
     
    12681264        for (i = 0; i < ARRAYLENGTH(pos); i++) { 
    12691265                if (where&pos[i] && sc->data[sc_def[i]]) 
    1270                         where&=~pos[i]; 
     1266                        where&=~pos[i];  
    12711267        } 
    12721268        if (!where) return 0; 
     
    12981294        if (count == 0) 
    12991295                return 0; //Actual knockback distance is 0. 
    1300  
     1296         
    13011297        switch (target->type) 
    13021298        { 
     
    13331329 
    13341330        if (!su) 
    1335                 unit_stop_walking(target,0); 
     1331                unit_stop_walking(target,0);  
    13361332 
    13371333        dx = nx - target->x; 
     
    13501346        map_foreachinmovearea(clif_insight, target, AREA_SIZE, -dx, -dy, target->type == BL_PC ? BL_ALL : BL_PC, target); 
    13511347 
    1352         if(!(flag&0x1)) 
     1348        if(!(flag&0x1))  
    13531349                clif_blown(target); 
    13541350 
     
    13981394 * flag&0xFFF is passed to the underlying battle_calc_attack for processing 
    13991395 *      (usually holds number of targets, or just 1 for simple splash attacks) 
    1400  * flag&0x1000 is used to tag that this is a splash-attack (so the damage 
     1396 * flag&0x1000 is used to tag that this is a splash-attack (so the damage  
    14011397 *      packet shouldn't display a skill animation) 
    14021398 * flag&0x2000 is used to signal that the skilllv should be passed as -1 to the 
     
    14991495                        } 
    15001496                } 
    1501  
     1497         
    15021498                if(sc && sc->data[SC_MAGICROD] && src == dsrc) { 
    15031499                        int sp = skill_get_sp(skillid,skilllv); 
     
    15131509 
    15141510        damage = dmg.damage + dmg.damage2; 
    1515  
     1511         
    15161512        if( (skillid == AL_INCAGI || skillid == AL_BLESSING) && tsd->sc.data[SC_CHANGEUNDEAD] ) 
    15171513                damage = 1; 
     
    15241520        type=(skillid==0)?5:skill_get_hit(skillid); 
    15251521 
    1526         if(damage < dmg.div_ 
     1522        if(damage < dmg.div_  
    15271523                //Only skills that knockback even when they miss. [Skotlex] 
    15281524                && skillid != CH_PALMSTRIKE) 
     
    16531649                break; 
    16541650        } 
    1655  
     1651         
    16561652        map_freeblock_lock(); 
    16571653 
     
    16861682                } 
    16871683        } 
    1688         if (skillid != WZ_SIGHTRASHER && 
    1689                 skillid != WZ_SIGHTBLASTER && 
     1684        if (skillid != WZ_SIGHTRASHER &&  
     1685                skillid != WZ_SIGHTBLASTER &&  
    16901686                skillid != AC_SHOWER && 
    16911687                skillid != SM_MAGNUM && 
     
    17091705                        if (!status_isdead(bl)) 
    17101706                                skill_additional_effect(src,bl,skillid,skilllv,attack_type,tick); 
    1711                         //Counter status effects [Skotlex] 
     1707                        //Counter status effects [Skotlex]  
    17121708                        skill_counter_additional_effect(dsrc,bl,skillid,skilllv,attack_type,tick); 
    17131709                } 
     
    17271723                skill_blown(dsrc,bl,dmg.blewcount,direction,0); 
    17281724        } 
    1729  
     1725         
    17301726        //Delayed damage must be dealt after the knockback (it needs to know actual position of target) 
    17311727        if (dmg.amotion) 
     
    17591755 
    17601756        if (!(flag&2) && 
    1761                 ( 
     1757                (        
    17621758                        skillid == MG_COLDBOLT || skillid == MG_FIREBOLT || skillid == MG_LIGHTNINGBOLT 
    17631759                ) && 
     
    19331929        struct map_session_data *sd; 
    19341930        int gid, id, strvit, agidex; 
    1935  
     1931         
    19361932        sd = (struct map_session_data *)bl; 
    19371933 
     
    19731969        int i,j,hp,sp,hp_rate,sp_rate,state,mhp ; 
    19741970        int itemid[10],amount[ARRAYLENGTH(itemid)],index[ARRAYLENGTH(itemid)]; 
    1975  
     1971         
    19761972        nullpo_retr(0, hd); 
    19771973        sd = hd->master; 
     
    21082104                                target = src; //Required since it has to warp. 
    21092105                        if(target == NULL) 
    2110                                 break; 
     2106                                break;   
    21112107                        if(target->prev == NULL) 
    21122108                                break; 
     
    21512147                                        } 
    21522148                                        break; 
    2153  
    2154                 case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] 
    2155                         if (!status_isdead(target) && status_get_sc(target)->data[SC_SUFFER]){ 
    2156                         skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
    2157                         clif_specialeffect(target, 180, AREA); //Shadow Hit Effect on target 
    2158                         if (skl->type>1 && !status_isdead(target)) 
    2159                                 skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
    2160                         } 
    2161                         break; 
    2162                 case WL_SEARING: //Warlock Searing Pain [Brain] 
    2163                         if (!status_isdead(target) && status_get_sc(target)->data[SC_SEARING]){ 
    2164                         skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
    2165                         clif_specialeffect(target, 49, AREA); //Fire Hit Effect on target 
    2166                         if (skl->type>1 && !status_isdead(target)) 
    2167                                 skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
    2168                         } 
    2169                         break; 
    2170                 case WL_IMMOLATE: //Warlock Immolate [Brain] 
    2171                         if (!status_isdead(target) && status_get_sc(target)->data[SC_IMMOLATE]){ 
    2172                         skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
    2173                         clif_specialeffect(target, 97, AREA); //Firepillar Hit Effect on target 
    2174                         if (skl->type>1 && !status_isdead(target)) 
    2175                                 skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
    2176                         } 
    2177                         break; 
    2178                 case WL_PWAGONY: //Warlock Power Word: Agony [Brain] 
    2179                         if (!status_isdead(target) && status_get_sc(target)->data[SC_AGONY]){ 
    2180                         skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
    2181                         clif_specialeffect(target, 587, AREA); //Big Purple Flame Effect on target 
    2182                         if (skl->type>1 && !status_isdead(target)) 
    2183                                 skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
    2184                         } 
    2185                         break; 
    2186  
     2149//Could be confusing to find the right place. 
     2150                                case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] 
     2151                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_SUFFER]){ 
     2152                                                skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2153                                                clif_specialeffect(target, 180, AREA); //Shadow Hit Effect on target 
     2154                                                if (skl->type>1 && !status_isdead(target)) 
     2155                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2156                                        } 
     2157                                        break; 
     2158                                case WL_SEARING: //Warlock Searing Pain [Brain] 
     2159                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_SEARING]){ 
     2160                                                skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2161                                                clif_specialeffect(target, 49, AREA); //Fire Hit Effect on target 
     2162                                                if (skl->type>1 && !status_isdead(target)) 
     2163                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2164                                        } 
     2165                                        break; 
     2166                                case WL_IMMOLATE: //Warlock Immolate [Brain] 
     2167                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_IMMOLATE]){ 
     2168                                                skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2169                                                clif_specialeffect(target, 97, AREA); //Firepillar Hit Effect on target 
     2170                                                if (skl->type>1 && !status_isdead(target)) 
     2171                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2172                                        } 
     2173                                        break; 
     2174                                case WL_PWAGONY: //Warlock Power Word: Agony [Brain] 
     2175                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_AGONY]){ 
     2176                                                skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2177                                                clif_specialeffect(target, 587, AREA); //Big Purple Flame Effect on target 
     2178                                                if (skl->type>1 && !status_isdead(target)) 
     2179                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2180                                        } 
     2181                                        break; 
    21872182                                default: 
    21882183                                        skill_attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag); 
     
    22202215        ud = unit_bl2ud(src); 
    22212216        nullpo_retr(1, ud); 
    2222  
     2217         
    22232218        ARR_FIND( 0, MAX_SKILLTIMERSKILL, i, ud->skilltimerskill[i] == 0 ); 
    22242219        if( i == MAX_SKILLTIMERSKILL ) return 1; 
    2225  
     2220         
    22262221        ud->skilltimerskill[i] = ers_alloc(skill_timer_ers, struct skill_timerskill); 
    22272222        ud->skilltimerskill[i]->timer = add_timer(tick, skill_timerskill, src->id, i); 
     
    22482243        ud = unit_bl2ud(src); 
    22492244        nullpo_retr(0, ud); 
    2250  
     2245                 
    22512246        for(i=0;i<MAX_SKILLTIMERSKILL;i++) { 
    22522247                if(ud->skilltimerskill[i]) { 
     
    22852280 
    22862281        nullpo_retr(1, src); 
    2287         nullpo_retr(1, bl); 
     2282        nullpo_retr(1, bl);      
    22882283 
    22892284        if (src->m != bl->m) 
     
    22922287        if (bl->prev == NULL) 
    22932288                return 1; 
    2294  
     2289         
    22952290        sd = BL_CAST(BL_PC, src); 
    22962291        tsd = BL_CAST(BL_PC, bl); 
     
    23082303        } 
    23092304 
    2310         sc = status_get_sc(src); 
     2305        sc = status_get_sc(src);         
    23112306        if (sc && !sc->count) 
    23122307                sc = NULL; //Unneeded 
     
    23972392        case NPC_BLEEDING: 
    23982393        case NPC_CRITICALWOUND: 
    2399         /*Mercenary Skills [Brainstorm] 
    2400         case MS_BASH: 
    2401         case MA_DOUBLE: 
    2402         case MA_CHARGEARROW: 
    2403         case ML_PIERCE: 
    2404         case ML_SPIRALPIERCE: 
    2405         case MER_CRASH: 
    24062394                skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); 
    2407                 break;*/ 
     2395                break; 
     2396                 
     2397//... something doesn't fit about this. Seriously. 
    24082398        case NC_GHOULTOUCH:     //Necro Ghoul Touch [Brain] 
    2409         skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); 
    2410         clif_specialeffect(bl, 124, AREA); //Venom Dust Effect on target 
    2411         break; 
    2412         case NC_DEATHHAND:       //Necro Death Hand [Brain] 
    2413         skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag|SD_LEVEL);//Hide skill yell 
    2414         clif_specialeffect(bl, 65, AREA); //Power absorb Effect on target 
    2415         if (battle_check_living(tstatus->race, tstatus->def_ele)){ //Check if target is a living creature before proceed 
    2416                 int chance = (10+(skilllv*2)+(status_get_luk(src)-status_get_luk(bl))/5); 
    2417                 //10% chance + 2% per skilllv + (caster luk - target luk)/5 % 
    2418                 if (rand()%100 < chance) { 
    2419                         clif_skill_nodamage(src,bl,skillid,-1,flag|SD_LEVEL);//Hide skill yell 
    2420                         status_percent_damage(src, bl, 100, 0, true); //Instant kill our target 
    2421                 } else clif_skill_fail(sd,skillid,0,0); 
    2422         } 
    2423         break; 
     2399                skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); 
     2400                clif_specialeffect(bl, 124, AREA); //Venom Dust Effect on target 
     2401                break; 
     2402        case NC_DEATHHAND:      //Necro Death Hand [Brain] 
     2403                skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag|SD_LEVEL);//Hide skill yell 
     2404                clif_specialeffect(bl, 65, AREA); //Power absorb Effect on target 
     2405                if (battle_check_living(tstatus->race, tstatus->def_ele)){ //Check if target is a living creature before proceed 
     2406                        int chance = (10+(skilllv*2)+(status_get_luk(src)-status_get_luk(bl))/5);  
     2407                        //10% chance + 2% per skilllv + (caster luk - target luk)/5 % 
     2408                                if (rand()%100 < chance) { 
     2409                                        clif_skill_nodamage(src,bl,skillid,-1,flag|SD_LEVEL);//Hide skill yell 
     2410                                        status_percent_damage(src, bl, 100, 0, true); //Instant kill our target 
     2411                                } else clif_skill_fail(sd,skillid,0,0); 
     2412                } 
     2413                break; 
    24242414 
    24252415 
     
    24552445                map_foreachinrange(skill_attack_area, src, 
    24562446                        skill_get_splash(skillid, skilllv), splash_target(src), 
    2457                         BF_WEAPON, src, src, skillid, skilllv, tick, flag, BCT_ENEMY); 
     2447                        BF_WEAPON, src, src, skillid, skilllv, tick, flag, BCT_ENEMY);   
    24582448                break; 
    24592449 
     
    25972587        //Splash attack skills. 
    25982588        case AS_GRIMTOOTH: 
    2599         case MC_CARTREVOLUTION: 
     2589        case MC_CARTREVOLUTION:  
    26002590        case NPC_SPLASHATTACK: 
    26012591                flag |= SD_PREAMBLE; // a fake packet will be sent for the first target to be hit 
     
    26032593        case SM_MAGNUM: 
    26042594        case HT_BLITZBEAT: 
    2605         case AC_SHOWER: 
     2595        case AC_SHOWER:  
    26062596        case MG_NAPALMBEAT: 
    26072597        case MG_FIREBALL: 
     
    26602650                if (skill_area_temp[1] != bl->id) 
    26612651                        skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, flag|SD_ANIMATION); 
    2662                 else 
     2652                else  
    26632653                        skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, flag); 
    26642654                break; 
     
    27252715                                skill_castend_nodamage_id); 
    27262716        } 
    2727                 break; 
     2717                break;   
    27282718        case CH_PALMSTRIKE: //  Palm Strike takes effect 1sec after casting. [Skotlex] 
    27292719        //      clif_skill_nodamage(src,bl,skillid,skilllv,0); //Can't make this one display the correct attack animation delay :/ 
    27302720                clif_damage(src,bl,tick,status_get_amotion(src),0,-1,1,4,0); //Display an absorbed damage attack. 
    27312721                skill_addtimerskill(src, tick + 1000, bl->id, 0, 0, skillid, skilllv, BF_WEAPON, flag); 
    2732                 break; 
     2722                break;   
    27332723 
    27342724        case PR_TURNUNDEAD: 
     
    27582748                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    27592749                break; 
     2750//another thing in a weird place. 
    27602751        case AD_DARKHEAL: // Adept Dark Heal [Brain] 
    2761         clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target 
    2762         skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Exception because we must add the effect manually =/ 
    2763         break; 
     2752                clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target 
     2753                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Exception because we must add the effect manually =/ 
     2754                break; 
    27642755        case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] 
    2765         if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
    2766                 skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2756                if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
     2757                        skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2758                        clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
     2759                        clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2760                        //If target is on suffering status already, just cause damage, no extra DoT 
     2761                        if(!status_get_sc(bl)->data[SC_SUFFER]) 
     2762                                skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); 
     2763                } 
     2764                else clif_skill_fail(sd,skillid,0,0); 
     2765                break; 
     2766        case NC_DRAINLIFE: // Necromancer Drain Life [Brain] 
     2767                { 
     2768                        int heal = skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, flag)/2; 
     2769                        if (heal > 0 && (battle_check_living(tstatus->race,tstatus->def_ele))){ 
     2770                                clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1); 
     2771                                status_heal(src, heal, 0, 0); 
     2772                        } 
     2773                } 
    27672774                clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
    27682775                clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    2769                 //If target is on suffering status already, just cause damage, no extra DoT 
    2770                 if(!status_get_sc(bl)->data[SC_SUFFER]) 
    2771                 skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); 
    2772         } 
    2773         else clif_skill_fail(sd,skillid,0,0); 
    2774         break; 
    2775         case NC_DRAINLIFE: // Necromancer Drain Life [Brain] 
    2776         { 
    2777                 int heal = skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, flag)/2; 
    2778                 if (heal > 0 && (battle_check_living(tstatus->race,tstatus->def_ele))){ 
    2779                 clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1); 
    2780                 status_heal(src, heal, 0, 0); 
    2781                 } 
    2782         } 
    2783         clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
    2784         clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    2785         break; 
     2776                break; 
    27862777        case WL_SHADOWBOLT: // Warlock Shadowbolt [Brain] 
    2787         clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
    2788         clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    2789         skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Again, the effect...cursed effects... 
    2790         break; 
     2778                clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
     2779                clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2780                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Again, the effect...cursed effects... 
     2781                break; 
    27912782        case WL_SHADOWBURN: // Warlock Shadow Burn [Brain] 
    2792         clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
    2793         clif_specialeffect(bl, 32, AREA); //Flame Engulf Effect on target 
    2794         clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    2795         skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    2796         break; 
     2783                clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
     2784                clif_specialeffect(bl, 32, AREA); //Flame Engulf Effect on target 
     2785                clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2786                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2787                break; 
    27972788        case WL_SEARING: // Warlock Searing Pain [Brain] 
    2798         clif_specialeffect(bl, 406, AREA); //Fire on Head Effect on target 
    2799         clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
    2800         skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    2801         //if target is on searing status already, just cause damage, no extra DoT 
    2802         if(!status_get_sc(bl)->data[SC_SEARING]) 
    2803                 skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,4,flag); 
    2804         break; 
    2805         case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] 
    2806         if(status_get_sc(bl)->data[SC_IMMOLATE]) { // Can only be casted if target is immolating status 
    2807                 clif_specialeffect(bl, 183, AREA); //Explosion Effect on target 
     2789                clif_specialeffect(bl, 406, AREA); //Fire on Head Effect on target 
    28082790                clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
    28092791                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    2810                 status_change_end(bl,SC_IMMOLATE,-1); //End Immolating status 
    2811         } else clif_skill_fail(sd,skillid,0,0); 
    2812         break; 
     2792                //if target is on searing status already, just cause damage, no extra DoT 
     2793                if(!status_get_sc(bl)->data[SC_SEARING]) 
     2794                        skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,4,flag); 
     2795                break; 
     2796        case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] 
     2797                if(status_get_sc(bl)->data[SC_IMMOLATE]) { // Can only be casted if target is immolating status 
     2798                        clif_specialeffect(bl, 183, AREA); //Explosion Effect on target 
     2799                        clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
     2800                        skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2801                        status_change_end(bl,SC_IMMOLATE,-1); //End Immolating status 
     2802                } else clif_skill_fail(sd,skillid,0,0); 
     2803                break; 
    28132804        case WL_IMMOLATE: // Warlock Immolate [Brain] 
    2814         clif_specialeffect(bl, 635, AREA); //Dragon Fire Effect on target 
    2815         clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
    2816         skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    2817         //If Target is on searing pain status, will change immolating status instead 
    2818         if(!status_get_sc(bl)->data[SC_IMMOLATE]) 
    2819                 skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,5,flag); 
    2820         break; 
     2805                clif_specialeffect(bl, 635, AREA); //Dragon Fire Effect on target 
     2806                clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
     2807                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2808                //If Target is on searing pain status, will change immolating status instead 
     2809                if(!status_get_sc(bl)->data[SC_IMMOLATE]) 
     2810                        skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,5,flag); 
     2811                break; 
    28212812        case WL_CURSEDOOM: // Warlock Curse of Doom [Brain] 
    2822         clif_specialeffect(bl, 183, AREA); //Explosion Effect on target 
    2823         skill_attack(BF_MAGIC,src,bl,bl,skillid,skilllv,tick,flag|SD_ANIMATION); 
    2824         break; 
     2813                clif_specialeffect(bl, 183, AREA); //Explosion Effect on target 
     2814                skill_attack(BF_MAGIC,src,bl,bl,skillid,skilllv,tick,flag|SD_ANIMATION); 
     2815                break; 
    28252816        case WL_PWAGONY: // Warlock Power Word: Agony [Brain] 
    2826         if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
    2827                 skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    2828                 clif_specialeffect(bl, 587, AREA); //Big Purple Flame Effect on target 
    2829                 clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    2830                 //If target is on Agonizing status already, just cause damage, no extra DoT 
    2831                 if(!status_get_sc(bl)->data[SC_AGONY]) 
    2832                 skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); 
    2833         } 
    2834         else clif_skill_fail(sd,skillid,0,0); 
    2835         break; 
    2836  
     2817                if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
     2818                        skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2819                        clif_specialeffect(bl, 587, AREA); //Big Purple Flame Effect on target 
     2820                        clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2821                        //If target is on Agonizing status already, just cause damage, no extra DoT 
     2822                        if(!status_get_sc(bl)->data[SC_AGONY]) 
     2823                                skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); 
     2824                } 
     2825                else clif_skill_fail(sd,skillid,0,0); 
     2826                break; 
    28372827 
    28382828        case NPC_MAGICALATTACK: 
     
    28722862                                        count++; // natural water cell 
    28732863                                else 
    2874                                 if( (unit = map_find_skill_unit_oncell(src,x,y,SA_DELUGE,NULL)) != NULL 
     2864                                if( (unit = map_find_skill_unit_oncell(src,x,y,SA_DELUGE,NULL)) != NULL  
    28752865                                ||  (unit = map_find_skill_unit_oncell(src,x,y,NJ_SUITON,NULL)) != NULL ) 
    28762866                                { 
     
    29372927                                skill_attack(BF_MAGIC,src,src,src,skillid,skilllv,tick,flag); 
    29382928                        status_percent_damage(src, src, 0, 100, false); 
    2939                 } 
     2929                }                
    29402930                if (sd) skill_blockpc_start (sd, skillid, (skilllv < 5 ? 10000: 15000)); 
    29412931                break; 
     
    29982988        } 
    29992989 
    3000         map_freeblock_unlock(); 
     2990        map_freeblock_unlock();  
    30012991 
    30022992        if (sd && !(flag&1) && sd->state.arrow_atk) //Consume arrow on last invocation to this skill. 
     
    30062996 
    30072997/*========================================== 
    3008  * 
     2998 *  
    30092999 *------------------------------------------*/ 
    30103000int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, int skillid, int skilllv, unsigned int tick, int flag) 
     
    30203010        int i; 
    30213011        enum sc_type type; 
    3022  
     3012         
    30233013        if(skillid > 0 && skilllv <= 0) return 0;       // celest 
    30243014 
     
    30413031                return 1; 
    30423032 
     3033        // Added DEATHPACT [Brain] 
     3034        //if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO) 
    30433035        if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO && skillid != NC_DEATHPACT) 
    30443036                return 1; 
     
    30463038        tstatus = status_get_status_data(bl); 
    30473039        sstatus = status_get_status_data(src); 
    3048  
     3040         
    30493041        //Check for undead skills that convert a no-damage skill into a damage one. [Skotlex] 
    30503042        switch (skillid) { 
     
    30673059                        } 
    30683060                        break; 
    3069         case AD_DARKHEAL:       // Adept Dark Heal [Brain] 
    3070                 // Only player casted spells can be offensive (copyed from AL_HEAL code above) 
    3071                 if (sd && (battle_check_living(tstatus->race,tstatus->def_ele)) //Check if target is a living creature 
    3072                 && !pc_checkskill(dstsd,NC_PHYLACTERY) //Or he doesnt have Phylactery (non-perma undead) 
    3073                 && !status_get_sc(bl)->data[SC_OVERWHELMING]) { //Or Overwhelming Evil is off (most cases) 
    3074                 if (battle_check_target(src, bl, BCT_ENEMY) < 1) { 
    3075                           //Offensive heal does not works on non-enemies. 
    3076                         clif_skill_fail(sd,skillid,0,0); 
    3077                         return 0; 
    3078                 } 
    3079                 return skill_castend_damage_id(src, bl, skillid, skilllv, tick, flag); 
    3080                 } 
    3081                 break; 
     3061//right place? 
     3062                case AD_DARKHEAL:       // Adept Dark Heal [Brain] 
     3063                        // Only player casted spells can be offensive (copyed from AL_HEAL code above) 
     3064                        if (sd && (battle_check_living(tstatus->race,tstatus->def_ele)) //Check if target is a living creature 
     3065                                && !pc_checkskill(dstsd,NC_PHYLACTERY) //Or he doesnt have Phylactery (non-perma undead) 
     3066                                && !status_get_sc(bl)->data[SC_OVERWHELMING]) { //Or Overwhelming Evil is off (most cases) 
     3067                                if (battle_check_target(src, bl, BCT_ENEMY) < 1) { 
     3068                                        //Offensive heal does not works on non-enemies. 
     3069                                        clif_skill_fail(sd,skillid,0,0); 
     3070                                        return 0; 
     3071                                } 
     3072                                return skill_castend_damage_id(src, bl, skillid, skilllv, tick, flag); 
     3073                        } 
     3074                        break; 
    30823075 
    30833076                case NPC_SMOKING: //Since it is a self skill, this one ends here rather than in damage_id. [Skotlex] 
     
    31073100                        int heal = skill_calc_heal(src, bl, skilllv); 
    31083101                        int heal_get_jobexp; 
    3109  
     3102         
    31103103                        if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM)) 
    31113104                                heal=0; 
    3112                 // Profane Soul reduces the healed recieved by 3% per skilllv [Brain] 
    3113                 if(dstsd) { 
    3114                 heal = heal * (100 - pc_checkskill(dstsd,AD_PROFANE)*3)/100; 
    3115                 //Wont heal even if he got elemental armors [Brain] 
    3116                 if(pc_checkskill(dstsd,NC_PHYLACTERY)) heal = skilllv; 
    3117                 } 
     3105//To not allow heal for joo 
     3106                        // Profane Soul reduces the healed recieved by 3% per skilllv [Brain] 
     3107                        if(dstsd) { 
     3108                                heal = heal * (100 - pc_checkskill(dstsd,AD_PROFANE)*3)/100; 
     3109                                //Wont heal even if he got elemental armors [Brain] 
     3110                                if(pc_checkskill(dstsd,NC_PHYLACTERY)) heal = skilllv; 
     3111                        } 
    31183112                        if (sd) { 
    31193113                                if ((i = pc_skillheal_bonus(sd, skillid))) 
     
    31513145                } 
    31523146                break; 
    3153  
    31543147        case AD_DARKHEAL: // Adept Dark Heal [Brain] 
    3155         { 
    3156                 int heal = skill_calc_heal(src, bl, skilllv); 
    3157                 if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM)) 
    3158                 heal=0; 
    3159                 if(battle_check_undead(tstatus->race,tstatus->def_ele) || tstatus->race==RC_UNDEAD // Check if our target is undead or demon 
    3160                 || tstatus->race==RC_DEMON || pc_checkskill(dstsd,NC_PHYLACTERY)//Or has a phylactery 
    3161                 || status_get_sc(bl)->data[SC_OVERWHELMING]) { //Or is on OverWhelm status, checking again... 
    3162                 clif_skill_nodamage(src, bl, skillid, heal, 1); 
    3163                 clif_skill_nodamage(NULL, bl, AL_HEAL, heal, 1); //Subtle way to show heal numbers AND effect =D 
    3164                 status_heal(bl, heal, 0, 0); 
    3165                 } else { 
    3166                 clif_skill_nodamage(src, bl, skillid, 0, 1); 
    3167                 clif_skill_nodamage(NULL, bl, AL_HEAL, 0, 1); 
    3168                 } 
    3169         clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target 
    3170         } 
    3171         break; 
    3172  
     3148                { 
     3149                        int heal = skill_calc_heal(src, bl, skilllv); 
     3150                        if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM)) 
     3151                                heal=0; 
     3152                        if(battle_check_undead(tstatus->race,tstatus->def_ele) || tstatus->race==RC_UNDEAD // Check if our target is undead or demon 
     3153                                || tstatus->race==RC_DEMON || pc_checkskill(dstsd,NC_PHYLACTERY)//Or has a phylactery 
     3154                                || status_get_sc(bl)->data[SC_OVERWHELMING]) { //Or is on OverWhelm status, checking again... 
     3155                                clif_skill_nodamage(src, bl, skillid, heal, 1); 
     3156                                clif_skill_nodamage(NULL, bl, AL_HEAL, heal, 1); //Subtle way to show heal numbers AND effect =D 
     3157                                status_heal(bl, heal, 0, 0); 
     3158                        } else { 
     3159                                clif_skill_nodamage(src, bl, skillid, 0, 1); 
     3160                                clif_skill_nodamage(NULL, bl, AL_HEAL, 0, 1); 
     3161                        } 
     3162                clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target 
     3163                } 
     3164                break; 
    31733165 
    31743166        case PR_REDEMPTIO: 
     
    32023194                } else //Invalid target, skip resurrection. 
    32033195                        break; 
    3204  
     3196                 
    32053197        case ALL_RESURRECTION: 
    3206         case NC_DEATHPACT: // Necro Death Pact [Brain] 
     3198        case NC_DEATHPACT: // Necro Death Pact [Brain] (Seems fine) 
    32073199                if(sd && map_flag_gvg(bl->m)) 
    32083200                {       //No reviving in WoE grounds! 
     
    32123204                if (!status_isdead(bl)) 
    32133205                        break; 
    3214                 { 
     3206                {        
    32153207                        int per = 0, sper = 0; 
    32163208                        if (map[bl->m].flag.pvp && dstsd && dstsd->pvp_point < 0) 
     
    32233215                        case 4: per=80; break; 
    32243216                        case 5: per=100; break; //Added a 5th level because NC_DEATHPACT got 5 lvs [Brain] 
    3225                         } 
    3226                         if(dstsd && dstsd->special_state.restart_full_recover) 
     3217//above seems ok 
     3218                        } 
     3219                        if(dstsd && dstsd->special_state.restart_full_recover)  
    32273220                                per = sper = 100; 
    32283221                        if (status_revive(bl, per, sper)) 
    32293222                        { 
    32303223                                clif_skill_nodamage(src,bl,ALL_RESURRECTION,skilllv,1); //Both Redemptio and Res show this skill-animation. 
    3231                                                 if(skillid==NC_DEATHPACT) { // Necro Death Pact [Brain] 
    3232                         clif_skill_nodamage(src, bl, skillid, skilllv, 
    3233                         sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3234                         break; 
    3235                 } 
    3236  
    3237                                 if(sd && dstsd && battle_config.resurrection_exp > 0) 
     3224//Seriously, how is this right? It just doesnt look right but i may be ignoring something. 
     3225                                if(skillid==NC_DEATHPACT) { // Necro Death Pact [Brain] 
     3226                                        clif_skill_nodamage(src, bl, skillid, skilllv,  
     3227                                                sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3228                                        break; 
     3229                                } 
     3230 
     3231                                if(sd && dstsd && battle_config.resurrection_exp > 0)  
    32383232                                { 
    32393233                                        int exp = 0,jexp = 0; 
     
    32533247                } 
    32543248                break; 
    3255  
     3249//Huge lump of code here. 
    32563250        case AD_PWBLIND: // Adept Power Word: Blind [Brain] 
    3257         if(!tsc->data[type]) { 
    3258                 clif_skill_nodamage(src, bl, skillid, skilllv,1); 
    3259                 if(sc_start(bl, type,(30 + skilllv * 10 + (status_get_lv(src) - sstatus->int_)/5), 
    3260                 skilllv, skill_get_time(skillid,skilllv))) 
    3261                 { 
    3262                 if(dstmd) mob_unlocktarget(dstmd,tick);  //Removes current target 
    3263                 clif_specialeffect(bl, 379, AREA); //379.Soul Drain (2nd Part) 
    3264                 break; 
    3265                 } 
    3266         } else clif_skill_fail(sd,skillid,0,0); 
    3267         break; 
    3268  
     3251                if(!tsc->data[type]) { 
     3252                        clif_skill_nodamage(src, bl, skillid, skilllv,1); 
     3253                        if(sc_start(bl, type,(30 + skilllv * 10 + (status_get_lv(src) - sstatus->int_)/5), 
     3254                                skilllv, skill_get_time(skillid,skilllv)))  
     3255                        { 
     3256                                if(dstmd) mob_unlocktarget(dstmd,tick);  //Removes current target 
     3257                                clif_specialeffect(bl, 379, AREA); //379.Soul Drain (2nd Part) 
     3258                                break; 
     3259                        } 
     3260                } else clif_skill_fail(sd,skillid,0,0); 
     3261                break; 
    32693262        case AD_PWFEAR: // Adept Power Word: Fear [Brain] 
    3270         if(!tsc->data[type]) { 
    3271                 clif_skill_nodamage(src, bl, skillid, skilllv,1); 
    3272                 if(dstsd) 
    3273                 type = SC_CONFUSION; //Players cant be affected by SC_FEAR 
    3274                 if(sc_start(bl, type, (30 + skilllv * 10), skilllv, skill_get_time(skillid,skilllv))) 
    3275                 { 
    3276                 clif_specialeffect(bl, 372, AREA); //372.Death 
    3277                 unit_escape(bl, bl, 30); 
    3278                 } 
    3279         } else clif_skill_fail(sd,skillid,0,0); 
    3280         break; 
     3263                if(!tsc->data[type]) { 
     3264                        clif_skill_nodamage(src, bl, skillid, skilllv,1); 
     3265                        if(dstsd) 
     3266                                type = SC_CONFUSION; //Players cant be affected by SC_FEAR 
     3267                        if(sc_start(bl, type, (30 + skilllv * 10), skilllv, skill_get_time(skillid,skilllv))) 
     3268                        { 
     3269                                clif_specialeffect(bl, 372, AREA); //372.Death 
     3270                                unit_escape(bl, bl, 30); 
     3271                        } 
     3272                } else clif_skill_fail(sd,skillid,0,0); 
     3273                break; 
    32813274        case WL_HOWLOFPAIN: // Warlock Howl of Pain [Brain] 
    3282         //These must be here first or else the code wont execute them. 
    3283         clif_specialeffect(src, 670, AREA); // Monster skill SCREAM effect on caster (no sound) 
    3284         clif_soundeffectall(bl, "wraith_die.wav", 0, AREA); //Wraith Laugh Sound 
    3285         if (flag & 1) { 
    3286                 //Check if target is a living creature AND a valid enemy 
    3287                 if (battle_check_target(src, bl, BCT_ENEMY) && battle_check_living(tstatus->race,tstatus->def_ele)) 
    3288                 { 
    3289                 if(sc_start(bl,type,10+skilllv*10,skilllv,skill_get_time(skillid,skilllv))) 
    3290                 { 
    3291                         if(dstmd) //PROVOKE Effect on mobs 
    3292                         mob_target(dstmd,src,skill_get_range2(src,skillid,skilllv)); 
    3293                         // Breaks Frozen and Sleep status 
    3294                         if(tsc && tsc->count){ 
    3295                         if(tsc->data[SC_FREEZE]) 
    3296                                 status_change_end(bl,SC_FREEZE,-1); 
    3297                         if(tsc->data[SC_SLEEP]) 
    3298                                 status_change_end(bl,SC_SLEEP,-1); 
    3299                         } 
    3300                         clif_emotion(bl,6); //anger emote on target 
    3301                         break; 
    3302                 } else { //What will happen if the status fail: 
     3275                //These must be here first or else the code wont execute them. 
     3276                clif_specialeffect(src, 670, AREA); // Monster skill SCREAM effect on caster (no sound) 
     3277                clif_soundeffectall(bl, "wraith_die.wav", 0, AREA); //Wraith Laugh Sound 
     3278                if (flag & 1) { 
     3279                        //Check if target is a living creature AND a valid enemy 
     3280                        if (battle_check_target(src, bl, BCT_ENEMY) && battle_check_living(tstatus->race,tstatus->def_ele)) 
    33033281                        { 
    3304                         if (sd) //If is a player 
    3305                                 clif_skill_fail(sd,skillid,0,0); 
    3306                         map_freeblock_unlock(); //Else is a mob 
    3307                         return 0; 
    3308                         } 
    3309                         unit_skillcastcancel(bl, 2); //In any case, will cancel casting 
    3310                 } 
    3311                 } 
    3312         } else { 
    3313                 map_foreachinrange(skill_area_sub, src, 
    3314                 skill_get_splash(skillid, skilllv), BL_CHAR, 
    3315                 src, skillid, skilllv, tick, flag|BCT_ENEMY|1, 
    3316                 skill_castend_nodamage_id); 
    3317                 clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
    3318                 map_freeblock_unlock(); 
    3319                 return 1; 
    3320         } 
    3321         break; 
     3282                                if(sc_start(bl,type,10+skilllv*10,skilllv,skill_get_time(skillid,skilllv))) 
     3283                                { 
     3284                                        if(dstmd) //PROVOKE Effect on mobs 
     3285                                                mob_target(dstmd,src,skill_get_range2(src,skillid,skilllv)); 
     3286                                        // Breaks Frozen and Sleep status 
     3287                                        if(tsc && tsc->count){ 
     3288                                                if(tsc->data[SC_FREEZE]) 
     3289                                                        status_change_end(bl,SC_FREEZE,-1); 
     3290                                                if(tsc->data[SC_SLEEP]) 
     3291                                                        status_change_end(bl,SC_SLEEP,-1); 
     3292                                        } 
     3293                                        clif_emotion(bl,6); //anger emote on target 
     3294                                        break; 
     3295                                } else { //What will happen if the status fail: 
     3296                                        { 
     3297                                                if (sd) //If is a player 
     3298                                                        clif_skill_fail(sd,skillid,0,0); 
     3299                                                map_freeblock_unlock(); //Else is a mob 
     3300                                                return 0; 
     3301                                        } 
     3302                                        unit_skillcastcancel(bl, 2); //In any case, will cancel casting 
     3303                                } 
     3304                        } 
     3305                } else { 
     3306                        map_foreachinrange(skill_area_sub, src, 
     3307                                skill_get_splash(skillid, skilllv), BL_CHAR, 
     3308                                src, skillid, skilllv, tick, flag|BCT_ENEMY|1, 
     3309                                skill_castend_nodamage_id); 
     3310                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3311                        map_freeblock_unlock(); 
     3312                        return 1; 
     3313                } 
     3314                break; 
    33223315        case WL_HOWLOFTERROR: // Warlock Howl of Terror [Brain] 
    3323         if (flag & 1) { 
    3324                 int rate; 
    3325                 //Check if target is a living creature AND a valid enemy 
    3326                 if (battle_check_target(src, bl, BCT_ENEMY) 
    3327                 && battle_check_living(tstatus->race,tstatus->def_ele)) { 
    3328                 rate = 10 + skilllv*5 + pc_checkskill(sd,AD_PWFEAR)*3; 
    3329                 if(dstsd) { 
    3330                         rate -= 10; // 10% less chance on players 
    3331                         type = SC_CONFUSION; //Players cant be affected by SC_FEAR 
    3332                 } 
    3333                 if(sc_start(bl,type,rate,skilllv,skill_get_time(skillid,skilllv))) 
    3334                         clif_specialeffect(bl, 372, AREA); //Same as PW: Fear 
    3335                 } 
    3336         } else { 
    3337                 map_foreachinrange(skill_area_sub, src, 
    3338                 skill_get_splash(skillid, skilllv), BL_CHAR, 
    3339                 src, skillid, skilllv, tick, flag|BCT_ENEMY|1, 
    3340                 skill_castend_nodamage_id); 
    3341                 clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
    3342         } 
    3343         clif_specialeffect(src, 668, AREA); // Monster skill SCREAM effect on caster (with sound) 
    3344         break; 
    3345  
     3316                if (flag & 1) { 
     3317                        int rate; 
     3318                        //Check if target is a living creature AND a valid enemy 
     3319                        if (battle_check_target(src, bl, BCT_ENEMY) 
     3320                                && battle_check_living(tstatus->race,tstatus->def_ele)) { 
     3321                                rate = 10 + skilllv*5 + pc_checkskill(sd,AD_PWFEAR)*3; 
     3322                                if(dstsd) {  
     3323                                        rate -= 10; // 10% less chance on players 
     3324                                        type = SC_CONFUSION; //Players cant be affected by SC_FEAR 
     3325                                } 
     3326                                if(sc_start(bl,type,rate,skilllv,skill_get_time(skillid,skilllv))) 
     3327                                        clif_specialeffect(bl, 372, AREA); //Same as PW: Fear 
     3328                        } 
     3329                } else { 
     3330                        map_foreachinrange(skill_area_sub, src, 
     3331                                skill_get_splash(skillid, skilllv), BL_CHAR, 
     3332                                src, skillid, skilllv, tick, flag|BCT_ENEMY|1, 
     3333                                skill_castend_nodamage_id); 
     3334                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3335                } 
     3336                clif_specialeffect(src, 668, AREA); // Monster skill SCREAM effect on caster (with sound) 
     3337                break; 
     3338// Would be easy to screw up in that. 
    33463339 
    33473340        case AL_DECAGI: 
     
    33613354                } 
    33623355                break; 
    3363  
     3356//another huge lump 
    33643357        case NC_DARKMOON: //Necro Dark Moon [Brain] 
    3365         if (flag&1) { 
    3366                 //Check my enemies 
    3367                 if (battle_check_target(src, bl, BCT_ENEMY) && 
    3368                 battle_check_living(tstatus->race,tstatus->def_ele)) 
    3369                 { 
    3370                 if(sc_start(bl,SC_BLIND,50,skilllv,skill_get_time(skillid,skilllv))) 
    3371                         clif_specialeffect(bl, 580, AREA); //Box of Rain effect on target 
    3372                 } 
    3373                 else { //Now my Party members 
    3374                 if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { 
    3375                         clif_skill_nodamage(bl,bl,skillid,skilllv, 
    3376                         sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3377                         clif_specialeffect(bl, 521, AREA); //Red Flashing Aura Sprite effect on target 
    3378                 } else if (sd) { 
    3379                         party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), 
    3380                         src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); 
    3381                 } 
    3382                 } 
    3383         } else { 
    3384                 map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, 
    3385                 src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); 
    3386                 clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
    3387         } 
    3388         clif_specialeffect(src, 407, AREA); //Soul Change Effect on caster 
    3389         clif_soundeffectall(bl, "se_wolf1.wav", 0, AREA); //Wolf Howl Sound 
    3390         break; 
     3358                if (flag&1) { 
     3359                        //Check my enemies 
     3360                        if (battle_check_target(src, bl, BCT_ENEMY) && 
     3361                                battle_check_living(tstatus->race,tstatus->def_ele)) 
     3362                        { 
     3363                                if(sc_start(bl,SC_BLIND,50,skilllv,skill_get_time(skillid,skilllv))) 
     3364                                        clif_specialeffect(bl, 580, AREA); //Box of Rain effect on target 
     3365                        } 
     3366                        else { //Now my Party members 
     3367                                if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { 
     3368                                        clif_skill_nodamage(bl,bl,skillid,skilllv, 
     3369                                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3370                                        clif_specialeffect(bl, 521, AREA); //Red Flashing Aura Sprite effect on target 
     3371                                } else if (sd) { 
     3372                                        party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), 
     3373                                                src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); 
     3374                                } 
     3375                        } 
     3376                } else { 
     3377                        map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, 
     3378                                src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); 
     3379                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3380                } 
     3381                clif_specialeffect(src, 407, AREA); //Soul Change Effect on caster 
     3382                clif_soundeffectall(bl, "se_wolf1.wav", 0, AREA); //Wolf Howl Sound 
     3383                break; 
    33913384        case NC_REQUIEM: //Necro Requiem [Brain] 
    3392         if (flag&1) { 
    3393                 //Check my enemies 
    3394                 if (battle_check_target(src, bl, BCT_ENEMY) && 
    3395                         battle_check_living(tstatus->race,tstatus->def_ele)) 
    3396                 { 
    3397                 if(sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))) 
    3398                         clif_specialeffect(bl, 578, AREA); //Box of Curse effect on target 
    3399                 } 
    3400                 else { //Now my Party members 
    3401                 if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { 
    3402                         clif_skill_nodamage(bl,bl,skillid,skilllv, 
    3403                         sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3404                         clif_specialeffect(bl, 572, AREA); //Warmth Soul effect on target 
    3405                 } else if (sd) { 
    3406                         party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), 
    3407                         src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); 
    3408                 } 
    3409                 } 
    3410         } else { 
    3411                 map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, 
    3412                 src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); 
    3413                 clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
    3414         } 
    3415         int rnds = rand()%3; 
    3416         switch(rnds) { 
    3417                 case 1: 
    3418                 clif_soundeffectall(bl, "chant1.wav", 0, AREA); //Chanting Sound 
    3419                 break; 
    3420                 case 2: 
    3421                 clif_soundeffectall(bl, "chant2.wav", 0, AREA); //Chanting Sound 
    3422                 break; 
    3423                 case 3: 
    3424                 clif_soundeffectall(bl, "chant3.wav", 0, AREA); //Chanting Sound 
    3425                 break; 
    3426         } 
    3427         break; 
    3428  
     3385                if (flag&1) { 
     3386                        //Check my enemies 
     3387                        if (battle_check_target(src, bl, BCT_ENEMY) && 
     3388                                        battle_check_living(tstatus->race,tstatus->def_ele)) 
     3389                        { 
     3390                                if(sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))) 
     3391                                        clif_specialeffect(bl, 578, AREA); //Box of Curse effect on target 
     3392                        } 
     3393                        else { //Now my Party members 
     3394                                if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { 
     3395                                        clif_skill_nodamage(bl,bl,skillid,skilllv, 
     3396                                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3397                                        clif_specialeffect(bl, 572, AREA); //Warmth Soul effect on target 
     3398                                } else if (sd) { 
     3399                                        party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), 
     3400                                                src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); 
     3401                                } 
     3402                        } 
     3403                } else { 
     3404                        map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, 
     3405                                src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); 
     3406                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3407                } 
     3408                int rnds = rand()%3; 
     3409                switch(rnds) { 
     3410                        case 1: 
     3411                                clif_soundeffectall(bl, "chant1.wav", 0, AREA); //Chanting Sound 
     3412                                break; 
     3413                        case 2: 
     3414                                clif_soundeffectall(bl, "chant2.wav", 0, AREA); //Chanting Sound 
     3415                                break; 
     3416                        case 3: 
     3417                                clif_soundeffectall(bl, "chant3.wav", 0, AREA); //Chanting Sound 
     3418                                break; 
     3419                } 
     3420                break; 
    34293421 
    34303422        case PR_LEXDIVINA: 
     
    34323424                        status_change_end(bl,type, -1); 
    34333425                        clif_skill_nodamage (src, bl, skillid, skilllv, 1); 
    3434                 } else 
    3435                         clif_skill_nodamage (src, bl, skillid, skilllv, 
     3426                } else  
     3427                        clif_skill_nodamage (src, bl, skillid, skilllv,  
    34363428                                sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    34373429                break; 
     
    34493441                        abra_skilllv = min(skilllv, skill_get_max(abra_skillid)); 
    34503442                        clif_skill_nodamage (src, bl, skillid, skilllv, 1); 
    3451  
     3443                         
    34523444                        if( sd ) 
    34533445                        {// player-casted 
     
    34633455                                int target_id = 0; 
    34643456                                if (!ud) break; 
    3465                                 if (inf&INF_SELF_SKILL || inf&INF_SUPPORT_SKILL) { 
     3457                                if (inf&INF_SELF_SKILL || inf&INF_SUPPORT_SKILL) {  
    34663458                                        if (src->type == BL_PET) 
    34673459                                                bl = (struct block_list*)((TBL_PET*)src)->msd; 
    34683460                                        if (!bl) bl = src; 
    3469                                         unit_skilluse_id(src, bl->id, abra_skillid, abra_skilllv); 
     3461                                        unit_skilluse_id(src, bl->id, abra_skillid, abra_skilllv);  
    34703462                                } else {        //Assume offensive skills 
    34713463                                        if (ud->target) 
     
    34803472                                                bl = map_id2bl(target_id); 
    34813473                                                if (!bl) bl = src; 
    3482                                                 unit_skilluse_pos(src, bl->x, bl->y, abra_skillid, abra_skilllv); 
     3474                                                unit_skilluse_pos(src, bl->x, bl->y, abra_skillid, abra_skilllv);  
    34833475                                        } else 
    34843476                                                unit_skilluse_id(src, target_id, abra_skillid, abra_skilllv); 
     
    35543546        case CR_PROVIDENCE: 
    35553547                if(sd && dstsd){ //Check they are not another crusader [Skotlex] 
    3556                         if ((dstsd->class_&MAPID_UPPERMASK) == MAPID_CRUSADER) { 
     3548                        if ((dstsd->class_&MAPID_UPPERMASK) == MAPID_CRUSADER) {         
    35573549                                clif_skill_fail(sd,skillid,0,0); 
    35583550                                map_freeblock_unlock(); 
     
    35633555                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    35643556                break; 
    3565  
     3557                 
    35663558        case CG_MARIONETTE: 
    35673559                { 
     
    36613653 
    36623654                sc_start(bl,SC_SEVENWIND,100,skilllv,skill_get_time(skillid,skilllv)); 
    3663  
     3655                         
    36643656                break; 
    36653657 
     
    36923684        case LK_BERSERK: 
    36933685        case KN_AUTOCOUNTER: 
    3694         case KN_TWOHANDQUICKEN: 
     3686        case KN_TWOHANDQUICKEN:  
    36953687        case KN_ONEHAND: 
    36963688        case CR_SPEARQUICKEN: 
     
    37033695        case MO_BLADESTOP: 
    37043696        case LK_AURABLADE: 
    3705         case LK_PARRYING: 
     3697        case LK_PARRYING:        
    37063698        case LK_CONCENTRATION: 
    37073699        case WS_CARTBOOST: 
     
    37293721        case NPC_DEFENDER: 
    37303722        case NPC_MAGICMIRROR: 
    3731         case ALL_ATFIELD: 
     3723        case ALL_ATFIELD:       //AT Field [Brain] ( still dont think this belongs.) 
    37323724                clif_skill_nodamage(src,bl,skillid,skilllv, 
    37333725                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    37343726                break; 
     3727//ANOTHER large lump but it really doesnt feel like it fits here. 
    37353728        case AD_LUST:   // Adept Blood Lust [Brain] 
    3736         clif_specialeffect(src, 220, AREA); //Berserk Pot effect 
    3737         clif_specialeffect(src, 455, AREA); //Red Lightnings 
    3738         clif_skill_nodamage(src,bl,skillid,skilllv, 
    3739                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3740         break; 
     3729                clif_specialeffect(src, 220, AREA); //Berserk Pot effect 
     3730                clif_specialeffect(src, 455, AREA); //Red Lightnings 
     3731                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3732                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3733                break; 
    37413734        case NC_DECREPIFY: //Necro Decrepify [Brain] 
    3742         if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
    3743                 clif_specialeffect(bl, 403, AREA); //Mind Breaker Effect on target 
    3744                 clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    3745                 clif_skill_nodamage(src,bl,skillid,skilllv, 
    3746                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3747         } 
    3748         else clif_skill_fail(sd,skillid,0,0); 
    3749         break; 
     3735                if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
     3736                        clif_specialeffect(bl, 403, AREA); //Mind Breaker Effect on target 
     3737                        clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     3738                        clif_skill_nodamage(src,bl,skillid,skilllv, 
     3739                                sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3740                } 
     3741                else clif_skill_fail(sd,skillid,0,0); 
     3742                break; 
    37503743        case WL_CURSEWEAKNESS: // Warlock Curse of Weakness [Brain] 
    3751         clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite effect on target 
    3752         clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
    3753         clif_skill_nodamage(src,bl,skillid,skilllv, 
    3754                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3755         break; 
    3756         case WL_CURSEEXHAUST: // Warlock Curse of Exhaustion [Brain] 
    3757         clif_specialeffect(bl, 135, AREA); //Ice Breaking effect on target 
    3758         clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
    3759         clif_skill_nodamage(src,bl,skillid,skilllv, 
    3760                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3761         break; 
    3762         case WL_CURSETONGUES: // Warlock Curse of Tongues [Brain] 
    3763         clif_specialeffect(bl, 72, AREA); //Spinning Lights effect on target 
    3764         clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
    3765         clif_skill_nodamage(src,bl,skillid,skilllv, 
    3766                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3767         break; 
    3768         case WL_CURSEDOOM: // Warlock Curse of Doom (temp) [Brain] 
    3769         if(!tsc->data[type]) { 
    3770                 clif_specialeffect(bl, 196, AREA); //Small Curse Reaper effect on target 
     3744                clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite effect on target 
    37713745                clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
    37723746                clif_skill_nodamage(src,bl,skillid,skilllv, 
    3773                 sc_start4(bl,type,100, 
    3774                         skilllv,skillid,src->id,skill_get_time(skillid,skilllv),1000)); 
    3775         } else clif_skill_fail(sd,skillid,0,0); 
    3776         break; 
     3747                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3748                break; 
     3749        case WL_CURSEEXHAUST: // Warlock Curse of Exhaustion [Brain] 
     3750                clif_specialeffect(bl, 135, AREA); //Ice Breaking effect on target 
     3751                clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
     3752                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3753                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3754                break; 
     3755        case WL_CURSETONGUES: // Warlock Curse of Tongues [Brain] 
     3756                clif_specialeffect(bl, 72, AREA); //Spinning Lights effect on target 
     3757                clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
     3758                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3759                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3760                break; 
     3761        case WL_CURSEDOOM: // Warlock Curse of Doom (temp) [Brain] 
     3762                if(!tsc->data[type]) { 
     3763                        clif_specialeffect(bl, 196, AREA); //Small Curse Reaper effect on target 
     3764                        clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
     3765                        clif_skill_nodamage(src,bl,skillid,skilllv, 
     3766                                sc_start4(bl,type,100, 
     3767                                        skilllv,skillid,src->id,skill_get_time(skillid,skilllv),1000)); 
     3768                } else clif_skill_fail(sd,skillid,0,0); 
     3769                break; 
    37773770        case WL_OVERWHELMING: // Warlock Overwhelming Evil [Brain] 
    3778         clif_specialeffect(src, 348, AREA); //1000 Blades Trespassing effect on caster 
    3779         clif_skill_nodamage(src,bl,skillid,skilllv, 
    3780                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3781         break; 
     3771                clif_specialeffect(src, 348, AREA); //1000 Blades Trespassing effect on caster 
     3772                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3773                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3774                break; 
     3775 
    37823776        case MG_SIGHT: 
    37833777        case AL_RUWACH: 
     
    38943888                if (!i) 
    38953889                { 
    3896                         if (sd) 
     3890                        if (sd)  
    38973891                                clif_skill_fail(sd,skillid,0,0); 
    38983892                        map_freeblock_unlock(); 
     
    39803974                        skill_additional_effect(src,bl,skillid,skilllv,BF_MISC,tick); //Use Misc rather than weapon to signal passive pushback 
    39813975                } 
    3982                 break; 
     3976                break;   
    39833977 
    39843978        case MO_ABSORBSPIRITS: 
     
    39963990                clif_skill_nodamage(src,bl,skillid,skilllv,i?1:0); 
    39973991                break; 
    3998  
     3992//this feels more like it fits. 
    39993993        case WL_DRAINSOUL: // Warlock Drain Soul [Brain] 
    4000         i = 0; 
    4001         if (dstsd && (sd == dstsd || map_flag_vs(src->m))) 
    4002         {       //check if target is a player and we are in versus map 
    4003                 i = tstatus->max_sp * skilllv/100;//i = SkillLv% of player Max SP 
    4004                 if(dstsd->spiritball && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER) { 
    4005                 i += dstsd->spiritball * 5;//will drain Monk Spirits and regain 5 SP per Spirit 
    4006                 pc_delspiritball(dstsd,dstsd->spiritball,0); 
    4007                 } 
    4008         } else if (dstmd && !(tstatus->mode&MD_BOSS) && battle_check_living(tstatus->race,tstatus->def_ele)) 
    4009         {       // check if target is a monster and not a Boss 
    4010                 i = dstmd->level/5 * skilllv;//i = mob level/5 * Skill Lvl 
    4011                 mob_target(dstmd,src,0);//This will turn the mob agressive against the caster 
    4012         } 
    4013         if(i < skilllv) i = skilllv; //Minimum 1 sp per skill lvl 
    4014         if (i) { 
    4015                 clif_specialeffect(src, 253, AREA); //Absorb Mana effect on caster 
    4016                 clif_specialeffect(bl, 52, AREA); //Lightning Hit effect on target 
    4017                 status_heal(src, 0, i, 3); //caster drains sp 
    4018                 status_zap(bl, 0, i*skilllv); //target lost sp equal to 1*SkillLv the amount drained 
    4019         } 
    4020         clif_skill_nodamage(src,bl,skillid,skilllv,i?1:0); 
    4021         break; 
    4022  
     3994                i = 0; 
     3995                if (dstsd && (sd == dstsd || map_flag_vs(src->m))) 
     3996                {       //check if target is a player and we are in versus map 
     3997                        i = tstatus->max_sp * skilllv/100;//i = SkillLv% of player Max SP 
     3998                        if(dstsd->spiritball && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER) { 
     3999                                i += dstsd->spiritball * 5;//will drain Monk Spirits and regain 5 SP per Spirit 
     4000                                pc_delspiritball(dstsd,dstsd->spiritball,0); 
     4001                        } 
     4002                } else if (dstmd && !(tstatus->mode&MD_BOSS) && battle_check_living(tstatus->race,tstatus->def_ele)) 
     4003                {       // check if target is a monster and not a Boss 
     4004                        i = dstmd->level/5 * skilllv;//i = mob level/5 * Skill Lvl 
     4005                        mob_target(dstmd,src,0);//This will turn the mob agressive against the caster 
     4006                } 
     4007                if(i < skilllv) i = skilllv; //Minimum 1 sp per skill lvl 
     4008                if (i) { 
     4009                        clif_specialeffect(src, 253, AREA); //Absorb Mana effect on caster 
     4010                        clif_specialeffect(bl, 52, AREA); //Lightning Hit effect on target 
     4011                        status_heal(src, 0, i, 3); //caster drains sp 
     4012                        status_zap(bl, 0, i*skilllv); //target lost sp equal to 1*SkillLv the amount drained 
     4013                } 
     4014                clif_skill_nodamage(src,bl,skillid,skilllv,i?1:0); 
     4015                break; 
    40234016 
    40244017        case AC_MAKINGARROW: 
     
    41134106                } 
    41144107                break; 
    4115  
     4108         
    41164109        case WZ_SIGHTRASHER: 
    41174110                //Passive side of the attack. 
     
    42214214        case SM_AUTOBERSERK:    // Celest 
    42224215                if (tsce) 
    4223                         i = status_change_end(bl, type, -1); 
     4216                        i = status_change_end(bl, type, -1);                             
    42244217                else 
    42254218                        i = sc_start(bl,type,100,skilllv,60000); 
     
    42354228                break; 
    42364229        case TK_RUN: 
    4237                         if (tsce) 
     4230                        if (tsce)  
    42384231                                clif_skill_nodamage(src,bl,skillid,skilllv, 
    42394232                                        status_change_end(bl, type, -1)); 
     
    43314324                        if (dstmd) 
    43324325                                mob_target(dstmd,src,skill_get_range2(src,skillid,skilllv)); 
    4333  
     4326                         
    43344327                        if (tsc->data[SC_STONE]) { 
    43354328                                status_change_end(bl,SC_STONE,-1); 
     
    44824475                } 
    44834476                break; 
    4484  
     4477                 
    44854478        case TF_PICKSTONE: 
    44864479                if(sd) { 
     
    45394532                //Note that Full Strip autospell doesn't use a duration 
    45404533                if (!clif_skill_nodamage(src,bl,skillid,skilllv, 
    4541                                 skill_strip_equip(bl, location, i, skilllv, 
     4534                                skill_strip_equip(bl, location, i, skilllv,  
    45424535                                sd&&skillid==ST_FULLSTRIP&&!pc_checkskill(sd, skillid)?0:skill_get_time(skillid,skilllv))) 
    45434536                        && sd) 
     
    46954688                                        continue; 
    46964689                                switch (i) { 
    4697                                 case SC_WEIGHT50:    case SC_WEIGHT90:    case SC_HALLUCINATION: 
     4690                                case SC_WEIGHT50:    case SC_WEIGHT90:    case SC_HALLUCINATION:  
    46984691                                case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR: 
    46994692                                case SC_STRIPHELM:   case SC_CP_WEAPON:   case SC_CP_SHIELD: 
     
    47454738                                y = src->y + diry[dir]*skilllv*2; 
    47464739                        } 
    4747  
     4740                         
    47484741                        clif_skill_nodamage(src,bl,TK_HIGHJUMP,skilllv,1); 
    47494742                        if(!map_count_oncell(src->m,x,y,BL_PC|BL_NPC|BL_MOB) && map_getcell(src->m,x,y,CELL_CHKREACH)) { 
     
    47894782                                } else if (!dstsd || map_flag_vs(bl->m)) //HP damage only on pvp-maps when against players. 
    47904783                                        hp = tstatus->max_hp/50; //Recover 2% HP [Skotlex] 
    4791  
     4784                                 
    47924785                                clif_skill_nodamage(src,bl,skillid,skilllv,1); 
    47934786                                unit_skillcastcancel(bl,0); 
     
    47994792                                else 
    48004793                                        hp = 0; 
    4801  
     4794                                 
    48024795                                if (sp) //Recover some of the SP used 
    48034796                                        sp = sp*(25*(skilllv-1))/100; 
     
    48754868        case NPC_CHANGETELEKINESIS: 
    48764869                clif_skill_nodamage(src,bl,skillid,skilllv, 
    4877                         sc_start2(bl, type, 100, skilllv, skill_get_ele(skillid,skilllv), 
     4870                        sc_start2(bl, type, 100, skilllv, skill_get_ele(skillid,skilllv),  
    48784871                                skill_get_time(skillid, skilllv))); 
    48794872                break; 
     
    48834876                if(tstatus->def_ele==ELE_UNDEAD || tstatus->def_ele==ELE_DARK) break; 
    48844877                clif_skill_nodamage(src,bl,skillid,skilllv, 
    4885                         sc_start2(bl, type, 100, skilllv, skill_get_ele(skillid,skilllv), 
     4878                        sc_start2(bl, type, 100, skilllv, skill_get_ele(skillid,skilllv),  
    48864879                                skill_get_time(skillid, skilllv))); 
    48874880                break; 
     
    49004893                                        sc_start(bl,type,100,skilllv,skill_time)) 
    49014894                        && ud) {        //Disable attacking/acting/moving for skill's duration. 
    4902                                 ud->attackabletime = 
     4895                                ud->attackabletime =  
    49034896                                ud->canact_tick = 
    49044897                                ud->canmove_tick = tick + skill_time; 
     
    49444937                } 
    49454938                break; 
    4946  
     4939         
    49474940        case NPC_SPEEDUP: 
    49484941                { 
     
    50175010                        sc_start(bl,type,100,100,skill_get_time(skillid, skilllv))); 
    50185011                break; 
    5019  
     5012                 
    50205013        case NPC_AGIUP: 
    50215014                sc_start(bl,SC_SPEEDUP1,100,skilllv,skill_get_time(skillid, skilllv)); 
     
    50295022                        sc_start4(bl,type,100,skilllv,0,0,6,skill_get_time(skillid,skilllv))); 
    50305023                break; 
    5031  
     5024                 
    50325025        case NPC_SIEGEMODE: 
    50335026                // not sure what it does 
     
    51795172                                return 1; 
    51805173                        } 
    5181  
     5174         
    51825175                        if (tsce) 
    51835176                        {       //HelloKitty2 (?) explained that this silently fails when target is 
     
    51905183                        if (!clif_skill_nodamage(src,bl,skillid,skilllv, 
    51915184                                sc_start(bl,type,55+5*skilllv,skilllv,skill_get_time(skillid,skilllv)))) 
    5192                         { 
     5185                        {        
    51935186                                if (sd) clif_skill_fail(sd,skillid,0,0); 
    51945187                                map_freeblock_unlock(); 
     
    53715364                                        break; 
    53725365                                default: 
    5373                                         break; 
    5374                                 } 
     5366                                        break;                   
     5367                                }                        
    53755368                        } while ((--count) > 0); 
    53765369                        clif_skill_nodamage(src,bl,skillid,skilllv,1); 
     
    54325425                        clif_skill_nodamage(src,bl,skillid,skilllv, 
    54335426                                sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    5434  
     5427                 
    54355428                if (skillid == SL_SKE) 
    54365429                        sc_start(src,SC_SMA,100,skilllv,skill_get_time(SL_SMA,skilllv)); 
    54375430 
    54385431                break; 
    5439  
     5432                 
    54405433        // New guild skills [Celest] 
    54415434        case GD_BATTLEORDER: 
     
    55155508                                clif_feel_info(sd, skilllv-1, 1); 
    55165509                } 
    5517                 break; 
     5510                break;   
    55185511 
    55195512        case SG_HATE: 
     
    55955588                        static const int per[5][2]={{20,50},{50,60},{25,75},{60,64},{34,67}}; 
    55965589                        int rnd = rand()%100; 
    5597                         i = (skilllv-1)%5; 
     5590                        i = (skilllv-1)%5;  
    55985591                        if(rnd<per[i][0]) //Self 
    55995592                                bl = src; 
     
    56625655                mobskill_event(dstmd, src, tick, MSC_SKILLUSED|(skillid<<16)); 
    56635656        } 
    5664  
     5657         
    56655658        if (sd && !(flag&1) && sd->state.arrow_atk) //Consume arrow on last invocation to this skill. 
    56665659                battle_consume_ammo(sd, skillid, skilllv); 
     
    56945687        } 
    56955688 
    5696         if(ud->skillid != SA_CASTCANCEL ) { 
     5689        if(ud->skillid != SA_CASTCANCEL ) 
     5690        {// otherwise handled in unit_skillcastcancel() 
    56975691                if( ud->skilltimer != tid ) { 
    56985692                        ShowError("skill_castend_id: Timer mismatch %d!=%d!\n", ud->skilltimer, tid); 
     
    57005694                        return 0; 
    57015695                } 
    5702                 if( sd && ud->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST)) 
    5703                         status_freecast_switch(sd); 
    5704                 ud->skilltimer=-1; 
     5696 
     5697                if( sd && ud->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST) > 0 ) 
     5698                {// restore original walk speed 
     5699                        ud->skilltimer = -1; 
     5700                        status_calc_bl(&sd->bl, SCB_SPEED); 
     5701                } 
     5702 
     5703                ud->skilltimer = -1; 
    57055704        } 
    57065705 
     
    57655764                        if(inf2 & (INF2_PARTY_ONLY|INF2_GUILD_ONLY) && src != target) 
    57665765                        { 
    5767                                 inf |= 
     5766                                inf |=   
    57685767                                        (inf2&INF2_PARTY_ONLY?BCT_PARTY:0)| 
    57695768                                        (inf2&INF2_GUILD_ONLY?BCT_GUILD:0); 
     
    58075806                if(sd && !skill_check_condition(sd,ud->skillid, ud->skilllv,1)) 
    58085807                        break; 
    5809  
     5808                         
    58105809                if(hd && !skill_check_condition_hom(hd,ud->skillid, ud->skilllv,1))     //[orn] 
    58115810                        break; 
     
    58165815                if (ud->walktimer != -1 && ud->skillid != TK_RUN) 
    58175816                        unit_stop_walking(src,1); 
    5818  
     5817                 
    58195818                ud->canact_tick = tick + skill_delayfix(src, ud->skillid, ud->skilllv); 
    5820  
     5819         
    58215820                if (skill_get_state(ud->skillid) != ST_MOVE_ENABLE) 
    58225821                        unit_set_walkdelay(src, tick, battle_config.default_walk_delay+skill_get_walkdelay(ud->skillid, ud->skilllv), 1); 
    5823  
     5822                 
    58245823                if(battle_config.skill_log && battle_config.skill_log&src->type) 
    58255824                        ShowInfo("Type %d, ID %d skill castend id [id =%d, lv=%d, target ID %d]\n", 
     
    58765875                        if (dy > 0) dy++; 
    58775876                        else if(dy < 0) dy--; 
    5878  
     5877                         
    58795878                        if (unit_movepos(src, src->x+dx, src->y+dy, 1, 1)) 
    58805879                        {       //Display movement + animation. 
     
    58975896 
    58985897/*========================================== 
    5899  * 
     5898 *  
    59005899 *------------------------------------------*/ 
    59015900int skill_castend_pos(int tid, unsigned int tick, int id, intptr data) 
     
    59185917                return 0; 
    59195918        } 
    5920  
     5919         
    59215920        if( ud->skilltimer != tid ) 
    59225921        { 
     
    59265925        } 
    59275926 
    5928         if(sd && ud->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST)) 
    5929                 status_freecast_switch(sd); 
    5930  
     5927        if( sd && ud->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST) > 0 ) 
     5928        {// restore original walk speed 
     5929                ud->skilltimer=-1; 
     5930                status_calc_bl(&sd->bl, SCB_SPEED); 
     5931        } 
    59315932        ud->skilltimer=-1; 
     5933 
    59325934        do { 
    59335935                if(status_isdead(src)) 
     
    59375939                        skill_get_unit_flag(ud->skillid)&UF_NOREITERATION && 
    59385940                        skill_check_unit_range(src,ud->skillx,ud->skilly,ud->skillid,ud->skilllv) 
    5939                   ) 
     5941                  )  
    59405942                { 
    59415943                        if (sd) clif_skill_fail(sd,ud->skillid,0,0); 
     
    59765978                        } 
    59775979                } 
    5978  
     5980                         
    59795981                if(sd && !skill_check_condition(sd,ud->skillid, ud->skilllv, 1)) 
    59805982                        break; 
     
    60626064                skill_area_temp[1] = src->id; 
    60636065                i = skill_get_splash(skillid, skilllv); 
    6064                 map_foreachinarea(skill_area_sub, 
     6066                map_foreachinarea(skill_area_sub,  
    60656067                        src->m, x-i, y-i, x+i, y+i, BL_PC, 
    60666068                        src, skillid, skilllv, tick, flag|BCT_ALL|1, 
     
    60896091                        src->m, x-i, y-i, x+i,y+i,BL_SKILL); 
    60906092                break; 
    6091  
     6093//the code changed alot and jumped around. 
    60926094        case WL_HELLFIRE: // Warlock Hellfire [Brain] 
    6093         //clif_specialeffect(sd, 92, AREA); //Meteor Effect on caster, cant set on ground 
    6094         clif_skill_poseffect(src,WZ_METEOR,skilllv,x,y,tick); //Meteor Effect 
    6095         clif_skill_nodamage(src, src, skillid, 0, 1); //Lalala, just to show the skill yell correctly 
    6096         clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
    6097         // Continue reading because skill_unitsetting is bellow 
    6098  
    6099  
     6095                //clif_specialeffect(sd, 92, AREA); //Meteor Effect on caster, cant set on ground 
     6096                clif_skill_poseffect(src,WZ_METEOR,skilllv,x,y,tick); //Meteor Effect 
     6097                clif_skill_nodamage(src, src, skillid, 0, 1); //Lalala, just to show the skill yell correctly 
     6098                clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
     6099                // Continue reading because skill_unitsetting is bellow 
    61006100        case MG_SAFETYWALL: 
    6101         case MG_FIREWALL: 
     6101        case MG_FIREWALL:        
    61026102        case MG_THUNDERSTORM: 
    61036103        case AL_PNEUMA: 
     
    62566256                                md->deletetimer = add_timer (gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, md->bl.id, 0); 
    62576257                                mob_spawn (md); //Now it is ready for spawning. 
    6258                 // @showsummon command implementation [Brainstorm] 
    6259                 if(sd->state.showsummon){ 
    6260                         char output[256]; 
    6261                         sprintf(output, 
    6262                         "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
    6263                         md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
    6264                         clif_disp_onlyself(sd,output,strlen(output)); 
    6265                         sprintf(output, 
    6266                         "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
    6267                         md->name,md->status.rhw.atk,md->status.rhw.atk2,md->status.def,md->status.def2,md->status.mdef,md->status.mdef2,md->status.hit,md->status.flee); 
    6268                         clif_disp_onlyself(sd,output,strlen(output)); 
    6269                 } 
    6270  
    6271                         } 
    6272                 } 
    6273                 break; 
    6274  
     6258//Does this really belong here? 
     6259                                // @showsummon command implementation [Brainstorm] 
     6260                                if(sd->state.showsummon){ 
     6261                                        char output[256]; 
     6262                                        sprintf(output, 
     6263                                                "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
     6264                                                md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
     6265                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6266                                        sprintf(output, 
     6267                                                "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
     6268                                                md->name,md->status.rhw.atk,md->status.rhw.atk2,md->status.def,md->status.def2,md->status.mdef,md->status.mdef2,md->status.hit,md->status.flee); 
     6269                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6270                                } 
     6271 
     6272                        } 
     6273                } 
     6274                break; 
     6275                 
     6276//HUGE lump of code! 
     6277//Some of the code repeats itself, Unless it just recites it for other classes it may be a problem 
    62756278        case AD_FAMILIAR: // Adept Summon Familiar [Brain] 
    6276         if( sd ) 
    6277         { 
    6278                 int id; 
    6279                 int mob_class; 
    6280                 struct mob_data* md; 
    6281                 mob_class = pc_readglobalreg(sd, "ADEPT_FAMILIAR"); 
    6282                 if( mob_class == 0 ) 
     6279                if( sd ) 
    62836280                { 
    6284                 mob_class = mob_get_random_id(4, 0x1, 0); 
    6285                 pc_setglobalreg(sd, "ADEPT_FAMILIAR", mob_class); 
    6286                 } 
    6287                 id = mob_once_spawn(sd,src->m,src->x,src->y,"--en--",mob_class,1,""); 
    6288                 md = (struct mob_data *)map_id2bl(id); 
    6289                 if( md != NULL ) 
    6290                 { 
    6291                 md->master_id = sd->bl.id; 
    6292                 md->special_state.ai = 1; 
    6293                 md->status.mode = md->status.mode|MD_AGGRESSIVE; 
    6294                 status_calc_mob(md,0); //Recalc their stats based on passive bonus 
    6295                 md->status.hp = md->status.max_hp; //Must be here or the code wont update it 
    6296                 // @showsummon command implementation [Brainstorm] 
    6297                 if(sd->state.showsummon){ 
    6298                         char output[256]; 
    6299                         sprintf(output, 
    6300                         "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
    6301                         md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
    6302                         clif_disp_onlyself(sd,output,strlen(output)); 
    6303                         sprintf(output, 
    6304                         "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
    6305                         md->name,md->status.rhw.atk,md->status.rhw.atk2,md->status.def,md->status.def2,md->status.mdef,md->status.mdef2,md->status.hit,md->status.flee); 
    6306                         clif_disp_onlyself(sd,output,strlen(output)); 
    6307                 } 
    6308                 md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); 
    6309                 } 
    6310         } 
    6311         break; 
     6281                        int id; 
     6282                        int mob_class; 
     6283                        struct mob_data* md; 
     6284 
     6285                        mob_class = pc_readglobalreg(sd, "ADEPT_FAMILIAR"); 
     6286                        if( mob_class == 0 ) 
     6287                        { 
     6288                                mob_class = mob_get_random_id(4, 0x1, 0); 
     6289                                pc_setglobalreg(sd, "ADEPT_FAMILIAR", mob_class); 
     6290                        } 
     6291                        id = mob_once_spawn(sd,src->m,src->x,src->y,"--en--",mob_class,1,""); 
     6292                        md = (struct mob_data *)map_id2bl(id); 
     6293                        if( md != NULL ) 
     6294                        { 
     6295                                md->master_id = sd->bl.id; 
     6296                                md->special_state.ai = 1; 
     6297                                md->status.mode = md->status.mode|MD_AGGRESSIVE; 
     6298                                status_calc_mob(md,0); //Recalc their stats based on passive bonus 
     6299                                md->status.hp = md->status.max_hp; //Must be here or the code wont update it 
     6300                                // @showsummon command implementation [Brainstorm] 
     6301                                if(sd->state.showsummon){ 
     6302                                        char output[256]; 
     6303                                        sprintf(output, 
     6304                                                "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
     6305                                                md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
     6306                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6307                                        sprintf(output, 
     6308                                                "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
     6309                                                md->name,md->status.rhw.atk,md->status.rhw.atk2,md->status.def,md->status.def2,md->status.mdef,md->status.mdef2,md->status.hit,md->status.flee); 
     6310                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6311                                } 
     6312                                md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); 
     6313                        } 
     6314                } 
     6315                break; 
    63126316        case NC_SKELETON: // Raise Skeleton [Brain] 
    63136317        case NC_ARCHER: // Raise Archer Skeleton 
     
    63176321        case NC_SHADOW: // Raise Shadow 
    63186322        case NC_WRAITH: // Raise Wraith 
    6319         if( sd ) 
    6320         { 
    6321                 static const int mob_skeleton[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General 
    6322                 static const int mob_archer[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier 
    6323                 static const int mob_zombie[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master 
    6324                 static const int mob_mummy[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy 
    6325                 static const int mob_ghost[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror 
    6326                 static const int mob_shadow[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan 
    6327                 static const int mob_wraith[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead 
    6328                 int id; 
    6329                 int mob_class; 
    6330                 struct mob_data *md; 
    6331  
    6332                 switch( skillid ) 
     6323                if( sd ) 
    63336324                { 
    6334                 case NC_SKELETON: mob_class = mob_skeleton[skilllv-1]; break; 
    6335                 case NC_ARCHER:   mob_class = mob_archer[skilllv-1]; break; 
    6336                 case NC_ZOMBIE:   mob_class = mob_zombie[skilllv-1]; break; 
    6337                 case NC_MUMMY:  mob_class = mob_mummy[skilllv-1]; break; 
    6338                 case NC_GHOST:  mob_class = mob_ghost[skilllv-1]; break; 
    6339                 case NC_SHADOW:   mob_class = mob_shadow[skilllv-1]; break; 
    6340                 case NC_WRAITH:   mob_class = mob_wraith[skilllv-1]; break; 
    6341                 default: 
    6342                         mob_class = 1002; // poring 
    6343                         ShowDebug("skill_castend_pos2: undefined skill #%d used to raise mobs, defaulting to poring\n"); 
    6344                         break; 
    6345                 } 
    6346                 id = mob_once_spawn(sd,src->m,src->x,src->y,"--ja--",mob_class,1,""); 
    6347                 if((md=(struct mob_data *)map_id2bl(id))) 
    6348                 { 
    6349                 md->master_id=sd->bl.id; 
    6350                 md->special_state.ai=1; 
    6351                 md->status.mode=md->db->status.mode|MD_AGGRESSIVE; 
    6352                 status_calc_mob(md,0); //Recalc their stats based on passive bonus 
    6353                 md->status.hp = md->status.max_hp; //Must be here or the code wont update it 
    6354                 // @showsummon command implementation [Brainstorm] 
    6355                 if(sd->state.showsummon){ 
    6356                         char output[256]; 
    6357                         sprintf(output, 
    6358                         "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
    6359                         md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
    6360                         clif_disp_onlyself(sd,output,strlen(output)); 
    6361                         sprintf(output, 
    6362                         "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
    6363                         md->name,md->status.rhw.atk,md->status.rhw.atk2,md->status.def,md->status.def2,md->status.mdef,md->status.mdef2,md->status.hit,md->status.flee); 
    6364                         clif_disp_onlyself(sd,output,strlen(output)); 
    6365                 } 
    6366                 md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); 
    6367                 } 
    6368         } 
    6369         break; 
    6370  
     6325                        static const int mob_skeleton[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General 
     6326                        static const int mob_archer[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier 
     6327                        static const int mob_zombie[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master 
     6328                        static const int mob_mummy[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy 
     6329                        static const int mob_ghost[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror 
     6330                        static const int mob_shadow[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan 
     6331                        static const int mob_wraith[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead 
     6332                        int id; 
     6333                        int mob_class; 
     6334                        struct mob_data *md; 
     6335 
     6336                        switch( skillid ) 
     6337                        { 
     6338                                case NC_SKELETON: mob_class = mob_skeleton[skilllv-1]; break; 
     6339                                case NC_ARCHER:   mob_class = mob_archer[skilllv-1]; break; 
     6340                                case NC_ZOMBIE:   mob_class = mob_zombie[skilllv-1]; break; 
     6341                                case NC_MUMMY:    mob_class = mob_mummy[skilllv-1]; break; 
     6342                                case NC_GHOST:    mob_class = mob_ghost[skilllv-1]; break; 
     6343                                case NC_SHADOW:   mob_class = mob_shadow[skilllv-1]; break; 
     6344                                case NC_WRAITH:   mob_class = mob_wraith[skilllv-1]; break; 
     6345                                default: 
     6346                                        mob_class = 1002; // poring 
     6347                                        ShowDebug("skill_castend_pos2: undefined skill #%d used to raise mobs, defaulting to poring\n"); 
     6348                                        break; 
     6349                        } 
     6350                        id = mob_once_spawn(sd,src->m,src->x,src->y,"--ja--",mob_class,1,""); 
     6351                        if((md=(struct mob_data *)map_id2bl(id))) 
     6352                        { 
     6353                                md->master_id=sd->bl.id; 
     6354                                md->special_state.ai=1; 
     6355                                md->status.mode=md->db->status.mode|MD_AGGRESSIVE; 
     6356                                status_calc_mob(md,0); //Recalc their stats based on passive bonus 
     6357                                md->status.hp = md->status.max_hp; //Must be here or the code wont update it 
     6358//I bet this should NOT be here -- Critical 
     6359                                if(sd->state.showsummon){ 
     6360                                        char output[256]; 
     6361                                        sprintf(output, 
     6362                                                "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
     6363                                                md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
     6364                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6365                                        sprintf(output, 
     6366                                                "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
     6367                                                md->name,md->status.rhw.atk,md->status.rhw.atk2,md->status.def,md->status.def2,md->status.mdef,md->status.mdef2,md->status.hit,md->status.flee); 
     6368                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6369                                } 
     6370                                md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); 
     6371                        } 
     6372                } 
     6373                break; 
    63716374 
    63726375 
     
    63956398                        potion_hp = potion_hp * (100+i)/100; 
    63966399                        potion_sp = potion_sp * (100+i)/100; 
    6397  
     6400                         
    63986401                        if(potion_hp > 0 || potion_sp > 0) { 
    63996402                                i = skill_get_splash(skillid, skilllv); 
     
    64176420                        potion_hp = potion_hp * (100+i)/100; 
    64186421                        potion_sp = potion_sp * (100+i)/100; 
    6419  
     6422                         
    64206423                        if(potion_hp > 0 || potion_sp > 0) { 
    64216424                                i = skill_get_splash(skillid, skilllv); 
     
    64396442                } 
    64406443                break; 
    6441  
     6444         
    64426445        case HW_GRAVITATION: 
    64436446                if ((sg = skill_unitsetting(src,skillid,skilllv,x,y,0))) 
     
    65216524        if (sd && !(flag&1) && sd->state.arrow_atk) //Consume arrow if a ground skill was not invoked. [Skotlex] 
    65226525                battle_consume_ammo(sd, skillid, skilllv); 
    6523  
     6526                 
    65246527        return 0; 
    65256528} 
    65266529 
    65276530/*========================================== 
    6528  * 
     6531 *  
    65296532 *------------------------------------------*/ 
    65306533int skill_castend_map (struct map_session_data *sd, short skill_num, const char *map) 
     
    65346537//Simplify skill_failed code. 
    65356538#define skill_failed(sd) { sd->menuskill_id = sd->menuskill_val = 0; } 
    6536         if(skill_num != sd->menuskill_id) 
     6539        if(skill_num != sd->menuskill_id)  
    65376540                return 0; 
    65386541 
     
    65696572                return 0; 
    65706573        } 
    6571  
     6574         
    65726575        switch(skill_num) 
    65736576        { 
     
    66106613                                } 
    66116614                        } 
    6612  
     6615                 
    66136616                        //When it's an item-used warp-portal, the skill-lv used is lost.. assume max level. 
    66146617                        lv = sd->skillitem==skill_num?skill_get_max(skill_num):pc_checkskill(sd,skill_num); 
    66156618                        wx = sd->menuskill_val>>16; 
    66166619                        wy = sd->menuskill_val&0xffff; 
    6617  
     6620                         
    66186621                        if( lv <= 0 ) return 0; 
    66196622                        if( lv > 4 ) lv = 4; // crash prevention 
     
    66346637                                return 0; 
    66356638                        } 
    6636  
     6639                         
    66376640                        // This makes Warp Portal fail if the cell is not empty 
    66386641                        //if(skill_check_unit_range2(&sd->bl,wx,wy,skill_num,lv) > 0) { 
     
    66936696                return 0; //Nothing to remove, this unit is not overlapped. 
    66946697 
    6695         if (unit->val1 != unit->group->skill_id) 
     6698        if (unit->val1 != unit->group->skill_id)  
    66966699        {       //Reset state 
    66976700                unit->val1 = unit->group->skill_id; 
    66986701                unit->val2 &= ~UF_ENSEMBLE; 
    66996702        } 
    6700  
     6703         
    67016704        return map_foreachincell(skill_dance_overlap_sub, unit->bl.m,unit->bl.x,unit->bl.y,BL_SKILL, unit,flag); 
    67026705} 
     
    67826785        switch(skillid) 
    67836786        { 
     6787//seems good. 
    67846788        case WL_HELLFIRE: // Warlock Hellfire [Brain] 
    6785         if(map_flag_vs(src->m)) target = BCT_ALL; 
    6786         break; 
     6789                if(map_flag_vs(src->m)) target = BCT_ALL; 
     6790                break; 
    67876791        case MG_SAFETYWALL: 
    67886792                val2=skilllv+1; 
     
    68606864                        {       //Use the previous limit (minus the elapsed time) [Skotlex] 
    68616865                                limit = old_sg->limit - DIFF_TICK(gettick(), old_sg->tick); 
    6862                                 if (limit < 0)  //This can happen... 
     6866                                if (limit < 0)  //This can happen...  
    68636867                                        limit = skill_get_time(skillid,skilllv); 
    68646868                        } 
     
    71077111                return NULL; 
    71087112        } 
    7109  
     7113         
    71107114 
    71117115        if (skillid == NJ_TATAMIGAESHI) //Store number of tiles. 
     
    71167120 
    71177121/*========================================== 
    7118  * 
     7122 *  
    71197123 *------------------------------------------*/ 
    71207124static int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, unsigned int tick) 
     
    71297133        nullpo_retr(0, src); 
    71307134        nullpo_retr(0, bl); 
    7131  
     7135         
    71327136        if(bl->prev==NULL || !src->alive || status_isdead(bl)) 
    71337137                return 0; 
     
    71397143                        && !skill_get_inf2(sg->skill_id) == INF2_TRAP) //Traps work on top of land protector, magical or not [Brain] 
    71407144                return 0; //AoE skills are ineffective. [Skotlex] 
    7141  
     7145         
    71427146        sc = status_get_sc(bl); 
    7143  
     7147         
    71447148        if (sc && sc->option&OPTION_HIDE && sg->skill_id != WZ_HEAVENDRIVE) 
    71457149                return 0; //Hidden characters are immune to AoE skills except Heaven's Drive. [Skotlex] 
    7146  
     7150         
    71477151        type = status_skill2sc(sg->skill_id); 
    71487152        sce = (sc && type != -1)?sc->data[type]:NULL; 
     
    72407244                } 
    72417245                break; 
    7242  
     7246         
    72437247        case UNT_FOGWALL: 
    72447248                if (!sce) 
     
    72617265//                      src->limit = DIFF_TICK(tick+700,sg->tick); 
    72627266//              break; 
    7263  
     7267         
    72647268        case UNT_MOONLIT: 
    72657269                //Knockback out of area if affected char isn't in Moonlit effect 
     
    72757279 
    72767280/*========================================== 
    7277  * 
     7281 *  
    72787282 *------------------------------------------*/ 
    72797283int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, unsigned int tick) 
     
    73027306        tsc = status_get_sc(bl); 
    73037307        tstatus = status_get_status_data(bl); 
    7304         if (sg->state.magic_power)  //For magic power. 
     7308        if (sg->state.magic_power)  //For magic power.  
    73057309        { 
    73067310                sc = status_get_sc(ss); 
     
    73317335                        return 0; 
    73327336                ts->tick = tick+sg->interval; 
    7333  
     7337                 
    73347338                if ((skillid==CR_GRANDCROSS || skillid==NPC_GRANDDARKNESS) && !battle_config.gx_allhit) 
    73357339                        ts->tick += sg->interval*(map_count_oncell(bl->m,bl->x,bl->y,BL_CHAR)-1); 
     
    73827386                                if (status_isimmune(bl)) 
    73837387                                        heal = 0;       /* 黄金蟲カヌドヒヌル量 */ 
    7384                 // Profane Soul reduces the healed recieved by 3% per skilllv [Brain] 
    7385                 if(tsd) { 
    7386                         heal = heal * (100 - pc_checkskill(tsd,AD_PROFANE)*3)/100; 
    7387                         //Wont heal even if he got elemental armors [Brain] 
    7388                         if(pc_checkskill(tsd,NC_PHYLACTERY)) heal = sg->skill_lv; 
    7389                 } 
    7390  
     7388//Okay? 
     7389                                // Profane Soul reduces the healed recieved by 3% per skilllv [Brain] 
     7390                                if(tsd) { 
     7391                                        heal = heal * (100 - pc_checkskill(tsd,AD_PROFANE)*3)/100; 
     7392                                        //Wont heal even if he got elemental armors [Brain] 
     7393                                        if(pc_checkskill(tsd,NC_PHYLACTERY)) heal = sg->skill_lv; 
     7394                                } 
    73917395                                clif_skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1); 
    73927396                                status_heal(bl, heal, 0, 0); 
     
    73997403 
    74007404                case UNT_EVILLAND: 
    7401                         if (tstatus->race!=RC_UNDEAD && tstatus->race!=RC_DEMON) 
     7405                        //Will heal demon and undead element monsters, but not players. 
     7406                        if (bl->type != BL_PC && !battle_check_undead(tstatus->race, tstatus->def_ele) && tstatus->race!=RC_DEMON) 
    74027407                        {       //Damage enemies 
    74037408                                if(battle_check_target(&src->bl,bl,BCT_ENEMY)>0) 
     
    74237428 
    74247429                case UNT_ATTACK_SKILLS: 
    7425                         switch (sg->skill_id) 
     7430                        switch (sg->skill_id)  
    74267431                        { 
    74277432                                case SG_SUN_WARM: //SG skills [Komurka] 
     
    74617466                                break; 
    74627467                                default: 
    7463                                         skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); 
     7468                                        skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);                      
    74647469                        } 
    74657470                        break; 
     
    74857490                                if (status_change_start(bl,type,10000,sg->skill_lv,sg->group_id,0,0,sec, 8)) 
    74867491                                { 
    7487                                         struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL; 
     7492                                        struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL;  
    74887493                                        if (td) sec = DIFF_TICK(td->tick, tick); 
    74897494                                        map_moveblock(bl, src->bl.x, src->bl.y, tick); 
     
    75567561                        clif_skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1); 
    75577562                        status_heal(bl, heal, 0, 0); 
    7558                         break; 
     7563                        break;   
    75597564                } 
    75607565 
     
    77317736                        status_change_end(bl,type,-1); 
    77327737                break; 
    7733  
     7738                 
    77347739        case UNT_SPIDERWEB: 
    77357740                { 
     
    77597764        if (sc && !sc->count) 
    77607765                sc = NULL; 
    7761  
     7766         
    77627767        type = status_skill2sc(skill_id); 
    77637768        sce = (sc && type != -1)?sc->data[type]:NULL; 
     
    77767781                case BD_ETERNALCHAOS: 
    77777782                case BD_DRUMBATTLEFIELD: 
    7778                 case BD_RINGNIBELUNGEN: 
     7783                case BD_RINGNIBELUNGEN:  
    77797784                case BD_ROKISWEIL: 
    77807785                case BD_INTOABYSS: 
     
    77857790                                //FIXME: This code is not perfect, it doesn't checks for the real ensemble's owner, 
    77867791                                //it only checks if you are doing the same ensemble. So if there's two chars doing an ensemble 
    7787                                 //which overlaps, by stepping outside of the other parther's ensemble will cause you to cancel 
     7792                                //which overlaps, by stepping outside of the other parther's ensemble will cause you to cancel  
    77887793                                //your own. Let's pray that scenario is pretty unlikely and noone will complain too much about it. 
    77897794                                skill_stop_dancing(bl); 
     
    78007805                                status_change_end(bl, type, -1); 
    78017806                        break; 
    7802  
     7807                         
    78037808                case BA_POEMBRAGI: 
    78047809                case BA_WHISTLE: 
     
    78077812                case DC_HUMMING: 
    78087813                case DC_DONTFORGETME: 
    7809                 case DC_FORTUNEKISS: 
     7814                case DC_FORTUNEKISS:     
    78107815                case DC_SERVICEFORYOU: 
    78117816                        if (sce) 
     
    78577862 
    78587863        nullpo_retr(0, group); 
    7859  
     7864         
    78607865        dissonance = skill_dance_switch(unit, 0); 
    78617866 
     
    79427947        if ((skillid != PR_BENEDICTIO && *c >=1) || *c >=2) 
    79437948                return 0; //Partner found for ensembles, or the two companions for Benedictio. [Skotlex] 
    7944  
     7949         
    79457950        if (bl == src) 
    79467951                return 0; 
     
    79517956        if (tsd->sc.data[SC_SILENCE] || tsd->sc.opt1) 
    79527957                return 0; 
    7953  
     7958         
    79547959        switch(skillid) 
    79557960        { 
     
    80368041 
    80378042/*========================================== 
    8038  * 
     8043 *  
    80398044 *------------------------------------------*/ 
    80408045static int skill_check_condition_mob_master_sub (struct block_list *bl, va_list ap) 
     
    80598064 
    80608065/*========================================== 
    8061  * Determines if a given skill should be made to consume ammo 
     8066 * Determines if a given skill should be made to consume ammo  
    80628067 * when used by the player. [Skotlex] 
    80638068 *------------------------------------------*/ 
     
    80988103                sd->skillitem = sd->skillitemlv = 0; 
    80998104                //Need to do arrow state check. 
    8100                 sd->state.arrow_atk = skill_get_ammotype(skill)?1:0; 
     8105                sd->state.arrow_atk = skill_get_ammotype(skill)?1:0;  
    81018106                //Need to do Spiritball check. 
    81028107                sd->spiritball_old = sd->spiritball; 
     
    81088113        if (!sc->count) 
    81098114                sc = NULL; 
    8110  
     8115         
    81118116        if(pc_is90overweight(sd)) { 
    81128117                clif_skill_fail(sd,skill,9,0); 
     
    81328137        if (sd->menuskill_id == AM_PHARMACY && 
    81338138                (skill == AM_PHARMACY || skill == AC_MAKINGARROW || skill == BS_REPAIRWEAPON || 
    8134                 skill == AM_TWILIGHT1 || skill == AM_TWILIGHT2  || skill == AM_TWILIGHT3 
     8139                skill == AM_TWILIGHT1 || skill == AM_TWILIGHT2  || skill == AM_TWILIGHT3  
    81358140        )) { 
    81368141                sd->skillitem = sd->skillitemlv = 0; 
     
    83568361                } 
    83578362                break; 
    8358  
     8363                 
    83598364        case TK_READYCOUNTER: 
    83608365        case TK_READYDOWN: 
     
    83848389                                status_change_end(&sd->bl, SC_COMBO, -1); 
    83858390                                sd->skillid_old = sd->skilllv_old = 0; 
    8386                                 return 0; //Can't repeat previous combo skill. 
     8391                                return 0; //Can't repeat previous combo skill.                           
    83878392                        } 
    83888393                        break; 
    8389                 } else 
     8394                } else  
    83908395                if(sc->data[SC_COMBO]->val1 == skill) 
    83918396                        break; //Combo ready. 
     
    84468451                } 
    84478452                break; 
     8453//Weird to me. 
    84488454        case AD_FAMILIAR: //Adept Familiar [Flavio] 
    8449         { 
    8450                 short familiar[1] ={ pc_readglobalreg(sd, "ADEPT_FAMILIAR") }; 
    8451                 int maxcount = skill_get_maxcount(skill,lv); 
    8452                 int count = 0; 
    8453                 count = mob_countslave_class(&sd->bl, 1, familiar ); 
    8454                 if( count >= maxcount ) 
    84558455                { 
    8456                 clif_skill_fail(sd,skill,0,0); 
    8457                 return 0; 
    8458                 } 
    8459         } 
    8460         break; 
     8456                        short familiar[1] ={ pc_readglobalreg(sd, "ADEPT_FAMILIAR") }; 
     8457                        int maxcount = skill_get_maxcount(skill,lv); 
     8458                        int count = 0; 
     8459                        count = mob_countslave_class(&sd->bl, 1, familiar ); 
     8460                        if( count >= maxcount ) 
     8461                        { 
     8462                                clif_skill_fail(sd,skill,0,0); 
     8463                                return 0; 
     8464                        } 
     8465                } 
     8466                break; 
    84618467        case NC_SKELETON: // Raise Skeleton [Brain] 
    84628468        case NC_ARCHER: // Raise Archer Skeleton 
     
    84668472        case NC_SHADOW: // Raise Shadow 
    84678473        case NC_WRAITH: // Raise Wraith 
    8468         {// corrigido o limite de spawns [Flavio] 
    8469                 short summon1[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General 
    8470                 short summon2[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier 
    8471                 short summon3[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master 
    8472                 short summon4[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy 
    8473                 short summon5[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror 
    8474                 short summon6[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan 
    8475                 short summon7[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead 
    8476                 int maxcount = skill_get_maxcount(skill,lv); 
    8477                 int count = 0; 
    8478                 switch( skill ) 
    8479                 { 
    8480                 case NC_SKELETON: count = mob_countslave_class(&sd->bl, 5, summon1); break; 
    8481                 case NC_ARCHER: count = mob_countslave_class(&sd->bl, 5, summon2); break; 
    8482                 case NC_ZOMBIE: count = mob_countslave_class(&sd->bl, 5, summon3); break; 
    8483                 case NC_MUMMY: count = mob_countslave_class(&sd->bl, 5, summon4); break; 
    8484                 case NC_GHOST: count = mob_countslave_class(&sd->bl, 5, summon5); break; 
    8485                 case NC_SHADOW: count = mob_countslave_class(&sd->bl, 5, summon6); break; 
    8486                 case NC_WRAITH: count = mob_countslave_class(&sd->bl, 5, summon7); break; 
    8487                 } 
    8488                 if( count >= maxcount ) 
    8489                 { 
    8490                 clif_skill_fail(sd,skill,0,0); 
    8491                 return 0; 
    8492                 } 
    8493         } 
    8494         break; 
    8495  
     8474                {// corrigido o limite de spawns [Flavio] 
     8475                        short summon1[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General 
     8476                        short summon2[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier 
     8477                        short summon3[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master 
     8478                        short summon4[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy 
     8479                        short summon5[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror 
     8480                        short summon6[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan 
     8481                        short summon7[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead 
     8482                        int maxcount = skill_get_maxcount(skill,lv); 
     8483                        int count = 0; 
     8484                        switch( skill ) 
     8485                        { 
     8486                        case NC_SKELETON: count = mob_countslave_class(&sd->bl, 5, summon1); break; 
     8487                        case NC_ARCHER: count = mob_countslave_class(&sd->bl, 5, summon2); break; 
     8488                        case NC_ZOMBIE: count = mob_countslave_class(&sd->bl, 5, summon3); break; 
     8489                        case NC_MUMMY: count = mob_countslave_class(&sd->bl, 5, summon4); break; 
     8490                        case NC_GHOST: count = mob_countslave_class(&sd->bl, 5, summon5); break; 
     8491                        case NC_SHADOW: count = mob_countslave_class(&sd->bl, 5, summon6); break; 
     8492                        case NC_WRAITH: count = mob_countslave_class(&sd->bl, 5, summon7); break; 
     8493                        } 
     8494                        if( count >= maxcount ) 
     8495                        { 
     8496                                clif_skill_fail(sd,skill,0,0); 
     8497                                return 0; 
     8498                        } 
     8499                } 
     8500                break; 
    84968501        case WZ_FIREPILLAR: // celest 
    84978502                if (lv <= 5)    // no gems required at level 1-5 
     
    85028507                if(!(sc && sc->data[SC_SMA])) 
    85038508                        return 0; 
    8504                 break; 
     8509                break;   
    85058510 
    85068511        case HT_POWER: 
     
    85548559                                        clif_skill_fail(sd,skill,0,0); 
    85558560                                        return 0; 
    8556                                 } 
     8561                                }        
    85578562                        } 
    85588563                } 
     
    86068611                //Only invoke on skill begin cast (instant cast skill). [Kevin] 
    86078612                if(sp>0 && !type) 
    8608                 { 
     8613                {  
    86098614                        if (status->sp < (unsigned int)sp) 
    86108615                                clif_skill_fail(sd,skill,1,0); 
     
    86328637                } 
    86338638                break; 
    8634  
     8639         
    86358640        case NJ_ISSEN: 
    86368641                if (status->hp < 2) { 
     
    86448649                } 
    86458650                break; 
    8646  
     8651         
    86478652        case NJ_ZENYNAGE: 
    86488653                if(sd->status.zeny < zeny) { 
     
    86868691                        return 0; 
    86878692                } 
    8688  
     8693         
    86898694                if(weapon && !pc_check_weapontype(sd,weapon)) { 
    86908695                        clif_skill_fail(sd,skill,6,0); 
     
    87828787                if (sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == skill) 
    87838788                        sd->ud.canmove_tick = gettick(); //When using a combo, cancel the can't move delay to enable the skill. [Skotlex] 
    8784  
     8789                         
    87858790                if (!unit_can_move(&sd->bl)) { 
    87868791                        clif_skill_fail(sd,skill,0,0); 
     
    88738878int skill_castfix (struct block_list *bl, int skill_id, int skill_lv) 
    88748879{ 
    8875         int time = skill_get_cast(skill_id, skill_lv); 
     8880        int time = skill_get_cast(skill_id, skill_lv);   
    88768881        struct map_session_data *sd; 
    88778882 
    88788883        nullpo_retr(0, bl); 
    88798884        sd = BL_CAST(BL_PC, bl); 
    8880  
     8885         
    88818886        // calculate base cast time (reduced by dex) 
    88828887        if (!(skill_get_castnodex(skill_id, skill_lv)&1)) { 
     
    89268931                        status_change_end(bl, SC_SUFFRAGIUM, -1); 
    89278932                } 
    8928         if (sc->data[SC_DECREPIFY]) // Necro Decrepify [Brain] 
    8929                 if(sc->data[SC_DECREPIFY]->val2>=3) 
    8930                 time += time * 25/100; //+25% cast time 
    8931         if (sc->data[SC_CURSETONGUES]) { //Warlock Curse of Tongues [Brain] 
    8932                 time += time * sc->data[SC_CURSETONGUES]->val2 / 100; 
    8933                 status_change_end(bl, SC_CURSETONGUES, -1); 
    8934         } 
    8935  
     8933//Curse skills... 
     8934                if (sc->data[SC_DECREPIFY]) // Necro Decrepify [Brain] 
     8935                        if(sc->data[SC_DECREPIFY]->val2>=3) 
     8936                                time += time * 25/100; //+25% cast time 
     8937                if (sc->data[SC_CURSETONGUES]) { //Warlock Curse of Tongues [Brain] 
     8938                        time += time * sc->data[SC_CURSETONGUES]->val2 / 100; 
     8939                        status_change_end(bl, SC_CURSETONGUES, -1); 
     8940                } 
    89368941                if (sc->data[SC_MEMORIZE]) { 
    89378942                        time>>=1; 
     
    89528957        int delaynodex = skill_get_delaynodex(skill_id, skill_lv); 
    89538958        int time = skill_get_delay(skill_id, skill_lv); 
    8954  
     8959         
    89558960        nullpo_retr(0, bl); 
    89568961 
     
    89598964 
    89608965        if (bl->type&battle_config.no_skill_delay) 
    8961                 return battle_config.min_skill_delay_limit; 
     8966                return battle_config.min_skill_delay_limit;  
    89628967 
    89638968        if (time < 0) 
     
    89768981        default: 
    89778982                if (battle_config.delay_dependon_dex && !(delaynodex&1)) 
    8978                 {       // if skill delay is allowed to be reduced by dex 
     8983                {       // if skill delay is allowed to be reduced by dex  
    89798984                        int scale = battle_config.castrate_dex_scale - status_get_dex(bl); 
    89808985                        if (scale > 0) 
     
    89848989                } 
    89858990                if (battle_config.delay_dependon_agi && !(delaynodex&1)) 
    8986                 {       // if skill delay is allowed to be reduced by agi 
     8991                {       // if skill delay is allowed to be reduced by agi  
    89878992                        int scale = battle_config.castrate_dex_scale - status_get_agi(bl); 
    89888993                        if (scale > 0) 
     
    90289033 
    90299034/*========================================= 
    9030  * 
     9035 *  
    90319036 *-----------------------------------------*/ 
    90329037void skill_brandishspear_first (struct square *tc, int dir, int x, int y) 
     
    95529557        return count; 
    95539558} 
    9554  
     9559         
    95559560/*========================================== 
    95569561 * Returns the first element field found [Skotlex] 
     
    97069711 
    97079712/*========================================== 
    9708  * 
     9713 *  
    97099714 *------------------------------------------*/ 
    97109715int skill_chastle_mob_changetarget(struct block_list *bl,va_list ap) 
     
    97399744        unit = (struct skill_unit *)src; 
    97409745        tick = va_arg(ap,int); 
    9741  
     9746         
    97429747        nullpo_retr(0, sg = unit->group); 
    97439748        nullpo_retr(0, ss = map_id2bl(sg->src_id)); 
     
    97499754                case UNT_SHOCKWAVE: 
    97509755                case UNT_SANDMAN: 
    9751                 case UNT_FLASHER: 
     9756                case UNT_FLASHER:         
    97529757                        skill_additional_effect(ss,bl,sg->skill_id,sg->skill_lv,BF_MISC,tick); 
    97539758                        break; 
     
    97959800                if (type != scs[i] && sc->data[scs[i]]) 
    97969801                        status_change_end(bl, scs[i], -1); 
    9797  
     9802                 
    97989803        return 0; 
    97999804} 
     
    98139818                        wall = false; 
    98149819        } 
    9815  
     9820                 
    98169821        if( sce ) 
    98179822        { 
     
    98569861        if(!sc->count || !(sce=sc->data[SC_DANCING])) 
    98579862                return; 
    9858  
     9863         
    98599864        group = (struct skill_unit_group *)sce->val2; 
    98609865        sce->val2 = 0; 
    9861  
     9866         
    98629867        if (sce->val4) 
    98639868        { 
     
    99939998        nullpo_retr(NULL, src); 
    99949999        nullpo_retr(NULL, ud); 
    9995  
     10000         
    999610001        // find a free spot to store the new unit group 
    999710002        ARR_FIND( 0, MAX_SKILLUNITGROUP, i, ud->skillunit[i] == NULL ); 
     
    1005310058 
    1005410059        if (!src) src=map_id2bl(group->src_id); 
    10055         ud = unit_bl2ud(src); 
     10060        ud = unit_bl2ud(src);    
    1005610061        if(!src || !ud) { 
    1005710062                ShowError("skill_delunitgroup: Group's source not found! (src_id: %d skill_id: %d)\n", group->src_id, group->skill_id); 
    10058                 return 0; 
     10063                return 0;        
    1005910064        } 
    1006010065        if (skill_get_unit_flag(group->skill_id)&(UF_DANCE|UF_SONG|UF_ENSEMBLE)) 
     
    1015210157        if (group->interval==-1) 
    1015310158                return NULL; 
    10154  
     10159         
    1015510160        ud = unit_bl2ud(bl); 
    1015610161        if (!ud) return NULL; 
     
    1039410399        int skill_id; 
    1039510400        int i; 
    10396  
     10401         
    1039710402        nullpo_retr(0, group); 
    10398  
     10403         
    1039910404        if( !unit->alive || target->prev == NULL ) 
    1040010405                return 0; 
     
    1047510480                //cells do not get deleted within them. [Skotlex] 
    1047610481                if( dissonance ) skill_dance_switch(unit, 1); 
    10477  
     10482                         
    1047810483                if( flag&4 ) 
    1047910484                        skill_unit_onleft(skill_id,target,tick); 
     
    1050210507                memset(skill_unit_temp, 0, sizeof(skill_unit_temp)); 
    1050310508        } 
    10504  
     10509                 
    1050510510        map_foreachincell(skill_unit_move_sub,bl->m,bl->x,bl->y,BL_SKILL,bl,tick,flag); 
    1050610511 
     
    1068010685        if (qty < 1) 
    1068110686                qty = 1; 
    10682  
     10687         
    1068310688        if (!skill_id) //A skill can be specified for some override cases. 
    1068410689                skill_id = skill_produce_db[idx].req_skill; 
    10685  
     10690         
    1068610691        slot[0]=slot1; 
    1068710692        slot[1]=slot2; 
     
    1076110766                        case AM_TWILIGHT2: 
    1076210767                        case AM_TWILIGHT3: 
    10763                                 make_per = pc_checkskill(sd,AM_LEARNINGPOTION)*100 
     10768                                make_per = pc_checkskill(sd,AM_LEARNINGPOTION)*50 
    1076410769                                        + pc_checkskill(sd,AM_PHARMACY)*300 + sd->status.job_level*20 
    10765                                         + status->int_*5 + status->dex*10+status->luk*10; 
     10770                                        + (status->int_/2)*10 + status->dex*10+status->luk*10; 
     10771                                if(merc_is_hom_active(sd->hd)) {//Player got a homun 
     10772                                        int skill; 
     10773                                        if((skill=merc_hom_checkskill(sd->hd,HVAN_INSTRUCT)) > 0) //His homun is a vanil with instruction change 
     10774                                                make_per += skill*100; //+1% bonus per level 
     10775                                } 
    1076610776                                switch(nameid){ 
    1076710777                                        case 501: // Red Potion 
    1076810778                                        case 503: // Yellow Potion 
    1076910779                                        case 504: // White Potion 
    10770                                         case 605: // Anodyne 
    10771                                         case 606: // Aloevera 
    10772                                                 make_per += 2000; 
     10780                                                make_per += (1+rand()%100)*10 + 2000; 
    1077310781                                                break; 
    10774                                         case 505: // Blue Potion 
    10775                                                 make_per -= 500; 
    10776                                                 break; 
    10777                                         case 545: // Condensed Red Potion 
    10778                                         case 546: // Condensed Yellow Potion 
    10779                                         case 547: // Condensed White Potion 
    10780                                                 make_per -= 1000; 
    10781                                             break; 
    10782                                         case 970: // Alcohol 
    10783                                                 make_per += 1000; 
    10784                                                 break; 
    10785                                         case 7139: // Glistening Coat 
    10786                                                 make_per -= 1000; 
     10782                                        case 970: // Alcohol 
     10783                                                make_per += (1+rand()%100)*10 + 1000; 
    1078710784                                                break; 
    1078810785                                        case 7135: // Bottle Grenade 
     
    1079010787                                        case 7137: // Plant Bottle 
    1079110788                                        case 7138: // Marine Sphere Bottle 
     10789                                                make_per += (1+rand()%100)*10; 
     10790                                                break; 
     10791                                        case 546: // Condensed Yellow Potion 
     10792                                                make_per -= (1+rand()%50)*10; 
     10793                                                break; 
     10794                                        case 547: // Condensed White Potion 
     10795                                        case 7139: // Glistening Coat 
     10796                                                make_per -= (1+rand()%100)*10; 
     10797                                            break; 
     10798                                        //Common items, recieve no bonus or penalty, listed just because they are commonly produced 
     10799                                        case 505: // Blue Potion 
     10800                                        case 545: // Condensed Red Potion 
     10801                                        case 605: // Anodyne 
     10802                                        case 606: // Aloevera 
    1079210803                                        default: 
    1079310804                                                break; 
     
    1082710838// - Baby Class Penalty = 80% (from adult's chance) ----// 
    1082810839        if (sd->class_&JOBL_BABY) //if it's a Baby Class 
    10829                 make_per = (make_per * 80) / 100; //Lupus 
     10840                make_per = (make_per * 70) / 100; //Baby penalty is 30% 
    1083010841 
    1083110842        if(make_per < 1) make_per = 1; 
    1083210843 
    10833  
     10844         
    1083410845        if(rand()%10000 < make_per || qty > 1){ //Success, or crafting multiple items. 
    1083510846                struct item tmp_item; 
     
    1090210913                                                skill_id != AM_TWILIGHT2 && 
    1090310914                                                skill_id != AM_TWILIGHT3) 
    10904                                                 continue; 
     10915                                                continue;                                                
    1090510916                                        //Add fame as needed. 
    1090610917                                        switch(++sd->potion_success_counter) { 
     
    1095510966                } 
    1095610967        } 
    10957         //Failure 
     10968        //Failure        
    1095810969//      if(log_config.produce) 
    1095910970//              log_produce(sd,nameid,slot1,slot2,slot3,0); 
     
    1104111052                return 0; 
    1104211053        if (sd) sd->blockskill[data] = 0; 
    11043  
     11054         
    1104411055        return 1; 
    1104511056} 
     
    1106811079                return 0; 
    1106911080        if (hd) hd->blockskill[data] = 0; 
    11070  
     11081         
    1107111082        return 1; 
    1107211083} 
     
    1107511086{ 
    1107611087        nullpo_retr (-1, hd); 
    11077  
     11088         
    1107811089        skillid = skill_get_index(skillid); 
    1107911090        if (skillid == 0) 
     
    1113511146                        if ((val[j]-val[j-step]) != diff) 
    1113611147                                break; 
    11137  
     11148         
    1113811149                if (j>=step) //No match, try next step. 
    1113911150                        continue; 
    11140  
     11151                 
    1114111152                for(; i < MAX_SKILL_LEVEL; i++) 
    1114211153                {       //Apply linear increase 
     
    1133511346                                memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); 
    1133611347                        } else { 
    11337                                 int dx[] = { 1, 1 ,0, 0,-1}; 
    11338                                 int dy[] = { 1, 0, 0,-1,-1}; 
     11348                                int dx[] = { 1, 1 ,0, 0,-1};  
     11349                                int dy[] = { 1, 0, 0,-1,-1};  
    1133911350                                memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx)); 
    1134011351                                memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); 
     
    1136611377                                memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); 
    1136711378                        } else { 
    11368                                 int dx[] = { 2, 1 ,0,-1,-2}; 
    11369                                 int dy[] = { 2, 1, 0,-1,-2}; 
     11379                                int dx[] = { 2, 1 ,0,-1,-2};  
     11380                                int dy[] = { 2, 1, 0,-1,-2};  
    1137011381                                memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx)); 
    1137111382                                memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); 
     
    1139611407 * skill_nocast_db.txt 
    1139711408 * skill_unit_db.txt 
    11398  * produce_db.txt 
     11409 * produce_db.txt  
    1139911410 * create_arrow_db.txt 
    1140011411 * abra_db.txt 
     
    1146511476        skill_split_atoi(split[5],skill_db[i].sp_rate); 
    1146611477        skill_split_atoi(split[6],skill_db[i].zeny); 
    11467  
     11478         
    1146811479        //FIXME: document this 
    1146911480        p = split[7]; 
     
    1148311494                p++; 
    1148411495        } 
    11485  
     11496         
    1148611497        //FIXME: document this 
    1148711498        p = split[8]; 
     
    1151711528        else if( strcmpi(split[10],"water")==0 ) skill_db[i].state = ST_WATER; 
    1151811529        else skill_db[i].state = ST_NONE; 
    11519  
     11530         
    1152011531        skill_split_atoi(split[11],skill_db[i].spiritball); 
    1152111532        for( j = 0; j < 10; j++ ) { 
     
    1153311544        if( !i ) // invalid skill id 
    1153411545                return false; 
    11535  
     11546         
    1153611547        skill_split_atoi(split[1],skill_db[i].cast); 
    1153711548        skill_split_atoi(split[2],skill_db[i].delay); 
     
    1154911560        if( !i ) // invalid skill id 
    1155011561                return false; 
    11551  
     11562         
    1155211563        skill_split_atoi(split[1],skill_db[i].castnodex); 
    1155311564        if( split[2] ) // optional column 
     
    1157511586        if( !i ) // invalid skill id 
    1157611587                return false; 
    11577  
     11588         
    1157811589        skill_db[i].unit_id[0] = strtol(split[1],NULL,16); 
    1157911590        skill_db[i].unit_id[1] = strtol(split[2],NULL,16); 
     
    1162111632        skill_produce_db[current].req_skill = atoi(split[2]); 
    1162211633        skill_produce_db[current].req_skill_lv = atoi(split[3]); 
    11623  
     11634         
    1162411635        for( x = 4, y = 0; x+1 < columns && split[x] && split[x+1] && y < MAX_PRODUCE_RESOURCE; x += 2, y++ ) 
    1162511636        { 
     
    1164011651 
    1164111652        skill_arrow_db[current].nameid = i; 
    11642  
     11653         
    1164311654        for( x = 1, y = 0; x+1 < columns && split[x] && split[x+1] && y < MAX_ARROW_RESOURCE; x += 2, y++ ) 
    1164411655        { 
     
    1167911690        memset(skill_arrow_db,0,sizeof(skill_arrow_db)); 
    1168011691        memset(skill_abra_db,0,sizeof(skill_abra_db)); 
    11681  
     11692         
    1168211693        // load skill databases 
    1168311694        safestrncpy(skill_db[0].name, "UNKNOWN_SKILL", sizeof(skill_db[0].name)); 
     
    1170711718        skilldb_name2id = strdb_alloc(DB_OPT_DUP_KEY, 0); 
    1170811719        skill_readdb(); 
    11709  
     11720         
    1171011721        skill_unit_ers = ers_new(sizeof(struct skill_unit_group)); 
    1171111722        skill_timer_ers  = ers_new(sizeof(struct skill_timerskill)); 
    11712  
     11723         
    1171311724        add_timer_func_list(skill_unit_timer,"skill_unit_timer"); 
    1171411725        add_timer_func_list(skill_castend_id,"skill_castend_id"); 
     
    1171611727        add_timer_func_list(skill_timerskill,"skill_timerskill"); 
    1171711728        add_timer_func_list(skill_blockpc_end, "skill_blockpc_end"); 
    11718  
     11729         
    1171911730        add_timer_interval(gettick()+SKILLUNITTIMER_INTERVAL,skill_unit_timer,0,0,SKILLUNITTIMER_INTERVAL); 
    1172011731 
     
    1172911740        return 0; 
    1173011741} 
    11731  
     11742//Why is this after the cleanup code? 
    1173211743int skill_additem(struct block_list* src, struct block_list *bl, int itemid, int amount)// ITEM GIVER [Brain] 
    1173311744{ 
     
    1173511746 
    1173611747        nullpo_retr(1, src); 
    11737         nullpo_retr(1, bl); 
     11748        nullpo_retr(1, bl);      
    1173811749 
    1173911750        if (src->m != bl->m) 
    11740         return 1; 
     11751                return 1; 
    1174111752        if (bl->prev == NULL) 
    11742         return 1; 
     11753                return 1; 
    1174311754        if (src->type == BL_PC) 
    11744         sd = (struct map_session_data *)src; 
     11755                sd = (struct map_session_data *)src; 
    1174511756        if (bl->type == BL_PC) 
    11746         tsd = (struct map_session_data *)bl; 
     11757                tsd = (struct map_session_data *)bl; 
    1174711758        if (status_isdead(bl)) 
    11748         return 1; 
     11759                return 1; 
    1174911760 
    1175011761        int eflag; 
    1175111762        struct item item_tmp; 
    1175211763        struct block_list tbl; 
    11753  
     11764         
    1175411765        memset(&item_tmp,0,sizeof(item_tmp)); 
    1175511766        memset(&tbl,0,sizeof(tbl)); 
     
    1176211773        eflag = pc_additem(sd,&item_tmp,amount); 
    1176311774        if(eflag) { 
    11764         clif_additem(sd,0,0,eflag); 
    11765         map_addflooritem(&item_tmp,amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0); 
     11775                clif_additem(sd,0,0,eflag); 
     11776                map_addflooritem(&item_tmp,amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0); 
    1176611777        } 
    1176711778        return 0;