Changeset 19 for src/map/battle.c
- Timestamp:
- 07/02/08 12:20:18 (17 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
src/map/battle.c
r5 r19 73 73 return 1; 74 74 } 75 return 0; 75 return 0; 76 76 } 77 77 … … 123 123 return 1; 124 124 } 125 return 0; 125 return 0; 126 126 } 127 127 … … 138 138 } 139 139 140 // _ E?[WÌx140 // _??[WÌx 141 141 struct delay_damage { 142 142 struct block_list *src; … … 205 205 amotion = 1000; //Aegis places a damage-delay cap of 1 sec to non player attacks. [Skotlex] 206 206 add_timer(tick+amotion, battle_delay_damage_sub, src->id, (int)dat); 207 207 208 208 return 0; 209 209 } … … 211 211 int battle_attr_ratio(int atk_elem,int def_type, int def_lv) 212 212 { 213 213 214 214 if (atk_elem < 0 || atk_elem >= ELE_MAX) 215 215 return 100; … … 222 222 223 223 /*========================================== 224 * Does attribute fix modifiers. 224 * Does attribute fix modifiers. 225 225 * Added passing of the chars so that the status changes can affect it. [Skotlex] 226 226 * Note: Passing src/target == NULL is perfectly valid, it skips SC_ checks. … … 230 230 struct status_change *sc=NULL, *tsc=NULL; 231 231 int ratio; 232 232 233 233 if (src) sc = status_get_sc(src); 234 234 if (target) tsc = status_get_sc(target); 235 235 236 236 if (atk_elem < 0 || atk_elem >= ELE_MAX) 237 237 atk_elem = rand()%ELE_MAX; … … 265 265 266 266 /*========================================== 267 * _ E?[W?Å?IvZ267 * _??[W?Å?IvZ 268 268 *------------------------------------------*/ 269 269 int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag) … … 277 277 if (!damage) 278 278 return 0; 279 279 280 280 if( mob_ksprotected(src, bl) ) 281 281 return 0; … … 295 295 if(!damage) return 0; 296 296 } 297 297 298 298 if (skill_num == PA_PRESSURE) 299 299 return damage; //This skill bypass everything else. … … 344 344 return 0; 345 345 } 346 346 347 347 if(sc->data[SC_DODGE] && !sc->opt1 && 348 348 (flag&BF_LONG || sc->data[SC_SPURT]) … … 373 373 } 374 374 375 //Begin Custom Jobs (blackmagic)376 377 375 //Display red flashing aura effect of Adept Blood Lust [Brain] 378 376 if(sc->data[SC_LUST] && damage > 0){ … … 398 396 return 0; 399 397 } 400 //End Custom Jobs 398 401 399 402 400 if (((sce=sc->data[SC_UTSUSEMI]) || sc->data[SC_BUNSINJYUTSU]) 403 && 401 && 404 402 flag&BF_WEAPON && !(skill_get_nk(skill_num)&NK_NO_CARDFIX_ATK)) 405 403 { … … 503 501 } 504 502 //SC effects from caster side. Currently none. 505 /* 503 /* 506 504 sc = status_get_sc(src); 507 505 if (sc && sc->count) { 508 506 } 509 */ 507 */ 510 508 if (battle_config.pk_mode && sd && bl->type == BL_PC && damage) 511 509 { … … 555 553 if (!damage) //No reductions to make. 556 554 return 0; 557 555 558 556 class_ = status_get_class(bl); 559 557 560 558 if (bl->type == BL_MOB) 561 559 md=(struct mob_data *)bl; 562 560 563 561 if(md && md->guardian_data) { 564 562 if(class_ == MOBID_EMPERIUM && flag&BF_SKILL) … … 630 628 631 629 /*========================================== 632 * ?Cû_ E?[W630 * ?Cû_??[W 633 631 *------------------------------------------*/ 634 632 int battle_addmastery(struct map_session_data *sd,struct block_list *target,int dmg,int type) … … 651 649 damage += sd->status.str; 652 650 } 653 //Begin Custom Jobs (blackmagic) 651 654 652 //Warlock Touch of Corruption (Mage-Monster Killer passive skill) [Brainstorm] 655 653 if((skill = pc_checkskill(sd,WL_CORRUPTION)) > 0 && target->type==BL_MOB ) 656 654 damage += (skill * (status->int_/10)); 657 //end custom job658 655 659 656 if(type == 0) … … 740 737 { //Mobs/Pets 741 738 if(flag&4) 742 { 739 { 743 740 atkmin = status->matk_min; 744 741 atkmax = status->matk_max; … … 756 753 { //Normal attacks 757 754 atkmin = status->dex; 758 755 759 756 if (sd->equip_index[type] >= 0 && sd->inventory_data[sd->equip_index[type]]) 760 757 atkmin = atkmin*(80 + sd->inventory_data[sd->equip_index[type]]->wlv*20)/100; … … 762 759 if (atkmin > atkmax) 763 760 atkmin = atkmax; 764 761 765 762 if(flag&2 && !(flag&16)) 766 763 { //Bows … … 771 768 } 772 769 } 773 770 774 771 if (sc && sc->data[SC_MAXIMIZEPOWER]) 775 772 atkmin = atkmax; 776 773 777 774 //Weapon Damage calculation 778 775 if (!(flag&1)) 779 776 damage = (atkmax>atkmin? rand()%(atkmax-atkmin):0)+atkmin; 780 else 777 else 781 778 damage = atkmax; 782 779 783 780 if (sd) 784 781 { … … 793 790 sd->right_weapon.atkmods[t_size])/100; 794 791 } 795 792 796 793 //Finally, add baseatk 797 794 if(flag&4) … … 799 796 else 800 797 damage += status->batk; 801 798 802 799 //rodatazone says that Overrefine bonuses are part of baseatk 803 800 //Here we also apply the weapon_atk_rate bonus so it is correctly applied on left/right hands. … … 826 823 if (!battle_config.arrow_decrement) 827 824 return; 828 825 829 826 if (skill) 830 827 { … … 894 891 unsigned idef2 : 1; //Ignore defense (left weapon) 895 892 unsigned pdef : 2; //Pierces defense (Investigate/Ice Pick) 896 unsigned pdef2 : 2; //1: Use def+def2/100, 2: Use def+def2/50 893 unsigned pdef2 : 2; //1: Use def+def2/100, 2: Use def+def2/50 897 894 unsigned infdef : 1; //Infinite defense (plants) 898 895 unsigned arrow : 1; //Attack is arrow-based … … 900 897 unsigned lh : 1; //Attack considers left hand (wd.damage2) 901 898 unsigned weapon : 1; //It's a weapon attack (consider VVS, and all that) 902 } flag; 899 } flag; 903 900 904 901 memset(&wd,0,sizeof(wd)); … … 947 944 ) 948 945 flag.arrow = 1; 949 946 950 947 if(skill_num){ 951 948 wd.flag |= battle_range_type(src, target, skill_num, skill_lv); … … 978 975 wd.type = 0x08; 979 976 break; 980 977 981 978 case GS_GROUNDDRIFT: 982 979 case KN_SPEARSTAB: … … 997 994 } else //Range for normal attacks. 998 995 wd.flag |= flag.arrow?BF_LONG:BF_SHORT; 999 996 1000 997 if (!skill_num && tstatus->flee2 && rand()%1000 < tstatus->flee2) 1001 998 { //Check for Lucky Dodge … … 1049 1046 //Therefore, we use the old value 3 on cases when an sd gets attacked by a mob 1050 1047 cri -= tstatus->luk*(!sd&&tsd?3:2); 1051 1048 1052 1049 if(tsc) 1053 1050 { … … 1117 1114 if(battle_config.agi_penalty_type && 1118 1115 battle_config.agi_penalty_target&target->type) 1119 { 1116 { 1120 1117 unsigned char attacker_count; //256 max targets should be a sane max 1121 1118 attacker_count = unit_counttargeted(target,battle_config.agi_penalty_count_lv); … … 1175 1172 hitrate += hitrate * ( 2 * skill ) / 100; 1176 1173 1177 hitrate = cap_value(hitrate, battle_config.min_hitrate, battle_config.max_hitrate); 1174 hitrate = cap_value(hitrate, battle_config.min_hitrate, battle_config.max_hitrate); 1178 1175 1179 1176 if(rand()%100 >= hitrate) … … 1326 1323 ) 1327 1324 skillratio += sd->random_attack_increase_add; 1328 1325 1329 1326 ATK_RATE(skillratio); 1330 1327 } else { //Skills 1331 1328 switch( skill_num ) 1332 1329 { 1333 //Begin Custom Job (blackmagic)1334 1330 case NC_DEATHHAND: // Necro Death Hand [Brain] 1335 skillratio += -25+25*skill_lv; 1336 break; 1337 //End Black Magic Custom Jobs 1331 skillratio += -25+25*skill_lv; 1332 break; 1338 1333 case SM_BASH: 1339 1334 skillratio += 30*skill_lv; 1340 1335 break; 1341 1336 case SM_MAGNUM: 1342 skillratio += 20*skill_lv; 1337 skillratio += 20*skill_lv; 1343 1338 break; 1344 1339 case MC_MAMMONITE: … … 1597 1592 int k = (wflag-1)/3; //+100% every 3 cells of distance 1598 1593 if( k > 2 ) k = 2; // ...but hard-limited to 300%. 1599 skillratio += 100 * k; 1594 skillratio += 100 * k; 1600 1595 } 1601 1596 break; … … 1612 1607 skillratio += 100 *(skill_lv-1); 1613 1608 break; 1614 //Begin Custom Jobs (blackmagic) 1615 //Mercenary Skills [Brainstorm] 1616 case MS_BASH: 1617 skillratio += 30*skill_lv; 1618 break; 1619 case MER_CRASH: 1620 skillratio += 10*skill_lv; 1621 break; 1622 //end custom jobs 1609 /*Mercenary Skills [Brainstorm] 1610 case MS_BASH: 1611 skillratio += 30*skill_lv; 1612 break; 1613 case MER_CRASH: 1614 skillratio += 10*skill_lv; 1615 break;*/ 1623 1616 } 1624 1617 … … 1682 1675 break; 1683 1676 } 1684 1677 1685 1678 if(sd) 1686 1679 { … … 1754 1747 if(def2 < 1) def2 = 1; 1755 1748 } 1756 //Vitality reduction from rodatazone: http://rodatazone.simgaming.net/mechanics/substats.php#def 1749 //Vitality reduction from rodatazone: http://rodatazone.simgaming.net/mechanics/substats.php#def 1757 1750 if (tsd) //Sd vit-eq 1758 1751 { //[VIT*0.5] + rnd([VIT*0.3], max([VIT*0.3],[VIT^2/150]-1)) 1759 1752 vit_def = def2*(def2-15)/150; 1760 1753 vit_def = def2/2 + (vit_def>0?rand()%vit_def:0); 1761 1754 1762 1755 if((sstatus->race==RC_UNDEAD || sstatus->race==RC_DEMON) && 1763 1756 src->type == BL_MOB && (skill=pc_checkskill(tsd,AL_DP)) > 0) … … 1768 1761 vit_def = def2 + (vit_def>0?rand()%vit_def:0); 1769 1762 } 1770 1763 1771 1764 if (battle_config.weapon_defense_type) { 1772 1765 vit_def += def1*battle_config.weapon_defense_type; … … 1791 1784 if (sc && skill_num != LK_SPIRALPIERCE) 1792 1785 { //SC skill damages 1793 if(sc->data[SC_AURABLADE]) 1786 if(sc->data[SC_AURABLADE]) 1794 1787 ATK_ADD(20*sc->data[SC_AURABLADE]->val1); 1795 1788 } … … 1828 1821 else 1829 1822 ARR_FIND(0, 3, i, t_class == sd->hate_mob[i]); 1830 if (i < 3 && (skill=pc_checkskill(sd,sg_info[i].anger_id))) 1823 if (i < 3 && (skill=pc_checkskill(sd,sg_info[i].anger_id))) 1831 1824 { 1832 1825 skillratio = sd->status.base_level + sstatus->dex + sstatus->luk; … … 1843 1836 } //Here ends flag.hit section, the rest of the function applies to both hitting and missing attacks 1844 1837 else if(wd.div_ < 0) //Since the attack missed... 1845 wd.div_ *= -1; 1838 wd.div_ *= -1; 1846 1839 1847 1840 if(skill_num == CR_GRANDCROSS || skill_num == NPC_GRANDDARKNESS) 1848 1841 return wd; //Enough, rest is not needed. 1849 1842 1850 if(sd && (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0) 1843 if(sd && (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0) 1851 1844 ATK_ADD(skill*2); 1852 1845 … … 1890 1883 { 1891 1884 int cardfix = 1000, cardfix_ = 1000; 1892 int t_race2 = status_get_race2(target); 1885 int t_race2 = status_get_race2(target); 1893 1886 if(sd->state.arrow_atk) 1894 1887 { … … 1950 1943 ATK_RATE2(cardfix/10, cardfix_/10); //What happens if you use right-to-left and there's no right weapon, only left? 1951 1944 } 1952 1945 1953 1946 if (skill_num == CR_SHIELDBOOMERANG || skill_num == PA_SHIELDCHAIN) { //Refine bonus applies after cards and elements. 1954 1947 short index= sd->equip_index[EQI_HAND_L]; … … 2004 1997 if (flag.lh && (flag.hit || wd.damage2>0)) 2005 1998 wd.damage2 = 1; 2006 if (!(battle_config.skill_min_damage&1)) 1999 if (!(battle_config.skill_min_damage&1)) 2007 2000 //Do not return if you are supposed to deal greater damage to plants than 1. [Skotlex] 2008 2001 return wd; … … 2034 2027 if (sd) 2035 2028 { 2036 if (!flag.rh && flag.lh) 2029 if (!flag.rh && flag.lh) 2037 2030 { //Move lh damage to the rh 2038 2031 wd.damage = wd.damage2; … … 2125 2118 breakrate[1] += sc->data[SC_MELTDOWN]->val3; 2126 2119 } 2127 } 2120 } 2128 2121 if (breakrate[0]) 2129 2122 skill_break_equip(target, EQP_WEAPON, breakrate[0], BCT_ENEMY); … … 2196 2189 else if (s_ele == -2) //Use status element 2197 2190 s_ele = status_get_attack_sc_element(src,status_get_sc(src)); 2198 2191 2199 2192 //Set miscellaneous data that needs be filled 2200 2193 if(sd) { … … 2206 2199 ad.flag |= battle_range_type(src, target, skill_num, skill_lv); 2207 2200 flag.infdef=(tstatus->mode&MD_PLANT?1:0); 2208 2201 2209 2202 switch(skill_num) 2210 2203 { … … 2234 2227 case AL_HEAL: 2235 2228 case PR_BENEDICTIO: 2236 //Begin Custom Job (blackmagic)2237 2229 case AD_DARKHEAL: // Adept Dark Heal 2238 //end custom job2239 2230 ad.damage = skill_calc_heal(src, target, skill_lv)/2; 2240 2231 break; … … 2355 2346 skillratio += 100 +100*skill_lv +100*(skill_lv/2); 2356 2347 break; 2357 //Begin Custom Job (blackmagic) 2358 case NC_DRAINLIFE: // Necro Drain Life [Brain] 2359 skillratio += 25*skill_lv; 2360 break; 2361 case WL_HELLFIRE: // Warlock Hellfire [Brain] 2362 skillratio += 25*skill_lv; 2363 break; 2364 case WL_SHADOWBURN: // Warlock Shadow Burn [Brain] 2365 skillratio += 20*skill_lv; 2366 break; 2367 case WL_CURSEDOOM: // Warlock Curse of Doom [Brain] 2368 skillratio += 400 + 300*skill_lv; //max 20*matk dmg after 60 seconds 2369 break; 2370 case WL_SEARING: // Warlock Searing Pain [Brain] 2371 if(status_get_sc(target)->data[SC_SEARING]) 2372 skillratio = 10*pc_checkskill(sd,WL_SEARING);//10% * skilllv 2373 break; //Else 100% Matk 2374 case WL_IMMOLATE: // Warlock Immolate [Brain] 2375 if(status_get_sc(target)->data[SC_IMMOLATE]) 2376 skillratio += 10*pc_checkskill(sd,WL_SEARING);//100% +10 * searing lv 2377 else skillratio += -20 + 20*skill_lv;// Else 80% + 20% * skill lv 2378 break; 2379 case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] 2380 skillratio += 100 + 60*skill_lv + //damage bonus from other fire skills 2381 10*pc_checkskill(sd,WL_SEARING) + 10*pc_checkskill(sd,WL_IMMOLATE); 2382 break; 2383 //End Custom Job 2384 } 2348 case NC_DRAINLIFE: // Necro Drain Life [Brain] 2349 skillratio += 25*skill_lv; 2350 break; 2351 case WL_HELLFIRE: // Warlock Hellfire [Brain] 2352 skillratio += 25*skill_lv; 2353 break; 2354 case WL_SHADOWBURN: // Warlock Shadow Burn [Brain] 2355 skillratio += 20*skill_lv; 2356 break; 2357 case WL_CURSEDOOM: // Warlock Curse of Doom [Brain] 2358 skillratio += 400 + 300*skill_lv; //max 20*matk dmg after 60 seconds 2359 break; 2360 case WL_SEARING: // Warlock Searing Pain [Brain] 2361 if(status_get_sc(target)->data[SC_SEARING]) 2362 skillratio = 10*pc_checkskill(sd,WL_SEARING);//10% * skilllv 2363 break; //Else 100% Matk 2364 case WL_IMMOLATE: // Warlock Immolate [Brain] 2365 if(status_get_sc(target)->data[SC_IMMOLATE]) 2366 skillratio += 10*pc_checkskill(sd,WL_SEARING);//100% +10 * searing lv 2367 else skillratio += -20 + 20*skill_lv;// Else 80% + 20% * skill lv 2368 break; 2369 case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] 2370 skillratio += 100 + 60*skill_lv + //damage bonus from other fire skills 2371 10*pc_checkskill(sd,WL_SEARING) + 10*pc_checkskill(sd,WL_IMMOLATE); 2372 break; 2373 } 2385 2374 2386 2375 MATK_RATE(skillratio); 2387 2376 2388 2377 //Constant/misc additions from skills 2389 2378 if (skill_num == WZ_FIREPILLAR) … … 2437 2426 } 2438 2427 } 2439 2428 2440 2429 if (skill_num == NPC_EARTHQUAKE) 2441 2430 { //Adds atk2 to the damage, should be influenced by number of hits and skill-ratio, but not mdef reductions. [Skotlex] … … 2452 2441 if (!(nk&NK_NO_ELEFIX)) 2453 2442 ad.damage=battle_attr_fix(src, target, ad.damage, s_ele, tstatus->def_ele, tstatus->ele_lv); 2454 //Begin Custom Job (blackmagic) 2443 2444 2455 2445 if(skill_num == WL_SHADOWBURN) { // Warlock Shadow Burn [Brain] 2456 2446 // This is where we calculate the secondary damage 2457 2447 if(ad.damage<1) ad.damage=1; 2458 2448 struct Damage md = battle_calc_misc_attack(src,target,skill_num,skill_lv, mflag); 2459 if(md.damage<1) md.damage=1; 2460 ad.damage += md.damage; 2461 } 2462 //End Custom Job 2449 if(md.damage<1) md.damage=1; //Changed MD = WD 2450 ad.damage += md.damage; // Same as above 2451 } 2452 2463 2453 if (sd && !(nk&NK_NO_CARDFIX_ATK)) { 2464 2454 short t_class = status_get_class(target); … … 2515 2505 2516 2506 damage_div_fix(ad.damage, ad.div_); 2517 2507 2518 2508 if (flag.infdef && ad.damage) 2519 2509 ad.damage = ad.damage>0?1:-1; 2520 2510 2521 2511 ad.damage=battle_calc_damage(src,target,ad.damage,ad.div_,skill_num,skill_lv,ad.flag); 2522 2512 if (map_flag_gvg2(target->m)) … … 2526 2516 2527 2517 /*========================================== 2528 * »ÌŒ_ E?[WvZ2518 * »ÌŒ_??[WvZ 2529 2519 *------------------------------------------*/ 2530 2520 struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *target,int skill_num,int skill_lv,int mflag) … … 2555 2545 2556 2546 nk = skill_get_nk(skill_num); 2557 2547 2558 2548 sd = BL_CAST(BL_PC, src); 2559 2549 tsd = BL_CAST(BL_PC, target); 2560 2550 2561 2551 if(sd) { 2562 2552 sd->state.arrow_atk = 0; … … 2589 2579 if(mflag > 1) //Autocasted Blitz. 2590 2580 nk|=NK_SPLASHSPLIT; 2591 2581 2592 2582 if (skill_num == SN_FALCONASSAULT) 2593 2583 { 2594 2584 //Div fix of Blitzbeat 2595 2585 skill = skill_get_num(HT_BLITZBEAT, 5); 2596 damage_div_fix(md.damage, skill); 2586 damage_div_fix(md.damage, skill); 2597 2587 2598 2588 //Falcon Assault Modifier … … 2660 2650 case NPC_EVILLAND: 2661 2651 md.damage = (skill_lv>6)?666:skill_lv*100; 2662 //Begin Custom Job (blackmagic)2652 //break; 2663 2653 case WL_SHADOWBURN: // Warlock ShadowBurn dark element damage [Brain] 2664 s_ele = ELE_DARK; 2665 md.damage = ((300 + 20*skill_lv)/100)*((sstatus->int_*(rand()%300+500))/100); //Fixed between min and max matk for now 2666 //End Custom Job 2654 s_ele = ELE_DARK; 2655 md.damage = ((300 + 20*skill_lv)/100)*((sstatus->int_*(rand()%300+500))/100); //Fixed between min and max matk for now 2667 2656 break; 2668 2657 } … … 2676 2665 2677 2666 damage_div_fix(md.damage, md.div_); 2678 2667 2679 2668 if (!(nk&NK_IGNORE_FLEE)) 2680 2669 { … … 2688 2677 hitrate=80; //Default hitrate 2689 2678 2690 if(battle_config.agi_penalty_type && 2679 if(battle_config.agi_penalty_type && 2691 2680 battle_config.agi_penalty_target&target->type) 2692 { 2681 { 2693 2682 unsigned char attacker_count; //256 max targets should be a sane max 2694 2683 attacker_count = unit_counttargeted(target,battle_config.agi_penalty_count_lv); … … 2759 2748 } 2760 2749 /*========================================== 2761 * _ E?[WvZê?E?p2750 * _??[WvZê??p 2762 2751 *------------------------------------------*/ 2763 2752 struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int count) … … 2825 2814 if (*damage <= 0) continue; 2826 2815 //First and Third iterations: race, other two boss/nonboss state 2827 if (i == 0 || i == 2) 2816 if (i == 0 || i == 2) 2828 2817 type = race; 2829 2818 else 2830 2819 type = boss?RC_BOSS:RC_NONBOSS; 2831 2820 2832 2821 hp = wd->hp_drain[type].value; 2833 2822 if (wd->hp_drain[type].rate) … … 2852 2841 if (sd->sp_vanish_rate && rand()%1000 < sd->sp_vanish_rate) 2853 2842 status_percent_damage(&sd->bl, tbl, 0, (unsigned char)sd->sp_vanish_per, false); 2854 //begin custom job (blackmagic 2855 // Adept Blood Pact drains 5% damage per hit [FlavioJS/Brain] 2843 // Adept Blood Pact drains 5% damage per hit [FlavioJS/Brain] 2856 2844 if( pc_checkskill(sd, AD_BLOODPACT) > 0 ) 2857 2845 thp += battle_calc_drain(rdamage,1000,5); … … 2867 2855 rhp += corrupt_sp;//If SP damage was caused, increase HP damage too 2868 2856 } 2869 //end custom job2870 2857 if (!thp && !tsp) return; 2871 2858 2872 2859 status_heal(&sd->bl, thp, tsp, battle_config.show_hp_sp_drain?3:1); 2873 2860 2874 2861 if (rhp || rsp) 2875 2862 status_zap(tbl, rhp, rsp); … … 2877 2864 2878 2865 /*========================================== 2879 * Ê? EU?E?ÜÆß2866 * Ê?í?U??ÜÆß 2880 2867 *------------------------------------------*/ 2881 2868 enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* target, unsigned int tick, int flag) … … 2907 2894 if (tsc && !tsc->count) 2908 2895 tsc = NULL; 2909 2896 2910 2897 if (sd) 2911 2898 { … … 3070 3057 3071 3058 if (tsc) { 3072 if (tsc->data[SC_POISONREACT] && 3059 if (tsc->data[SC_POISONREACT] && 3073 3060 (rand()%100 < tsc->data[SC_POISONREACT]->val3 3074 3061 || sstatus->def_ele == ELE_POISON) && … … 3092 3079 } 3093 3080 3094 //Begin custom Job (blackmagic)3095 3081 int battle_check_living(int race,int element)// Living creature check [Brain] 3096 3082 { … … 3105 3091 } 3106 3092 } 3107 //end custom job3108 3093 3109 3094 int battle_check_undead(int race,int element) … … 3234 3219 break; 3235 3220 //All else not specified is an invalid target. 3236 default: 3221 default: 3237 3222 return 0; 3238 3223 } … … 3253 3238 strip_enemy = 0; 3254 3239 } 3255 // Sketchy - begin3256 if (sd->state.god && t_bl != s_bl && s_bl->type == BL_PC && ((TBL_PC*)s_bl)->state.demon && map[m].flag.hostile) {3257 state |= BCT_ENEMY;3258 strip_enemy = 0;3259 }3260 3261 if (sd->state.demon && t_bl != s_bl && s_bl->type == BL_PC && ((TBL_PC*)s_bl)->state.god && map[m].flag.hostile) {3262 state |= BCT_ENEMY;3263 strip_enemy = 0;3264 }3265 // Sketchy -end3266 3240 break; 3267 3241 } … … 3362 3336 break; 3363 3337 } 3364 3365 if ((flag&BCT_ALL) == BCT_ALL) { //All actually stands for all attackable chars 3338 3339 if ((flag&BCT_ALL) == BCT_ALL) { //All actually stands for all attackable chars 3366 3340 if (target->type&BL_CHAR) 3367 3341 return 1; … … 3371 3345 if (flag == BCT_NOONE) //Why would someone use this? no clue. 3372 3346 return -1; 3373 3347 3374 3348 if (t_bl == s_bl) 3375 3349 { //No need for further testing. … … 3379 3353 return (flag&state)?1:-1; 3380 3354 } 3381 3355 3382 3356 if (map_flag_vs(m)) { //Check rivalry settings. 3383 3357 if (flag&(BCT_PARTY|BCT_ENEMY)) { … … 3429 3403 } 3430 3404 } 3431 3405 3432 3406 if (!state) //If not an enemy, nor a guild, nor party, nor yourself, it's neutral. 3433 3407 state = BCT_NEUTRAL; … … 3759 3733 { "require_glory_guild", &battle_config.require_glory_guild, 0, 0, 1, }, 3760 3734 { "idle_no_share", &battle_config.idle_no_share, 0, 0, INT_MAX, }, 3761 { "party_even_share_bonus", &battle_config.party_even_share_bonus, 0, 0, INT_MAX, }, 3735 { "party_even_share_bonus", &battle_config.party_even_share_bonus, 0, 0, INT_MAX, }, 3762 3736 { "delay_battle_damage", &battle_config.delay_battle_damage, 1, 0, 1, }, 3763 3737 { "hide_woe_damage", &battle_config.hide_woe_damage, 0, 0, 1, }, … … 3832 3806 { "auction_feeperhour", &battle_config.auction_feeperhour, 12000, 0, INT_MAX, }, 3833 3807 { "auction_maximumprice", &battle_config.auction_maximumprice, 500000000, 0, MAX_ZENY, }, 3834 //Begin Custom Job (blackmagic)3835 3808 //Vanaheim battle settings [Brainstorm] 3836 3809 { "necro_retaliation", &battle_config.necro_retaliation, 1, 0, 1, }, 3837 { "disp_summon_stats", &battle_config.disp_summon_stats, 3838 //End Custom Job 3810 { "disp_summon_stats", &battle_config.disp_summon_stats, 0, 0, 1, }, 3811 3839 3812 { "gm_viewequip_min_lv", &battle_config.gm_viewequip_min_lv, 0, 0, 99, }, 3840 3813 }; … … 3881 3854 battle_config.monster_max_aspd = 2000 - battle_config.monster_max_aspd*10; 3882 3855 battle_config.max_aspd = 2000 - battle_config.max_aspd*10; 3883 battle_config.max_walk_speed = 100*DEFAULT_WALK_SPEED/battle_config.max_walk_speed; 3856 battle_config.max_walk_speed = 100*DEFAULT_WALK_SPEED/battle_config.max_walk_speed; 3884 3857 battle_config.max_cart_weight *= 10; 3885 3858 3886 3859 if(battle_config.max_def > 100 && !battle_config.weapon_defense_type) // added by [Skotlex] 3887 3860 battle_config.max_def = 100; … … 3889 3862 if(battle_config.min_hitrate > battle_config.max_hitrate) 3890 3863 battle_config.min_hitrate = battle_config.max_hitrate; 3891 3864 3892 3865 if(battle_config.pet_max_atk1 > battle_config.pet_max_atk2) //Skotlex 3893 3866 battle_config.pet_max_atk1 = battle_config.pet_max_atk2; 3894 3867 3895 3868 if (battle_config.day_duration && battle_config.day_duration < 60000) // added by [Yor] 3896 3869 battle_config.day_duration = 60000; 3897 3870 if (battle_config.night_duration && battle_config.night_duration < 60000) // added by [Yor] 3898 3871 battle_config.night_duration = 60000; 3899 3872 3900 3873 #ifndef CELL_NOSTACK 3901 3874 if (battle_config.cell_stack_limit != 1)