| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
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 |
| 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 |