Changeset 10 for src/map/skill.c

Show
Ignore:
Timestamp:
07/01/08 02:49:27 (17 years ago)
Author:
jinshiro
Message:

Finished Draft for Adept, Necro and Warlock.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/map/skill.c

    r1 r10  
    4242#define GD_SKILLRANGEMIN 900 
    4343#define GD_SKILLRANGEMAX GD_SKILLRANGEMIN+MAX_GUILDSKILL 
    44 #define HM_SKILLRANGEMIN 800 
     44#define HM_SKILLRANGEMIN 1100 //Custom Jobs (blackmagic)//Custom Job End 
    4545#define HM_SKILLRANGEMAX HM_SKILLRANGEMIN+MAX_HOMUNSKILL 
    4646 
     
    821821                sc_start(bl,SC_CRITICALWOUND,100,skilllv,skill_get_time2(skillid,skilllv)); 
    822822                break; 
     823                //Custom Jobs (blackmagic) 
     824        case NC_GHOULTOUCH:     //Necro Ghoul Touch [Brain] 
     825                if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed 
     826                        sc_start(bl,SC_POISON,10000,skilllv,skill_get_time2(skillid,skilllv)); 
     827                break; 
     828        case NC_PWSUFFER:       //Necro Power Word: Suffer [Brain] 
     829        case WL_PWAGONY:        //Warlock Power Word: Agony [Brain] 
     830                if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed 
     831                        sc_start(bl,skillid==NC_PWSUFFER?SC_SUFFER:SC_AGONY,1000,skilllv,skill_get_time2(skillid,skilllv)); 
     832                break; 
     833        case WL_SEARING:        //Warlock Searing Pain [Brain] 
     834                //The DoT is only initiated if target isnt burning already. 
     835                if(!tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) 
     836                        sc_start(bl,SC_SEARING,10000,skilllv,skill_get_time2(skillid,skilllv)); 
     837                break; 
     838        case WL_IMMOLATE:       //Warlock Immolate [Brain] 
     839                //The DoT is only initiated if target isnt in immolate, but must be in searing pain status 
     840                if(tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) 
     841                        sc_start(bl,SC_IMMOLATE,10000,skilllv,skill_get_time2(skillid,skilllv)); 
     842                break; 
     843        case WL_SHADOWBURN:     //Warlock Shadow Burn [Brain] 
     844                sc_start(bl,SC_STUN,10000,skilllv,skill_get_time(skillid,skilllv)); 
     845                break; 
     846//Custom Job End 
    823847        } 
    824848 
     
    10181042                status_heal(src, 0, status_get_lv(bl)*(95+15*rate)/100, 2); 
    10191043        } 
    1020  
     1044//Custom Jobs (blackmagic)       
     1045        // Warlock Soul Steal [Brain] 
     1046        if(sd && skillid && attack_type&BF_MAGIC && status_isdead(bl)  
     1047                && !(skill_get_inf(skillid)&(INF_GROUND_SKILL|INF_SELF_SKILL)) 
     1048                && (rate=pc_checkskill(sd,WL_SOULSTEAL))>0){// Wont work with area/ground spells (hellfire) 
     1049                if (pc_issit(sd)) pc_setstand(sd); 
     1050                clif_skill_nodamage(src,bl,WL_SOULSTEAL,rate,1); 
     1051                clif_specialeffect(src, 253, AREA); // Absorb Mana effect on caster 
     1052                status_heal(src, 0, status_get_lv(bl)*(90+10*rate)/100, 2); 
     1053                if(rand()%100 < rate) skill_additem(src,src,15020,1); //Chance to "steal" the target soul 
     1054        } 
     1055//Custom Job End 
    10211056        if(dstsd && attack_type&BF_WEAPON) 
    10221057        {       //Counter effects. 
     
    21102145                                        } 
    21112146                                        break; 
     2147                                        //Custom Jobs (blackmagic) 
     2148                                 
     2149                                case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] 
     2150                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_SUFFER]){ 
     2151                                                skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2152                                                clif_specialeffect(target, 180, AREA); //Shadow Hit Effect on target 
     2153                                                if (skl->type>1 && !status_isdead(target)) 
     2154                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2155                                        } 
     2156                                        break; 
     2157                                case WL_SEARING: //Warlock Searing Pain [Brain] 
     2158                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_SEARING]){ 
     2159                                                skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2160                                                clif_specialeffect(target, 49, AREA); //Fire Hit Effect on target 
     2161                                                if (skl->type>1 && !status_isdead(target)) 
     2162                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2163                                        } 
     2164                                        break; 
     2165                                case WL_IMMOLATE: //Warlock Immolate [Brain] 
     2166                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_IMMOLATE]){ 
     2167                                                skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2168                                                clif_specialeffect(target, 97, AREA); //Firepillar Hit Effect on target 
     2169                                                if (skl->type>1 && !status_isdead(target)) 
     2170                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2171                                        } 
     2172                                        break; 
     2173                                case WL_PWAGONY: //Warlock Power Word: Agony [Brain] 
     2174                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_AGONY]){ 
     2175                                                skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2176                                                clif_specialeffect(target, 587, AREA); //Big Purple Flame Effect on target 
     2177                                                if (skl->type>1 && !status_isdead(target)) 
     2178                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2179                                        } 
     2180                                        break; 
     2181                                 
     2182                                        //Custom Job End 
    21122183                                default: 
    21132184                                        skill_attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag); 
     
    23242395                skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); 
    23252396                break; 
     2397                //Custom Jobs (blackmagic) 
     2398         
     2399        case NC_GHOULTOUCH:     //Necro Ghoul Touch [Brain] 
     2400                skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); 
     2401                clif_specialeffect(bl, 124, AREA); //Venom Dust Effect on target 
     2402                break; 
     2403        case NC_DEATHHAND:      //Necro Death Hand [Brain] 
     2404                skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag|SD_LEVEL);//Hide skill yell 
     2405                clif_specialeffect(bl, 65, AREA); //Power absorb Effect on target 
     2406                if (battle_check_living(tstatus->race, tstatus->def_ele)){ //Check if target is a living creature before proceed 
     2407                        int chance = (10+(skilllv*2)+(status_get_luk(src)-status_get_luk(bl))/5);  
     2408                        //10% chance + 2% per skilllv + (caster luk - target luk)/5 % 
     2409                                if (rand()%100 < chance) { 
     2410                                        clif_skill_nodamage(src,bl,skillid,-1,flag|SD_LEVEL);//Hide skill yell 
     2411                                        status_percent_damage(src, bl, 100, 0, true); //Instant kill our target 
     2412                                } else clif_skill_fail(sd,skillid,0,0); 
     2413                } 
     2414                break; 
     2415                //Custom Job End 
    23262416 
    23272417        case LK_JOINTBEAT: // decide the ailment first (affects attack damage and effect) 
     
    26592749                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    26602750                break; 
     2751                //Custom Jobs (blackmagic) 
     2752 
     2753         
     2754        case AD_DARKHEAL: // Adept Dark Heal [Brain] 
     2755                clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target 
     2756                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Exception because we must add the effect manually =/ 
     2757                break; 
     2758        case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] 
     2759                if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
     2760                        skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2761                        clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
     2762                        clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2763                        //If target is on suffering status already, just cause damage, no extra DoT 
     2764                        if(!status_get_sc(bl)->data[SC_SUFFER]) 
     2765                                skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); 
     2766                } 
     2767                else clif_skill_fail(sd,skillid,0,0); 
     2768                break; 
     2769        case NC_DRAINLIFE: // Necromancer Drain Life [Brain] 
     2770                { 
     2771                        int heal = skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, flag)/2; 
     2772                        if (heal > 0 && (battle_check_living(tstatus->race,tstatus->def_ele))){ 
     2773                                clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1); 
     2774                                status_heal(src, heal, 0, 0); 
     2775                        } 
     2776                } 
     2777                clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
     2778                clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2779                break; 
     2780        case WL_SHADOWBOLT: // Warlock Shadowbolt [Brain] 
     2781                clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
     2782                clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2783                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Again, the effect...cursed effects... 
     2784                break; 
     2785        case WL_SHADOWBURN: // Warlock Shadow Burn [Brain] 
     2786                clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
     2787                clif_specialeffect(bl, 32, AREA); //Flame Engulf 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); 
     2790                break; 
     2791        case WL_SEARING: // Warlock Searing Pain [Brain] 
     2792                clif_specialeffect(bl, 406, AREA); //Fire on Head Effect on target 
     2793                clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
     2794                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2795                //if target is on searing status already, just cause damage, no extra DoT 
     2796                if(!status_get_sc(bl)->data[SC_SEARING]) 
     2797                        skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,4,flag); 
     2798                break; 
     2799        case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] 
     2800                if(status_get_sc(bl)->data[SC_IMMOLATE]) { // Can only be casted if target is immolating status 
     2801                        clif_specialeffect(bl, 183, AREA); //Explosion Effect on target 
     2802                        clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
     2803                        skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2804                        status_change_end(bl,SC_IMMOLATE,-1); //End Immolating status 
     2805                } else clif_skill_fail(sd,skillid,0,0); 
     2806                break; 
     2807        case WL_IMMOLATE: // Warlock Immolate [Brain] 
     2808                clif_specialeffect(bl, 635, AREA); //Dragon Fire Effect on target 
     2809                clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
     2810                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2811                //If Target is on searing pain status, will change immolating status instead 
     2812                if(!status_get_sc(bl)->data[SC_IMMOLATE]) 
     2813                        skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,5,flag); 
     2814                break; 
     2815        case WL_CURSEDOOM: // Warlock Curse of Doom [Brain] 
     2816                clif_specialeffect(bl, 183, AREA); //Explosion Effect on target 
     2817                skill_attack(BF_MAGIC,src,bl,bl,skillid,skilllv,tick,flag|SD_ANIMATION); 
     2818                break; 
     2819        case WL_PWAGONY: // Warlock Power Word: Agony [Brain] 
     2820                if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
     2821                        skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2822                        clif_specialeffect(bl, 587, AREA); //Big Purple Flame Effect on target 
     2823                        clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2824                        //If target is on Agonizing status already, just cause damage, no extra DoT 
     2825                        if(!status_get_sc(bl)->data[SC_AGONY]) 
     2826                                skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); 
     2827                } 
     2828                else clif_skill_fail(sd,skillid,0,0); 
     2829                break; 
     2830 
     2831                //Custom Job End 
    26612832 
    26622833        case NPC_MAGICALATTACK: 
     
    28643035        if(status_isdead(src)) 
    28653036                return 1; 
    2866  
    2867         if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO) 
     3037//Custom Jobs (blackmagic) 
     3038        /*if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO)*/ 
     3039        // Added DEATHPACT [Brain] 
     3040        //if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO) 
     3041        if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO && skillid != NC_DEATHPACT) 
    28683042                return 1; 
    2869  
     3043//Custom Job End 
    28703044        tstatus = status_get_status_data(bl); 
    28713045        sstatus = status_get_status_data(src); 
     
    28913065                        } 
    28923066                        break; 
     3067                        //Custom Jobs (blackmagic) 
     3068                 
     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; 
     3082                 
     3083                        //Custom Job End 
    28933084                case NPC_SMOKING: //Since it is a self skill, this one ends here rather than in damage_id. [Skotlex] 
    28943085                        return skill_castend_damage_id (src, bl, skillid, skilllv, tick, flag); 
     
    29203111                        if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM)) 
    29213112                                heal=0; 
     3113                        //Custom Jobs (blackmagic) 
     3114                        // Profane Soul reduces the healed recieved by 3% per skilllv [Brain] 
     3115                        if(dstsd) { 
     3116                                heal = heal * (100 - pc_checkskill(dstsd,AD_PROFANE)*3)/100; 
     3117                                //Wont heal even if he got elemental armors [Brain] 
     3118                                if(pc_checkskill(dstsd,NC_PHYLACTERY)) heal = skilllv; 
     3119                        } 
     3120                        //Custom Job End 
    29223121                        if (sd) { 
    29233122                                if ((i = pc_skillheal_bonus(sd, skillid))) 
     
    29553154                } 
    29563155                break; 
    2957  
     3156        //Custom Jobs (blackmagic) 
     3157         
     3158        case AD_DARKHEAL: // Adept Dark Heal [Brain] 
     3159                { 
     3160                        int heal = skill_calc_heal(src, bl, skilllv); 
     3161                        if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM)) 
     3162                                heal=0; 
     3163                        if(battle_check_undead(tstatus->race,tstatus->def_ele) || tstatus->race==RC_UNDEAD // Check if our target is undead or demon 
     3164                                || tstatus->race==RC_DEMON || pc_checkskill(dstsd,NC_PHYLACTERY)//Or has a phylactery 
     3165                                || status_get_sc(bl)->data[SC_OVERWHELMING]) { //Or is on OverWhelm status, checking again... 
     3166                                clif_skill_nodamage(src, bl, skillid, heal, 1); 
     3167                                clif_skill_nodamage(NULL, bl, AL_HEAL, heal, 1); //Subtle way to show heal numbers AND effect =D 
     3168                                status_heal(bl, heal, 0, 0); 
     3169                        } else { 
     3170                                clif_skill_nodamage(src, bl, skillid, 0, 1); 
     3171                                clif_skill_nodamage(NULL, bl, AL_HEAL, 0, 1); 
     3172                        } 
     3173                clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target 
     3174                } 
     3175                break; 
     3176        //Custom Job End 
    29583177        case PR_REDEMPTIO: 
    29593178                if (sd && !(flag&1)) { 
     
    29883207                 
    29893208        case ALL_RESURRECTION: 
     3209        //Custom Jobs (blackmagic) 
     3210        case NC_DEATHPACT: // Necro Death Pact [Brain] 
     3211        //Custom Job End 
    29903212                if(sd && map_flag_gvg(bl->m)) 
    29913213                {       //No reviving in WoE grounds! 
     
    30053227                        case 3: per=50; break; 
    30063228                        case 4: per=80; break; 
     3229                        //Custom Jobs (blackmagic) 
     3230                        case 5: per=100; break; //Added a 5th level because NC_DEATHPACT got 5 lvs [Brain] 
     3231                        //Custom Job End 
    30073232                        } 
    30083233                        if(dstsd && dstsd->special_state.restart_full_recover)  
     
    30113236                        { 
    30123237                                clif_skill_nodamage(src,bl,ALL_RESURRECTION,skilllv,1); //Both Redemptio and Res show this skill-animation. 
     3238                                //Custom Jobs (blackmagic) 
     3239                                if(skillid==NC_DEATHPACT) { // Necro Death Pact [Brain] 
     3240                                        clif_skill_nodamage(src, bl, skillid, skilllv,  
     3241                                                sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3242                                        break; 
     3243                                } 
     3244                                //Custom Job End 
    30133245                                if(sd && dstsd && battle_config.resurrection_exp > 0)  
    30143246                                { 
     
    30293261                } 
    30303262                break; 
     3263                //Custom Jobs (blackmagic) 
     3264         
     3265        case AD_PWBLIND: // Adept Power Word: Blind [Brain] 
     3266                if(!tsc->data[type]) { 
     3267                        clif_skill_nodamage(src, bl, skillid, skilllv,1); 
     3268                        if(sc_start(bl, type,(30 + skilllv * 10 + (status_get_lv(src) - sstatus->int_)/5), 
     3269                                skilllv, skill_get_time(skillid,skilllv)))  
     3270                        { 
     3271                                if(dstmd) mob_unlocktarget(dstmd,tick);  //Removes current target 
     3272                                clif_specialeffect(bl, 379, AREA); //379.Soul Drain (2nd Part) 
     3273                                break; 
     3274                        } 
     3275                } else clif_skill_fail(sd,skillid,0,0); 
     3276                break; 
     3277  
     3278        case AD_PWFEAR: // Adept Power Word: Fear [Brain] 
     3279                if(!tsc->data[type]) { 
     3280                        clif_skill_nodamage(src, bl, skillid, skilllv,1); 
     3281                        if(dstsd) 
     3282                                type = SC_CONFUSION; //Players cant be affected by SC_FEAR 
     3283                        if(sc_start(bl, type, (30 + skilllv * 10), skilllv, skill_get_time(skillid,skilllv))) 
     3284                        { 
     3285                                clif_specialeffect(bl, 372, AREA); //372.Death 
     3286                                unit_escape(bl, bl, 30); 
     3287                        } 
     3288                } else clif_skill_fail(sd,skillid,0,0); 
     3289                break; 
     3290        case WL_HOWLOFPAIN: // Warlock Howl of Pain [Brain] 
     3291                //These must be here first or else the code wont execute them. 
     3292                clif_specialeffect(src, 670, AREA); // Monster skill SCREAM effect on caster (no sound) 
     3293                clif_soundeffectall(bl, "wraith_die.wav", 0, AREA); //Wraith Laugh Sound 
     3294                if (flag & 1) { 
     3295                        //Check if target is a living creature AND a valid enemy 
     3296                        if (battle_check_target(src, bl, BCT_ENEMY) && battle_check_living(tstatus->race,tstatus->def_ele)) 
     3297                        { 
     3298                                if(sc_start(bl,type,10+skilllv*10,skilllv,skill_get_time(skillid,skilllv))) 
     3299                                { 
     3300                                        if(dstmd) //PROVOKE Effect on mobs 
     3301                                                mob_target(dstmd,src,skill_get_range2(src,skillid,skilllv)); 
     3302                                        // Breaks Frozen and Sleep status 
     3303                                        if(tsc && tsc->count){ 
     3304                                                if(tsc->data[SC_FREEZE]) 
     3305                                                        status_change_end(bl,SC_FREEZE,-1); 
     3306                                                if(tsc->data[SC_SLEEP]) 
     3307                                                        status_change_end(bl,SC_SLEEP,-1); 
     3308                                        } 
     3309                                        clif_emotion(bl,6); //anger emote on target 
     3310                                        break; 
     3311                                } else { //What will happen if the status fail: 
     3312                                        { 
     3313                                                if (sd) //If is a player 
     3314                                                        clif_skill_fail(sd,skillid,0,0); 
     3315                                                map_freeblock_unlock(); //Else is a mob 
     3316                                                return 0; 
     3317                                        } 
     3318                                        unit_skillcastcancel(bl, 2); //In any case, will cancel casting 
     3319                                } 
     3320                        } 
     3321                } else { 
     3322                        map_foreachinrange(skill_area_sub, src, 
     3323                                skill_get_splash(skillid, skilllv), BL_CHAR, 
     3324                                src, skillid, skilllv, tick, flag|BCT_ENEMY|1, 
     3325                                skill_castend_nodamage_id); 
     3326                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3327                        map_freeblock_unlock(); 
     3328                        return 1; 
     3329                } 
     3330                break; 
     3331        case WL_HOWLOFTERROR: // Warlock Howl of Terror [Brain] 
     3332                if (flag & 1) { 
     3333                        int rate; 
     3334                        //Check if target is a living creature AND a valid enemy 
     3335                        if (battle_check_target(src, bl, BCT_ENEMY) 
     3336                                && battle_check_living(tstatus->race,tstatus->def_ele)) { 
     3337                                rate = 10 + skilllv*5 + pc_checkskill(sd,AD_PWFEAR)*3; 
     3338                                if(dstsd) {  
     3339                                        rate -= 10; // 10% less chance on players 
     3340                                        type = SC_CONFUSION; //Players cant be affected by SC_FEAR 
     3341                                } 
     3342                                if(sc_start(bl,type,rate,skilllv,skill_get_time(skillid,skilllv))) 
     3343                                        clif_specialeffect(bl, 372, AREA); //Same as PW: Fear 
     3344                        } 
     3345                } else { 
     3346                        map_foreachinrange(skill_area_sub, src, 
     3347                                skill_get_splash(skillid, skilllv), BL_CHAR, 
     3348                                src, skillid, skilllv, tick, flag|BCT_ENEMY|1, 
     3349                                skill_castend_nodamage_id); 
     3350                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3351                } 
     3352                clif_specialeffect(src, 668, AREA); // Monster skill SCREAM effect on caster (with sound) 
     3353                break; 
     3354 
     3355                //Custom Job End 
    30313356 
    30323357        case AL_DECAGI: 
     
    30463371                } 
    30473372                break; 
     3373        //Custom Jobs (blackmagic) 
     3374        case NC_DARKMOON: //Necro Dark Moon [Brain] 
     3375                if (flag&1) { 
     3376                        //Check my enemies 
     3377                        if (battle_check_target(src, bl, BCT_ENEMY) && 
     3378                                battle_check_living(tstatus->race,tstatus->def_ele)) 
     3379                        { 
     3380                                if(sc_start(bl,SC_BLIND,50,skilllv,skill_get_time(skillid,skilllv))) 
     3381                                        clif_specialeffect(bl, 580, AREA); //Box of Rain effect on target 
     3382                        } 
     3383                        else { //Now my Party members 
     3384                                if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { 
     3385                                        clif_skill_nodamage(bl,bl,skillid,skilllv, 
     3386                                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3387                                        clif_specialeffect(bl, 521, AREA); //Red Flashing Aura Sprite effect on target 
     3388                                } else if (sd) { 
     3389                                        party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), 
     3390                                                src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); 
     3391                                } 
     3392                        } 
     3393                } else { 
     3394                        map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, 
     3395                                src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); 
     3396                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3397                } 
     3398                clif_specialeffect(src, 407, AREA); //Soul Change Effect on caster 
     3399                clif_soundeffectall(bl, "se_wolf1.wav", 0, AREA); //Wolf Howl Sound 
     3400                break; 
     3401        case NC_REQUIEM: //Necro Requiem [Brain] 
     3402                if (flag&1) { 
     3403                        //Check my enemies 
     3404                        if (battle_check_target(src, bl, BCT_ENEMY) && 
     3405                                        battle_check_living(tstatus->race,tstatus->def_ele)) 
     3406                        { 
     3407                                if(sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))) 
     3408                                        clif_specialeffect(bl, 578, AREA); //Box of Curse effect on target 
     3409                        } 
     3410                        else { //Now my Party members 
     3411                                if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { 
     3412                                        clif_skill_nodamage(bl,bl,skillid,skilllv, 
     3413                                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3414                                        clif_specialeffect(bl, 572, AREA); //Warmth Soul effect on target 
     3415                                } else if (sd) { 
     3416                                        party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), 
     3417                                                src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); 
     3418                                } 
     3419                        } 
     3420                } else { 
     3421                        map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, 
     3422                                src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); 
     3423                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3424                } 
     3425                int rnds = rand()%3; 
     3426                switch(rnds) { 
     3427                        case 1: 
     3428                                clif_soundeffectall(bl, "chant1.wav", 0, AREA); //Chanting Sound 
     3429                                break; 
     3430                        case 2: 
     3431                                clif_soundeffectall(bl, "chant2.wav", 0, AREA); //Chanting Sound 
     3432                                break; 
     3433                        case 3: 
     3434                                clif_soundeffectall(bl, "chant3.wav", 0, AREA); //Chanting Sound 
     3435                                break; 
     3436                } 
     3437                break; 
     3438 
     3439                //Custom Job End 
    30483440 
    30493441        case PR_LEXDIVINA: 
     
    33483740        case NPC_DEFENDER: 
    33493741        case NPC_MAGICMIRROR: 
     3742                //Custom Jobs (blackmagic) 
     3743        case ALL_ATFIELD:       //AT Field [Brain] 
     3744                //Custom Job End 
    33503745                clif_skill_nodamage(src,bl,skillid,skilllv, 
    33513746                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    33523747                break; 
     3748        //Custom Jobs (blackmagic) 
     3749         
     3750        case AD_LUST:   // Adept Blood Lust [Brain] 
     3751                clif_specialeffect(src, 220, AREA); //Berserk Pot effect 
     3752                clif_specialeffect(src, 455, AREA); //Red Lightnings 
     3753                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3754                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3755                break; 
     3756        case NC_DECREPIFY: //Necro Decrepify [Brain] 
     3757                if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
     3758                        clif_specialeffect(bl, 403, AREA); //Mind Breaker Effect on target 
     3759                        clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     3760                        clif_skill_nodamage(src,bl,skillid,skilllv, 
     3761                                sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3762                } 
     3763                else clif_skill_fail(sd,skillid,0,0); 
     3764                break; 
     3765        case WL_CURSEWEAKNESS: // Warlock Curse of Weakness [Brain] 
     3766                clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite effect on target 
     3767                clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
     3768                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3769                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3770                break; 
     3771        case WL_CURSEEXHAUST: // Warlock Curse of Exhaustion [Brain] 
     3772                clif_specialeffect(bl, 135, AREA); //Ice Breaking effect on target 
     3773                clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
     3774                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3775                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3776                break; 
     3777        case WL_CURSETONGUES: // Warlock Curse of Tongues [Brain] 
     3778                clif_specialeffect(bl, 72, AREA); //Spinning Lights effect on target 
     3779                clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
     3780                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3781                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3782                break; 
     3783        case WL_CURSEDOOM: // Warlock Curse of Doom (temp) [Brain] 
     3784                if(!tsc->data[type]) { 
     3785                        clif_specialeffect(bl, 196, AREA); //Small Curse Reaper effect on target 
     3786                        clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
     3787                        clif_skill_nodamage(src,bl,skillid,skilllv, 
     3788                                sc_start4(bl,type,100, 
     3789                                        skilllv,skillid,src->id,skill_get_time(skillid,skilllv),1000)); 
     3790                } else clif_skill_fail(sd,skillid,0,0); 
     3791                break; 
     3792        case WL_OVERWHELMING: // Warlock Overwhelming Evil [Brain] 
     3793                clif_specialeffect(src, 348, AREA); //1000 Blades Trespassing effect on caster 
     3794                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3795                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3796                break; 
     3797         
     3798        //Custom Job End 
    33533799        case MG_SIGHT: 
    33543800        case AL_RUWACH: 
     
    35674013                clif_skill_nodamage(src,bl,skillid,skilllv,i?1:0); 
    35684014                break; 
     4015                //Custom Jobs (blackmagic) 
     4016         
     4017        case WL_DRAINSOUL: // Warlock Drain Soul [Brain] 
     4018                i = 0; 
     4019                if (dstsd && (sd == dstsd || map_flag_vs(src->m))) 
     4020                {       //check if target is a player and we are in versus map 
     4021                        i = tstatus->max_sp * skilllv/100;//i = SkillLv% of player Max SP 
     4022                        if(dstsd->spiritball && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER) { 
     4023                                i += dstsd->spiritball * 5;//will drain Monk Spirits and regain 5 SP per Spirit 
     4024                                pc_delspiritball(dstsd,dstsd->spiritball,0); 
     4025                        } 
     4026                } else if (dstmd && !(tstatus->mode&MD_BOSS) && battle_check_living(tstatus->race,tstatus->def_ele)) 
     4027                {       // check if target is a monster and not a Boss 
     4028                        i = dstmd->level/5 * skilllv;//i = mob level/5 * Skill Lvl 
     4029                        mob_target(dstmd,src,0);//This will turn the mob agressive against the caster 
     4030                } 
     4031                if(i < skilllv) i = skilllv; //Minimum 1 sp per skill lvl 
     4032                if (i) { 
     4033                        clif_specialeffect(src, 253, AREA); //Absorb Mana effect on caster 
     4034                        clif_specialeffect(bl, 52, AREA); //Lightning Hit effect on target 
     4035                        status_heal(src, 0, i, 3); //caster drains sp 
     4036                        status_zap(bl, 0, i*skilllv); //target lost sp equal to 1*SkillLv the amount drained 
     4037                } 
     4038                clif_skill_nodamage(src,bl,skillid,skilllv,i?1:0); 
     4039                break; 
     4040                //Custom Job End 
    35694041 
    35704042        case AC_MAKINGARROW: 
     
    56356107                        src->m, x-i, y-i, x+i,y+i,BL_SKILL); 
    56366108                break; 
     6109                //Custom Jobs (blackmagic) 
     6110        case WL_HELLFIRE: // Warlock Hellfire [Brain] 
     6111                //clif_specialeffect(sd, 92, AREA); //Meteor Effect on caster, cant set on ground 
     6112                clif_skill_poseffect(src,WZ_METEOR,skilllv,x,y,tick); //Meteor Effect 
     6113                clif_skill_nodamage(src, src, skillid, 0, 1); //Lalala, just to show the skill yell correctly 
     6114                clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
     6115                // Continue reading because skill_unitsetting is bellow 
     6116                //Custom Job End 
    56376117 
    56386118        case MG_SAFETYWALL: 
     
    57946274                                md->deletetimer = add_timer (gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, md->bl.id, 0); 
    57956275                                mob_spawn (md); //Now it is ready for spawning. 
    5796                         } 
    5797                 } 
    5798                 break; 
     6276                                //Custom Jobs (blackmagic) 
     6277                                // @showsummon command implementation [Brainstorm] 
     6278                                if(sd->state.showsummon){ 
     6279                                        char output[256]; 
     6280                                        sprintf(output, 
     6281                                                "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
     6282                                                md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
     6283                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6284                                        sprintf(output, 
     6285                                                "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
     6286                                                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); 
     6287                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6288                                } 
     6289                                //Custom Job End 
     6290                        } 
     6291                } 
     6292                break; 
     6293 
     6294                //Custom Jobs (blackmagic)       
     6295        case AD_FAMILIAR: // Adept Summon Familiar [Brain] 
     6296                if( sd ) 
     6297                { 
     6298                        int id; 
     6299                        int mob_class; 
     6300                        struct mob_data* md; 
     6301  
     6302                        mob_class = pc_readglobalreg(sd, "ADEPT_FAMILIAR"); 
     6303                        if( mob_class == 0 ) 
     6304                        { 
     6305                                mob_class = mob_get_random_id(4, 0x1, 0); 
     6306                                pc_setglobalreg(sd, "ADEPT_FAMILIAR", mob_class); 
     6307                        } 
     6308                        id = mob_once_spawn(sd,src->m,src->x,src->y,"--en--",mob_class,1,""); 
     6309                        md = (struct mob_data *)map_id2bl(id); 
     6310                        if( md != NULL ) 
     6311                        { 
     6312                                md->master_id = sd->bl.id; 
     6313                                md->special_state.ai = 1; 
     6314                                md->status.mode = md->status.mode|MD_AGGRESSIVE; 
     6315                                status_calc_mob(md,0); //Recalc their stats based on passive bonus 
     6316                                md->status.hp = md->status.max_hp; //Must be here or the code wont update it 
     6317                                // @showsummon command implementation [Brainstorm] 
     6318                                if(sd->state.showsummon){ 
     6319                                        char output[256]; 
     6320                                        sprintf(output, 
     6321                                                "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
     6322                                                md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
     6323                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6324                                        sprintf(output, 
     6325                                                "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
     6326                                                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); 
     6327                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6328                                } 
     6329                                md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); 
     6330                        } 
     6331                } 
     6332                break; 
     6333        case NC_SKELETON: // Raise Skeleton [Brain] 
     6334        case NC_ARCHER: // Raise Archer Skeleton 
     6335        case NC_ZOMBIE: // Raise Zombie 
     6336        case NC_MUMMY: // Raise Mummy 
     6337        case NC_GHOST: // Raise Ghost 
     6338        case NC_SHADOW: // Raise Shadow 
     6339        case NC_WRAITH: // Raise Wraith 
     6340                if( sd ) 
     6341                { 
     6342                        static const int mob_skeleton[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General 
     6343                        static const int mob_archer[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier 
     6344                        static const int mob_zombie[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master 
     6345                        static const int mob_mummy[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy 
     6346                        static const int mob_ghost[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror 
     6347                        static const int mob_shadow[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan 
     6348                        static const int mob_wraith[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead 
     6349                        int id; 
     6350                        int mob_class; 
     6351                        struct mob_data *md; 
     6352 
     6353                        switch( skillid ) 
     6354                        { 
     6355                                case NC_SKELETON: mob_class = mob_skeleton[skilllv-1]; break; 
     6356                                case NC_ARCHER:   mob_class = mob_archer[skilllv-1]; break; 
     6357                                case NC_ZOMBIE:   mob_class = mob_zombie[skilllv-1]; break; 
     6358                                case NC_MUMMY:    mob_class = mob_mummy[skilllv-1]; break; 
     6359                                case NC_GHOST:    mob_class = mob_ghost[skilllv-1]; break; 
     6360                                case NC_SHADOW:   mob_class = mob_shadow[skilllv-1]; break; 
     6361                                case NC_WRAITH:   mob_class = mob_wraith[skilllv-1]; break; 
     6362                                default: 
     6363                                        mob_class = 1002; // poring 
     6364                                        ShowDebug("skill_castend_pos2: undefined skill #%d used to raise mobs, defaulting to poring\n"); 
     6365                                        break; 
     6366                        } 
     6367                        id = mob_once_spawn(sd,src->m,src->x,src->y,"--ja--",mob_class,1,""); 
     6368                        if((md=(struct mob_data *)map_id2bl(id))) 
     6369                        { 
     6370                                md->master_id=sd->bl.id; 
     6371                                md->special_state.ai=1; 
     6372                                md->status.mode=md->db->status.mode|MD_AGGRESSIVE; 
     6373                                status_calc_mob(md,0); //Recalc their stats based on passive bonus 
     6374                                md->status.hp = md->status.max_hp; //Must be here or the code wont update it 
     6375                                // @showsummon command implementation [Brainstorm] 
     6376                                if(sd->state.showsummon){ 
     6377                                        char output[256]; 
     6378                                        sprintf(output, 
     6379                                                "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
     6380                                                md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
     6381                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6382                                        sprintf(output, 
     6383                                                "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
     6384                                                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); 
     6385                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6386                                } 
     6387                                md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); 
     6388                        } 
     6389                } 
     6390                break; 
     6391 
     6392 
     6393                //Custom Job End 
    57996394 
    58006395        // Slim Pitcher [Celest] 
     
    62096804        switch(skillid) 
    62106805        { 
    6211  
     6806//Custom Jobs (blackmagic) 
     6807        case WL_HELLFIRE: // Warlock Hellfire [Brain] 
     6808                if(map_flag_vs(src->m)) target = BCT_ALL; 
     6809                break; 
     6810//Custom Job End 
    62126811        case MG_SAFETYWALL: 
    62136812                val2=skilllv+1; 
     
    68067405                                } 
    68077406                                if (status_isimmune(bl)) 
    6808                                         heal = 0;       /* 黄金蟲カヌドヒヌル量 */ 
     7407                                        heal = 0;       /* 黁Eß蟲カヌドヒヌル量E*/ 
     7408                                //Custom Jobs (blackmagic) 
     7409                                // Profane Soul reduces the healed recieved by 3% per skilllv [Brain] 
     7410                                if(tsd) { 
     7411                                        heal = heal * (100 - pc_checkskill(tsd,AD_PROFANE)*3)/100; 
     7412                                        //Wont heal even if he got elemental armors [Brain] 
     7413                                        if(pc_checkskill(tsd,NC_PHYLACTERY)) heal = sg->skill_lv; 
     7414                                } 
     7415                                //Custom Job End 
    68097416                                clif_skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1); 
    68107417                                status_heal(bl, heal, 0, 0); 
     
    77088315                } 
    77098316                break; 
    7710         case MO_FINGEROFFENSIVE:                                //指匟 
     8317        case MO_FINGEROFFENSIVE:                                //持EŒŸ 
    77118318        case GS_FLING: 
    77128319                if (sd->spiritball > 0 && sd->spiritball < spiritball) { 
     
    78648471                } 
    78658472                break; 
     8473                //Custom Jobs (blackmagic)       
     8474        case AD_FAMILIAR: //Adept Familiar [Flavio] 
     8475                { 
     8476                        short familiar[1] ={ pc_readglobalreg(sd, "ADEPT_FAMILIAR") }; 
     8477                        int maxcount = skill_get_maxcount(skill,lv); 
     8478                        int count = 0; 
     8479                        count = mob_countslave_class(&sd->bl, 1, familiar ); 
     8480                        if( count >= maxcount ) 
     8481                        { 
     8482                                clif_skill_fail(sd,skill,0,0); 
     8483                                return 0; 
     8484                        } 
     8485                } 
     8486                break; 
     8487        case NC_SKELETON: // Raise Skeleton [Brain] 
     8488        case NC_ARCHER: // Raise Archer Skeleton 
     8489        case NC_ZOMBIE: // Raise Zombie 
     8490        case NC_MUMMY: // Raise Mummy 
     8491        case NC_GHOST: // Raise Ghost 
     8492        case NC_SHADOW: // Raise Shadow 
     8493        case NC_WRAITH: // Raise Wraith 
     8494                {// corrigido o limite de spawns [Flavio] 
     8495                        short summon1[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General 
     8496                        short summon2[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier 
     8497                        short summon3[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master 
     8498                        short summon4[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy 
     8499                        short summon5[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror 
     8500                        short summon6[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan 
     8501                        short summon7[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead 
     8502                        int maxcount = skill_get_maxcount(skill,lv); 
     8503                        int count = 0; 
     8504                        switch( skill ) 
     8505                        { 
     8506                        case NC_SKELETON: count = mob_countslave_class(&sd->bl, 5, summon1); break; 
     8507                        case NC_ARCHER: count = mob_countslave_class(&sd->bl, 5, summon2); break; 
     8508                        case NC_ZOMBIE: count = mob_countslave_class(&sd->bl, 5, summon3); break; 
     8509                        case NC_MUMMY: count = mob_countslave_class(&sd->bl, 5, summon4); break; 
     8510                        case NC_GHOST: count = mob_countslave_class(&sd->bl, 5, summon5); break; 
     8511                        case NC_SHADOW: count = mob_countslave_class(&sd->bl, 5, summon6); break; 
     8512                        case NC_WRAITH: count = mob_countslave_class(&sd->bl, 5, summon7); break; 
     8513                        } 
     8514                        if( count >= maxcount ) 
     8515                        { 
     8516                                clif_skill_fail(sd,skill,0,0); 
     8517                                return 0; 
     8518                        } 
     8519                } 
     8520                break; 
     8521                //Custom Job End 
    78668522        case WZ_FIREPILLAR: // celest 
    78678523                if (lv <= 5)    // no gems required at level 1-5 
     
    80448700 
    80458701        if(!(type&2)){ 
    8046                 if( hp>0 && status->hp <= (unsigned int)hp) {                           /* HPチェック */ 
    8047                         clif_skill_fail(sd,skill,2,0);          /* HP䞍足倱敗通知 */ 
     8702                if( hp>0 && status->hp <= (unsigned int)hp) {                           /* HPチェチE‚¯ */ 
     8703                        clif_skill_fail(sd,skill,2,0);          /* HP䞍足Ešå€±æ•—通知 */ 
    80488704                        return 0; 
    80498705                } 
    8050                 if( sp>0 && status->sp < (unsigned int)sp) {                            /* SPチェック */ 
    8051                         clif_skill_fail(sd,skill,1,0);          /* SP䞍足倱敗通知 */ 
     8706                if( sp>0 && status->sp < (unsigned int)sp) {                            /* SPチェチE‚¯ */ 
     8707                        clif_skill_fail(sd,skill,1,0);          /* SP䞍足Ešå€±æ•—通知 */ 
    80528708                        return 0; 
    80538709                } 
     
    82968952                        status_change_end(bl, SC_SUFFRAGIUM, -1); 
    82978953                } 
     8954                //Custom Jobs (blackmagic) 
     8955                 
     8956                if (sc->data[SC_DECREPIFY]) // Necro Decrepify [Brain] 
     8957                        if(sc->data[SC_DECREPIFY]->val2>=3) 
     8958                                time += time * 25/100; //+25% cast time 
     8959                if (sc->data[SC_CURSETONGUES]) { //Warlock Curse of Tongues [Brain] 
     8960                        time += time * sc->data[SC_CURSETONGUES]->val2 / 100; 
     8961                        status_change_end(bl, SC_CURSETONGUES, -1); 
     8962                } 
     8963                 
     8964                //Custom Job End 
    82988965                if (sc->data[SC_MEMORIZE]) { 
    82998966                        time>>=1; 
     
    1109111758        return 0; 
    1109211759} 
     11760//Custom Jobs (blackmagic) 
     11761int skill_additem(struct block_list* src, struct block_list *bl, int itemid, int amount)// ITEM GIVER [Brain] 
     11762{ 
     11763        struct map_session_data *sd = NULL, *tsd = NULL; 
     11764 
     11765        nullpo_retr(1, src); 
     11766        nullpo_retr(1, bl);      
     11767 
     11768        if (src->m != bl->m) 
     11769                return 1; 
     11770        if (bl->prev == NULL) 
     11771                return 1; 
     11772        if (src->type == BL_PC) 
     11773                sd = (struct map_session_data *)src; 
     11774        if (bl->type == BL_PC) 
     11775                tsd = (struct map_session_data *)bl; 
     11776        if (status_isdead(bl)) 
     11777                return 1; 
     11778 
     11779        int eflag; 
     11780        struct item item_tmp; 
     11781        struct block_list tbl; 
     11782         
     11783        memset(&item_tmp,0,sizeof(item_tmp)); 
     11784        memset(&tbl,0,sizeof(tbl)); 
     11785 
     11786        item_tmp.nameid = itemid; 
     11787        item_tmp.identify = 1; 
     11788        tbl.id = 0; 
     11789 
     11790        clif_takeitem(&sd->bl,&tbl); 
     11791        eflag = pc_additem(sd,&item_tmp,amount); 
     11792        if(eflag) { 
     11793                clif_additem(sd,0,0,eflag); 
     11794                map_addflooritem(&item_tmp,amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0); 
     11795        } 
     11796        return 0; 
     11797} 
     11798//Custom Job End