Legend:
- Unmodified
- Added
- Removed
-
src/map/pc.c
r1 r10 754 754 if (battle_config.disp_zeny) 755 755 sd->state.showzeny = 1; 756 //Custom Job (blackmagick) 757 //Vanaheim settings [Brainstorm] 758 if (battle_config.disp_summon_stats) // Battle Flag to Show Summoned Monster Stats [Brain] 759 sd->state.showsummon = 1; 756 760 757 761 if (!(battle_config.display_skill_fail&2)) … … 3887 3891 class_ = MAPID_SUMMER; 3888 3892 break; 3893 //Custom Jobs (blackmagic) 3894 + case JOB_NECROMANCER: // Necromancer [Brain] 3895 class_ |= JOBL_2_1; 3896 class_ |= MAPID_ADEPT; 3897 break; 3898 case JOB_WARLOCK: // Warlock [Brain] 3899 class_ |= JOBL_2_2; 3900 case JOB_ADEPT: // Adept [Brain] 3901 class_ |= MAPID_ADEPT; 3902 break; 3903 //Custom Job End 3889 3904 default: 3890 3905 return -1; … … 3910 3925 case MAPID_XMAS: return JOB_XMAS; 3911 3926 case MAPID_SUMMER: return JOB_SUMMER; 3927 //Custom Jobs (blackmagic) 3928 case MAPID_ADEPT: return JOB_ADEPT; // Adept [Brain] 3929 //Custom Job End 3930 3912 3931 //2_1 classes 3913 3932 case MAPID_SUPER_NOVICE: return JOB_SUPER_NOVICE; … … 3919 3938 case MAPID_ASSASSIN: return JOB_ASSASSIN; 3920 3939 case MAPID_STAR_GLADIATOR: return JOB_STAR_GLADIATOR; 3940 //Custom Jobs (blackmagic) 3941 case MAPID_NECROMANCER: return JOB_NECROMANCER; // Necromancer [Brain] 3942 //Custom Job End 3943 3921 3944 //2_2 classes 3922 3945 case MAPID_CRUSADER: return JOB_CRUSADER; … … 3927 3950 case MAPID_ROGUE: return JOB_ROGUE; 3928 3951 case MAPID_SOUL_LINKER: return JOB_SOUL_LINKER; 3952 //Custom Jobs (blackmagic) 3953 case MAPID_WARLOCK: return JOB_WARLOCK; // Warlock [Brain] 3954 //Custom Job End 3955 3929 3956 //1-1: advanced 3930 3957 case MAPID_NOVICE_HIGH: return JOB_NOVICE_HIGH; … … 4103 4130 case JOB_NINJA: 4104 4131 return msg_txt(620); 4132 //Custom Jobs (blackmagic) 4133 case JOB_ADEPT: // Adept [Brain] 4134 return msg_txt(1000); 4135 case JOB_NECROMANCER: // Necromancer [Brain] 4136 return msg_txt(1001); 4137 case JOB_WARLOCK: // Warlock [Flavio] 4138 return msg_txt(1002); 4139 //Custom Job End 4105 4140 4106 4141 default: -
src/map/pc.h
r1 r10 114 114 unsigned short autolootid; // [Zephyrus] 115 115 unsigned noks : 3; // [Zeph Kill Steal Protection] 116 //Custom Jobs (blackmagic) 117 118 //Vanaheim settings [Brainstorm] 119 unsigned showsummon :1; //Show summoned monster stats [Brainstorm] 120 121 //Custom Job End 116 122 unsigned god :1; //[Sketchy] 117 123 unsigned demon :1; //[Sketchy] -
src/map/skill.c
r1 r10 42 42 #define GD_SKILLRANGEMIN 900 43 43 #define GD_SKILLRANGEMAX GD_SKILLRANGEMIN+MAX_GUILDSKILL 44 #define HM_SKILLRANGEMIN 80044 #define HM_SKILLRANGEMIN 1100 //Custom Jobs (blackmagic)//Custom Job End 45 45 #define HM_SKILLRANGEMAX HM_SKILLRANGEMIN+MAX_HOMUNSKILL 46 46 … … 821 821 sc_start(bl,SC_CRITICALWOUND,100,skilllv,skill_get_time2(skillid,skilllv)); 822 822 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 823 847 } 824 848 … … 1018 1042 status_heal(src, 0, status_get_lv(bl)*(95+15*rate)/100, 2); 1019 1043 } 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 1021 1056 if(dstsd && attack_type&BF_WEAPON) 1022 1057 { //Counter effects. … … 2110 2145 } 2111 2146 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 2112 2183 default: 2113 2184 skill_attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag); … … 2324 2395 skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); 2325 2396 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 2326 2416 2327 2417 case LK_JOINTBEAT: // decide the ailment first (affects attack damage and effect) … … 2659 2749 skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 2660 2750 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 2661 2832 2662 2833 case NPC_MAGICALATTACK: … … 2864 3035 if(status_isdead(src)) 2865 3036 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) 2868 3042 return 1; 2869 3043 //Custom Job End 2870 3044 tstatus = status_get_status_data(bl); 2871 3045 sstatus = status_get_status_data(src); … … 2891 3065 } 2892 3066 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 2893 3084 case NPC_SMOKING: //Since it is a self skill, this one ends here rather than in damage_id. [Skotlex] 2894 3085 return skill_castend_damage_id (src, bl, skillid, skilllv, tick, flag); … … 2920 3111 if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM)) 2921 3112 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 2922 3121 if (sd) { 2923 3122 if ((i = pc_skillheal_bonus(sd, skillid))) … … 2955 3154 } 2956 3155 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 2958 3177 case PR_REDEMPTIO: 2959 3178 if (sd && !(flag&1)) { … … 2988 3207 2989 3208 case ALL_RESURRECTION: 3209 //Custom Jobs (blackmagic) 3210 case NC_DEATHPACT: // Necro Death Pact [Brain] 3211 //Custom Job End 2990 3212 if(sd && map_flag_gvg(bl->m)) 2991 3213 { //No reviving in WoE grounds! … … 3005 3227 case 3: per=50; break; 3006 3228 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 3007 3232 } 3008 3233 if(dstsd && dstsd->special_state.restart_full_recover) … … 3011 3236 { 3012 3237 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 3013 3245 if(sd && dstsd && battle_config.resurrection_exp > 0) 3014 3246 { … … 3029 3261 } 3030 3262 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 3031 3356 3032 3357 case AL_DECAGI: … … 3046 3371 } 3047 3372 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 3048 3440 3049 3441 case PR_LEXDIVINA: … … 3348 3740 case NPC_DEFENDER: 3349 3741 case NPC_MAGICMIRROR: 3742 //Custom Jobs (blackmagic) 3743 case ALL_ATFIELD: //AT Field [Brain] 3744 //Custom Job End 3350 3745 clif_skill_nodamage(src,bl,skillid,skilllv, 3351 3746 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 3352 3747 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 3353 3799 case MG_SIGHT: 3354 3800 case AL_RUWACH: … … 3567 4013 clif_skill_nodamage(src,bl,skillid,skilllv,i?1:0); 3568 4014 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 3569 4041 3570 4042 case AC_MAKINGARROW: … … 5635 6107 src->m, x-i, y-i, x+i,y+i,BL_SKILL); 5636 6108 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 5637 6117 5638 6118 case MG_SAFETYWALL: … … 5794 6274 md->deletetimer = add_timer (gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, md->bl.id, 0); 5795 6275 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 5799 6394 5800 6395 // Slim Pitcher [Celest] … … 6209 6804 switch(skillid) 6210 6805 { 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 6212 6811 case MG_SAFETYWALL: 6213 6812 val2=skilllv+1; … … 6806 7405 } 6807 7406 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 6809 7416 clif_skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1); 6810 7417 status_heal(bl, heal, 0, 0); … … 7708 8315 } 7709 8316 break; 7710 case MO_FINGEROFFENSIVE: //æ 匟8317 case MO_FINGEROFFENSIVE: //æEŒŸ 7711 8318 case GS_FLING: 7712 8319 if (sd->spiritball > 0 && sd->spiritball < spiritball) { … … 7864 8471 } 7865 8472 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 7866 8522 case WZ_FIREPILLAR: // celest 7867 8523 if (lv <= 5) // no gems required at level 1-5 … … 8044 8700 8045 8701 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倱æéç¥ */ 8048 8704 return 0; 8049 8705 } 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倱æéç¥ */ 8052 8708 return 0; 8053 8709 } … … 8296 8952 status_change_end(bl, SC_SUFFRAGIUM, -1); 8297 8953 } 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 8298 8965 if (sc->data[SC_MEMORIZE]) { 8299 8966 time>>=1; … … 11091 11758 return 0; 11092 11759 } 11760 //Custom Jobs (blackmagic) 11761 int 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 -
src/map/skill.h
r1 r10 320 320 321 321 int skill_arrow_create( struct map_session_data *sd,int nameid); 322 323 //Custom Jobs (blackmagic) 324 int skill_additem(struct block_list* src, struct block_list *bl, int itemid, int amount); // Item giver func [Brain] 325 //Custom Job End 322 326 323 327 // mobXLÌœß … … 956 960 957 961 ALL_INCCARRY = 681, 962 963 //Custom Jobs (blackmagic) 964 AD_PWBLIND = 700, // Custom Skills [Brainstorm] 965 AD_PWFEAR, 966 AD_DARKHEAL, 967 AD_BLOODPACT, 968 AD_LUST, 969 AD_FERVOR, 970 AD_PROFANE, 971 AD_DARKFAITH, 972 AD_FAMILIAR, 973 AD_SUMMONS, 974 975 NC_PHYLACTERY, //710 976 NC_UNDEAD, 977 NC_DEATHHAND, 978 NC_GHOULTOUCH, 979 NC_SKELETON, 980 NC_ZOMBIE, 981 NC_ARCHER, 982 NC_MUMMY, 983 NC_GHOST, 984 NC_SHADOW, 985 NC_WRAITH, 986 NC_REQUIEM, 987 NC_DARKMOON, 988 NC_PWSUFFER, 989 NC_DECREPIFY, 990 NC_DRAINLIFE, 991 NC_DEATHPACT, 992 993 ALL_ATFIELD, //GM SKILL 994 995 WL_CURSETONGUES =732, //732 996 WL_CURSEDOOM, 997 WL_CURSEEXHAUST, 998 WL_CURSEWEAKNESS, 999 WL_SEARING, 1000 WL_HELLFIRE, 1001 WL_CONFLAGRATE, 1002 WL_IMMOLATE, 1003 WL_SHADOWBOLT, 1004 WL_SHADOWBURN, 1005 WL_HOWLOFPAIN, 1006 WL_DEMONOLOGY, 1007 WL_HOWLOFTERROR, 1008 WL_PWAGONY, 1009 WL_OVERWHELMING, 1010 WL_SOULSTEAL, 1011 WL_DRAINSOUL, 1012 WL_CORRUPTION, //749 1013 // STOP! Cant use 800 (homun skills) NOR 900 (guild skills) 1014 1015 //Custom Job End 1016 958 1017 959 1018 KN_CHARGEATK = 1001, -
src/map/status.c
r1 r10 130 130 set_sc( NPC_SILENCEATTACK , SC_SILENCE , SI_BLANK , SCB_NONE ); 131 131 set_sc( DC_WINKCHARM , SC_CONFUSION , SI_BLANK , SCB_NONE ); 132 //Custom Jobs (blackmagic) 133 set_sc( AD_PWFEAR , SC_FEAR , SI_HALLUCINATION , SCB_SPEED ); //Fear Status by [Brainstorm] 134 //Custom Job End 132 135 set_sc( NPC_BLINDATTACK , SC_BLIND , SI_BLANK , SCB_HIT|SCB_FLEE ); 133 136 set_sc( LK_HEADCRUSH , SC_BLEEDING , SI_BLEEDING , SCB_REGEN ); … … 407 410 set_sc( GD_BATTLEORDER , SC_BATTLEORDERS , SI_BLANK , SCB_STR|SCB_INT|SCB_DEX ); 408 411 set_sc( GD_REGENERATION , SC_REGENERATION , SI_BLANK , SCB_REGEN ); 412 //Custom Jobs (blackmagic) 413 // Custom Jobs Skills [Brain] 414 add_sc( AD_PWBLIND , SC_BLIND); 415 add_sc( AD_PWFEAR , SC_FEAR); 416 set_sc( AD_LUST , SC_LUST , SI_JOINTBEAT , SCB_ASPD|SCB_BATK|SCB_WATK|SCB_REGEN); 417 418 set_sc( NC_DECREPIFY , SC_DECREPIFY , SI_BLEEDING , SCB_SPEED|SCB_BATK|SCB_WATK|SCB_DEF2|SCB_MDEF2); 419 set_sc( NC_DARKMOON , SC_DARKMOON , SI_MOON_COMFORT , SCB_FLEE|SCB_HIT); 420 add_sc( NC_DARKMOON , SC_BLIND); 421 set_sc( NC_REQUIEM , SC_REQUIEM , SI_KAIZEL , SCB_BATK|SCB_WATK); 422 add_sc( NC_GHOULTOUCH , SC_POISON); 423 set_sc( NC_PWSUFFER , SC_SUFFER , SI_BLANK , SCB_DEF|SCB_DEF2); 424 set_sc( NC_DEATHPACT , SC_DEATHPACT , SI_BIOMOBTRICKDEAD , SCB_DEF_ELE|SCB_REGEN); 425 426 set_sc( WL_SEARING , SC_SEARING , SI_BLANK , SCB_NONE); 427 set_sc( WL_IMMOLATE , SC_IMMOLATE , SI_BLANK , SCB_NONE); 428 add_sc( WL_SHADOWBURN , SC_STUN); 429 set_sc( WL_PWAGONY , SC_AGONY , SI_BLANK , SCB_MDEF|SCB_MDEF2); 430 set_sc( WL_CURSETONGUES , SC_CURSETONGUES , SI_SLOWCAST , SCB_NONE); 431 set_sc( WL_CURSEDOOM , SC_DOOM , SI_BLANK , SCB_NONE); 432 set_sc( WL_CURSEWEAKNESS , SC_CURSEWEAKNESS , SI_STRIPWEAPON , SCB_BATK|SCB_WATK); 433 set_sc( WL_CURSEEXHAUST , SC_CURSEEXHAUST , SI_CRITICALWOUND , SCB_DEF|SCB_MDEF); 434 add_sc( WL_HOWLOFTERROR , SC_FEAR); 435 set_sc( WL_HOWLOFPAIN , SC_PROVOKE , SI_PROVOKE , SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK); 436 set_sc( WL_OVERWHELMING , SC_OVERWHELMING , SI_ENERGYCOAT , SCB_DEF|SCB_MDEF|SCB_MATK|SCB_REGEN|SCB_DEF_ELE); 437 438 set_sc( ALL_ATFIELD , SC_ATFIELD , SI_UTSUSEMI ,SCB_NONE); 439 //Custom Job End 409 440 410 441 // Storing the target job rather than simply SC_SPIRIT simplifies code later on. … … 650 681 status_change_end(target,SC_CLOAKING,-1); 651 682 status_change_end(target,SC_CHASEWALK,-1); 683 status_change_end(target,SC_FEAR, -1);//Custom Jobs (blackmagic) 652 684 if ((sce=sc->data[SC_ENDURE]) && !sce->val4) { 653 685 //Endure count is only reduced by non-players on non-gvg maps. … … 1340 1372 if (md->master_id && md->special_state.ai>1) 1341 1373 flag|=16; 1374 1375 //Custom Jobs (blackmagic) 1376 if (md->master_id && md->special_state.ai) 1377 flag|=32; //Adept/Necro/Warlock Summon Stats Bonus [Brainstorm] 1378 //Custom Job End 1342 1379 1343 1380 if (!flag) … … 1458 1495 } 1459 1496 1497 //Custom Jobs (blackmagic) 1498 //Summon Bonus from Skills [Brainstorm] 1499 if(flag&32) 1500 { 1501 mbl = map_id2bl(md->master_id); 1502 if(mbl) 1503 { 1504 struct unit_data *ud = unit_bl2ud(mbl); 1505 //Remove special AI when this is used by regular mobs. 1506 if (mbl->type == BL_MOB && !((TBL_MOB*)mbl)->special_state.ai) 1507 md->special_state.ai = 0; 1508 1509 int master_lv = status_get_lv(mbl); 1510 int skill_mastery = pc_checkskill((TBL_PC*)mbl,AD_SUMMONS); 1511 int undead_mastery = pc_checkskill((TBL_PC*)mbl,NC_UNDEAD); 1512 1513 if (ud->skillid == AD_FAMILIAR) 1514 { 1515 status->max_hp += (skill_mastery*10) + (master_lv*10); 1516 status->str += (master_lv) + (skill_mastery); 1517 status->dex += (master_lv) + (skill_mastery); 1518 status->agi += (master_lv) + (skill_mastery); 1519 status->int_ += (master_lv) + (skill_mastery); 1520 status->vit += (master_lv) + (skill_mastery); 1521 status->luk += (master_lv) + (skill_mastery); 1522 status->rhw.atk += (skill_mastery*3) 1523 + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 1524 status->rhw.atk2 += (skill_mastery*3) 1525 + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 1526 status->speed -= skill_mastery; 1527 status->def += (master_lv)/10 + (skill_mastery); 1528 status->mdef += (master_lv)/10 + (skill_mastery); 1529 //These are not automatically recalculated 1530 status->hit += (master_lv*2) + (skill_mastery); 1531 status->flee += (master_lv*2) + (skill_mastery); 1532 status->def2 += (master_lv) + (skill_mastery); 1533 status->mdef2 += (master_lv) + (skill_mastery); 1534 } 1535 else if(status->race==RC_UNDEAD) 1536 { 1537 status->max_hp += (undead_mastery*10) + (master_lv*2); 1538 status->str += (undead_mastery*3) + (skill_mastery); 1539 status->dex += (undead_mastery*3) + (skill_mastery); 1540 status->agi += (undead_mastery*3) + (skill_mastery); 1541 status->int_ += (undead_mastery*3) + (skill_mastery); 1542 status->vit += (undead_mastery*3) + (skill_mastery); 1543 status->luk += (undead_mastery*3) + (skill_mastery); 1544 status->rhw.atk += (undead_mastery*3) + (skill_mastery*3) 1545 + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 1546 status->rhw.atk2 += (undead_mastery*3) + (skill_mastery*3) 1547 + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 1548 status->speed -= undead_mastery; 1549 status->def += undead_mastery; 1550 status->mdef += undead_mastery; 1551 //These are not automatically recalculated 1552 status->hit += (undead_mastery*3) + (skill_mastery); 1553 status->flee += (undead_mastery*3) + (skill_mastery); 1554 status->def2 += (undead_mastery*3) + (skill_mastery); 1555 status->mdef2 += (undead_mastery*3) + (skill_mastery); 1556 } 1557 } 1558 else ShowError("status_calc_mob: Monster summoned without a master at %s\n", map[md->bl.m].name); 1559 } 1560 //Custom Job End 1561 1460 1562 //Initial battle status 1461 1563 if (!first) … … 1705 1807 status->aspd_rate = 1000; 1706 1808 status->ele_lv = 1; 1707 status->race = RC_DEMIHUMAN; 1809 //Custom Jobs (blackmagic) 1810 status->race = RC_DEMIHUMAN;// This define players default race to DEMIHUMAN [Brain] 1811 if(pc_checkskill(sd,NC_PHYLACTERY)>0) status->def_ele = ELE_UNDEAD; //Phylactery turns you UNDEAD 1 instead of NEUTRAL 1812 //Custom Job End 1813 1708 1814 1709 1815 //zero up structures... … … 1996 2102 status->dex += skill; 1997 2103 2104 //Custom Jobs (blackmagic) 2105 2106 if((skill=pc_checkskill(sd,WL_DEMONOLOGY))>0) //Warlock Demonology [Brain] 2107 status->str += skill/2; //+1 str per 2 skill points 2108 //Custom Job End 2109 1998 2110 // Bonuses from cards and equipment as well as base stat, remember to avoid overflows. 1999 2111 i = status->str + sd->status.str + sd->param_bonus[0] + sd->param_equip[0]; … … 2033 2145 status->max_hp += skill*200; 2034 2146 2147 //Custom Jobs (blackmagic) 2148 if((skill=pc_checkskill(sd,AD_PROFANE))>0) // Adept Profane Soul [Brain] 2149 status->max_hp += status->max_hp * (skill*3)/100; 2150 //Custom Job End 2151 2035 2152 // Apply relative modifiers from equipment 2036 2153 if(sd->hprate < 0) … … 2061 2178 if((skill=pc_checkskill(sd,HW_SOULDRAIN))>0) 2062 2179 status->max_sp += status->max_sp * 2*skill/100; 2180 2181 //Custom Jobs (blackmagic) 2182 if((skill=pc_checkskill(sd,AD_PROFANE))>0) // Adept Profane Soul [Brain] 2183 status->max_sp += sd->status.max_sp * (skill*3)/100; 2184 //Custom Job End 2063 2185 2064 2186 // Apply relative modifiers from equipment … … 2155 2277 } 2156 2278 2279 //Custom Jobs (blackmagic) 2280 if((skill=pc_checkskill(sd,AD_FERVOR))>0) // Adept Unholy Fevor [Brain] 2281 status->hit += skill*2; 2282 //Custom Job End 2283 2157 2284 // ----- FLEE CALCULATION ----- 2158 2285 … … 2162 2289 if((skill=pc_checkskill(sd,MO_DODGE))>0) 2163 2290 status->flee += (skill*3)>>1; 2291 2292 //Custom Jobs (blackmagic) 2293 if((skill=pc_checkskill(sd,AD_FERVOR))>0) // Adept Unholy Fevor [Brain] 2294 status->flee += skill*2; 2295 //Custom Job End 2164 2296 2165 2297 // ----- EQUIPMENT-DEF CALCULATION ----- … … 2172 2304 status->def = cap_value(i, CHAR_MIN, CHAR_MAX); 2173 2305 } 2174 2306 //Custom Jobs (blackmagic) 2307 // Absolute modifiers from passive skills 2308 if((skill=pc_checkskill(sd,AD_DARKFAITH))>0) // Adept Dark Faith [Brain] 2309 status->mdef += 1*skill; 2310 //Custom Job End 2175 2311 if (!battle_config.weapon_defense_type && status->def > battle_config.max_def) 2176 2312 { … … 2295 2431 } 2296 2432 2433 2434 //Custom Jobs (blackmagic) 2435 if((skill=pc_checkskill(sd,AD_DARKFAITH))>0) // Adept Dark Faith [Brain] 2436 sd->subele[ELE_DARK] += skill*5; 2437 if((skill=pc_checkskill(sd,WL_DEMONOLOGY))>0 ){ //Warlock Demonology [Brain] 2438 skill = skill*5; 2439 sd->right_weapon.addrace[RC_DEMON]+=skill; 2440 sd->magic_addrace[RC_DEMON]+=skill; 2441 sd->subrace[RC_DEMON]+=skill; 2442 } 2443 if((pc_checkskill(sd,NC_PHYLACTERY))>0){ // Necro Phylactery [Brain] 2444 sd->subele[ELE_NEUTRAL] += 10; //And increases neutral resistance by 10% 2445 } 2446 //Custom Job End 2447 2297 2448 if(sc->count){ 2298 2449 if(sc->data[SC_CONCENTRATE]) … … 2317 2468 sd->subrace[RC_DEMON] += sc->data[SC_PROVIDENCE]->val2; 2318 2469 } 2470 2471 //Custom Jobs (blackmagic) 2472 if(sd->sc.data[SC_DEATHPACT]) //Necro Death Pact [Brain] 2473 sd->subele[ELE_NEUTRAL] += sd->sc.data[SC_DEATHPACT]->val2; 2474 //Custom Job End 2475 2319 2476 if(sc->data[SC_ARMOR_ELEMENT]) 2320 2477 { //This status change should grant card-type elemental resist. … … 2638 2795 || sc->data[SC_TRICKDEAD] 2639 2796 || sc->data[SC_BLEEDING] 2797 //Custom Jobs (blackmagic) 2798 || sc->data[SC_LUST] // Adept Blood Lust, stops hp regen [Brain] 2799 || sc->data[SC_DEATHPACT] // Necro Death Pact 2800 //Custom Job End 2640 2801 ) //No regen 2641 2802 regen->flag = 0; … … 2646 2807 || (sc->data[SC_EXPLOSIONSPIRITS] 2647 2808 && (!sc->data[SC_SPIRIT] || sc->data[SC_SPIRIT]->val2 != SL_MONK)) 2809 //Custom Jobs (blackmagic) 2810 || sc->data[SC_OVERWHELMING] // Warlock Overwhelming Evil, stops sp regen [Brain] 2811 //Custom Job End 2648 2812 ) //No natural SP regen 2649 2813 regen->flag &=~RGN_SP; … … 3414 3578 if(sc->data[SC_MADNESSCANCEL]) 3415 3579 batk += 100; 3580 //Custom Jobs (blackmagic) 3581 if(sc->data[SC_LUST]) // Adept Blood Lust [Brain] 3582 batk += batk * sc->data[SC_LUST]->val2/100; 3583 if(sc->data[SC_CURSEWEAKNESS]) // Warlock Curse of Weakness [Brain] 3584 batk -= batk * sc->data[SC_CURSEWEAKNESS]->val2/100; 3585 if(sc->data[SC_DECREPIFY]) // Necromancer Decrepify [Brain] 3586 if(sc->data[SC_DECREPIFY]->val2>=2) 3587 batk -= batk * 25/100; 3588 3589 //Custom Job End 3416 3590 return (unsigned short)cap_value(batk,0,USHRT_MAX); 3417 3591 } … … 3456 3630 if(sc->data[SC_STRIPWEAPON]) 3457 3631 watk -= watk * sc->data[SC_STRIPWEAPON]->val2/100; 3632 //Custom Jobs (blackmagic) 3633 if(sc->data[SC_LUST]) // Adept Blood Lust [Brain] 3634 watk += watk * sc->data[SC_LUST]->val2/100; 3635 if(sc->data[SC_REQUIEM]){ //Necro Requiem [Brain] 3636 if(sc->data[SC_REQUIEM]->val2) 3637 watk += sc->data[SC_REQUIEM]->val2*10; 3638 if(sc->data[SC_REQUIEM]->val3) 3639 watk -= sc->data[SC_REQUIEM]->val3*10; 3640 } 3641 if(sc->data[SC_CURSEWEAKNESS]) // Warlock Curse of Weakness [Brain] 3642 watk -= watk * sc->data[SC_CURSEWEAKNESS]->val2/100; 3643 if(sc->data[SC_DECREPIFY]) // Necromancer Decrepify [Brain] 3644 if(sc->data[SC_DECREPIFY]->val2>=2) 3645 watk -= watk * 25/100; 3646 //Custom Job End 3458 3647 3459 3648 return (unsigned short)cap_value(watk,0,USHRT_MAX); … … 3475 3664 if(sc->data[SC_INCMATKRATE]) 3476 3665 matk += matk * sc->data[SC_INCMATKRATE]->val1/100; 3666 //Custom Jobs (blackmagic) 3667 if(sc->data[SC_OVERWHELMING]) // Warlock Overwhelming Evil [Brain] 3668 matk += matk * sc->data[SC_OVERWHELMING]->val2/100; 3669 //Custom Job End 3477 3670 3478 3671 return (unsigned short)cap_value(matk,0,USHRT_MAX); … … 3522 3715 if(sc->data[SC_INCREASING]) 3523 3716 hit += 20; // RockmanEXE; changed based on updated [Reddozen] 3717 //Custom Jobs (blackmagic) 3718 if(sc->data[SC_DARKMOON]){ //Necro Dark Moon [Brain] 3719 if(sc->data[SC_DARKMOON]->val2) 3720 hit += sc->data[SC_DARKMOON]->val2; 3721 if(sc->data[SC_DARKMOON]->val3) 3722 hit -= sc->data[SC_DARKMOON]->val3; 3723 } 3724 //Custom Job End 3524 3725 3525 3726 return (short)cap_value(hit,1,SHRT_MAX); … … 3562 3763 if(sc->data[SC_SPEED]) 3563 3764 flee += 10 + sc->data[SC_SPEED]->val1 * 10 ; 3765 //Custom Jobs (blackmagic) 3766 if(sc->data[SC_DARKMOON]){ //Necro Dark Moon [Brain] 3767 if(sc->data[SC_DARKMOON]->val2) 3768 flee += sc->data[SC_DARKMOON]->val2; 3769 if(sc->data[SC_DARKMOON]->val3) 3770 flee -= sc->data[SC_DARKMOON]->val3; 3771 } 3772 //Custom Job End 3564 3773 3565 3774 return (short)cap_value(flee,1,SHRT_MAX); … … 3620 3829 if (sc->data[SC_FLING]) 3621 3830 def -= def * (sc->data[SC_FLING]->val2)/100; 3831 //Custom Jobs (blackmagic) 3832 if(sc->data[SC_SUFFER]) // Necro Power Word: Suffer [Brain] 3833 def <<=1; // -25% def 3834 if (sc->data[SC_CURSEEXHAUST]) // Warlock Curse of Exhaustion [Brain] 3835 def -= sc->data[SC_CURSEEXHAUST]->val2; 3836 if (sc->data[SC_OVERWHELMING]) // Warlock Overwhelming Evil [Brain] 3837 def += sc->data[SC_OVERWHELMING]->val1; 3838 //Custom Job End 3622 3839 3623 3840 return (signed char)cap_value(def,CHAR_MIN,CHAR_MAX); … … 3655 3872 def2 -= def2 * (sc->data[SC_FLING]->val3)/100; 3656 3873 3874 //Custom Jobs (blackmagic) 3875 if(sc->data[SC_SUFFER]) // Necro Power Word: Suffer [Brain] 3876 def2 -= def2 * 25/100; // -25% def 3877 if(sc->data[SC_DECREPIFY]) // Necromancer Decrepify [Brain] 3878 if(sc->data[SC_DECREPIFY]->val2>=4) 3879 def2 -= def2 * 25/100; 3880 //Custom Job End 3881 3657 3882 return (short)cap_value(def2,1,SHRT_MAX); 3658 3883 } … … 3681 3906 if(sc->data[SC_CONCENTRATION]) 3682 3907 mdef += 1; //Skill info says it adds a fixed 1 Mdef point. 3908 //Custom Jobs (blackmagic) 3909 if(sc->data[SC_AGONY]) // Warlock Power Word: Agony [Brain] 3910 mdef -= 25*mdef/100; // -25% mdef 3911 if (sc->data[SC_CURSEEXHAUST]) // Warlock Curse of Exhaustion [Brain] 3912 mdef -= sc->data[SC_CURSEEXHAUST]->val2; 3913 if (sc->data[SC_OVERWHELMING]) // Warlock Overwhelming Evil [Brain] 3914 mdef += sc->data[SC_OVERWHELMING]->val1; 3915 //Custom Job End 3683 3916 3684 3917 return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX); … … 3694 3927 if(sc->data[SC_MINDBREAKER]) 3695 3928 mdef2 -= mdef2 * sc->data[SC_MINDBREAKER]->val3/100; 3929 //Custom Jobs (blackmagic) 3930 if(sc->data[SC_AGONY]) // Warlock Power Word: Agony [Brain] 3931 mdef2 -= mdef2 * 25/100; // -25% mdef 3932 if(sc->data[SC_DECREPIFY]) // Necromancer Decrepify [Brain] 3933 if(sc->data[SC_DECREPIFY]->val2>=5) 3934 mdef2 -= mdef2 * 25/100; 3935 //Custom Job End 3696 3936 3697 3937 return (short)cap_value(mdef2,1,SHRT_MAX); … … 3747 3987 else if(sc->data[SC_WINDWALK]) 3748 3988 new_speed -= new_speed * sc->data[SC_WINDWALK]->val3/100; 3989 //Custom Jobs (blackmagic) 3990 else if(sc->data[SC_FEAR]) //Fear Status by [Brainstorm] 3991 new_speed -= new_speed * 25/100; 3992 //Custom Job End 3749 3993 } 3750 3994 … … 3790 4034 if(sc->data[SC_SLOWDOWN]) 3791 4035 speed = speed * 100/75; 4036 //Custom Jobs (blackmagic) 4037 if(sc->data[SC_DECREPIFY]) // Necromancer Decrepify [Brain] 4038 speed = speed * 100/75; //-25% walkspeed 4039 //Custom Job End 3792 4040 3793 4041 return (short)cap_value(speed,10,USHRT_MAX); … … 3860 4108 else if(sc->data[SC_MADNESSCANCEL]) 3861 4109 aspd_rate -= 200; 4110 //Custom Jobs (blackmagic) 4111 else if(sc->data[SC_LUST]) // Adept Blood Lust [Brain] 4112 aspd_rate -= sc->data[SC_LUST]->val2*10; 4113 //Custom Job End 3862 4114 } 3863 4115 … … 3953 4205 if(sc->data[SC_ELEMENTALCHANGE]) 3954 4206 return sc->data[SC_ELEMENTALCHANGE]->val2; 4207 //Custom Jobs (blackmagic) 4208 if( sc->data[SC_DEATHPACT]) // Necro Death Pact [Brain] 4209 return ELE_UNDEAD; 4210 if( sc->data[SC_OVERWHELMING]) // Warlock Overwhelming Evil [Brain] 4211 return ELE_DARK; 4212 //Custom Job End 3955 4213 return (unsigned char)cap_value(element,0,UCHAR_MAX); 3956 4214 } … … 3971 4229 if(sc->data[SC_ELEMENTALCHANGE]) 3972 4230 return sc->data[SC_ELEMENTALCHANGE]->val1; 4231 //Custom Jobs (blackmagic) 4232 if( sc->data[SC_DEATHPACT]) // Necro Death Pact [Brain] 4233 return 1; 4234 if( sc->data[SC_OVERWHELMING]) // Warlock Overwhelming Evil [Brain] 4235 return 1; 4236 //Custom Job End 3973 4237 3974 4238 return (unsigned char)cap_value(lv,1,4); … … 4708 4972 case SC_CARTBOOST: 4709 4973 case SC_ASSNCROS: 4974 //Custom Jobs (blackmagic) 4975 case SC_LUST: // Adept Blood Lust [Brain] 4976 //Custom Job End 4710 4977 if (sc->data[SC_QUAGMIRE]) 4711 4978 return 0; … … 4826 5093 case SC_ROKISWEIL: 4827 5094 case SC_FOGWALL: 5095 //Custom Jobs (blackmagic) 5096 //New status [Brainstorm] 5097 case SC_FEAR: 5098 case SC_DECREPIFY: 5099 case SC_DARKMOON: 5100 case SC_REQUIEM: 5101 case SC_CURSETONGUES: 5102 case SC_CURSEWEAKNESS: 5103 case SC_CURSEEXHAUST: 5104 //Custom Job End 4828 5105 return 0; 4829 5106 } … … 4841 5118 if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) 4842 5119 status_change_end(bl,SC_STONE,-1); 4843 } 4844 break; 5120 //Custom Jobs (blackmagic) 5121 // Warlock Curses are canceled by blessing [Brain] 5122 if (sc->data[SC_CURSEWEAKNESS]) 5123 status_change_end(bl,SC_CURSEWEAKNESS,-1); 5124 if (sc->data[SC_CURSETONGUES]) 5125 status_change_end(bl,SC_CURSETONGUES,-1); 5126 if (sc->data[SC_CURSEEXHAUST]) 5127 status_change_end(bl,SC_CURSEEXHAUST,-1); 5128 if (sc->data[SC_DOOM]) // This skill would be way funnier if we could igore this concept, no? 5129 status_change_end(bl,SC_DOOM,-1);//But then people would abuse on WoEs 5130 //Custom Job End 5131 } 5132 break; 5133 //Custom Jobs (blackmagic) 5134 case SC_CURSEWEAKNESS: // Warlock Curse of Weakness removes Impositio Manus [Brain] 5135 if (sc->data[SC_IMPOSITIO]) 5136 status_change_end(bl,SC_IMPOSITIO,-1); 5137 if (sc->data[SC_BLESSING]) //The opposite is also valid, curses cancel blessing [Brain] 5138 status_change_end(bl,SC_BLESSING,-1); 5139 break; 5140 case SC_CURSETONGUES: // Warlock Curse of Tongues removes Suffragium [Brain] 5141 if (sc->data[SC_SUFFRAGIUM]) 5142 status_change_end(bl,SC_SUFFRAGIUM,-1); 5143 if (sc->data[SC_BLESSING]) 5144 status_change_end(bl,SC_BLESSING,-1); 5145 break; 5146 case SC_CURSEEXHAUST: // Warlock Curse of Exhaustion removes angelus [Brain] 5147 if (sc->data[SC_ANGELUS]) 5148 status_change_end(bl,SC_ANGELUS,-1); 5149 case SC_DOOM: 5150 if (sc->data[SC_BLESSING]) 5151 status_change_end(bl,SC_BLESSING,-1); 5152 break; 5153 case SC_IMPOSITIO: // Impositio Manus removes Curse of Weakness [Brain] 5154 if (sc->data[SC_CURSEWEAKNESS]) 5155 status_change_end(bl,SC_CURSEWEAKNESS,-1); 5156 break; 5157 case SC_SUFFRAGIUM: // Suffragium removes Curse of Tongues [Brain] 5158 if (sc->data[SC_CURSETONGUES]) 5159 status_change_end(bl,SC_CURSETONGUES,-1); 5160 break; 5161 case SC_ANGELUS: // Angelus removes Curse of Exhaustion [Brain] 5162 if (sc->data[SC_CURSEEXHAUST]) 5163 status_change_end(bl,SC_CURSEEXHAUST,-1); 5164 break; 5165 //Custom Job End 4845 5166 case SC_INCREASEAGI: 4846 5167 status_change_end(bl,SC_DECREASEAGI,-1); … … 4861 5182 status_change_end(bl,SC_TWOHANDQUICKEN,-1); 4862 5183 status_change_end(bl,SC_ONEHAND,-1); 5184 //Custom Jobs (blackmagic) 5185 if(sc->data[SC_LUST]) // Adept Blood Lust [Brain] 5186 status_change_end(bl,SC_LUST,-1); 5187 //Custom Job End 4863 5188 break; 4864 5189 case SC_ONEHAND: … … 4919 5244 status_change_end(bl,SC_MADNESSCANCEL,-1); 4920 5245 break; 5246 //Custom Jobs (blackmagic) 5247 case SC_FREEZE: //Frozen status ends immolating AND searing status [Brain] 5248 if(sc->data[SC_IMMOLATE]) 5249 status_change_end(bl,SC_IMMOLATE,-1); 5250 case SC_IMMOLATE: // Warlock Immolate [Brain] 5251 if(sc->data[SC_SEARING]) //Immolating status ends searing status 5252 status_change_end(bl,SC_SEARING,-1); 5253 break; 5254 //Custom Job End 4921 5255 case SC_MADNESSCANCEL: 4922 5256 status_change_end(bl,SC_ADJUSTMENT,-1); … … 4950 5284 case SC_SILENCE: 4951 5285 case SC_CONFUSION: 5286 //Custom Jobs (blackmagic) 5287 case SC_FEAR: //Fear Status by [Brainstorm] 5288 //Custom Job End 4952 5289 case SC_BLIND: 4953 5290 case SC_BLEEDING: … … 5259 5596 clif_emotion(bl,1); 5260 5597 break; 5598 //Custom Jobs (blackmagic) 5599 case SC_FEAR: //Fear Status by [Brainstorm] 5600 clif_emotion(bl,16); // e_wah 5601 if(sd) tick /= 2; 5602 break; 5603 //Custom Job End 5261 5604 case SC_BLEEDING: 5262 5605 val4 = tick/10000; … … 5636 5979 break; 5637 5980 5981 //Custom Jobs (blackmagic) 5982 case SC_ATFIELD: // AT-Field [Brainstorm] 5983 val2 = 100; // 100% Block chance 5984 val3 = 100; // Dodge 100 attacks total. 5985 val4 = tick/1000; 5986 tick = 1000; 5987 break; 5988 //Custom Job End 5989 5638 5990 case SC_COMBO: 5639 5991 { … … 5683 6035 val2 = 0; //0 -> Half stat. 5684 6036 break; 6037 //Custom Jobs (blackmagic) 6038 case SC_REQUIEM: //Necro Requiem and Dark Moon [Brain] 6039 case SC_DARKMOON: 6040 if (undead_flag || status->race==RC_UNDEAD || status->race==RC_DEMON) 6041 val2 = val1; //Demon and Undead get buffed 6042 else if(status->race==RC_FORMLESS || status->def_ele==ELE_GHOST || bl->type == BL_PC) 6043 { 6044 val1 = 0; //No status change for Formless and Ghosts, and non-undead players 6045 tick = 0; //Cancel status to not show requiem icon without a reason 6046 } 6047 else 6048 val3 = val1; //Everything else (living) get negative status (requiem only) 6049 break; 6050 case SC_DECREPIFY: //Necro Decrepify [Brain] 6051 val2 = val1; 6052 break; 6053 //Custom Job End 5685 6054 case SC_TRICKDEAD: 5686 6055 if (vd) vd->dead_sit = 1; … … 5723 6092 val2 = 5*val1; //watk increase 5724 6093 break; 6094 //Custom Jobs (blackmagic) 6095 case SC_CURSEWEAKNESS: // Warlock Curse of Weakness [Brain] 6096 val2 = 5*val1; //batk/watk decrease 6097 break; 6098 case SC_CURSEEXHAUST: // Warlock Curse of Exhaustion [Brain] 6099 val2 = 2*val1; //def/mdef decrease 6100 break; 6101 case SC_CURSETONGUES: // Warlock Curse of Tongues [Brain] 6102 val2 = 10*val1; //casttime increase 6103 break; 6104 //Custom Job End 5725 6105 case SC_MELTDOWN: 5726 6106 val2 = 100*val1; //Chance to break weapon … … 5778 6158 val3 = 5+5*val1; //bAtk/wAtk rate change 5779 6159 break; 6160 //Custom Jobs (blackmagic) 6161 case SC_LUST: // Adept Blood Lust [Brain] 6162 val2 = 5+3*val1; //Aspd/bAtk/wAtk change 6163 val3 = tick>0?tick:1000; //Interval at which HP is drained. 6164 break; 6165 case SC_DEATHPACT: // Necro Death Pact [Brain] 6166 val2 = 5*val1; //Neutral property resistance 6167 val3 = tick>0?tick:10000; //Interval at which HP is drained. 6168 break; 6169 case SC_OVERWHELMING: // Warlock Overwhelming Evil [Brain] 6170 val2 = 2*val1; //matk bonus 6171 val3 = tick>0?tick:1000; //Interval at which SP is drained. 6172 break; 6173 //Custom Job End 5780 6174 case SC_MINDBREAKER: 5781 6175 val2 = 20*val1; //matk increase. … … 5961 6355 unit_skillcastcancel(bl, 0); 5962 6356 break; 6357 //Custom Jobs (blackmagic) 6358 case SC_FEAR: //Fear Status by [Brainstorm] 6359 unit_stop_attack(bl); 6360 break; 6361 //Custom Job End 5963 6362 } 5964 6363 … … 6406 6805 } 6407 6806 break; 6408 case SC_SPLASHER: 6807 //Custom Jobs (blackmagic) 6808 case SC_SPLASHER: 6809 case SC_DOOM: // Warlock Curse of Doom [Brain] 6810 //Custom Job End 6409 6811 { 6410 6812 struct block_list *src=map_id2bl(sce->val3); … … 6774 7176 sc_timer_next(sce->val2+tick, status_change_timer, bl->id, data); 6775 7177 return 0; 7178 //Custom Jobs (blackmagic) 7179 case SC_LUST: // Adept Blood Lust [Brain] 7180 if(!status_charge(bl, status->max_hp/100, 0)) 7181 break; //Not enough HP to continue. 7182 sc_timer_next(sce->val3+tick, status_change_timer, bl->id, data); 7183 return 0; 7184 case SC_DEATHPACT: // Necro Death Pact [Brain] 7185 // Drains 1 HP every second (status wont kill, but dying will cancel it) 7186 status_charge(bl, 1, 0); 7187 sc_timer_next(sce->val3+tick, status_change_timer, bl->id, data); 7188 return 0; 7189 case SC_OVERWHELMING: // Warlock Overwhelming Evil [Brain] 7190 if(!status_charge(bl, 0, status->max_sp/100)) 7191 break; //Not enough SP to continue. 7192 sc_timer_next(sce->val3+tick, status_change_timer, bl->id, data); 7193 return 0; 7194 //Custom Job End 6776 7195 6777 7196 case SC_CHASEWALK: … … 7008 7427 } 7009 7428 break; 7429 //Custom Jobs (blackmagic) 7430 case SC_DOOM: // Warlock Curse of Doom [Brain] 7431 if((sce->val4 -= 500) > 0) { 7432 sc_timer_next(500 + tick, status_change_timer, bl->id, data); 7433 return 0; 7434 } 7435 break; 7436 //Custom Job End 7010 7437 7011 7438 case SC_MARIONETTE: … … 7175 7602 case SC_WATKFOOD: 7176 7603 case SC_MATKFOOD: 7604 //Custom Jobs (blackmagic) 7605 case SC_DOOM: // Warlock Curse of Doom [Brain] 7606 //Custom Job End 7177 7607 continue; 7178 7608 -
src/map/status.h
r1 r10 296 296 SC_SPREGEN, 297 297 SC_WALKSPEED, 298 //Custom Jobs (blackmagic) 299 SC_DECREPIFY, // New status [brain] 300 SC_LUST, 301 SC_DARKMOON, 302 SC_REQUIEM, 303 SC_DEATHPACT, 304 SC_ATFIELD, 305 SC_SUFFER, 306 SC_SEARING, 307 SC_IMMOLATE, 308 SC_AGONY, 309 SC_CURSETONGUES, 310 SC_DOOM, 311 SC_CURSEWEAKNESS, 312 SC_CURSEEXHAUST, 313 SC_OVERWHELMING, 314 SC_FEAR, 315 //Custom Job End 298 316 SC_MAX, //Automatically updated max, used in for's to check we are within bounds. 299 317 } sc_type; … … 450 468 SI_BOSSMAPINFO = 253, 451 469 //SI_TURTLEGENERAL = 260, //All mobs display as Turtle General 452 //SI_BIOMOBTRICKDEAD = 263, //Bio Mob effect on you and SI_TRICKDEAD470 SI_BIOMOBTRICKDEAD = 263, //Bio Mob effect on you and SI_TRICKDEAD 453 471 //SI_BLURRY = 264, //For short time blurry screen and get Gloria icon 454 472 //SI_FOODSTR = 271, //Same as 241 -
src/map/unit.c
r1 r10 306 306 if (sc && sc->data[SC_CONFUSION]) //Randomize the target position 307 307 map_random_dir(bl, &ud->to_x, &ud->to_y); 308 //Custom Jobs (blackmagic) 309 if (sc && sc->data[SC_FEAR]) //Flee from my target [Brainstorm] 310 unit_escape(bl, tbl, 15); 311 //Custom Job End 308 312 309 313 if(ud->walktimer != -1) {