853 | | ======= |
854 | | //Custom Jobs (blackmagic) |
855 | | case NC_GHOULTOUCH: //Necro Ghoul Touch [Brain] |
856 | | if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed |
857 | | sc_start(bl,SC_POISON,10000,skilllv,skill_get_time2(skillid,skilllv)); |
858 | | break; |
859 | | case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] |
860 | | case WL_PWAGONY: //Warlock Power Word: Agony [Brain] |
861 | | if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed |
862 | | sc_start(bl,skillid==NC_PWSUFFER?SC_SUFFER:SC_AGONY,1000,skilllv,skill_get_time2(skillid,skilllv)); |
863 | | break; |
864 | | case WL_SEARING: //Warlock Searing Pain [Brain] |
865 | | //The DoT is only initiated if target isnt burning already. |
866 | | if(!tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) |
867 | | sc_start(bl,SC_SEARING,10000,skilllv,skill_get_time2(skillid,skilllv)); |
868 | | break; |
869 | | case WL_IMMOLATE: //Warlock Immolate [Brain] |
870 | | //The DoT is only initiated if target isnt in immolate, but must be in searing pain status |
871 | | if(tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) |
872 | | sc_start(bl,SC_IMMOLATE,10000,skilllv,skill_get_time2(skillid,skilllv)); |
873 | | break; |
874 | | case WL_SHADOWBURN: //Warlock Shadow Burn [Brain] |
875 | | sc_start(bl,SC_STUN,10000,skilllv,skill_get_time(skillid,skilllv)); |
876 | | break; |
877 | | //Custom Job End |
878 | | >>>>>>> .r18 |
2228 | | ======= |
2229 | | //Custom Jobs (blackmagic) |
2230 | | |
2231 | | case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] |
2232 | | if (!status_isdead(target) && status_get_sc(target)->data[SC_SUFFER]){ |
2233 | | skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); |
2234 | | clif_specialeffect(target, 180, AREA); //Shadow Hit Effect on target |
2235 | | if (skl->type>1 && !status_isdead(target)) |
2236 | | skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); |
2237 | | } |
2238 | | break; |
2239 | | case WL_SEARING: //Warlock Searing Pain [Brain] |
2240 | | if (!status_isdead(target) && status_get_sc(target)->data[SC_SEARING]){ |
2241 | | skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); |
2242 | | clif_specialeffect(target, 49, AREA); //Fire Hit Effect on target |
2243 | | if (skl->type>1 && !status_isdead(target)) |
2244 | | skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); |
2245 | | } |
2246 | | break; |
2247 | | case WL_IMMOLATE: //Warlock Immolate [Brain] |
2248 | | if (!status_isdead(target) && status_get_sc(target)->data[SC_IMMOLATE]){ |
2249 | | skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); |
2250 | | clif_specialeffect(target, 97, AREA); //Firepillar Hit Effect on target |
2251 | | if (skl->type>1 && !status_isdead(target)) |
2252 | | skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); |
2253 | | } |
2254 | | break; |
2255 | | case WL_PWAGONY: //Warlock Power Word: Agony [Brain] |
2256 | | if (!status_isdead(target) && status_get_sc(target)->data[SC_AGONY]){ |
2257 | | skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); |
2258 | | clif_specialeffect(target, 587, AREA); //Big Purple Flame Effect on target |
2259 | | if (skl->type>1 && !status_isdead(target)) |
2260 | | skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); |
2261 | | } |
2262 | | break; |
2263 | | |
2264 | | //Custom Job End |
2265 | | >>>>>>> .r18 |
2504 | | ======= |
2505 | | break; |
2506 | | //Custom Jobs (blackmagic) |
2507 | | |
2508 | | case NC_GHOULTOUCH: //Necro Ghoul Touch [Brain] |
2509 | | skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); |
2510 | | clif_specialeffect(bl, 124, AREA); //Venom Dust Effect on target |
2511 | | break; |
2512 | | case NC_DEATHHAND: //Necro Death Hand [Brain] |
2513 | | skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag|SD_LEVEL);//Hide skill yell |
2514 | | clif_specialeffect(bl, 65, AREA); //Power absorb Effect on target |
2515 | | if (battle_check_living(tstatus->race, tstatus->def_ele)){ //Check if target is a living creature before proceed |
2516 | | int chance = (10+(skilllv*2)+(status_get_luk(src)-status_get_luk(bl))/5); |
2517 | | //10% chance + 2% per skilllv + (caster luk - target luk)/5 % |
2518 | | if (rand()%100 < chance) { |
2519 | | clif_skill_nodamage(src,bl,skillid,-1,flag|SD_LEVEL);//Hide skill yell |
2520 | | status_percent_damage(src, bl, 100, 0, true); //Instant kill our target |
2521 | | } else clif_skill_fail(sd,skillid,0,0); |
2522 | | } |
2523 | | break; |
2524 | | //Custom Job End |
2525 | | >>>>>>> .r18 |
2939 | | ======= |
2940 | | //Custom Jobs (blackmagic) |
2941 | | >>>>>>> .r18 |
2942 | | |
2943 | | <<<<<<< .mine |
2944 | | ======= |
2945 | | |
2946 | | case AD_DARKHEAL: // Adept Dark Heal [Brain] |
2947 | | clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target |
2948 | | skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Exception because we must add the effect manually =/ |
2949 | | break; |
2950 | | case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] |
2951 | | if(battle_check_living(tstatus->race,tstatus->def_ele)){ |
2952 | | skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); |
2953 | | clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target |
2954 | | clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster |
2955 | | //If target is on suffering status already, just cause damage, no extra DoT |
2956 | | if(!status_get_sc(bl)->data[SC_SUFFER]) |
2957 | | skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); |
2958 | | } |
2959 | | else clif_skill_fail(sd,skillid,0,0); |
2960 | | break; |
2961 | | case NC_DRAINLIFE: // Necromancer Drain Life [Brain] |
2962 | | { |
2963 | | int heal = skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, flag)/2; |
2964 | | if (heal > 0 && (battle_check_living(tstatus->race,tstatus->def_ele))){ |
2965 | | clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1); |
2966 | | status_heal(src, heal, 0, 0); |
2967 | | } |
2968 | | } |
2969 | | clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target |
2970 | | clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster |
2971 | | break; |
2972 | | case WL_SHADOWBOLT: // Warlock Shadowbolt [Brain] |
2973 | | clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target |
2974 | | clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster |
2975 | | skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Again, the effect...cursed effects... |
2976 | | break; |
2977 | | case WL_SHADOWBURN: // Warlock Shadow Burn [Brain] |
2978 | | clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target |
2979 | | clif_specialeffect(bl, 32, AREA); //Flame Engulf Effect on target |
2980 | | clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster |
2981 | | skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); |
2982 | | break; |
2983 | | case WL_SEARING: // Warlock Searing Pain [Brain] |
2984 | | clif_specialeffect(bl, 406, AREA); //Fire on Head Effect on target |
2985 | | clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster |
2986 | | skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); |
2987 | | //if target is on searing status already, just cause damage, no extra DoT |
2988 | | if(!status_get_sc(bl)->data[SC_SEARING]) |
2989 | | skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,4,flag); |
2990 | | break; |
2991 | | case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] |
2992 | | if(status_get_sc(bl)->data[SC_IMMOLATE]) { // Can only be casted if target is immolating status |
2993 | | clif_specialeffect(bl, 183, AREA); //Explosion Effect on target |
2994 | | clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster |
2995 | | skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); |
2996 | | status_change_end(bl,SC_IMMOLATE,-1); //End Immolating status |
2997 | | } else clif_skill_fail(sd,skillid,0,0); |
2998 | | break; |
2999 | | case WL_IMMOLATE: // Warlock Immolate [Brain] |
3000 | | clif_specialeffect(bl, 635, AREA); //Dragon Fire Effect on target |
3001 | | clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster |
3002 | | skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); |
3003 | | //If Target is on searing pain status, will change immolating status instead |
3004 | | if(!status_get_sc(bl)->data[SC_IMMOLATE]) |
3005 | | skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,5,flag); |
3006 | | break; |
3007 | | case WL_CURSEDOOM: // Warlock Curse of Doom [Brain] |
3008 | | clif_specialeffect(bl, 183, AREA); //Explosion Effect on target |
3009 | | skill_attack(BF_MAGIC,src,bl,bl,skillid,skilllv,tick,flag|SD_ANIMATION); |
3010 | | break; |
3011 | | case WL_PWAGONY: // Warlock Power Word: Agony [Brain] |
3012 | | if(battle_check_living(tstatus->race,tstatus->def_ele)){ |
3013 | | skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); |
3014 | | clif_specialeffect(bl, 587, AREA); //Big Purple Flame Effect on target |
3015 | | clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster |
3016 | | //If target is on Agonizing status already, just cause damage, no extra DoT |
3017 | | if(!status_get_sc(bl)->data[SC_AGONY]) |
3018 | | skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); |
3019 | | } |
3020 | | else clif_skill_fail(sd,skillid,0,0); |
3021 | | break; |
3022 | | |
3023 | | //Custom Job End |
3024 | | >>>>>>> .r18 |
| 2836 | |
3516 | | <<<<<<< .mine |
3517 | | ======= |
3518 | | //Custom Jobs (blackmagic) |
3519 | | |
3520 | | case AD_PWBLIND: // Adept Power Word: Blind [Brain] |
3521 | | if(!tsc->data[type]) { |
3522 | | clif_skill_nodamage(src, bl, skillid, skilllv,1); |
3523 | | if(sc_start(bl, type,(30 + skilllv * 10 + (status_get_lv(src) - sstatus->int_)/5), |
3524 | | skilllv, skill_get_time(skillid,skilllv))) |
3525 | | { |
3526 | | if(dstmd) mob_unlocktarget(dstmd,tick); //Removes current target |
3527 | | clif_specialeffect(bl, 379, AREA); //379.Soul Drain (2nd Part) |
3528 | | break; |
3529 | | } |
3530 | | } else clif_skill_fail(sd,skillid,0,0); |
3531 | | break; |
3532 | | |
3533 | | case AD_PWFEAR: // Adept Power Word: Fear [Brain] |
3534 | | if(!tsc->data[type]) { |
3535 | | clif_skill_nodamage(src, bl, skillid, skilllv,1); |
3536 | | if(dstsd) |
3537 | | type = SC_CONFUSION; //Players cant be affected by SC_FEAR |
3538 | | if(sc_start(bl, type, (30 + skilllv * 10), skilllv, skill_get_time(skillid,skilllv))) |
3539 | | { |
3540 | | clif_specialeffect(bl, 372, AREA); //372.Death |
3541 | | unit_escape(bl, bl, 30); |
3542 | | } |
3543 | | } else clif_skill_fail(sd,skillid,0,0); |
3544 | | break; |
3545 | | case WL_HOWLOFPAIN: // Warlock Howl of Pain [Brain] |
3546 | | //These must be here first or else the code wont execute them. |
3547 | | clif_specialeffect(src, 670, AREA); // Monster skill SCREAM effect on caster (no sound) |
3548 | | clif_soundeffectall(bl, "wraith_die.wav", 0, AREA); //Wraith Laugh Sound |
3549 | | if (flag & 1) { |
3550 | | //Check if target is a living creature AND a valid enemy |
3551 | | if (battle_check_target(src, bl, BCT_ENEMY) && battle_check_living(tstatus->race,tstatus->def_ele)) |
3552 | | { |
3553 | | if(sc_start(bl,type,10+skilllv*10,skilllv,skill_get_time(skillid,skilllv))) |
3554 | | { |
3555 | | if(dstmd) //PROVOKE Effect on mobs |
3556 | | mob_target(dstmd,src,skill_get_range2(src,skillid,skilllv)); |
3557 | | // Breaks Frozen and Sleep status |
3558 | | if(tsc && tsc->count){ |
3559 | | if(tsc->data[SC_FREEZE]) |
3560 | | status_change_end(bl,SC_FREEZE,-1); |
3561 | | if(tsc->data[SC_SLEEP]) |
3562 | | status_change_end(bl,SC_SLEEP,-1); |
3563 | | } |
3564 | | clif_emotion(bl,6); //anger emote on target |
3565 | | break; |
3566 | | } else { //What will happen if the status fail: |
3567 | | { |
3568 | | if (sd) //If is a player |
3569 | | clif_skill_fail(sd,skillid,0,0); |
3570 | | map_freeblock_unlock(); //Else is a mob |
3571 | | return 0; |
3572 | | } |
3573 | | unit_skillcastcancel(bl, 2); //In any case, will cancel casting |
3574 | | } |
3575 | | } |
3576 | | } else { |
3577 | | map_foreachinrange(skill_area_sub, src, |
3578 | | skill_get_splash(skillid, skilllv), BL_CHAR, |
3579 | | src, skillid, skilllv, tick, flag|BCT_ENEMY|1, |
3580 | | skill_castend_nodamage_id); |
3581 | | clif_skill_nodamage(src, bl, skillid, skilllv, 1); |
3582 | | map_freeblock_unlock(); |
3583 | | return 1; |
3584 | | } |
3585 | | break; |
3586 | | case WL_HOWLOFTERROR: // Warlock Howl of Terror [Brain] |
3587 | | if (flag & 1) { |
3588 | | int rate; |
3589 | | //Check if target is a living creature AND a valid enemy |
3590 | | if (battle_check_target(src, bl, BCT_ENEMY) |
3591 | | && battle_check_living(tstatus->race,tstatus->def_ele)) { |
3592 | | rate = 10 + skilllv*5 + pc_checkskill(sd,AD_PWFEAR)*3; |
3593 | | if(dstsd) { |
3594 | | rate -= 10; // 10% less chance on players |
3595 | | type = SC_CONFUSION; //Players cant be affected by SC_FEAR |
3596 | | } |
3597 | | if(sc_start(bl,type,rate,skilllv,skill_get_time(skillid,skilllv))) |
3598 | | clif_specialeffect(bl, 372, AREA); //Same as PW: Fear |
3599 | | } |
3600 | | } else { |
3601 | | map_foreachinrange(skill_area_sub, src, |
3602 | | skill_get_splash(skillid, skilllv), BL_CHAR, |
3603 | | src, skillid, skilllv, tick, flag|BCT_ENEMY|1, |
3604 | | skill_castend_nodamage_id); |
3605 | | clif_skill_nodamage(src, bl, skillid, skilllv, 1); |
3606 | | } |
3607 | | clif_specialeffect(src, 668, AREA); // Monster skill SCREAM effect on caster (with sound) |
3608 | | break; |
3609 | | >>>>>>> .r18 |
3718 | | <<<<<<< .mine |
3719 | | |
3720 | | ======= |
3721 | | //Custom Jobs (blackmagic) |
3722 | | case NC_DARKMOON: //Necro Dark Moon [Brain] |
3723 | | if (flag&1) { |
3724 | | //Check my enemies |
3725 | | if (battle_check_target(src, bl, BCT_ENEMY) && |
3726 | | battle_check_living(tstatus->race,tstatus->def_ele)) |
3727 | | { |
3728 | | if(sc_start(bl,SC_BLIND,50,skilllv,skill_get_time(skillid,skilllv))) |
3729 | | clif_specialeffect(bl, 580, AREA); //Box of Rain effect on target |
3730 | | } |
3731 | | else { //Now my Party members |
3732 | | if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { |
3733 | | clif_skill_nodamage(bl,bl,skillid,skilllv, |
3734 | | sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); |
3735 | | clif_specialeffect(bl, 521, AREA); //Red Flashing Aura Sprite effect on target |
3736 | | } else if (sd) { |
3737 | | party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), |
3738 | | src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); |
3739 | | } |
3740 | | } |
3741 | | } else { |
3742 | | map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, |
3743 | | src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); |
3744 | | clif_skill_nodamage(src, bl, skillid, skilllv, 1); |
3745 | | } |
3746 | | clif_specialeffect(src, 407, AREA); //Soul Change Effect on caster |
3747 | | clif_soundeffectall(bl, "se_wolf1.wav", 0, AREA); //Wolf Howl Sound |
3748 | | break; |
3749 | | case NC_REQUIEM: //Necro Requiem [Brain] |
3750 | | if (flag&1) { |
3751 | | //Check my enemies |
3752 | | if (battle_check_target(src, bl, BCT_ENEMY) && |
3753 | | battle_check_living(tstatus->race,tstatus->def_ele)) |
3754 | | { |
3755 | | if(sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))) |
3756 | | clif_specialeffect(bl, 578, AREA); //Box of Curse effect on target |
3757 | | } |
3758 | | else { //Now my Party members |
3759 | | if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { |
3760 | | clif_skill_nodamage(bl,bl,skillid,skilllv, |
3761 | | sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); |
3762 | | clif_specialeffect(bl, 572, AREA); //Warmth Soul effect on target |
3763 | | } else if (sd) { |
3764 | | party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), |
3765 | | src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); |
3766 | | } |
3767 | | } |
3768 | | } else { |
3769 | | map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, |
3770 | | src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); |
3771 | | clif_skill_nodamage(src, bl, skillid, skilllv, 1); |
3772 | | } |
3773 | | int rnds = rand()%3; |
3774 | | switch(rnds) { |
3775 | | case 1: |
3776 | | clif_soundeffectall(bl, "chant1.wav", 0, AREA); //Chanting Sound |
3777 | | break; |
3778 | | case 2: |
3779 | | clif_soundeffectall(bl, "chant2.wav", 0, AREA); //Chanting Sound |
3780 | | break; |
3781 | | case 3: |
3782 | | clif_soundeffectall(bl, "chant3.wav", 0, AREA); //Chanting Sound |
3783 | | break; |
3784 | | } |
3785 | | break; |
3786 | | >>>>>>> .r18 |
| 3363 | |
4206 | | ======= |
4207 | | //Custom Jobs (blackmagic) |
4208 | | |
4209 | | case AD_LUST: // Adept Blood Lust [Brain] |
4210 | | clif_specialeffect(src, 220, AREA); //Berserk Pot effect |
4211 | | clif_specialeffect(src, 455, AREA); //Red Lightnings |
4212 | | clif_skill_nodamage(src,bl,skillid,skilllv, |
4213 | | sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); |
4214 | | break; |
4215 | | case NC_DECREPIFY: //Necro Decrepify [Brain] |
4216 | | if(battle_check_living(tstatus->race,tstatus->def_ele)){ |
4217 | | clif_specialeffect(bl, 403, AREA); //Mind Breaker Effect on target |
4218 | | clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster |
4219 | | clif_skill_nodamage(src,bl,skillid,skilllv, |
4220 | | sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); |
4221 | | } |
4222 | | else clif_skill_fail(sd,skillid,0,0); |
4223 | | break; |
4224 | | case WL_CURSEWEAKNESS: // Warlock Curse of Weakness [Brain] |
4225 | | clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite effect on target |
4226 | | clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster |
4227 | | clif_skill_nodamage(src,bl,skillid,skilllv, |
4228 | | sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); |
4229 | | break; |
4230 | | case WL_CURSEEXHAUST: // Warlock Curse of Exhaustion [Brain] |
4231 | | clif_specialeffect(bl, 135, AREA); //Ice Breaking effect on target |
4232 | | clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster |
4233 | | clif_skill_nodamage(src,bl,skillid,skilllv, |
4234 | | sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); |
4235 | | break; |
4236 | | case WL_CURSETONGUES: // Warlock Curse of Tongues [Brain] |
4237 | | clif_specialeffect(bl, 72, AREA); //Spinning Lights effect on target |
4238 | | clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster |
4239 | | clif_skill_nodamage(src,bl,skillid,skilllv, |
4240 | | sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); |
4241 | | break; |
4242 | | case WL_CURSEDOOM: // Warlock Curse of Doom (temp) [Brain] |
4243 | | if(!tsc->data[type]) { |
4244 | | clif_specialeffect(bl, 196, AREA); //Small Curse Reaper effect on target |
4245 | | clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster |
4246 | | clif_skill_nodamage(src,bl,skillid,skilllv, |
4247 | | sc_start4(bl,type,100, |
4248 | | skilllv,skillid,src->id,skill_get_time(skillid,skilllv),1000)); |
4249 | | } else clif_skill_fail(sd,skillid,0,0); |
4250 | | break; |
4251 | | case WL_OVERWHELMING: // Warlock Overwhelming Evil [Brain] |
4252 | | clif_specialeffect(src, 348, AREA); //1000 Blades Trespassing effect on caster |
4253 | | clif_skill_nodamage(src,bl,skillid,skilllv, |
4254 | | sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); |
4255 | | break; |
4256 | | |
4257 | | //Custom Job End |
4258 | | >>>>>>> .r18 |
6866 | | ======= |
6867 | | //Custom Jobs (blackmagic) |
6868 | | case AD_FAMILIAR: // Adept Summon Familiar [Brain] |
6869 | | if( sd ) |
6870 | | { |
6871 | | int id; |
6872 | | int mob_class; |
6873 | | struct mob_data* md; |
6874 | | |
6875 | | mob_class = pc_readglobalreg(sd, "ADEPT_FAMILIAR"); |
6876 | | if( mob_class == 0 ) |
6877 | | { |
6878 | | mob_class = mob_get_random_id(4, 0x1, 0); |
6879 | | pc_setglobalreg(sd, "ADEPT_FAMILIAR", mob_class); |
6880 | | } |
6881 | | id = mob_once_spawn(sd,src->m,src->x,src->y,"--en--",mob_class,1,""); |
6882 | | md = (struct mob_data *)map_id2bl(id); |
6883 | | if( md != NULL ) |
6884 | | { |
6885 | | md->master_id = sd->bl.id; |
6886 | | md->special_state.ai = 1; |
6887 | | md->status.mode = md->status.mode|MD_AGGRESSIVE; |
6888 | | status_calc_mob(md,0); //Recalc their stats based on passive bonus |
6889 | | md->status.hp = md->status.max_hp; //Must be here or the code wont update it |
6890 | | // @showsummon command implementation [Brainstorm] |
6891 | | if(sd->state.showsummon){ |
6892 | | char output[256]; |
6893 | | sprintf(output, |
6894 | | "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", |
6895 | | md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); |
6896 | | clif_disp_onlyself(sd,output,strlen(output)); |
6897 | | sprintf(output, |
6898 | | "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", |
6899 | | 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); |
6900 | | clif_disp_onlyself(sd,output,strlen(output)); |
6901 | | } |
6902 | | md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); |
6903 | | } |
6904 | | } |
6905 | | break; |
6906 | | case NC_SKELETON: // Raise Skeleton [Brain] |
6907 | | case NC_ARCHER: // Raise Archer Skeleton |
6908 | | case NC_ZOMBIE: // Raise Zombie |
6909 | | case NC_MUMMY: // Raise Mummy |
6910 | | case NC_GHOST: // Raise Ghost |
6911 | | case NC_SHADOW: // Raise Shadow |
6912 | | case NC_WRAITH: // Raise Wraith |
6913 | | if( sd ) |
6914 | | { |
6915 | | static const int mob_skeleton[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General |
6916 | | static const int mob_archer[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier |
6917 | | static const int mob_zombie[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master |
6918 | | static const int mob_mummy[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy |
6919 | | static const int mob_ghost[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror |
6920 | | static const int mob_shadow[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan |
6921 | | static const int mob_wraith[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead |
6922 | | int id; |
6923 | | int mob_class; |
6924 | | struct mob_data *md; |
6925 | | >>>>>>> .r18 |
6926 | | |
6927 | | <<<<<<< .mine |
| 6331 | |
6966 | | ======= |
6967 | | switch( skillid ) |
6968 | | { |
6969 | | case NC_SKELETON: mob_class = mob_skeleton[skilllv-1]; break; |
6970 | | case NC_ARCHER: mob_class = mob_archer[skilllv-1]; break; |
6971 | | case NC_ZOMBIE: mob_class = mob_zombie[skilllv-1]; break; |
6972 | | case NC_MUMMY: mob_class = mob_mummy[skilllv-1]; break; |
6973 | | case NC_GHOST: mob_class = mob_ghost[skilllv-1]; break; |
6974 | | case NC_SHADOW: mob_class = mob_shadow[skilllv-1]; break; |
6975 | | case NC_WRAITH: mob_class = mob_wraith[skilllv-1]; break; |
6976 | | default: |
6977 | | mob_class = 1002; // poring |
6978 | | ShowDebug("skill_castend_pos2: undefined skill #%d used to raise mobs, defaulting to poring\n"); |
6979 | | break; |
6980 | | } |
6981 | | id = mob_once_spawn(sd,src->m,src->x,src->y,"--ja--",mob_class,1,""); |
6982 | | if((md=(struct mob_data *)map_id2bl(id))) |
6983 | | { |
6984 | | md->master_id=sd->bl.id; |
6985 | | md->special_state.ai=1; |
6986 | | md->status.mode=md->db->status.mode|MD_AGGRESSIVE; |
6987 | | status_calc_mob(md,0); //Recalc their stats based on passive bonus |
6988 | | md->status.hp = md->status.max_hp; //Must be here or the code wont update it |
6989 | | // @showsummon command implementation [Brainstorm] |
6990 | | if(sd->state.showsummon){ |
6991 | | char output[256]; |
6992 | | sprintf(output, |
6993 | | "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", |
6994 | | md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); |
6995 | | clif_disp_onlyself(sd,output,strlen(output)); |
6996 | | sprintf(output, |
6997 | | "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", |
6998 | | 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); |
6999 | | clif_disp_onlyself(sd,output,strlen(output)); |
7000 | | } |
7001 | | md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); |
7002 | | } |
7003 | | } |
7004 | | break; |
7005 | | |
7006 | | |
7007 | | //Custom Job End |
7008 | | >>>>>>> .r18 |
9156 | | ======= |
9157 | | //Custom Jobs (blackmagic) |
9158 | | case AD_FAMILIAR: //Adept Familiar [Flavio] |
9159 | | { |
9160 | | short familiar[1] ={ pc_readglobalreg(sd, "ADEPT_FAMILIAR") }; |
9161 | | int maxcount = skill_get_maxcount(skill,lv); |
9162 | | int count = 0; |
9163 | | count = mob_countslave_class(&sd->bl, 1, familiar ); |
9164 | | if( count >= maxcount ) |
9165 | | { |
9166 | | clif_skill_fail(sd,skill,0,0); |
9167 | | return 0; |
9168 | | } |
9169 | | } |
9170 | | break; |
9171 | | case NC_SKELETON: // Raise Skeleton [Brain] |
9172 | | case NC_ARCHER: // Raise Archer Skeleton |
9173 | | case NC_ZOMBIE: // Raise Zombie |
9174 | | case NC_MUMMY: // Raise Mummy |
9175 | | case NC_GHOST: // Raise Ghost |
9176 | | case NC_SHADOW: // Raise Shadow |
9177 | | case NC_WRAITH: // Raise Wraith |
9178 | | {// corrigido o limite de spawns [Flavio] |
9179 | | short summon1[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General |
9180 | | short summon2[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier |
9181 | | short summon3[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master |
9182 | | short summon4[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy |
9183 | | short summon5[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror |
9184 | | short summon6[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan |
9185 | | short summon7[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead |
9186 | | int maxcount = skill_get_maxcount(skill,lv); |
9187 | | int count = 0; |
9188 | | switch( skill ) |
9189 | | { |
9190 | | case NC_SKELETON: count = mob_countslave_class(&sd->bl, 5, summon1); break; |
9191 | | case NC_ARCHER: count = mob_countslave_class(&sd->bl, 5, summon2); break; |
9192 | | case NC_ZOMBIE: count = mob_countslave_class(&sd->bl, 5, summon3); break; |
9193 | | case NC_MUMMY: count = mob_countslave_class(&sd->bl, 5, summon4); break; |
9194 | | case NC_GHOST: count = mob_countslave_class(&sd->bl, 5, summon5); break; |
9195 | | case NC_SHADOW: count = mob_countslave_class(&sd->bl, 5, summon6); break; |
9196 | | case NC_WRAITH: count = mob_countslave_class(&sd->bl, 5, summon7); break; |
9197 | | } |
9198 | | if( count >= maxcount ) |
9199 | | { |
9200 | | clif_skill_fail(sd,skill,0,0); |
9201 | | return 0; |
9202 | | } |
9203 | | } |
9204 | | break; |
9205 | | //Custom Job End |
9206 | | >>>>>>> .r18 |