Changeset 24

Show
Ignore:
Timestamp:
07/07/08 22:48:26 (17 years ago)
Author:
jinshiro
Message:
 
Files:
21 modified

Legend:

Unmodified
Added
Removed
  • src/common/mmo.h

    r23 r24  
    1111 
    1212//Remove/Comment this line to disable sc_data saving. [Skotlex] 
    13 #define ENABLE_SC_SAVING 
     13#define ENABLE_SC_SAVING  
    1414//Remove/Comment this line to disable server-side hot-key saving support [Skotlex] 
    1515//Note that newer clients no longer save hotkeys in the registry! 
     
    3131#define MAX_FAME 1000000000 
    3232#define MAX_CART 100 
    33 #define MAX_SKILL 1600 //1600 now, for necromancer skills overstepping bounds. 
     33#define MAX_SKILL 1100 // Bumped to 1100 for new quest skills, will need to further increase one day... [DracoRPG] 
    3434#define GLOBAL_REG_NUM 96 
    3535#define ACCOUNT_REG_NUM 64 
     
    117117        IT_AMMO,    //10 
    118118        IT_DELAYCONSUME,//11 
    119         IT_MAX 
     119        IT_MAX  
    120120}; 
    121121 
     
    309309        int buyer_id; 
    310310        char buyer_name[NAME_LENGTH]; 
    311  
     311         
    312312        struct item item; 
    313313        // This data is required for searching, as itemdb is not read by char server 
     
    526526        JOB_XMAS, 
    527527        JOB_SUMMER, 
    528     JOB_ADEPT = 30, // [Brain] 
     528    JOB_ADEPT = 30, // [Brain]  
    529529    JOB_NECROMANCER, // [Brain] 
    530     JOB_WARLOCK, 
    531      
     530    JOB_WARLOCK, // Warlock [Brain] 
    532531        JOB_MAX_BASIC, 
    533532 
     
    583582        JOB_STAR_GLADIATOR2, 
    584583        JOB_SOUL_LINKER, 
    585          
    586584        JOB_MAX, 
    587585}; 
  • src/map/atcommand.c

    r19 r24  
    12631263                        { "supernovice",        23 }, 
    12641264                        { "gunslinger", 24 }, 
     1265                        { "gunner",     24 }, 
     1266                        { "ninja",      25 }, 
    12651267                        { "adept",      30 },//New job classes [Brainstorm] 
    12661268                        { "necromancer",        31 }, 
    12671269                        { "necro",      31 }, 
    12681270                        { "warlock",    32 }, 
    1269                         { "gunner",     24 }, 
    1270                         { "ninja",      25 }, 
    12711271                        { "high novice",        4001 }, 
    12721272                        { "swordsman high",     4002 }, 
     
    78187818{ 
    78197819        if (sd->state.showsummon) { 
    7820         sd->state.showsummon = 0; 
    7821         clif_displaymessage(fd, "Summon Stats will not be shown."); 
    7822         return 0; 
     7820                sd->state.showsummon = 0; 
     7821                clif_displaymessage(fd, "Summon Stats will not be shown."); 
     7822                return 0; 
    78237823        } 
    78247824 
    78257825        sd->state.showsummon = 1; 
    7826         clif_displaymessage(fd, "Summon Stats are now shown."); 
    7827         return 0; 
    7828 } 
    7829  
    7830  
     7826        clif_displaymessage(fd, "Summon Stats is now shown."); 
     7827        return 0; 
     7828} 
    78317829/*========================================== 
    78327830 * Barricade Build 
     
    85928590        { "killbarricade",     60,     atcommand_barricade_destroy }, 
    85938591        //Vanaheim Commands 
    8594         { "showsummon",  0, atcommand_showsummon}, //Brainstorm 
     8592        { "showsummon",        0, atcommand_showsummon}, //Brainstorm 
    85958593}; 
    85968594 
  • src/map/battle.c

    r19 r24  
    7373                return 1; 
    7474        } 
    75         return 0; 
     75        return 0;        
    7676} 
    7777 
     
    123123                return 1; 
    124124        } 
    125         return 0; 
     125        return 0;        
    126126} 
    127127 
     
    205205                amotion = 1000; //Aegis places a damage-delay cap of 1 sec to non player attacks. [Skotlex] 
    206206        add_timer(tick+amotion, battle_delay_damage_sub, src->id, (int)dat); 
    207  
     207         
    208208        return 0; 
    209209} 
     
    211211int battle_attr_ratio(int atk_elem,int def_type, int def_lv) 
    212212{ 
    213  
     213         
    214214        if (atk_elem < 0 || atk_elem >= ELE_MAX) 
    215215                return 100; 
     
    222222 
    223223/*========================================== 
    224  * Does attribute fix modifiers. 
     224 * Does attribute fix modifiers.  
    225225 * Added passing of the chars so that the status changes can affect it. [Skotlex] 
    226226 * Note: Passing src/target == NULL is perfectly valid, it skips SC_ checks. 
     
    230230        struct status_change *sc=NULL, *tsc=NULL; 
    231231        int ratio; 
    232  
     232         
    233233        if (src) sc = status_get_sc(src); 
    234234        if (target) tsc = status_get_sc(target); 
    235  
     235         
    236236        if (atk_elem < 0 || atk_elem >= ELE_MAX) 
    237237                atk_elem = rand()%ELE_MAX; 
     
    277277        if (!damage) 
    278278                return 0; 
    279  
     279         
    280280        if( mob_ksprotected(src, bl) ) 
    281281                return 0; 
     
    295295                if(!damage) return 0; 
    296296        } 
    297  
     297         
    298298        if (skill_num == PA_PRESSURE) 
    299299                return damage; //This skill bypass everything else. 
     
    344344                        return 0; 
    345345                } 
    346  
     346                 
    347347                if(sc->data[SC_DODGE] && !sc->opt1 && 
    348348                        (flag&BF_LONG || sc->data[SC_SPURT]) 
     
    372372                        return 0; 
    373373                } 
    374  
    375         //Display red flashing aura effect of Adept Blood Lust [Brain] 
    376         if(sc->data[SC_LUST] && damage > 0){ 
    377                 clif_specialeffect(bl, 548, AREA); 
    378                 if(rand()%100 < 10) clif_specialeffect(bl, 455, AREA); //Red Lightnings, 1/10 attacks will show to prevent spam 
    379         }; 
    380         //Display blue flashing aura effect of Warlock Overwhelming Evil [Brain] 
    381         if(sc->data[SC_OVERWHELMING] && damage > 0) 
    382                 clif_specialeffect(bl, 73, AREA); 
    383  
    384         // AT-Field [Brainstorm] 
    385         if(sc->data[SC_ATFIELD] && 
    386                 rand()%100 < sc->data[SC_ATFIELD]->val2) 
    387         {       //Blocks all skills. 
    388                 clif_specialeffect(bl, 438, AREA); 
    389                 //Shouldn't end until Breaker's non-weapon part connects. 
    390                 if (skill_num == ASC_BREAKER || 
    391                 skill_num == LK_SPIRALPIERCE || 
    392                 skill_num == CG_ARROWVULCAN || 
    393                 skill_num == SN_SHARPSHOOTING) 
    394                 if (--sc->data[SC_ATFIELD]->val3 <= 0) //We make it work like Safety Wall 
    395                 status_change_end(bl, SC_ATFIELD, -1); 
    396                 return 0; 
    397         } 
    398  
     374                 
     375                //Display red flashing aura effect of Adept Blood Lust [Brain] 
     376                if(sc->data[SC_LUST] && damage > 0){ 
     377                        clif_specialeffect(bl, 548, AREA); 
     378                        if(rand()%100 < 10) clif_specialeffect(bl, 455, AREA); //Red Lightnings, 1/10 attacks will show to prevent spam 
     379                }; 
     380                //Display blue flashing aura effect of Warlock Overwhelming Evil [Brain] 
     381                if(sc->data[SC_OVERWHELMING] && damage > 0) 
     382                        clif_specialeffect(bl, 73, AREA); 
     383 //AT Field is Irrelevant, I believe. 
     384                // AT-Field [Brainstorm] 
     385                if(sc->data[SC_ATFIELD] && 
     386                        rand()%100 < sc->data[SC_ATFIELD]->val2) 
     387                {       //Blocks all skills. 
     388                        clif_specialeffect(bl, 438, AREA); 
     389                        //Shouldn't end until Breaker's non-weapon part connects. 
     390                        if (skill_num == ASC_BREAKER || 
     391                                skill_num == LK_SPIRALPIERCE || 
     392                                skill_num == CG_ARROWVULCAN || 
     393                                skill_num == SN_SHARPSHOOTING) 
     394                                if (--sc->data[SC_ATFIELD]->val3 <= 0) //We make it work like Safety Wall 
     395                                status_change_end(bl, SC_ATFIELD, -1); 
     396                        return 0; 
     397                } 
    399398 
    400399                if (((sce=sc->data[SC_UTSUSEMI]) || sc->data[SC_BUNSINJYUTSU]) 
    401                 && 
     400                &&  
    402401                        flag&BF_WEAPON && !(skill_get_nk(skill_num)&NK_NO_CARDFIX_ATK)) 
    403402                { 
     
    501500        } 
    502501        //SC effects from caster side. Currently none. 
    503 /* 
     502/*       
    504503        sc = status_get_sc(src); 
    505504        if (sc && sc->count) { 
    506505        } 
    507 */ 
     506*/       
    508507        if (battle_config.pk_mode && sd && bl->type == BL_PC && damage) 
    509508        { 
     
    553552        if (!damage) //No reductions to make. 
    554553                return 0; 
    555  
     554         
    556555        class_ = status_get_class(bl); 
    557556 
    558557        if (bl->type == BL_MOB) 
    559558                md=(struct mob_data *)bl; 
    560  
     559         
    561560        if(md && md->guardian_data) { 
    562561                if(class_ == MOBID_EMPERIUM && flag&BF_SKILL) 
     
    640639 
    641640        if((skill = pc_checkskill(sd,AL_DEMONBANE)) > 0 && 
    642                 (status->race==RC_UNDEAD || status->race==RC_DEMON) ) 
     641                target->type == BL_MOB && //This bonus doesnt work against players. 
     642                (battle_check_undead(status->race,status->def_ele) || status->race==RC_DEMON) ) 
    643643                damage += (skill*(int)(3+(sd->status.base_level+1)*0.05));      // submitted by orn 
    644644                //damage += (skill * 3); 
     
    649649                        damage += sd->status.str; 
    650650        } 
    651  
     651//AMIDOINITRITE?! V seems okay.  
    652652        //Warlock Touch of Corruption (Mage-Monster Killer passive skill) [Brainstorm] 
    653653        if((skill = pc_checkskill(sd,WL_CORRUPTION)) > 0 && target->type==BL_MOB ) 
    654         damage += (skill * (status->int_/10)); 
     654                damage += (skill * (status->int_/10)); 
    655655 
    656656        if(type == 0) 
     
    737737        {       //Mobs/Pets 
    738738                if(flag&4) 
    739                 { 
     739                {                  
    740740                        atkmin = status->matk_min; 
    741741                        atkmax = status->matk_max; 
     
    753753                {       //Normal attacks 
    754754                        atkmin = status->dex; 
    755  
     755                         
    756756                        if (sd->equip_index[type] >= 0 && sd->inventory_data[sd->equip_index[type]]) 
    757757                                atkmin = atkmin*(80 + sd->inventory_data[sd->equip_index[type]]->wlv*20)/100; 
     
    759759                        if (atkmin > atkmax) 
    760760                                atkmin = atkmax; 
    761  
     761                         
    762762                        if(flag&2 && !(flag&16)) 
    763763                        {       //Bows 
     
    768768                } 
    769769        } 
    770  
     770         
    771771        if (sc && sc->data[SC_MAXIMIZEPOWER]) 
    772772                atkmin = atkmax; 
    773  
     773         
    774774        //Weapon Damage calculation 
    775775        if (!(flag&1)) 
    776776                damage = (atkmax>atkmin? rand()%(atkmax-atkmin):0)+atkmin; 
    777         else 
     777        else  
    778778                damage = atkmax; 
    779  
     779         
    780780        if (sd) 
    781781        { 
     
    790790                                sd->right_weapon.atkmods[t_size])/100; 
    791791        } 
    792  
     792         
    793793        //Finally, add baseatk 
    794794        if(flag&4) 
     
    796796        else 
    797797                damage += status->batk; 
    798  
     798         
    799799        //rodatazone says that Overrefine bonuses are part of baseatk 
    800800        //Here we also apply the weapon_atk_rate bonus so it is correctly applied on left/right hands. 
     
    823823        if (!battle_config.arrow_decrement) 
    824824                return; 
    825  
     825         
    826826        if (skill) 
    827827        { 
     
    891891                unsigned idef2 : 1;     //Ignore defense (left weapon) 
    892892                unsigned pdef : 2;      //Pierces defense (Investigate/Ice Pick) 
    893                 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        
    894894                unsigned infdef : 1;    //Infinite defense (plants) 
    895895                unsigned arrow : 1;     //Attack is arrow-based 
     
    897897                unsigned lh : 1;                //Attack considers left hand (wd.damage2) 
    898898                unsigned weapon : 1; //It's a weapon attack (consider VVS, and all that) 
    899         }       flag; 
     899        }       flag;    
    900900 
    901901        memset(&wd,0,sizeof(wd)); 
     
    944944        ) 
    945945                flag.arrow = 1; 
    946  
     946         
    947947        if(skill_num){ 
    948948                wd.flag |= battle_range_type(src, target, skill_num, skill_lv); 
     
    975975                                wd.type = 0x08; 
    976976                                break; 
    977  
     977                                 
    978978                        case GS_GROUNDDRIFT: 
    979979                        case KN_SPEARSTAB: 
     
    994994        } else //Range for normal attacks. 
    995995                wd.flag |= flag.arrow?BF_LONG:BF_SHORT; 
    996  
     996         
    997997        if (!skill_num && tstatus->flee2 && rand()%1000 < tstatus->flee2) 
    998998        {       //Check for Lucky Dodge 
     
    10461046                //Therefore, we use the old value 3 on cases when an sd gets attacked by a mob 
    10471047                cri -= tstatus->luk*(!sd&&tsd?3:2); 
    1048  
     1048                 
    10491049                if(tsc) 
    10501050                { 
     
    11141114                if(battle_config.agi_penalty_type && 
    11151115                        battle_config.agi_penalty_target&target->type) 
    1116                 { 
     1116                {        
    11171117                        unsigned char attacker_count; //256 max targets should be a sane max 
    11181118                        attacker_count = unit_counttargeted(target,battle_config.agi_penalty_count_lv); 
     
    11721172                        hitrate += hitrate * ( 2 * skill ) / 100; 
    11731173 
    1174                 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);  
    11751175 
    11761176                if(rand()%100 >= hitrate) 
     
    13231323                                ) 
    13241324                                skillratio += sd->random_attack_increase_add; 
    1325  
     1325                 
    13261326                        ATK_RATE(skillratio); 
    13271327                } else {        //Skills 
     
    13291329                        { 
    13301330                                case NC_DEATHHAND: // Necro Death Hand [Brain] 
    1331                                         skillratio += -25+25*skill_lv; 
     1331                                        skillratio += -25+25*skill_lv; //I wonder if it will accept that? 
    13321332                                        break; 
    13331333                                case SM_BASH: 
     
    13351335                                        break; 
    13361336                                case SM_MAGNUM: 
    1337                                         skillratio += 20*skill_lv; 
     1337                                        skillratio += 20*skill_lv;  
    13381338                                        break; 
    13391339                                case MC_MAMMONITE: 
     
    15921592                                        int k = (wflag-1)/3; //+100% every 3 cells of distance 
    15931593                                        if( k > 2 ) k = 2; // ...but hard-limited to 300%. 
    1594                                         skillratio += 100 * k; 
     1594                                        skillratio += 100 * k;  
    15951595                                        } 
    15961596                                        break; 
     
    16071607                                        skillratio += 100 *(skill_lv-1); 
    16081608                                        break; 
    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;*/ 
    16161609                        } 
    16171610 
     
    16751668                                break; 
    16761669                } 
    1677  
     1670                 
    16781671                if(sd) 
    16791672                { 
     
    17471740                                if(def2 < 1) def2 = 1; 
    17481741                        } 
    1749                         //Vitality reduction from rodatazone: http://rodatazone.simgaming.net/mechanics/substats.php#def 
     1742                        //Vitality reduction from rodatazone: http://rodatazone.simgaming.net/mechanics/substats.php#def         
    17501743                        if (tsd)        //Sd vit-eq 
    17511744                        {       //[VIT*0.5] + rnd([VIT*0.3], max([VIT*0.3],[VIT^2/150]-1)) 
    17521745                                vit_def = def2*(def2-15)/150; 
    17531746                                vit_def = def2/2 + (vit_def>0?rand()%vit_def:0); 
    1754  
    1755                                 if((sstatus->race==RC_UNDEAD || sstatus->race==RC_DEMON) && 
     1747                                 
     1748                                if((battle_check_undead(sstatus->race,sstatus->def_ele) || sstatus->race==RC_DEMON) && //This bonus already doesnt work vs players 
    17561749                                        src->type == BL_MOB && (skill=pc_checkskill(tsd,AL_DP)) > 0) 
    17571750                                        vit_def += skill*(int)(3 +(tsd->status.base_level+1)*0.04);   // submitted by orn 
     
    17611754                                vit_def = def2 + (vit_def>0?rand()%vit_def:0); 
    17621755                        } 
    1763  
     1756                         
    17641757                        if (battle_config.weapon_defense_type) { 
    17651758                                vit_def += def1*battle_config.weapon_defense_type; 
     
    17841777                if (sc && skill_num != LK_SPIRALPIERCE) 
    17851778                {       //SC skill damages 
    1786                         if(sc->data[SC_AURABLADE]) 
     1779                        if(sc->data[SC_AURABLADE])  
    17871780                                ATK_ADD(20*sc->data[SC_AURABLADE]->val1); 
    17881781                } 
     
    18211814                        else 
    18221815                        ARR_FIND(0, 3, i, t_class == sd->hate_mob[i]); 
    1823                         if (i < 3 && (skill=pc_checkskill(sd,sg_info[i].anger_id))) 
     1816                        if (i < 3 && (skill=pc_checkskill(sd,sg_info[i].anger_id)))  
    18241817                        { 
    18251818                                skillratio = sd->status.base_level + sstatus->dex + sstatus->luk; 
     
    18361829        } //Here ends flag.hit section, the rest of the function applies to both hitting and missing attacks 
    18371830        else if(wd.div_ < 0) //Since the attack missed... 
    1838                 wd.div_ *= -1; 
     1831                wd.div_ *= -1;  
    18391832 
    18401833        if(skill_num == CR_GRANDCROSS || skill_num == NPC_GRANDDARKNESS) 
    18411834                return wd; //Enough, rest is not needed. 
    18421835 
    1843         if(sd && (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0) 
     1836        if(sd && (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0)  
    18441837                ATK_ADD(skill*2); 
    18451838 
     
    18831876                { 
    18841877                        int cardfix = 1000, cardfix_ = 1000; 
    1885                         int t_race2 = status_get_race2(target); 
     1878                        int t_race2 = status_get_race2(target);  
    18861879                        if(sd->state.arrow_atk) 
    18871880                        { 
     
    19431936                                ATK_RATE2(cardfix/10, cardfix_/10);     //What happens if you use right-to-left and there's no right weapon, only left? 
    19441937                } 
    1945  
     1938                 
    19461939                if (skill_num == CR_SHIELDBOOMERANG || skill_num == PA_SHIELDCHAIN) { //Refine bonus applies after cards and elements. 
    19471940                        short index= sd->equip_index[EQI_HAND_L]; 
     
    19971990                if (flag.lh && (flag.hit || wd.damage2>0)) 
    19981991                        wd.damage2 = 1; 
    1999                 if (!(battle_config.skill_min_damage&1)) 
     1992                if (!(battle_config.skill_min_damage&1))  
    20001993                        //Do not return if you are supposed to deal greater damage to plants than 1. [Skotlex] 
    20011994                        return wd; 
     
    20272020        if (sd) 
    20282021        { 
    2029                 if (!flag.rh && flag.lh) 
     2022                if (!flag.rh && flag.lh)  
    20302023                {       //Move lh damage to the rh 
    20312024                        wd.damage = wd.damage2; 
     
    21182111                                        breakrate[1] += sc->data[SC_MELTDOWN]->val3; 
    21192112                                } 
    2120                         } 
     2113                        }        
    21212114                        if (breakrate[0]) 
    21222115                                skill_break_equip(target, EQP_WEAPON, breakrate[0], BCT_ENEMY); 
     
    21892182        else if (s_ele == -2) //Use status element 
    21902183                s_ele = status_get_attack_sc_element(src,status_get_sc(src)); 
    2191  
     2184         
    21922185        //Set miscellaneous data that needs be filled 
    21932186        if(sd) { 
     
    21992192        ad.flag |= battle_range_type(src, target, skill_num, skill_lv); 
    22002193        flag.infdef=(tstatus->mode&MD_PLANT?1:0); 
    2201  
     2194                 
    22022195        switch(skill_num) 
    22032196        { 
     
    22262219                {       //Calc base damage according to skill 
    22272220                        case AL_HEAL: 
    2228                         case PR_BENEDICTIO: 
     2221                        case PR_BENEDICTIO: //Accidentally deleted the :, replaced it. No difference, so dont worry about this. 
    22292222                        case AD_DARKHEAL: // Adept Dark Heal 
     2223                        //Is this a good place for dark heal, i wonder? Seems fine though. 
    22302224                                ad.damage = skill_calc_heal(src, target, skill_lv)/2; 
    22312225                                break; 
     
    23462340                                                skillratio += 100 +100*skill_lv +100*(skill_lv/2); 
    23472341                                                break; 
    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; 
     2342                                                 
     2343//NOTE: All the skills below here did NOT work before, may have been a stupid mistake but this is for reference. 
     2344                                        case NC_DRAINLIFE: // Necro Drain Life [Brain] 
     2345                                                skillratio += 25*skill_lv; 
     2346                                                break; 
     2347                                        case WL_HELLFIRE: // Warlock Hellfire [Brain] 
     2348                                                skillratio += 25*skill_lv; 
     2349                                                break; 
     2350                                        case WL_SHADOWBURN: // Warlock Shadow Burn [Brain] 
     2351                                                skillratio += 20*skill_lv; 
     2352                                                break; 
     2353                                        case WL_CURSEDOOM: // Warlock Curse of Doom [Brain] 
     2354                                                skillratio += 400 + 300*skill_lv; //max 20*matk dmg after 60 seconds 
     2355                                                break; 
     2356                                        case WL_SEARING: // Warlock Searing Pain [Brain] 
     2357                                                if(status_get_sc(target)->data[SC_SEARING]) 
     2358                                                        skillratio = 10*pc_checkskill(sd,WL_SEARING);//10% * skilllv 
     2359                                                break; //Else 100% Matk 
     2360                                        case WL_IMMOLATE: // Warlock Immolate [Brain] 
     2361                                                if(status_get_sc(target)->data[SC_IMMOLATE]) 
     2362                                                        skillratio += 10*pc_checkskill(sd,WL_SEARING);//100% +10 * searing lv 
     2363                                                else skillratio += -20 + 20*skill_lv;// Else 80% + 20% * skill lv 
     2364                                                break; 
     2365                                        case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] 
     2366                                                skillratio += 100 + 60*skill_lv + //damage bonus from other fire skills 
     2367                                                        10*pc_checkskill(sd,WL_SEARING) + 10*pc_checkskill(sd,WL_IMMOLATE); 
     2368                                                break; 
     2369 
    23732370                                } 
    23742371 
    23752372                                MATK_RATE(skillratio); 
    2376  
     2373                         
    23772374                                //Constant/misc additions from skills 
    23782375                                if (skill_num == WZ_FIREPILLAR) 
     
    24262423                        } 
    24272424                } 
    2428  
     2425                 
    24292426                if (skill_num == NPC_EARTHQUAKE) 
    24302427                {       //Adds atk2 to the damage, should be influenced by number of hits and skill-ratio, but not mdef reductions. [Skotlex] 
     
    24412438                if (!(nk&NK_NO_ELEFIX)) 
    24422439                        ad.damage=battle_attr_fix(src, target, ad.damage, s_ele, tstatus->def_ele, tstatus->ele_lv); 
    2443  
    2444  
    2445         if(skill_num == WL_SHADOWBURN) { // Warlock Shadow Burn [Brain] 
    2446                 // This is where we calculate the secondary damage 
    2447                 if(ad.damage<1) ad.damage=1; 
    2448                 struct Damage md = battle_calc_misc_attack(src,target,skill_num,skill_lv, mflag); 
    2449                 if(md.damage<1) md.damage=1; //Changed MD = WD 
    2450                 ad.damage += md.damage; // Same as above 
    2451         } 
    2452  
     2440//Take this into account for errors. It looks out of place/outdated but I will not look further into it until I know. 
     2441                if(skill_num == WL_SHADOWBURN) { // Warlock Shadow Burn [Brain] 
     2442                        // This is where we calculate the secondary damage 
     2443                        if(ad.damage<1) ad.damage=1; 
     2444                        struct Damage md = battle_calc_misc_attack(src,target,skill_num,skill_lv, mflag); 
     2445                        if(md.damage<1) md.damage=1; 
     2446                        ad.damage += md.damage; 
     2447                } 
    24532448                if (sd && !(nk&NK_NO_CARDFIX_ATK)) { 
    24542449                        short t_class = status_get_class(target); 
     
    25052500 
    25062501        damage_div_fix(ad.damage, ad.div_); 
    2507  
     2502         
    25082503        if (flag.infdef && ad.damage) 
    25092504                ad.damage = ad.damage>0?1:-1; 
    2510  
     2505                 
    25112506        ad.damage=battle_calc_damage(src,target,ad.damage,ad.div_,skill_num,skill_lv,ad.flag); 
    25122507        if (map_flag_gvg2(target->m)) 
     
    25452540 
    25462541        nk = skill_get_nk(skill_num); 
    2547  
     2542         
    25482543        sd = BL_CAST(BL_PC, src); 
    25492544        tsd = BL_CAST(BL_PC, target); 
    2550  
     2545         
    25512546        if(sd) { 
    25522547                sd->state.arrow_atk = 0; 
     
    25792574                if(mflag > 1) //Autocasted Blitz. 
    25802575                        nk|=NK_SPLASHSPLIT; 
    2581  
     2576                 
    25822577                if (skill_num == SN_FALCONASSAULT) 
    25832578                { 
    25842579                        //Div fix of Blitzbeat 
    25852580                        skill = skill_get_num(HT_BLITZBEAT, 5); 
    2586                         damage_div_fix(md.damage, skill); 
     2581                        damage_div_fix(md.damage, skill);  
    25872582 
    25882583                        //Falcon Assault Modifier 
     
    26502645        case NPC_EVILLAND: 
    26512646                md.damage = (skill_lv>6)?666:skill_lv*100; 
    2652                 //break; 
     2647//Why the hell is this supposed to be above the break? 
    26532648        case WL_SHADOWBURN: // Warlock ShadowBurn dark element damage [Brain] 
    26542649                s_ele = ELE_DARK; 
    26552650                md.damage = ((300 + 20*skill_lv)/100)*((sstatus->int_*(rand()%300+500))/100); //Fixed between min and max matk for now 
    26562651                break; 
     2652                 
     2653// Wouldn't this work better? 
     2654 
     2655/*      case WL_SHADOWBURN: // Warlock ShadowBurn dark element damage [Brain] 
     2656                s_ele = ELE_DARK; 
     2657                md.damage = ((300 + 20*skill_lv)/100)*((sstatus->int_*(rand()%300+500))/100); //Fixed between min and max matk for now 
     2658break;*/ 
    26572659        } 
    26582660 
     
    26652667 
    26662668        damage_div_fix(md.damage, md.div_); 
    2667  
     2669         
    26682670        if (!(nk&NK_IGNORE_FLEE)) 
    26692671        { 
     
    26772679                                hitrate=80; //Default hitrate 
    26782680 
    2679                         if(battle_config.agi_penalty_type && 
     2681                        if(battle_config.agi_penalty_type &&  
    26802682                                battle_config.agi_penalty_target&target->type) 
    2681                         { 
     2683                        {        
    26822684                                unsigned char attacker_count; //256 max targets should be a sane max 
    26832685                                attacker_count = unit_counttargeted(target,battle_config.agi_penalty_count_lv); 
     
    28142816                if (*damage <= 0) continue; 
    28152817                //First and Third iterations: race, other two boss/nonboss state 
    2816                 if (i == 0 || i == 2) 
     2818                if (i == 0 || i == 2)  
    28172819                        type = race; 
    28182820                else 
    28192821                        type = boss?RC_BOSS:RC_NONBOSS; 
    2820  
     2822                 
    28212823                hp = wd->hp_drain[type].value; 
    28222824                if (wd->hp_drain[type].rate) 
     
    28412843        if (sd->sp_vanish_rate && rand()%1000 < sd->sp_vanish_rate) 
    28422844                status_percent_damage(&sd->bl, tbl, 0, (unsigned char)sd->sp_vanish_per, false); 
    2843 // Adept Blood Pact drains 5% damage per hit [FlavioJS/Brain] 
     2845//I don't know about this. But it looks like it fits fine 
     2846        // Adept Blood Pact drains 5% damage per hit [FlavioJS/Brain] 
    28442847        if( pc_checkskill(sd, AD_BLOODPACT) > 0 ) 
    2845         thp += battle_calc_drain(rdamage,1000,5); 
     2848                thp += battle_calc_drain(rdamage,1000,5); 
    28462849 
    28472850        // Warlock Soul Steal drains 1%*skilllv damage per hit [Brain] 
    28482851        if( pc_checkskill(sd, WL_SOULSTEAL) > 0 ) 
    2849         tsp += battle_calc_drain(rdamage,1000,pc_checkskill(sd,WL_SOULSTEAL)); 
     2852                tsp += battle_calc_drain(rdamage,1000,pc_checkskill(sd,WL_SOULSTEAL)); 
    28502853        // Warlock Touch of Corruption burns 1%*skilllv damage as SP per hit [Brain] 
    2851         if( pc_checkskill(sd, WL_CORRUPTION) > 0 ) { 
    2852         int corrupt_sp; 
    2853         corrupt_sp = battle_calc_drain(rdamage,1000,pc_checkskill(sd,WL_CORRUPTION)); 
    2854         if(status_damage(NULL, tbl, 0, corrupt_sp, 0, 3)) 
    2855                 rhp += corrupt_sp;//If SP damage was caused, increase HP damage too 
    2856         } 
     2854        if( pc_checkskill(sd, WL_CORRUPTION) > 0 ) {// This is the opener, whoops lol. 
     2855                int corrupt_sp; 
     2856                corrupt_sp = battle_calc_drain(rdamage,1000,pc_checkskill(sd,WL_CORRUPTION)); 
     2857                if(status_damage(NULL, tbl, 0, corrupt_sp, 0, 3)) 
     2858                        rhp += corrupt_sp;//If SP damage was caused, increase HP damage too 
     2859        }// Where does this bracket open? 
     2860 
    28572861        if (!thp && !tsp) return; 
    28582862 
    28592863        status_heal(&sd->bl, thp, tsp, battle_config.show_hp_sp_drain?3:1); 
    2860  
     2864         
    28612865        if (rhp || rsp) 
    28622866                status_zap(tbl, rhp, rsp); 
     
    28942898        if (tsc && !tsc->count) 
    28952899                tsc = NULL; 
    2896  
     2900         
    28972901        if (sd) 
    28982902        { 
     
    30573061 
    30583062        if (tsc) { 
    3059                 if (tsc->data[SC_POISONREACT] && 
     3063                if (tsc->data[SC_POISONREACT] &&  
    30603064                        (rand()%100 < tsc->data[SC_POISONREACT]->val3 
    30613065                        || sstatus->def_ele == ELE_POISON) && 
     
    30783082        return wd.dmg_lv; 
    30793083} 
    3080  
     3084//new battle check code, i speculate it. But it looks like it just calls other races and elements into one big one. 
    30813085int battle_check_living(int race,int element)// Living creature check [Brain] 
    30823086{ 
    30833087        if(element == ELE_UNDEAD || race == RC_UNDEAD // Undead element and race check 
    3084         || race == RC_DEMON             // Demon race check 
    3085         || race == RC_FORMLESS          // Formless race check 
    3086         || element == ELE_GHOST){       // Ghost element check 
    3087         return 0; 
     3088                || race == RC_DEMON                     // Demon race check 
     3089                || race == RC_FORMLESS                  // Formless race check 
     3090                || element == ELE_GHOST){               // Ghost element check 
     3091                return 0; 
    30883092        } 
    30893093        else { 
     
    30913095        } 
    30923096} 
    3093  
    30943097int battle_check_undead(int race,int element) 
    30953098{ 
     
    32193222                        break; 
    32203223                //All else not specified is an invalid target. 
    3221                 default: 
     3224                default:         
    32223225                        return 0; 
    32233226        } 
     
    33363339                        break; 
    33373340        } 
    3338  
    3339         if ((flag&BCT_ALL) == BCT_ALL) { //All actually stands for all attackable chars 
     3341         
     3342        if ((flag&BCT_ALL) == BCT_ALL) { //All actually stands for all attackable chars  
    33403343                if (target->type&BL_CHAR) 
    33413344                        return 1; 
     
    33453348        if (flag == BCT_NOONE) //Why would someone use this? no clue. 
    33463349                return -1; 
    3347  
     3350         
    33483351        if (t_bl == s_bl) 
    33493352        {       //No need for further testing. 
     
    33533356                return (flag&state)?1:-1; 
    33543357        } 
    3355  
     3358         
    33563359        if (map_flag_vs(m)) { //Check rivalry settings. 
    33573360                if (flag&(BCT_PARTY|BCT_ENEMY)) { 
     
    34033406                } 
    34043407        } 
    3405  
     3408         
    34063409        if (!state) //If not an enemy, nor a guild, nor party, nor yourself, it's neutral. 
    34073410                state = BCT_NEUTRAL; 
     
    37333736        { "require_glory_guild",                &battle_config.require_glory_guild,             0,      0,      1,              }, 
    37343737        { "idle_no_share",                      &battle_config.idle_no_share,                   0,      0,      INT_MAX,        }, 
    3735         { "party_even_share_bonus",             &battle_config.party_even_share_bonus,          0,      0,      INT_MAX,        }, 
     3738        { "party_even_share_bonus",             &battle_config.party_even_share_bonus,          0,      0,      INT_MAX,        },  
    37363739        { "delay_battle_damage",                &battle_config.delay_battle_damage,             1,      0,      1,              }, 
    37373740        { "hide_woe_damage",                    &battle_config.hide_woe_damage,                 0,      0,      1,              }, 
     
    38063809        { "auction_feeperhour",                 &battle_config.auction_feeperhour,              12000,  0,      INT_MAX,        }, 
    38073810        { "auction_maximumprice",               &battle_config.auction_maximumprice,            500000000, 0,   MAX_ZENY,       }, 
     3811//battle conf declarations, does this mean we add new lines to battle.conf? 
    38083812        //Vanaheim battle settings [Brainstorm] 
    3809         { "necro_retaliation",            &battle_config.necro_retaliation,                1,     0,      1,              }, 
    3810         { "disp_summon_stats",            &battle_config.disp_summon_stats,                0,     0,      1,              }, 
    3811  
     3813        { "necro_retaliation",                  &battle_config.necro_retaliation,               1,      0,      1,              }, 
     3814        { "disp_summon_stats",                  &battle_config.disp_summon_stats,               0,      0,      1,              }, 
    38123815        { "gm_viewequip_min_lv",                &battle_config.gm_viewequip_min_lv,             0,      0,      99,             }, 
     3816        { "homunculus_auto_vapor",              &battle_config.homunculus_auto_vapor,           0,      0,      1,              }, 
    38133817}; 
    38143818 
     
    38543858        battle_config.monster_max_aspd = 2000 - battle_config.monster_max_aspd*10; 
    38553859        battle_config.max_aspd = 2000 - battle_config.max_aspd*10; 
    3856         battle_config.max_walk_speed = 100*DEFAULT_WALK_SPEED/battle_config.max_walk_speed; 
     3860        battle_config.max_walk_speed = 100*DEFAULT_WALK_SPEED/battle_config.max_walk_speed;      
    38573861        battle_config.max_cart_weight *= 10; 
    3858  
     3862         
    38593863        if(battle_config.max_def > 100 && !battle_config.weapon_defense_type)    // added by [Skotlex] 
    38603864                battle_config.max_def = 100; 
     
    38623866        if(battle_config.min_hitrate > battle_config.max_hitrate) 
    38633867                battle_config.min_hitrate = battle_config.max_hitrate; 
    3864  
     3868                 
    38653869        if(battle_config.pet_max_atk1 > battle_config.pet_max_atk2)     //Skotlex 
    38663870                battle_config.pet_max_atk1 = battle_config.pet_max_atk2; 
    3867  
     3871         
    38683872        if (battle_config.day_duration && battle_config.day_duration < 60000) // added by [Yor] 
    38693873                battle_config.day_duration = 60000; 
    38703874        if (battle_config.night_duration && battle_config.night_duration < 60000) // added by [Yor] 
    38713875                battle_config.night_duration = 60000; 
    3872  
     3876         
    38733877#ifndef CELL_NOSTACK 
    38743878        if (battle_config.cell_stack_limit != 1) 
  • src/map/battle.h

    r19 r24  
    8888 
    8989int battle_check_undead(int race,int element); 
     90// seems fine. 
    9091int battle_check_living(int race,int element);  //Living Creature Check [Brain] 
    9192int battle_check_target(struct block_list *src, struct block_list *target,int flag); 
     
    453454        int auction_feeperhour; 
    454455        int auction_maximumprice; 
     456//Declares the conf reader should check for these 
    455457        //Vanaheim battle settings [Brainstorm] 
    456458        int necro_retaliation; //Battle flag to force monsters to attack adept/necro/warlock summons [Brain] 
    457459        int disp_summon_stats; //Battle Flag to show summoned monster stats [Brain] 
    458460        int gm_viewequip_min_lv; 
     461        int homunculus_auto_vapor; //Keep Homunculus from Vaporizing when master dies. [L0ne_W0lf] 
    459462} battle_config; 
    460463 
  • src/map/chrif.c

    r1 r24  
    1818#include "pc.h" 
    1919#include "pet.h" 
     20#include "skill.h" 
    2021#include "status.h" 
    2122#include "mercenary.h" 
     
    911912        { 
    912913                sd->status.child = 0; 
    913                 sd->status.skill[410].id = 0; 
    914                 sd->status.skill[410].lv = 0; 
    915                 sd->status.skill[410].flag = 0; 
     914                sd->status.skill[WE_CALLBABY].id = 0; 
     915                sd->status.skill[WE_CALLBABY].lv = 0; 
     916                sd->status.skill[WE_CALLBABY].flag = 0; 
    916917                clif_skillinfoblock(sd); 
    917918        } 
     
    920921        { 
    921922                sd->status.child = 0; 
    922                 sd->status.skill[410].id = 0; 
    923                 sd->status.skill[410].lv = 0; 
    924                 sd->status.skill[410].flag = 0; 
     923                sd->status.skill[WE_CALLBABY].id = 0; 
     924                sd->status.skill[WE_CALLBABY].lv = 0; 
     925                sd->status.skill[WE_CALLBABY].flag = 0; 
    925926                clif_skillinfoblock(sd); 
    926927        } 
  • src/map/clif.c

    r1 r24  
    70627062        clif_weather_check(sd); 
    70637063        if( pc_issit(sd) ) 
    7064                 clif_sitting(&sd->bl); 
     7064                clif_sitting(&sd->bl); // FIXME: just send to self, not area 
    70657065        if( pc_isdead(sd) ) //When you refresh, resend the death packet. 
    7066                 clif_clearunit_area(&sd->bl,1); 
     7066                clif_clearunit_single(sd->bl.id,1,sd->fd); 
    70677067 
    70687068#ifndef TXT_ONLY 
  • src/map/clif.h

    r1 r24  
    176176void clif_divorced(struct map_session_data* sd, const char* name); 
    177177//void clif_callpartner(struct map_session_data *sd); 
    178 void clif_adopt_process(struct map_session_data *sd); 
    179178void clif_soundeffect(struct map_session_data* sd, struct block_list* bl, const char* name, int type); 
    180179int clif_soundeffectall(struct block_list* bl, const char *name, int type, enum send_target coverage); 
  • src/map/itemdb.c

    r19 r24  
    242242        if (jobmask & 1<<JOB_NINJA) 
    243243                bclass[0] |= 1<<MAPID_NINJA; 
     244//why does it have job masks as 26 27 28? wasnt it 29 30 31 or something? 
    244245        //Custom Classes 
    245246        if (jobmask & 1<<26) // Adept [Brain] 
    246         bclass[0] |= 1<<MAPID_ADEPT; 
     247                bclass[0] |= 1<<MAPID_ADEPT; 
    247248        if (jobmask & 1<<27) // Necromancer [Brain] 
    248         bclass[1] |= 1<<MAPID_ADEPT; 
     249                bclass[1] |= 1<<MAPID_ADEPT; 
    249250        if (jobmask & 1<<28) // Warlock [Brain] 
    250         bclass[2] |= 1<<MAPID_ADEPT; 
     251                bclass[2] |= 1<<MAPID_ADEPT; 
    251252} 
    252253 
  • src/map/mail.c

    r1 r24  
    5656 
    5757        if (flag && sd->mail.zeny > 0) 
     58        {  //Zeny send 
     59                if(log_config.zeny) 
     60                        log_zeny(sd, "E", sd, -sd->mail.zeny); 
     61 
    5862                sd->status.zeny -= sd->mail.zeny; 
    59  
     63        } 
    6064        sd->mail.zeny = 0; 
    6165        clif_updatestatus(sd, SP_ZENY); 
     
    147151 
    148152        if( zeny > 0 ) 
     153        {  //Zeny recieve 
     154                if(log_config.zeny) 
     155                        log_zeny(sd, "E", sd, zeny); 
    149156                pc_getzeny(sd, zeny); 
     157        } 
    150158} 
    151159 
     
    166174        nullpo_retv(sd); 
    167175        nullpo_retv(msg); 
     176 
     177        // Item  recieve (due to failure) 
     178        if(log_config.enable_logs&0x2000) 
     179                log_pick_pc(sd, "E", msg->item.nameid, msg->item.amount, &msg->item); 
    168180 
    169181        pc_additem(sd, &msg->item, msg->item.amount); 
     
    171183        if( msg->zeny > 0 ) 
    172184        { 
     185                //Zeny recieve (due to failure) 
     186                if(log_config.zeny) 
     187                        log_zeny(sd, "E", sd, msg->zeny); 
     188 
    173189                sd->status.zeny += msg->zeny; 
    174190                clif_updatestatus(sd, SP_ZENY); 
  • src/map/map.h

    r19 r24  
    7777        MAPID_XMAS, 
    7878        MAPID_SUMMER, 
     79        //Bit masking is used here? 
    7980        MAPID_ADEPT = 0x0E,     // Adept [Brain] 
    8081//2_1 classes 
     
    8788        MAPID_ASSASSIN, 
    8889        MAPID_STAR_GLADIATOR, 
     90        //and here and down there 
    8991        MAPID_NECROMANCER = JOBL_2_1|0x0E,      // Necromancer [Brain] 
    9092//2_2 classes 
     
    9698        MAPID_ROGUE, 
    9799        MAPID_SOUL_LINKER, 
     100        //see. why are the bitmasks like this? Xray thing? 
    98101        MAPID_WARLOCK = JOBL_2_2|0x0E, // Warlock [Flavio] 
    99102//1-1, advanced 
     
    293296        SP_PERFECT_HIT_RATE,SP_PERFECT_HIT_ADD_RATE,SP_CRITICAL_RATE,SP_GET_ZENY_NUM,SP_ADD_GET_ZENY_NUM, // 1038-1042 
    294297        SP_ADD_DAMAGE_CLASS,SP_ADD_MAGIC_DAMAGE_CLASS,SP_ADD_DEF_CLASS,SP_ADD_MDEF_CLASS, // 1043-1046 
    295         SP_ADD_MONSTER_DROP_ITEM,SP_DEF_RATIO_ATK_ELE,SP_DEF_RATIO_ATK_RACE,SP_ADD_SPEED, // 1047-1050 
     298        SP_ADD_MONSTER_DROP_ITEM,SP_DEF_RATIO_ATK_ELE,SP_DEF_RATIO_ATK_RACE,SP_FREE3, // 1047-1050 
    296299        SP_HIT_RATE,SP_FLEE_RATE,SP_FLEE2_RATE,SP_DEF_RATE,SP_DEF2_RATE,SP_MDEF_RATE,SP_MDEF2_RATE, // 1051-1057 
    297300        SP_SPLASH_RANGE,SP_SPLASH_ADD_RANGE,SP_AUTOSPELL,SP_HP_DRAIN_RATE,SP_SP_DRAIN_RATE, // 1058-1062 
     
    320323        //2020 (SP_FREE) (previously SP_ADD_DAMAGE_BY_CLASS) 
    321324        //2033 (SP_FREE2) (previously SP_ADDEFF_WHENHIT_SHORT) 
     325        //1050 (SP_FREE3) (previously SP_ADD_SPEED) 
    322326}; 
    323327 
  • src/map/mob.c

    r19 r24  
    20262026                        break; 
    20272027                //Let players decide whether to retaliate versus the master or the mob. [Skotlex] 
    2028                 /*if (md2->master_id && battle_config.retaliate_to_master) 
    2029                         md->attacked_id = md2->master_id;*/ 
    2030                         if (md2->master_id && battle_config.retaliate_to_master) 
    2031         { 
    2032                 //necro_retaliation config (same as above, but only works for adept/necro/warlock summons) [Brainstorm] 
    2033                 if(!battle_config.necro_retaliation && (md2->class_ >= 3100 && md2->class_ <= 3235)) 
    2034                 md->attacked_id = src->id; 
    2035                 else md->attacked_id = md2->master_id; //All normal summons 
    2036         } 
     2028                if (md2->master_id && battle_config.retaliate_to_master) 
     2029//this is odd... does that mean if you have a pet out it will get attecked instead of you? 
     2030                { 
     2031                        //necro_retaliation config (same as above, but only works for adept/necro/warlock summons) [Brainstorm] 
     2032                        if(!battle_config.necro_retaliation && (md2->class_ >= 3100 && md2->class_ <= 3235)) 
     2033                                md->attacked_id = src->id; 
     2034                        else md->attacked_id = md2->master_id; //All normal summons 
     2035                } 
    20372036 
    20382037                else 
     
    25562555                mob_script_callback(md, src, CALLBACK_DEAD); 
    25572556        else 
    2558         if(md->npc_event[0] && !md->npc_killmonster) 
     2557        if(md->npc_event[0] && !md->state.npc_killmonster) 
    25592558        { 
    25602559                md->status.hp = 0; //So that npc_event invoked functions KNOW that I am dead. 
     
    28362835} 
    28372836 
     2837//Weird structure, is this in the right place? 
    28382838/// Count slaves with a certain master and class. by FlavioJS [Brain] 
    28392839static int mob_countslave_class_sub(struct block_list* bl, va_list ap) 
     
    28512851        if( md->master_id == id ) 
    28522852        {// has the correct master 
    2853         int i; 
    2854         for( i = 0; i < count; ++i ) 
    2855         { 
    2856                 if( md->class_ == classes[i] ) 
    2857                 return 1; 
    2858         } 
     2853                int i; 
     2854                for( i = 0; i < count; ++i ) 
     2855                { 
     2856                        if( md->class_ == classes[i] ) 
     2857                                return 1; 
     2858                } 
    28592859        } 
    28602860        return 0; 
     
    40334033                "mob_boss.txt", 
    40344034                "mob_pouch.txt", 
    4035                 "mob_familiar.txt" 
    4036         }; 
     4035                "mob_familiar.txt" // familiar By FlavioJS [Brain] 
     4036                };//mob_familiar.txt make sure the name is right. 
    40374037 
    40384038        memset(&summon, 0, sizeof(summon)); 
  • src/map/mob.h

    r19 r24  
    1212 
    1313 
    14 #define MAX_RANDOMMONSTER 5 
    15 #define MAX_MOB_RACE_DB 6 
     14#define MAX_RANDOMMONSTER 5 //seems okay. just makes it so you can hold 5 summons at once. 
     15#define MAX_MOB_RACE_DB 6 //should this be changed though? I assume since undead was only expanded it's fine but it may fix something later. 
    1616 
    1717// Change this to increase the table size in your mob_db to accomodate a larger mob database. 
    1818// Be sure to note that IDs 4001 to 4048 are reserved for advanced/baby/expanded classes. 
    1919// Notice that the last 1000 entries are used for player clones, so always set this to desired value +1000 
    20 #define MAX_MOB_DB 7000 
     20#define MAX_MOB_DB 7000 //7000 should work fine. 
    2121 
    2222//The number of drops all mobs have and the max drop-slot that the steal skill will attempt to steal from. 
     
    113113                unsigned char attacked_count; //For rude attacked. 
    114114                int provoke_flag; // Celest 
     115                unsigned npc_killmonster: 1; //for new killmonster behavior 
    115116        } state; 
    116117        struct guardian_data* guardian_data;  
     
    142143        unsigned int skilldelay[MAX_MOBSKILL]; 
    143144        char npc_event[50]; 
    144         int npc_killmonster; //for new killmonster behavior 
    145145}; 
    146146 
     
    270270int mob_countslave(struct block_list *bl); 
    271271int mob_convertslave(struct mob_data *md); 
     272// I really don't see the point in this... 
    272273int mob_countslave_class(struct block_list* bl, int count, short* classes); // By FlavioJS [Brain] 
    273274 
  • src/map/pc.c

    r22 r24  
    133133} 
    134134 
    135 void pc_setinvincibletimer(struct map_session_data* sd, int val) 
     135void pc_setinvincibletimer(struct map_session_data* sd, int val)  
    136136{ 
    137137        nullpo_retv(sd); 
     
    258258                case MAPID_TAEKWON: // Taekwon 
    259259                        clif_fame_taekwon(sd,count); 
    260                         break; 
     260                        break;   
    261261        } 
    262262        chrif_updatefamelist(sd); 
     
    267267{ 
    268268        int i; 
    269  
     269         
    270270        switch(job){ 
    271271                case MAPID_BLACKSMITH: // Blacksmith 
     
    330330                sd->status.clothes_color=0; 
    331331 
    332         //Only copy the Cart/Peco/Falcon options, the rest are handled via 
     332        //Only copy the Cart/Peco/Falcon options, the rest are handled via  
    333333        //status change load/saving. [Skotlex] 
    334334        sd->status.option = sd->sc.option&(OPTION_CART|OPTION_FALCON|OPTION_RIDING); 
    335  
     335                 
    336336        if (sd->sc.data[SC_JAILED]) 
    337337        {       //When Jailed, do not move last point. 
     
    403403        if (!itemdb_isequip2(sd->inventory_data[n])) 
    404404                return 0; //Not equippable by players. 
    405  
     405         
    406406        ep = sd->inventory_data[n]->equip; 
    407407        if(sd->inventory_data[n]->look == W_DAGGER      || 
     
    518518        if (itemdb_isspecial(item->card[0])) 
    519519                return 1; 
    520  
     520         
    521521        ARR_FIND( 0, s, i, item->card[i] && (data = itemdb_exists(item->card[i])) != NULL && data->flag.no_equip&flag ); 
    522522        return( i < s ) ? 0 : 1; 
     
    535535                if( i == EQI_HEAD_MID && sd->equip_index[EQI_HEAD_LOW] == index ) continue; 
    536536                if( i == EQI_HEAD_TOP && (sd->equip_index[EQI_HEAD_MID] == index || sd->equip_index[EQI_HEAD_LOW] == index) ) continue; 
    537  
     537         
    538538                if( !sd->inventory_data[index] ) continue; 
    539539 
     
    568568        // Parents need to have their ring equipped 
    569569        if( !pc_isequipped(p1_sd, WEDDING_RING_M) && !pc_isequipped(p1_sd, WEDDING_RING_F) ) 
    570                 return false; 
     570                return false;  
    571571 
    572572        if( !pc_isequipped(p2_sd, WEDDING_RING_M) && !pc_isequipped(p2_sd, WEDDING_RING_F) ) 
     
    603603        int job, joblevel; 
    604604        unsigned int jobexp; 
    605  
     605         
    606606        if( !pc_can_Adopt(p1_sd, p2_sd, b_sd) ) 
    607607                return false; 
     
    632632                pc_skill(p1_sd, WE_CALLBABY, 1, 0); 
    633633                pc_skill(p2_sd, WE_CALLBABY, 1, 0); 
    634  
     634                 
    635635                return true; 
    636636        } 
     
    660660                return 0; 
    661661        if(map_flag_gvg(sd->bl.m) && ((item->flag.no_equip&2) || !pc_isAllowedCardOn(sd,item->slot,n,2))) 
    662                 return 0; 
     662                return 0;  
    663663        if(map[sd->bl.m].flag.restricted) 
    664664        { 
     
    669669 
    670670        if (sd->sc.count) { 
    671  
     671                         
    672672                if(item->equip & EQP_ARMS && item->type == IT_WEAPON && sd->sc.data[SC_STRIPWEAPON]) // Also works with left-hand weapons [DracoRPG] 
    673673                        return 0; 
     
    698698        if (!(1<<(sd->class_&MAPID_BASEMASK)&item->class_base[(sd->class_&JOBL_2_1)?1:((sd->class_&JOBL_2_2)?2:0)])) 
    699699                return 0; 
    700  
     700         
    701701        //Not equipable by upper class. [Skotlex] 
    702702        if(!(1<<((sd->class_&JOBL_UPPER)?1:((sd->class_&JOBL_BABY)?2:0))&item->class_upper)) 
     
    730730                sd->class_ = MAPID_NOVICE; 
    731731        } else 
    732                 sd->class_ = i; 
     732                sd->class_ = i;  
    733733        //Initializations to null/0 unneeded since map_session_data was filled with 0 upon allocation. 
    734734        if(!sd->status.hp) pc_setdead(sd); 
     
    739739        sd->npc_timer_id = -1; 
    740740        sd->pvp_timer = -1; 
    741  
     741         
    742742        sd->canuseitem_tick = tick; 
    743743        sd->cantalk_tick = tick; 
     
    754754        if (battle_config.disp_zeny) 
    755755                sd->state.showzeny = 1; 
     756//Checks the battleflags to see if player has selected to see summon's stats. 
     757//I see nothing wrong here. 
    756758        //Vanaheim settings [Brainstorm] 
    757759        if (battle_config.disp_summon_stats) // Battle Flag to Show Summoned Monster Stats [Brain] 
    758         sd->state.showsummon = 1; 
    759  
     760                sd->state.showsummon = 1; 
     761 
     762         
    760763        if (!(battle_config.display_skill_fail&2)) 
    761764                sd->state.showdelay = 1; 
    762  
     765                 
    763766        // ƒAƒCƒeƒ€ƒ`ƒFƒbƒN 
    764767        pc_setinventorydata(sd); 
    765768        pc_checkitem(sd); 
    766  
     769         
    767770        status_change_init(&sd->bl); 
    768771        if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) && (pc_isGM(sd) >= get_atcommand_level(atcommand_hide))) 
     
    819822                                sd->packet_ver, CONVIP(ip)); 
    820823        } 
    821  
     824         
    822825        // Send friends list 
    823826        clif_friendslist_send(sd); 
     
    866869} 
    867870 
    868 //Attempts to set a mob. 
     871//Attempts to set a mob.  
    869872int pc_set_hate_mob(struct map_session_data *sd, int pos, struct block_list *bl) 
    870873{ 
     
    898901{ 
    899902        int i,j; 
    900  
     903         
    901904        sd->change_level = pc_readglobalreg(sd,"jobchange_level"); 
    902905        sd->die_counter = pc_readglobalreg(sd,"PC_DIE_COUNTER"); 
     
    932935                        if (i < sd->status.skill[sd->cloneskill_id].lv) 
    933936                                sd->status.skill[sd->cloneskill_id].lv = i; 
    934                         sd->status.skill[sd->cloneskill_id].flag = 13;  //cloneskill flag 
     937                        sd->status.skill[sd->cloneskill_id].flag = 13;  //cloneskill flag                        
    935938                } 
    936939        } 
     
    945948        if (sd->status.guild_id) 
    946949                guild_member_joined(sd); 
    947  
     950         
    948951        // pet 
    949952        if (sd->status.pet_id > 0) 
     
    10161019        } 
    10171020        c = pc_class2idx(c); 
    1018         for(i=0;i<MAX_SKILL;i++){ 
     1021        for(i=0;i<MAX_SKILL;i++){  
    10191022                if (sd->status.skill[i].flag != 13) //Don't touch plagiarized skills 
    10201023                        sd->status.skill[i].id=0; //First clear skills. 
    10211024        } 
    10221025 
    1023         for(i=0;i<MAX_SKILL;i++){ 
    1024                 if (sd->status.skill[i].flag && sd->status.skill[i].flag != 13){ //Restore original level of skills after deleting earned skills. 
     1026        for(i=0;i<MAX_SKILL;i++){  
     1027                if (sd->status.skill[i].flag && sd->status.skill[i].flag != 13){ //Restore original level of skills after deleting earned skills.        
    10251028                        sd->status.skill[i].lv=(sd->status.skill[i].flag==1)?0:sd->status.skill[i].flag-2; 
    10261029                        sd->status.skill[i].flag=0; 
     
    11111114                                sd->status.skill[id].flag=1; //So it is not saved, and tagged as a "bonus" skill. 
    11121115                        } else 
    1113                                 sd->status.skill[id].flag=sd->status.skill[id].lv+2; 
     1116                                sd->status.skill[id].flag=sd->status.skill[id].lv+2;  
    11141117                        sd->status.skill[id].lv= skill_tree_get_max(id, sd->status.class_); 
    11151118                } 
     
    11271130        if(battle_config.skillfree) 
    11281131                return; //Function serves no purpose if this is set 
    1129  
     1132         
    11301133        i = pc_calc_skilltree_normalize_job(sd); 
    11311134        c = pc_mapid2jobid(i, sd->status.sex); 
     
    11421145                        if(sd->status.skill[id].id) //Already learned 
    11431146                                continue; 
    1144  
     1147                         
    11451148                        for(j=0;j<5;j++) { 
    11461149                                if((k=skill_tree[c][i].need[j].id)) 
     
    11631166                        if (sd->status.job_level < skill_tree[c][i].joblv) 
    11641167                                continue; 
    1165  
     1168                         
    11661169                        j = skill_get_inf2(id); 
    11671170                        if(!sd->status.skill[id].lv && ( 
     
    12021205        int skill_point; 
    12031206        int c = sd->class_; 
    1204  
     1207         
    12051208        if (!battle_config.skillup_limit) 
    12061209                return c; 
    1207  
     1210         
    12081211        skill_point = pc_calc_skillpoint(sd); 
    12091212        if(pc_checkskill(sd, NV_BASIC) < 9) //Consider Novice Tree when you don't have NV_BASIC maxed. 
     
    16111614                        break; 
    16121615                val += (int)status->max_hp; 
    1613                 //Negative bonuses will underflow, this will be handled in status_calc_pc through casting 
     1616                //Negative bonuses will underflow, this will be handled in status_calc_pc through casting  
    16141617                //If this is called outside of status_calc_pc, you'd better pray they do not underflow and end with UINT_MAX max_hp. 
    16151618                status->max_hp = (unsigned int)val; 
    16161619                break; 
    16171620        case SP_MAXSP: 
    1618                 if(sd->state.lr_flag == 2) 
     1621                if(sd->state.lr_flag == 2)  
    16191622                        break; 
    16201623                val += (int)status->max_sp; 
     
    16581661                } 
    16591662                break; 
    1660         case SP_ADD_SPEED:      //Raw increase 
    1661                 if(sd->state.lr_flag != 2) { 
    1662                         bonus = status->speed - val; 
    1663                         status->speed = cap_value(bonus, 0, USHRT_MAX); 
    1664                 } 
    1665                 break; 
    16661663        case SP_SPEED_RATE:     //Non stackable increase 
    1667                 if(sd->state.lr_flag != 2 && sd->speed_rate > 100-val) 
    1668                         sd->speed_rate = 100-val; 
     1664                if(sd->state.lr_flag != 2) 
     1665                        sd->speed_rate = min(sd->speed_rate, -val); 
    16691666                break; 
    16701667        case SP_SPEED_ADDRATE:  //Stackable increase 
     
    26742671        if(idx_card < 0 || idx_card >= MAX_INVENTORY || !sd->inventory_data[idx_card]) 
    26752672                return 0; //Invalid card index. 
    2676  
     2673                         
    26772674        if(idx_equip < 0 || idx_equip >= MAX_INVENTORY || !sd->inventory_data[idx_equip]) 
    26782675                return 0; //Invalid item index. 
    2679  
     2676         
    26802677        nameid=sd->status.inventory[idx_equip].nameid; 
    26812678        cardid=sd->status.inventory[idx_card].nameid; 
     
    29022899        if(amount > MAX_AMOUNT) 
    29032900                return 5; 
    2904  
     2901         
    29052902        data = itemdb_search(item_data->nameid); 
    29062903        w = data->weight*amount; 
     
    29972994                return 0; //Can't drop items in nodrop mapflag maps. 
    29982995        } 
    2999  
     2996         
    30002997        if (!pc_candrop(sd,&sd->status.inventory[n])) { 
    30012998                clif_displaymessage (sd->fd, msg_txt(263)); 
    30022999                return 0; 
    30033000        } 
    3004  
     3001         
    30053002        //Logs items, dropped by (P)layers [Lupus] 
    30063003        if(log_config.enable_logs&0x8) 
     
    30103007        if (!map_addflooritem(&sd->status.inventory[n], amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 2)) 
    30113008                return 0; 
    3012  
     3009         
    30133010        pc_delitem(sd, n, amount, 0); 
    30143011        return 1; 
     
    30333030        if (sd->status.party_id) 
    30343031                p = party_search(sd->status.party_id); 
    3035  
     3032         
    30363033        if(fitem->first_get_charid > 0 && fitem->first_get_charid != sd->status.char_id) 
    30373034        { 
     
    31233120        if ((nameid == 605 || nameid == 606) && pc_issit(sd)) 
    31243121                return 0; 
    3125  
     3122           
    31263123        //added item_noequip.txt items check by Maya&[Lupus] 
    31273124        if ( 
     
    31453142        )) 
    31463143                return 0; 
    3147  
     3144         
    31483145        //Not usable by upper class. [Skotlex] 
    31493146        if(!( 
     
    33293326        if (idx < 0 || idx >= MAX_INVENTORY) //Invalid index check [Skotlex] 
    33303327                return 1; 
    3331  
     3328         
    33323329        item_data = &sd->status.inventory[idx]; 
    33333330 
     
    33693366        if (idx < 0 || idx >= MAX_CART) //Invalid index check [Skotlex] 
    33703367                return 1; 
    3371  
     3368         
    33723369        item_data=&sd->status.cart[idx]; 
    33733370 
     
    34213418        if(md->state.steal_flag == UCHAR_MAX || md->sc.opt1) //already stolen from / status change check 
    34223419                return 0; 
    3423  
     3420         
    34243421        sd_status= status_get_status_data(&sd->bl); 
    34253422        md_status= status_get_status_data(bl); 
     
    34383435        rate = (sd_status->dex - md_status->dex)/2 + lv*6 + 4; 
    34393436        rate += sd->add_steal_rate; 
    3440  
     3437                 
    34413438        if( rate < 1 ) 
    34423439                return 0; 
     
    34643461                return 0; 
    34653462        } 
    3466  
     3463         
    34673464        if(battle_config.show_steal_in_same_party) 
    34683465                party_foreachsamemap(pc_show_steal,sd,AREA_SIZE,sd,tmp_item.nameid); 
     
    34733470                log_pick_pc(sd, "P", itemid, 1, NULL); 
    34743471        } 
    3475  
     3472                 
    34763473        //A Rare Steal Global Announce by Lupus 
    34773474        if(md->db->dropitem[i].p<=battle_config.rare_drop_announce) { 
     
    36043601                //Tag player for rewarping after map-loading is done. [Skotlex] 
    36053602                sd->state.rewarp = 1; 
    3606  
     3603         
    36073604        sd->mapindex =  mapindex; 
    36083605        sd->bl.m = m; 
     
    37623759        if(!sd->sc.count) 
    37633760                return 0; 
    3764  
     3761         
    37653762        for (i = 0; i < ARRAYLENGTH(scw_list); i++) 
    37663763        {       // Skills requiring specific weapon types 
     
    37693766                        status_change_end(&sd->bl,scw_list[i],-1); 
    37703767        } 
    3771  
     3768         
    37723769        if(sd->sc.data[SC_SPURT] && sd->status.weapon) 
    37733770                // Spurt requires bare hands (feet, in fact xD) 
    37743771                status_change_end(&sd->bl,SC_SPURT,-1); 
    3775  
     3772         
    37763773        if(sd->status.shield <= 0) { // Skills requiring a shield 
    37773774                for (i = 0; i < ARRAYLENGTH(scs_list); i++) 
     
    38613858                        class_ |= MAPID_THIEF; 
    38623859                        break; 
    3863  
     3860                         
    38643861                case JOB_STAR_GLADIATOR: 
    38653862                case JOB_STAR_GLADIATOR2: 
    38663863                        class_ |= JOBL_2_1; 
    38673864                        class_ |= MAPID_TAEKWON; 
    3868                         break; 
     3865                        break;   
    38693866                case JOB_SOUL_LINKER: 
    38703867                        class_ |= JOBL_2_2; 
     
    38903887                        class_ = MAPID_SUMMER; 
    38913888                        break; 
    3892                         //Possible to be in the wrong spot? 
     3889//This is where your errors begin. 
    38933890                case JOB_NECROMANCER: // Necromancer [Brain] 
    38943891                        class_ |= JOBL_2_1; 
    38953892                        class_ |= MAPID_ADEPT; 
    3896                         break; 
     3893                        break;   
    38973894                case JOB_WARLOCK: // Warlock [Brain] 
    38983895                        class_ |= JOBL_2_2; 
     
    39233920                case MAPID_XMAS:            return JOB_XMAS; 
    39243921                case MAPID_SUMMER:          return JOB_SUMMER; 
     3922                // double check this too. 
    39253923                case MAPID_ADEPT:                       return JOB_ADEPT; // Adept [Brain] 
    39263924        //2_1 classes 
     
    39333931                case MAPID_ASSASSIN:        return JOB_ASSASSIN; 
    39343932                case MAPID_STAR_GLADIATOR:  return JOB_STAR_GLADIATOR; 
     3933                //and this 
    39353934                case MAPID_NECROMANCER:         return JOB_NECROMANCER; // Necromancer [Brain] 
    39363935        //2_2 classes 
     
    39423941                case MAPID_ROGUE:           return JOB_ROGUE; 
    39433942                case MAPID_SOUL_LINKER:     return JOB_SOUL_LINKER; 
     3943                //this too 
    39443944                case MAPID_WARLOCK:                     return JOB_WARLOCK; // Warlock [Brain] 
    39453945        //1-1: advanced 
     
    40074007        case JOB_THIEF: 
    40084008                return msg_txt(550 - JOB_NOVICE+class_); 
    4009  
     4009                 
    40104010        case JOB_KNIGHT: 
    40114011        case JOB_PRIEST: 
     
    40154015        case JOB_ASSASSIN: 
    40164016                return msg_txt(557 - JOB_KNIGHT+class_); 
    4017  
     4017                 
    40184018        case JOB_KNIGHT2: 
    40194019                return msg_txt(557); 
    4020  
     4020                 
    40214021        case JOB_CRUSADER: 
    40224022        case JOB_MONK: 
     
    40274027        case JOB_DANCER: 
    40284028                return msg_txt(563 - JOB_CRUSADER+class_); 
    4029  
     4029                         
    40304030        case JOB_CRUSADER2: 
    40314031                return msg_txt(563); 
    4032  
     4032                 
    40334033        case JOB_WEDDING: 
    40344034        case JOB_SUPER_NOVICE: 
     
    40564056        case JOB_ASSASSIN_CROSS: 
    40574057                return msg_txt(582 - JOB_LORD_KNIGHT+class_); 
    4058  
     4058                 
    40594059        case JOB_LORD_KNIGHT2: 
    40604060                return msg_txt(582); 
    4061  
     4061                 
    40624062        case JOB_PALADIN: 
    40634063        case JOB_CHAMPION: 
     
    40684068        case JOB_GYPSY: 
    40694069                return msg_txt(588 - JOB_PALADIN + class_); 
    4070  
     4070                 
    40714071        case JOB_PALADIN2: 
    40724072                return msg_txt(588); 
     
    40804080        case JOB_BABY_THIEF: 
    40814081                return msg_txt(595 - JOB_BABY + class_); 
    4082  
     4082                 
    40834083        case JOB_BABY_KNIGHT: 
    40844084        case JOB_BABY_PRIEST: 
     
    40884088        case JOB_BABY_ASSASSIN: 
    40894089                return msg_txt(602 - JOB_BABY_KNIGHT + class_); 
    4090  
     4090                 
    40914091        case JOB_BABY_KNIGHT2: 
    40924092                return msg_txt(602); 
    4093  
     4093                 
    40944094        case JOB_BABY_CRUSADER: 
    40954095        case JOB_BABY_MONK: 
     
    41004100        case JOB_BABY_DANCER: 
    41014101                return msg_txt(608 - JOB_BABY_CRUSADER +class_); 
    4102  
     4102                 
    41034103        case JOB_BABY_CRUSADER2: 
    41044104                return msg_txt(608); 
    4105  
     4105                 
    41064106        case JOB_SUPER_BABY: 
    41074107                return msg_txt(615); 
    4108  
     4108                 
    41094109        case JOB_TAEKWON: 
    41104110                return msg_txt(616); 
     
    41144114        case JOB_SOUL_LINKER: 
    41154115                return msg_txt(618); 
    4116  
     4116                 
    41174117        case JOB_GUNSLINGER: 
    41184118                return msg_txt(619); 
    41194119        case JOB_NINJA: 
    41204120                return msg_txt(620); 
     4121//message display for job change? 
    41214122        case JOB_ADEPT: // Adept [Brain] 
    4122                 return msg_txt(1000); 
     4123                return msg_txt(1000);//have to add these to the msg_txt in the conf? 
    41234124        case JOB_NECROMANCER: // Necromancer [Brain] 
    41244125                return msg_txt(1001); 
     
    41264127                return msg_txt(1002); 
    41274128 
     4129         
    41284130        default: 
    41294131                return msg_txt(650); 
     
    42194221                if (sd->status.status_point > USHRT_MAX - next) 
    42204222                        sd->status.status_point = USHRT_MAX; 
    4221                 else 
     4223                else     
    42224224                        sd->status.status_point += next; 
    42234225 
     
    42264228        if (battle_config.pet_lv_rate && sd->pd)        //<Skotlex> update pet's level 
    42274229                status_calc_pet(sd->pd,0); 
    4228  
     4230         
    42294231        clif_updatestatus(sd,SP_STATUSPOINT); 
    42304232        clif_updatestatus(sd,SP_BASELEVEL); 
     
    42964298 
    42974299        if (sd->expaddrace[status->race]) 
    4298                 bonus += sd->expaddrace[status->race]; 
     4300                bonus += sd->expaddrace[status->race];   
    42994301        bonus += sd->expaddrace[status->mode&MD_BOSS?RC_BOSS:RC_NONBOSS]; 
    4300  
    4301         if (battle_config.pk_mode && 
     4302         
     4303        if (battle_config.pk_mode &&  
    43024304                (int)(status_get_lv(src) - sd->status.base_level) >= 20) 
    4303                 bonus += 15; // pk_mode additional exp if monster >20 levels [Valaris] 
     4305                bonus += 15; // pk_mode additional exp if monster >20 levels [Valaris]   
    43044306 
    43054307        if (sd->sc.data[SC_EXPBOOST]) 
     
    43084310        if (!bonus) 
    43094311                return; 
    4310  
     4312         
    43114313        *base_exp += (unsigned int) cap_value((double)*base_exp * bonus/100., 1, UINT_MAX); 
    43124314        *job_exp += (unsigned int) cap_value((double)*job_exp * bonus/100., 1, UINT_MAX); 
     
    43374339        nextb = pc_nextbaseexp(sd); 
    43384340        nextj = pc_nextjobexp(sd); 
    4339  
     4341                 
    43404342        if(sd->state.showexp || battle_config.max_exp_gain_rate){ 
    43414343                if (nextb > 0) 
     
    43594361                } 
    43604362        } 
    4361  
     4363         
    43624364        //Cap exp to the level up requirement of the previous level when you are at max level, otherwise cap at UINT_MAX (this is required for some S. Novice bonuses). [Skotlex] 
    43634365        if (base_exp) { 
     
    45254527 
    45264528        max = pc_maxparameter(sd); 
    4527  
     4529         
    45284530        switch(type){ 
    45294531        case SP_STR: sd->status.str = cap_value(sd->status.str + val, 1, max); break; 
     
    46254627        } 
    46264628        status_calc_pc(sd,0); 
    4627         //Required because if you could level up all skills previously, 
     4629        //Required because if you could level up all skills previously,  
    46284630        //the update will not be sent as only the lv variable changes. 
    46294631        clif_skillinfoblock(sd); 
     
    47224724{ 
    47234725        nullpo_retr(0, sd); 
    4724  
     4726         
    47254727        if (battle_config.use_statpoint_table) 
    47264728        {       // New statpoint table used here - Dexity 
     
    47354737                if (sd->class_&JOBL_UPPER) 
    47364738                        stat+=52;       // extra 52+48=100 stat points 
    4737  
     4739                 
    47384740                if (stat > USHRT_MAX) 
    47394741                        sd->status.status_point = USHRT_MAX; 
     
    47754777        clif_updatestatus(sd,SP_UDEX); 
    47764778        clif_updatestatus(sd,SP_ULUK);  // End Addition 
    4777  
     4779         
    47784780        clif_updatestatus(sd,SP_STATUSPOINT); 
    47794781        status_calc_pc(sd,0); 
     
    48104812                        merc_hom_vaporize(sd, 0); 
    48114813        } 
    4812  
     4814         
    48134815        for (i = 1; i < MAX_SKILL; i++) { 
    48144816                lv= sd->status.skill[i].lv; 
     
    48394841                } 
    48404842        } 
    4841  
     4843         
    48424844        if (flag&2 || !skill_point) return skill_point; 
    48434845 
     
    49454947        if(!src || src == &sd->bl) 
    49464948                return; 
    4947  
     4949         
    49484950        if(sd->status.pet_id > 0 && sd->pd && battle_config.pet_damage_support) 
    49494951                pet_target_check(sd,src,1); 
     
    49574959        int i=0,j=0,k=0; 
    49584960        unsigned int tick = gettick(); 
    4959  
     4961                 
    49604962        if(sd->vender_id) 
    49614963                vending_closevending(sd); 
     
    49814983        } 
    49824984 
    4983         if(sd->status.hom_id > 0)       //orn 
     4985        if(sd->status.hom_id > 0 && battle_config.homunculus_auto_vapor)        //orn 
    49844986                merc_hom_vaporize(sd, 0); 
    49854987 
     
    50525054                        // karma going down = more 'good' / more honourable. 
    50535055                        // The Karma System way... 
    5054  
     5056                 
    50555057                        if (sd->status.karma > ssd->status.karma) {     // If player killed was more evil 
    50565058                                sd->status.karma--; 
     
    50595061                        else if (sd->status.karma < ssd->status.karma)  // If player killed was more good 
    50605062                                ssd->status.karma++; 
    5061  
     5063         
    50625064 
    50635065                        // or the PK System way... 
    5064  
     5066         
    50655067                        if (sd->status.karma > 0)       // player killed is dishonourable? 
    50665068                                ssd->status.karma--; // honour points earned 
    50675069                        sd->status.karma++;     // honour points lost 
    5068  
     5070                 
    50695071                        // To-do: Receive exp on certain occasions 
    50705072#endif 
     
    53135315                                stat += (sd->status.base_level + i + 14) / 5 ; 
    53145316                        if (sd->status.status_point > USHRT_MAX - stat) 
    5315  
     5317                                 
    53165318                                sd->status.status_point = USHRT_MAX; 
    53175319                        else 
     
    55155517                        status_percent_damage(NULL, &sd->bl, hp, 0, hp==-100); 
    55165518        } 
    5517  
     5519         
    55185520        if(sp) { 
    55195521                if(sp > 0) 
     
    55475549        switch (upper) { 
    55485550                case 1: 
    5549                         b_class|= JOBL_UPPER; 
     5551                        b_class|= JOBL_UPPER;  
    55505552                        break; 
    55515553                case 2: 
     
    55545556        } 
    55555557        //This will automatically adjust bard/dancer classes to the correct gender 
    5556         //That is, if you try to jobchange into dancer, it will turn you to bard. 
     5558        //That is, if you try to jobchange into dancer, it will turn you to bard.        
    55575559        job = pc_mapid2jobid(b_class, sd->status.sex); 
    55585560        if (job == -1) 
    55595561                return 1; 
    5560  
     5562         
    55615563        if ((unsigned short)b_class == sd->class_) 
    55625564                return 1; //Nothing to change. 
     
    55865588                } 
    55875589        } 
    5588  
     5590         
    55895591        sd->status.class_ = job; 
    55905592        fame_flag = pc_famerank(sd->status.char_id,sd->class_&MAPID_UPPERMASK); 
     
    56025604        } 
    56035605 
    5604         //Change look, if disguised, you need to undisguise 
     5606        //Change look, if disguised, you need to undisguise  
    56055607        //to correctly calculate new job sprite without 
    56065608        if (sd->disguise) 
     
    56305632        if(merc_is_hom_active(sd->hd) && !pc_checkskill(sd, AM_CALLHOMUN)) 
    56315633                merc_hom_vaporize(sd, 0); 
    5632  
     5634         
    56335635        if(sd->status.manner < 0) 
    56345636                clif_changestatus(&sd->bl,SP_MANNER,sd->status.manner); 
     
    57895791        else if (!(type&OPTION_FLYING) && p_type&OPTION_FLYING) 
    57905792                new_look = -1; 
    5791  
     5793         
    57925794        if (type&OPTION_WEDDING && !(p_type&OPTION_WEDDING)) 
    57935795                new_look = JOB_WEDDING; 
     
    60236025        struct global_reg *sd_reg; 
    60246026        int i,max; 
    6025  
     6027         
    60266028        nullpo_retr(0, sd); 
    60276029        switch (type) { 
     
    61006102                return 1; 
    61016103        } 
    6102  
     6104         
    61036105        // delete reg 
    61046106        if (val == 0) { 
     
    61726174                return 0; 
    61736175        } 
    6174  
     6176         
    61756177        // delete reg 
    61766178        if (!val || strcmp(val,"")==0) 
     
    63666368        if(pos == EQP_ACC) { //Accesories should only go in one of the two, 
    63676369                pos = req_pos&EQP_ACC; 
    6368                 if (pos == EQP_ACC) //User specified both slots.. 
     6370                if (pos == EQP_ACC) //User specified both slots..  
    63696371                        pos = sd->equip_index[EQI_ACC_R] >= 0 ? EQP_ACC_L : EQP_ACC_R; 
    63706372        } 
     
    65516553        clif_unequipitemack(sd,n,sd->status.inventory[n].equip,1); 
    65526554 
    6553         if((sd->status.inventory[n].equip & EQP_ARMS) && 
     6555        if((sd->status.inventory[n].equip & EQP_ARMS) &&  
    65546556                sd->weapontype1 == 0 && sd->weapontype2 == 0 && (!sd->sc.data[SC_SEVENWIND] || sd->sc.data[SC_ASPERSIO])) //Check for seven wind (but not level seven!) 
    65556557                skill_enchant_elemental_end(&sd->bl,-1); 
     
    66076609        if (sd->vender_id) //Avoid reorganizing items when we are vending, as that leads to exploits (pointed out by End of Exam) 
    66086610                return 0; 
    6609  
     6611         
    66106612        // ŠŽ•i‹ó‚«‹l‚ß 
    66116613        for(i=j=0;i<MAX_INVENTORY;i++){ 
     
    68526854                        hp = sd->battle_status.hp-1; //Script drains cannot kill you. 
    68536855        } 
    6854  
     6856         
    68556857        if (sd->sp_loss.value) { 
    68566858                sd->sp_loss.tick += diff_tick; 
     
    68816883                } 
    68826884        } 
    6883  
     6885         
    68846886        if (sd->sp_regen.value) { 
    68856887                sd->sp_regen.tick += diff_tick; 
     
    69876989        if (data == 0 && battle_config.day_duration <= 0)       // if we want a day 
    69886990                return 0; 
    6989  
     6991         
    69906992        if (!night_flag) 
    69916993                return 0; //Already day. 
    6992  
     6994         
    69936995        night_flag = 0; // 0=day, 1=night [Yor] 
    69946996        map_foreachpc(pc_daynight_timer_sub); 
     
    70087010        if (data == 0 && battle_config.night_duration <= 0)     // if we want a night 
    70097011                return 0; 
    7010  
     7012         
    70117013        if (night_flag) 
    70127014                return 0; //Already nigth. 
     
    70377039        time_t timer; 
    70387040        struct tm *t; 
    7039  
     7041         
    70407042        time(&timer); 
    70417043        t = localtime(&timer); 
    7042  
    7043         pc_setglobalreg(sd, "PC_LAST_DUEL_TIME", t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min); 
     7044         
     7045        pc_setglobalreg(sd, "PC_LAST_DUEL_TIME", t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min);  
    70447046        return; 
    70457047} 
     
    70507052        time_t timer; 
    70517053        struct tm *t; 
    7052  
     7054         
    70537055        time(&timer); 
    70547056    t = localtime(&timer); 
    7055  
     7057         
    70567058        diff = t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min - pc_readglobalreg(sd, "PC_LAST_DUEL_TIME"); 
    7057  
     7059         
    70587060        return !(diff >= 0 && diff < battle_config.duel_time_interval); 
    70597061} 
     
    70657067 
    70667068        if (sd->duel_group != ssd->duel_group) return 0; 
    7067  
     7069         
    70687070        sprintf(output, "      %d. %s", ++(*p), sd->status.name); 
    70697071        clif_disp_onlyself(ssd, output, strlen(output)); 
     
    70977099        int i=1; 
    70987100        char output[256]; 
    7099  
     7101         
    71007102        while(duel_list[i].members_count > 0 && i < MAX_DUEL) i++; 
    71017103        if(i == MAX_DUEL) return 0; 
    7102  
     7104         
    71037105        duel_count++; 
    71047106        sd->duel_group = i; 
     
    71067108        duel_list[i].invites_count = 0; 
    71077109        duel_list[i].max_players_limit = maxpl; 
    7108  
     7110         
    71097111        strcpy(output, msg_txt(372)); // " -- Duel has been created (@invite/@leave) --" 
    71107112        clif_disp_onlyself(sd, output, strlen(output)); 
    7111  
     7113         
    71127114        clif_set0199(sd, 1); 
    71137115        //clif_misceffect2(&sd->bl, 159); 
     
    71257127        target_sd->duel_invite = did; 
    71267128        duel_list[did].invites_count++; 
    7127  
     7129         
    71287130        // "Blue -- Player %s invites you to PVP duel (@accept/@reject) --" 
    71297131        sprintf(output, msg_txt(374), sd->status.name); 
     
    71437145{ 
    71447146        char output[256]; 
    7145  
     7147         
    71467148        // " <- Player %s has left duel --" 
    71477149        sprintf(output, msg_txt(375), sd->status.name); 
    71487150        clif_disp_message(&sd->bl, output, strlen(output), DUEL_WOS); 
    7149  
     7151         
    71507152        duel_list[did].members_count--; 
    7151  
     7153         
    71527154        if(duel_list[did].members_count == 0) { 
    7153                 map_foreachpc(duel_leave_sub, did); 
     7155                map_foreachpc(duel_leave_sub, did);  
    71547156                duel_count--; 
    71557157        } 
    7156  
     7158         
    71577159        sd->duel_group = 0; 
    71587160        duel_savetime(sd); 
     
    71647166{ 
    71657167        char output[256]; 
    7166  
     7168         
    71677169        duel_list[did].members_count++; 
    71687170        sd->duel_group = sd->duel_invite; 
    71697171        duel_list[did].invites_count--; 
    71707172        sd->duel_invite = 0; 
    7171  
     7173         
    71727174        // " -> Player %s has accepted duel --" 
    71737175        sprintf(output, msg_txt(376), sd->status.name); 
     
    71827184{ 
    71837185        char output[256]; 
    7184  
     7186         
    71857187        // " -- Player %s has rejected duel --" 
    71867188        sprintf(output, msg_txt(377), sd->status.name); 
    71877189        clif_disp_message(&sd->bl, output, strlen(output), DUEL_WOS); 
    7188  
     7190         
    71897191        duel_list[did].invites_count--; 
    71907192        sd->duel_invite = 0; 
     
    72847286                if (pc_split_str(line,split,4) < 4) 
    72857287                        continue; 
    7286  
     7288                 
    72877289                job_count = pc_split_atoi(split[1],jobs,':',CLASS_COUNT); 
    72887290                if (job_count < 1) 
     
    73037305                        maxlv = MAX_LEVEL; 
    73047306                } 
    7305  
     7307                 
    73067308                job = jobs[0] = pc_class2idx(job_id); 
    73077309                //We send one less and then one more because the last entry in the exp array should hold 0. 
     
    74647466                        if (i > MAX_LEVEL) 
    74657467                                break; 
    7466                         statp[i]=j; 
     7468                        statp[i]=j;                      
    74677469                        i++; 
    74687470                } 
     
    74737475        for (; i <= MAX_LEVEL; i++) { 
    74747476                j += (i+15)/5; 
    7475                 statp[i] = j; 
     7477                statp[i] = j;            
    74767478        } 
    74777479 
     
    75057507        else 
    75067508                ShowWarning("In function pc_read_motd() -> File '"CL_WHITE"%s"CL_RESET"' not found.\n", motd_txt); 
    7507  
     7509         
    75087510        return 0; 
    75097511} 
  • src/map/pc.h

    r22 r24  
    114114                unsigned short autolootid; // [Zephyrus] 
    115115                unsigned noks : 3; // [Zeph Kill Steal Protection] 
     116                //Aside from a Space it's fine, but white space has no effect so it's fine. 
     117                //Vanaheim settings [Brainstorm] 
    116118                unsigned showsummon : 1; //Show summoned monster stats [Brainstorm] 
     119 
    117120                bool changemap; 
    118121                struct guild *gmaster_flag; 
     
    143146        int fd; 
    144147        unsigned short mapindex; 
    145         unsigned short prev_speed,prev_adelay; 
    146148        unsigned char head_dir; //0: Look forward. 1: Look right, 2: Look left. 
    147149        unsigned int client_tick; 
     
    250252        int crit_atk_rate; 
    251253        int classchange; // [Valaris] 
    252         int speed_add_rate, aspd_add; 
     254        int speed_rate, speed_add_rate, aspd_add; 
    253255        unsigned int setitem_hash, setitem_hash2; //Split in 2 because shift operations only work on int ranges. [Skotlex] 
    254256         
     
    266268        int castrate,delayrate,hprate,sprate,dsprate; 
    267269        int atk_rate; 
    268         int speed_rate,hprecov_rate,sprecov_rate; 
     270        int hprecov_rate,sprecov_rate; 
    269271        int matk_rate; 
    270272        int critical_rate,hit_rate,flee_rate,flee2_rate,def_rate,def2_rate,mdef_rate,mdef2_rate; 
  • src/map/script.c

    r23 r24  
    74867486        int allflag=va_arg(ap,int); 
    74877487 
    7488         md->npc_killmonster = 1; 
     7488        md->state.npc_killmonster = 1; 
    74897489         
    74907490        if(!allflag){ 
     
    74957495                        status_kill(bl); 
    74967496        } 
    7497         md->npc_killmonster = 0; 
     7497        md->state.npc_killmonster = 0; 
    74987498        return 0; 
    74997499} 
  • src/map/skill.c

    r23 r24  
    4242#define GD_SKILLRANGEMIN 900 
    4343#define GD_SKILLRANGEMAX GD_SKILLRANGEMIN+MAX_GUILDSKILL 
    44 #define HM_SKILLRANGEMIN 1000 
     44#define HM_SKILLRANGEMIN 1100 //I know for a fact this will cause authok problems where it is, but perhaps it's changed now. 
    4545#define HM_SKILLRANGEMAX HM_SKILLRANGEMIN+MAX_HOMUNSKILL 
    4646 
     
    283283        struct status_change* sc; 
    284284        sc = status_get_sc(bl); 
    285  
     285         
    286286        // Never copy NPC/Wedding Skills 
    287287        if (skill_get_inf2(skillid)&(INF2_NPC_SKILL|INF2_WEDDING_SKILL)) 
     
    300300        if ((skillid == AL_INCAGI || skillid == AL_BLESSING)) 
    301301                return 0; 
    302  
     302                 
    303303        return 1; 
    304304} 
     
    306306// [MouseJstr] - skill ok to cast? and when? 
    307307int skillnotok (int skillid, struct map_session_data *sd) 
    308 { 
     308{        
    309309        int i,m; 
    310310        nullpo_retr (1, sd); 
    311311        m = sd->bl.m; 
    312312        i = skill_get_index(skillid); 
    313  
     313         
    314314        if (i == 0) 
    315315                return 1; // invalid skill id 
    316  
     316         
    317317        if (battle_config.gm_skilluncond && pc_isGM(sd) >= battle_config.gm_skilluncond) 
    318318                return 0;  // GMs can do any damn thing they want 
     
    354354                                return 1; 
    355355                        } 
    356                         break; 
     356                        break;   
    357357                case MC_VENDING: 
    358358                case MC_IDENTIFY: 
     
    387387        if (i == 0) 
    388388                return 1; // invalid skill id 
    389  
     389         
    390390        if (hd->blockskill[i] > 0) 
    391391                return 1; 
     
    396396 
    397397struct s_skill_unit_layout* skill_get_unit_layout (int skillid, int skilllv, struct block_list* src, int x, int y) 
    398 { 
     398{        
    399399        int pos = skill_get_unit_layout_type(skillid,skilllv); 
    400400        int dir; 
     
    420420 
    421421/*========================================== 
    422  * 
     422 *  
    423423 *------------------------------------------*/ 
    424424int skill_additional_effect (struct block_list* src, struct block_list *bl, int skillid, int skilllv, int attack_type, unsigned int tick) 
     
    450450        if (!tsc) //skill additional effect is about adding effects to the target... 
    451451                //So if the target can't be inflicted with statuses, this is pointless. 
    452                 return 0; 
     452                return 0;        
    453453 
    454454        switch(skillid) 
     
    482482                                                (2000 - 4*sstatus->agi - 2*sstatus->dex))) 
    483483                                        ; //Stance triggered 
    484                                 else if(sc->data[SC_READYTURN] && 
     484                                else if(sc->data[SC_READYTURN] &&  
    485485                                        sc_start(src,SC_COMBO, 15, TK_TURNKICK, 
    486486                                                (2000 - 4*sstatus->agi - 2*sstatus->dex))) 
     
    492492                                                rate += rate*sc->data[SC_SKILLRATE_UP]->val2/100; 
    493493                                                status_change_end(src,SC_SKILLRATE_UP,-1); 
    494                                         } 
     494                                        }  
    495495                                        sc_start4(src,SC_COMBO, rate, TK_COUNTER, bl->id,0,0, 
    496496                                                (2000 - 4*sstatus->agi - 2*sstatus->dex)); 
     
    610610        case CR_GRANDCROSS: 
    611611        case NPC_GRANDDARKNESS: 
    612                 if(tstatus->race == RC_UNDEAD || tstatus->race == RC_DEMON) 
     612                //Chance to cause blind status vs demon and undead element, but not against players 
     613                if(!dstsd && (battle_check_undead(tstatus->race,tstatus->def_ele) || tstatus->race == RC_DEMON)) 
    613614                        sc_start(bl,SC_BLIND,100,skilllv,skill_get_time2(skillid,skilllv)); 
    614615                break; 
     
    662663        case NPC_PETRIFYATTACK: 
    663664                sc_start4(bl,status_skill2sc(skillid),50+10*skilllv, 
    664                         skilllv,0,0,skill_get_time(skillid,skilllv), 
     665                        skilllv,0,0,skill_get_time(skillid,skilllv),  
    665666                        skill_get_time2(skillid,skilllv)); 
    666667                break; 
     
    680681                sc_start(bl,SC_BLEEDING,(20*skilllv),skilllv,skill_get_time2(skillid,skilllv)); 
    681682                break; 
    682         case NPC_MENTALBREAKER: 
     683        case NPC_MENTALBREAKER:  
    683684        {       //Based on observations by Tharis, Mental Breaker should do SP damage 
    684685                //equal to Matk*skLevel. 
     
    785786                        if (tsc->data[SC_ADRENALINE2]) 
    786787                                status_change_end(bl, SC_ADRENALINE2, -1); 
    787                 } 
     788                }                
    788789                break; 
    789790        case TK_TURNKICK: 
     
    821822                sc_start(bl,SC_CRITICALWOUND,100,skilllv,skill_get_time2(skillid,skilllv)); 
    822823                break; 
     824//This has weird Structure compared to the other stuff here. 
    823825        case NC_GHOULTOUCH:     //Necro Ghoul Touch [Brain] 
    824         if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed 
    825                 sc_start(bl,SC_POISON,10000,skilllv,skill_get_time2(skillid,skilllv)); 
    826         break; 
     826                if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed 
     827                        sc_start(bl,SC_POISON,10000,skilllv,skill_get_time2(skillid,skilllv)); 
     828                break; 
    827829        case NC_PWSUFFER:       //Necro Power Word: Suffer [Brain] 
    828830        case WL_PWAGONY:        //Warlock Power Word: Agony [Brain] 
    829         if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed 
    830                 sc_start(bl,skillid==NC_PWSUFFER?SC_SUFFER:SC_AGONY,1000,skilllv,skill_get_time2(skillid,skilllv)); 
    831         break; 
     831                if (battle_check_living(tstatus->race, tstatus->def_ele)) //Check if target is a living creature before proceed 
     832                        sc_start(bl,skillid==NC_PWSUFFER?SC_SUFFER:SC_AGONY,1000,skilllv,skill_get_time2(skillid,skilllv)); 
     833                break; 
    832834        case WL_SEARING:        //Warlock Searing Pain [Brain] 
    833         //The DoT is only initiated if target isnt burning already. 
    834         if(!tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) 
    835                 sc_start(bl,SC_SEARING,10000,skilllv,skill_get_time2(skillid,skilllv)); 
    836         break; 
     835                //The DoT is only initiated if target isnt burning already. 
     836                if(!tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) 
     837                        sc_start(bl,SC_SEARING,10000,skilllv,skill_get_time2(skillid,skilllv)); 
     838                break; 
    837839        case WL_IMMOLATE:       //Warlock Immolate [Brain] 
    838         //The DoT is only initiated if target isnt in immolate, but must be in searing pain status 
    839         if(tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) 
    840                 sc_start(bl,SC_IMMOLATE,10000,skilllv,skill_get_time2(skillid,skilllv)); 
    841         break; 
     840                //The DoT is only initiated if target isnt in immolate, but must be in searing pain status 
     841                if(tsc->data[SC_SEARING] && !tsc->data[SC_IMMOLATE]) 
     842                        sc_start(bl,SC_IMMOLATE,10000,skilllv,skill_get_time2(skillid,skilllv)); 
     843                break; 
    842844        case WL_SHADOWBURN:     //Warlock Shadow Burn [Brain] 
    843         sc_start(bl,SC_STUN,10000,skilllv,skill_get_time(skillid,skilllv)); 
    844         break; 
    845         //Mercenary Skills [Brainstorm] 
    846 /*      case MS_BASH: 
    847         sc_start(bl,SC_STUN,5*(skilllv-5),skilllv,skill_get_time(skillid,skilllv)); 
    848         break; 
    849         case MER_CRASH: 
    850         sc_start(bl,SC_STUN,6*skilllv,skilllv,skill_get_time(skillid,skilllv)); 
    851         break;*/ 
     845                sc_start(bl,SC_STUN,10000,skilllv,skill_get_time(skillid,skilllv)); 
     846                break; 
     847 
    852848        } 
    853849 
     
    961957        if(sd && sd->classchange && attack_type&BF_WEAPON && 
    962958                dstmd && !(tstatus->mode&MD_BOSS) && 
    963                 (rand()%10000 < sd->classchange)) 
     959                (rand()%10000 < sd->classchange))  
    964960        { 
    965961                struct mob_db *mob; 
     
    970966                                class_ = rand() % MAX_MOB_DB; 
    971967                        } while (!mobdb_checkid(class_)); 
    972  
     968                         
    973969                        rate = rand() % 1000000; 
    974970                        mob = mob_db(class_); 
     
    984980 
    985981/* Splitted off from skill_additional_effect, which is never called when the 
    986  * attack skill kills the enemy. Place in this function counter status effects 
    987  * when using skills (eg: Asura's sp regen penalty, or counter-status effects 
     982 * attack skill kills the enemy. Place in this function counter status effects  
     983 * when using skills (eg: Asura's sp regen penalty, or counter-status effects  
    988984 * from cards) that will take effect on the source, not the target. [Skotlex] 
    989  * Note: Currently this function only applies to Extremity Fist and BF_WEAPON 
     985 * Note: Currently this function only applies to Extremity Fist and BF_WEAPON  
    990986 * type of skills, so not every instance of skill_additional_effect needs a call 
    991987 * to this one. 
     
    997993        struct map_session_data *dstsd=NULL; 
    998994        struct status_change *tsc; 
    999  
     995         
    1000996        nullpo_retr(0, src); 
    1001997        nullpo_retr(0, bl); 
     
    10151011                if(tsc && tsc->data[SC_KAAHI] && tsc->data[SC_KAAHI]->val4 == -1) 
    10161012                        tsc->data[SC_KAAHI]->val4 = add_timer( 
    1017                                 tick+skill_get_time2(SL_KAAHI,tsc->data[SC_KAAHI]->val1), 
     1013                                tick+skill_get_time2(SL_KAAHI,tsc->data[SC_KAAHI]->val1),  
    10181014                                kaahi_heal_timer, bl->id, SC_KAAHI); //Activate heal. 
    10191015                break; 
     
    10471043                status_heal(src, 0, status_get_lv(bl)*(95+15*rate)/100, 2); 
    10481044        } 
    1049  
     1045//was hard to pinpoint this place. 
    10501046        // Warlock Soul Steal [Brain] 
    1051         if(sd && skillid && attack_type&BF_MAGIC && status_isdead(bl) 
    1052         && !(skill_get_inf(skillid)&(INF_GROUND_SKILL|INF_SELF_SKILL)) 
    1053         && (rate=pc_checkskill(sd,WL_SOULSTEAL))>0){// Wont work with area/ground spells (hellfire) 
    1054         if (pc_issit(sd)) pc_setstand(sd); 
    1055         clif_skill_nodamage(src,bl,WL_SOULSTEAL,rate,1); 
    1056         clif_specialeffect(src, 253, AREA); // Absorb Mana effect on caster 
    1057         status_heal(src, 0, status_get_lv(bl)*(90+10*rate)/100, 2); 
    1058         if(rand()%100 < rate) skill_additem(src,src,15020,1); //Chance to "steal" the target soul 
     1047        if(sd && skillid && attack_type&BF_MAGIC && status_isdead(bl)  
     1048                && !(skill_get_inf(skillid)&(INF_GROUND_SKILL|INF_SELF_SKILL)) 
     1049                && (rate=pc_checkskill(sd,WL_SOULSTEAL))>0){// Wont work with area/ground spells (hellfire) 
     1050                if (pc_issit(sd)) pc_setstand(sd); 
     1051                clif_skill_nodamage(src,bl,WL_SOULSTEAL,rate,1); 
     1052                clif_specialeffect(src, 253, AREA); // Absorb Mana effect on caster 
     1053                status_heal(src, 0, status_get_lv(bl)*(90+10*rate)/100, 2); 
     1054                if(rand()%100 < rate) skill_additem(src,src,15020,1); //Chance to "steal" the target soul 
    10591055        } 
    10601056 
     
    10691065                                rate+=dstsd->addeff2[i].arrow_rate; 
    10701066                        if (!rate) continue; 
    1071  
     1067                         
    10721068                        if ((dstsd->addeff2[i].flag&(ATF_LONG|ATF_SHORT)) != (ATF_LONG|ATF_SHORT)) 
    10731069                        {       //Trigger has range consideration. 
     
    10781074                        type = dstsd->addeff2[i].id; 
    10791075                        time = skill_get_time2(status_sc2skill(type),7); 
    1080  
     1076                         
    10811077                        if (dstsd->addeff2[i].flag&ATF_TARGET) 
    10821078                                status_change_start(src,type,rate,7,0,0,0,time,0); 
    1083  
     1079                         
    10841080                        if (dstsd->addeff2[i].flag&ATF_SELF && !status_isdead(bl)) 
    10851081                                status_change_start(bl,type,rate,7,0,0,0,time,0); 
     
    10891085        // Trigger counter-spells to retaliate against damage causing skills. 
    10901086        if(dstsd && !status_isdead(bl) && src != bl && dstsd->autospell2[0].id && 
    1091                 !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE)) 
     1087                !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE))  
    10921088        { 
    10931089                struct block_list *tbl; 
     
    11091105                        if (attack_type&BF_LONG) 
    11101106                                 rate>>=1; 
    1111  
     1107                         
    11121108                        if (skillnotok(skillid, dstsd)) 
    11131109                                continue; 
     
    11181114                        else 
    11191115                                tbl = src; 
    1120  
     1116                         
    11211117                        switch (skill_get_casttype(skillid)) { 
    11221118                                case CAST_GROUND: 
     
    11421138        //Auto-script when attacked 
    11431139        if(dstsd && !status_isdead(bl) && src != bl && dstsd->autoscript2[0].script && 
    1144                 !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE)) 
     1140                !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE))  
    11451141        { 
    11461142                int i; 
     
    11661162   (BCT_ENEMY/BCT_PARTY/BCT_SELF) are the valid values. 
    11671163--------------------------------------------------------------------------*/ 
    1168 int skill_break_equip (struct block_list *bl, unsigned short where, int rate, int flag) 
     1164int skill_break_equip (struct block_list *bl, unsigned short where, int rate, int flag)  
    11691165{ 
    11701166        const int where_list[4]     = {EQP_WEAPON, EQP_ARMOR, EQP_SHIELD, EQP_HELM}; 
     
    12681264        for (i = 0; i < ARRAYLENGTH(pos); i++) { 
    12691265                if (where&pos[i] && sc->data[sc_def[i]]) 
    1270                         where&=~pos[i]; 
     1266                        where&=~pos[i];  
    12711267        } 
    12721268        if (!where) return 0; 
     
    12981294        if (count == 0) 
    12991295                return 0; //Actual knockback distance is 0. 
    1300  
     1296         
    13011297        switch (target->type) 
    13021298        { 
     
    13331329 
    13341330        if (!su) 
    1335                 unit_stop_walking(target,0); 
     1331                unit_stop_walking(target,0);  
    13361332 
    13371333        dx = nx - target->x; 
     
    13501346        map_foreachinmovearea(clif_insight, target, AREA_SIZE, -dx, -dy, target->type == BL_PC ? BL_ALL : BL_PC, target); 
    13511347 
    1352         if(!(flag&0x1)) 
     1348        if(!(flag&0x1))  
    13531349                clif_blown(target); 
    13541350 
     
    13981394 * flag&0xFFF is passed to the underlying battle_calc_attack for processing 
    13991395 *      (usually holds number of targets, or just 1 for simple splash attacks) 
    1400  * flag&0x1000 is used to tag that this is a splash-attack (so the damage 
     1396 * flag&0x1000 is used to tag that this is a splash-attack (so the damage  
    14011397 *      packet shouldn't display a skill animation) 
    14021398 * flag&0x2000 is used to signal that the skilllv should be passed as -1 to the 
     
    14991495                        } 
    15001496                } 
    1501  
     1497         
    15021498                if(sc && sc->data[SC_MAGICROD] && src == dsrc) { 
    15031499                        int sp = skill_get_sp(skillid,skilllv); 
     
    15131509 
    15141510        damage = dmg.damage + dmg.damage2; 
    1515  
     1511         
    15161512        if( (skillid == AL_INCAGI || skillid == AL_BLESSING) && tsd->sc.data[SC_CHANGEUNDEAD] ) 
    15171513                damage = 1; 
     
    15241520        type=(skillid==0)?5:skill_get_hit(skillid); 
    15251521 
    1526         if(damage < dmg.div_ 
     1522        if(damage < dmg.div_  
    15271523                //Only skills that knockback even when they miss. [Skotlex] 
    15281524                && skillid != CH_PALMSTRIKE) 
     
    16531649                break; 
    16541650        } 
    1655  
     1651         
    16561652        map_freeblock_lock(); 
    16571653 
     
    16861682                } 
    16871683        } 
    1688         if (skillid != WZ_SIGHTRASHER && 
    1689                 skillid != WZ_SIGHTBLASTER && 
     1684        if (skillid != WZ_SIGHTRASHER &&  
     1685                skillid != WZ_SIGHTBLASTER &&  
    16901686                skillid != AC_SHOWER && 
    16911687                skillid != SM_MAGNUM && 
     
    17091705                        if (!status_isdead(bl)) 
    17101706                                skill_additional_effect(src,bl,skillid,skilllv,attack_type,tick); 
    1711                         //Counter status effects [Skotlex] 
     1707                        //Counter status effects [Skotlex]  
    17121708                        skill_counter_additional_effect(dsrc,bl,skillid,skilllv,attack_type,tick); 
    17131709                } 
     
    17271723                skill_blown(dsrc,bl,dmg.blewcount,direction,0); 
    17281724        } 
    1729  
     1725         
    17301726        //Delayed damage must be dealt after the knockback (it needs to know actual position of target) 
    17311727        if (dmg.amotion) 
     
    17591755 
    17601756        if (!(flag&2) && 
    1761                 ( 
     1757                (        
    17621758                        skillid == MG_COLDBOLT || skillid == MG_FIREBOLT || skillid == MG_LIGHTNINGBOLT 
    17631759                ) && 
     
    19331929        struct map_session_data *sd; 
    19341930        int gid, id, strvit, agidex; 
    1935  
     1931         
    19361932        sd = (struct map_session_data *)bl; 
    19371933 
     
    19731969        int i,j,hp,sp,hp_rate,sp_rate,state,mhp ; 
    19741970        int itemid[10],amount[ARRAYLENGTH(itemid)],index[ARRAYLENGTH(itemid)]; 
    1975  
     1971         
    19761972        nullpo_retr(0, hd); 
    19771973        sd = hd->master; 
     
    21082104                                target = src; //Required since it has to warp. 
    21092105                        if(target == NULL) 
    2110                                 break; 
     2106                                break;   
    21112107                        if(target->prev == NULL) 
    21122108                                break; 
     
    21512147                                        } 
    21522148                                        break; 
    2153  
    2154                 case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] 
    2155                         if (!status_isdead(target) && status_get_sc(target)->data[SC_SUFFER]){ 
    2156                         skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
    2157                         clif_specialeffect(target, 180, AREA); //Shadow Hit Effect on target 
    2158                         if (skl->type>1 && !status_isdead(target)) 
    2159                                 skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
    2160                         } 
    2161                         break; 
    2162                 case WL_SEARING: //Warlock Searing Pain [Brain] 
    2163                         if (!status_isdead(target) && status_get_sc(target)->data[SC_SEARING]){ 
    2164                         skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
    2165                         clif_specialeffect(target, 49, AREA); //Fire Hit Effect on target 
    2166                         if (skl->type>1 && !status_isdead(target)) 
    2167                                 skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
    2168                         } 
    2169                         break; 
    2170                 case WL_IMMOLATE: //Warlock Immolate [Brain] 
    2171                         if (!status_isdead(target) && status_get_sc(target)->data[SC_IMMOLATE]){ 
    2172                         skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
    2173                         clif_specialeffect(target, 97, AREA); //Firepillar Hit Effect on target 
    2174                         if (skl->type>1 && !status_isdead(target)) 
    2175                                 skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
    2176                         } 
    2177                         break; 
    2178                 case WL_PWAGONY: //Warlock Power Word: Agony [Brain] 
    2179                         if (!status_isdead(target) && status_get_sc(target)->data[SC_AGONY]){ 
    2180                         skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
    2181                         clif_specialeffect(target, 587, AREA); //Big Purple Flame Effect on target 
    2182                         if (skl->type>1 && !status_isdead(target)) 
    2183                                 skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
    2184                         } 
    2185                         break; 
    2186  
     2149//Could be confusing to find the right place. 
     2150                                case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] 
     2151                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_SUFFER]){ 
     2152                                                skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2153                                                clif_specialeffect(target, 180, AREA); //Shadow Hit Effect on target 
     2154                                                if (skl->type>1 && !status_isdead(target)) 
     2155                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2156                                        } 
     2157                                        break; 
     2158                                case WL_SEARING: //Warlock Searing Pain [Brain] 
     2159                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_SEARING]){ 
     2160                                                skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2161                                                clif_specialeffect(target, 49, AREA); //Fire Hit Effect on target 
     2162                                                if (skl->type>1 && !status_isdead(target)) 
     2163                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2164                                        } 
     2165                                        break; 
     2166                                case WL_IMMOLATE: //Warlock Immolate [Brain] 
     2167                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_IMMOLATE]){ 
     2168                                                skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2169                                                clif_specialeffect(target, 97, AREA); //Firepillar Hit Effect on target 
     2170                                                if (skl->type>1 && !status_isdead(target)) 
     2171                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2172                                        } 
     2173                                        break; 
     2174                                case WL_PWAGONY: //Warlock Power Word: Agony [Brain] 
     2175                                        if (!status_isdead(target) && status_get_sc(target)->data[SC_AGONY]){ 
     2176                                                skill_attack(BF_MAGIC,src,target,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_ANIMATION|SD_LEVEL); 
     2177                                                clif_specialeffect(target, 587, AREA); //Big Purple Flame Effect on target 
     2178                                                if (skl->type>1 && !status_isdead(target)) 
     2179                                                        skill_addtimerskill(src,tick+3000,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag|SD_ANIMATION); 
     2180                                        } 
     2181                                        break; 
    21872182                                default: 
    21882183                                        skill_attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag); 
     
    22202215        ud = unit_bl2ud(src); 
    22212216        nullpo_retr(1, ud); 
    2222  
     2217         
    22232218        ARR_FIND( 0, MAX_SKILLTIMERSKILL, i, ud->skilltimerskill[i] == 0 ); 
    22242219        if( i == MAX_SKILLTIMERSKILL ) return 1; 
    2225  
     2220         
    22262221        ud->skilltimerskill[i] = ers_alloc(skill_timer_ers, struct skill_timerskill); 
    22272222        ud->skilltimerskill[i]->timer = add_timer(tick, skill_timerskill, src->id, i); 
     
    22482243        ud = unit_bl2ud(src); 
    22492244        nullpo_retr(0, ud); 
    2250  
     2245                 
    22512246        for(i=0;i<MAX_SKILLTIMERSKILL;i++) { 
    22522247                if(ud->skilltimerskill[i]) { 
     
    22852280 
    22862281        nullpo_retr(1, src); 
    2287         nullpo_retr(1, bl); 
     2282        nullpo_retr(1, bl);      
    22882283 
    22892284        if (src->m != bl->m) 
     
    22922287        if (bl->prev == NULL) 
    22932288                return 1; 
    2294  
     2289         
    22952290        sd = BL_CAST(BL_PC, src); 
    22962291        tsd = BL_CAST(BL_PC, bl); 
     
    23082303        } 
    23092304 
    2310         sc = status_get_sc(src); 
     2305        sc = status_get_sc(src);         
    23112306        if (sc && !sc->count) 
    23122307                sc = NULL; //Unneeded 
     
    23972392        case NPC_BLEEDING: 
    23982393        case NPC_CRITICALWOUND: 
    2399         /*Mercenary Skills [Brainstorm] 
    2400         case MS_BASH: 
    2401         case MA_DOUBLE: 
    2402         case MA_CHARGEARROW: 
    2403         case ML_PIERCE: 
    2404         case ML_SPIRALPIERCE: 
    2405         case MER_CRASH: 
    24062394                skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); 
    2407                 break;*/ 
     2395                break; 
     2396                 
     2397//... something doesn't fit about this. Seriously. 
    24082398        case NC_GHOULTOUCH:     //Necro Ghoul Touch [Brain] 
    2409         skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); 
    2410         clif_specialeffect(bl, 124, AREA); //Venom Dust Effect on target 
    2411         break; 
    2412         case NC_DEATHHAND:       //Necro Death Hand [Brain] 
    2413         skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag|SD_LEVEL);//Hide skill yell 
    2414         clif_specialeffect(bl, 65, AREA); //Power absorb Effect on target 
    2415         if (battle_check_living(tstatus->race, tstatus->def_ele)){ //Check if target is a living creature before proceed 
    2416                 int chance = (10+(skilllv*2)+(status_get_luk(src)-status_get_luk(bl))/5); 
    2417                 //10% chance + 2% per skilllv + (caster luk - target luk)/5 % 
    2418                 if (rand()%100 < chance) { 
    2419                         clif_skill_nodamage(src,bl,skillid,-1,flag|SD_LEVEL);//Hide skill yell 
    2420                         status_percent_damage(src, bl, 100, 0, true); //Instant kill our target 
    2421                 } else clif_skill_fail(sd,skillid,0,0); 
    2422         } 
    2423         break; 
     2399                skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); 
     2400                clif_specialeffect(bl, 124, AREA); //Venom Dust Effect on target 
     2401                break; 
     2402        case NC_DEATHHAND:      //Necro Death Hand [Brain] 
     2403                skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag|SD_LEVEL);//Hide skill yell 
     2404                clif_specialeffect(bl, 65, AREA); //Power absorb Effect on target 
     2405                if (battle_check_living(tstatus->race, tstatus->def_ele)){ //Check if target is a living creature before proceed 
     2406                        int chance = (10+(skilllv*2)+(status_get_luk(src)-status_get_luk(bl))/5);  
     2407                        //10% chance + 2% per skilllv + (caster luk - target luk)/5 % 
     2408                                if (rand()%100 < chance) { 
     2409                                        clif_skill_nodamage(src,bl,skillid,-1,flag|SD_LEVEL);//Hide skill yell 
     2410                                        status_percent_damage(src, bl, 100, 0, true); //Instant kill our target 
     2411                                } else clif_skill_fail(sd,skillid,0,0); 
     2412                } 
     2413                break; 
    24242414 
    24252415 
     
    24552445                map_foreachinrange(skill_attack_area, src, 
    24562446                        skill_get_splash(skillid, skilllv), splash_target(src), 
    2457                         BF_WEAPON, src, src, skillid, skilllv, tick, flag, BCT_ENEMY); 
     2447                        BF_WEAPON, src, src, skillid, skilllv, tick, flag, BCT_ENEMY);   
    24582448                break; 
    24592449 
     
    25972587        //Splash attack skills. 
    25982588        case AS_GRIMTOOTH: 
    2599         case MC_CARTREVOLUTION: 
     2589        case MC_CARTREVOLUTION:  
    26002590        case NPC_SPLASHATTACK: 
    26012591                flag |= SD_PREAMBLE; // a fake packet will be sent for the first target to be hit 
     
    26032593        case SM_MAGNUM: 
    26042594        case HT_BLITZBEAT: 
    2605         case AC_SHOWER: 
     2595        case AC_SHOWER:  
    26062596        case MG_NAPALMBEAT: 
    26072597        case MG_FIREBALL: 
     
    26602650                if (skill_area_temp[1] != bl->id) 
    26612651                        skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, flag|SD_ANIMATION); 
    2662                 else 
     2652                else  
    26632653                        skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, flag); 
    26642654                break; 
     
    27252715                                skill_castend_nodamage_id); 
    27262716        } 
    2727                 break; 
     2717                break;   
    27282718        case CH_PALMSTRIKE: //  Palm Strike takes effect 1sec after casting. [Skotlex] 
    27292719        //      clif_skill_nodamage(src,bl,skillid,skilllv,0); //Can't make this one display the correct attack animation delay :/ 
    27302720                clif_damage(src,bl,tick,status_get_amotion(src),0,-1,1,4,0); //Display an absorbed damage attack. 
    27312721                skill_addtimerskill(src, tick + 1000, bl->id, 0, 0, skillid, skilllv, BF_WEAPON, flag); 
    2732                 break; 
     2722                break;   
    27332723 
    27342724        case PR_TURNUNDEAD: 
     
    27582748                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    27592749                break; 
     2750//another thing in a weird place. 
    27602751        case AD_DARKHEAL: // Adept Dark Heal [Brain] 
    2761         clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target 
    2762         skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Exception because we must add the effect manually =/ 
    2763         break; 
     2752                clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target 
     2753                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Exception because we must add the effect manually =/ 
     2754                break; 
    27642755        case NC_PWSUFFER: //Necro Power Word: Suffer [Brain] 
    2765         if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
    2766                 skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2756                if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
     2757                        skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2758                        clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
     2759                        clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2760                        //If target is on suffering status already, just cause damage, no extra DoT 
     2761                        if(!status_get_sc(bl)->data[SC_SUFFER]) 
     2762                                skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); 
     2763                } 
     2764                else clif_skill_fail(sd,skillid,0,0); 
     2765                break; 
     2766        case NC_DRAINLIFE: // Necromancer Drain Life [Brain] 
     2767                { 
     2768                        int heal = skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, flag)/2; 
     2769                        if (heal > 0 && (battle_check_living(tstatus->race,tstatus->def_ele))){ 
     2770                                clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1); 
     2771                                status_heal(src, heal, 0, 0); 
     2772                        } 
     2773                } 
    27672774                clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
    27682775                clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    2769                 //If target is on suffering status already, just cause damage, no extra DoT 
    2770                 if(!status_get_sc(bl)->data[SC_SUFFER]) 
    2771                 skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); 
    2772         } 
    2773         else clif_skill_fail(sd,skillid,0,0); 
    2774         break; 
    2775         case NC_DRAINLIFE: // Necromancer Drain Life [Brain] 
    2776         { 
    2777                 int heal = skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, flag)/2; 
    2778                 if (heal > 0 && (battle_check_living(tstatus->race,tstatus->def_ele))){ 
    2779                 clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1); 
    2780                 status_heal(src, heal, 0, 0); 
    2781                 } 
    2782         } 
    2783         clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
    2784         clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    2785         break; 
     2776                break; 
    27862777        case WL_SHADOWBOLT: // Warlock Shadowbolt [Brain] 
    2787         clif_specialeffect(bl, 180, AREA); //Shadow hit 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); //Again, the effect...cursed effects... 
    2790         break; 
     2778                clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
     2779                clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2780                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); //Again, the effect...cursed effects... 
     2781                break; 
    27912782        case WL_SHADOWBURN: // Warlock Shadow Burn [Brain] 
    2792         clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
    2793         clif_specialeffect(bl, 32, AREA); //Flame Engulf Effect on target 
    2794         clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    2795         skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    2796         break; 
     2783                clif_specialeffect(bl, 180, AREA); //Shadow hit Effect on target 
     2784                clif_specialeffect(bl, 32, AREA); //Flame Engulf Effect on target 
     2785                clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2786                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2787                break; 
    27972788        case WL_SEARING: // Warlock Searing Pain [Brain] 
    2798         clif_specialeffect(bl, 406, AREA); //Fire on Head Effect on target 
    2799         clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
    2800         skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    2801         //if target is on searing status already, just cause damage, no extra DoT 
    2802         if(!status_get_sc(bl)->data[SC_SEARING]) 
    2803                 skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,4,flag); 
    2804         break; 
    2805         case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] 
    2806         if(status_get_sc(bl)->data[SC_IMMOLATE]) { // Can only be casted if target is immolating status 
    2807                 clif_specialeffect(bl, 183, AREA); //Explosion Effect on target 
     2789                clif_specialeffect(bl, 406, AREA); //Fire on Head Effect on target 
    28082790                clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
    28092791                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    2810                 status_change_end(bl,SC_IMMOLATE,-1); //End Immolating status 
    2811         } else clif_skill_fail(sd,skillid,0,0); 
    2812         break; 
     2792                //if target is on searing status already, just cause damage, no extra DoT 
     2793                if(!status_get_sc(bl)->data[SC_SEARING]) 
     2794                        skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,4,flag); 
     2795                break; 
     2796        case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] 
     2797                if(status_get_sc(bl)->data[SC_IMMOLATE]) { // Can only be casted if target is immolating status 
     2798                        clif_specialeffect(bl, 183, AREA); //Explosion Effect on target 
     2799                        clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
     2800                        skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2801                        status_change_end(bl,SC_IMMOLATE,-1); //End Immolating status 
     2802                } else clif_skill_fail(sd,skillid,0,0); 
     2803                break; 
    28132804        case WL_IMMOLATE: // Warlock Immolate [Brain] 
    2814         clif_specialeffect(bl, 635, AREA); //Dragon Fire Effect on target 
    2815         clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
    2816         skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    2817         //If Target is on searing pain status, will change immolating status instead 
    2818         if(!status_get_sc(bl)->data[SC_IMMOLATE]) 
    2819                 skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,5,flag); 
    2820         break; 
     2805                clif_specialeffect(bl, 635, AREA); //Dragon Fire Effect on target 
     2806                clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
     2807                skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2808                //If Target is on searing pain status, will change immolating status instead 
     2809                if(!status_get_sc(bl)->data[SC_IMMOLATE]) 
     2810                        skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,5,flag); 
     2811                break; 
    28212812        case WL_CURSEDOOM: // Warlock Curse of Doom [Brain] 
    2822         clif_specialeffect(bl, 183, AREA); //Explosion Effect on target 
    2823         skill_attack(BF_MAGIC,src,bl,bl,skillid,skilllv,tick,flag|SD_ANIMATION); 
    2824         break; 
     2813                clif_specialeffect(bl, 183, AREA); //Explosion Effect on target 
     2814                skill_attack(BF_MAGIC,src,bl,bl,skillid,skilllv,tick,flag|SD_ANIMATION); 
     2815                break; 
    28252816        case WL_PWAGONY: // Warlock Power Word: Agony [Brain] 
    2826         if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
    2827                 skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
    2828                 clif_specialeffect(bl, 587, AREA); //Big Purple Flame Effect on target 
    2829                 clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    2830                 //If target is on Agonizing status already, just cause damage, no extra DoT 
    2831                 if(!status_get_sc(bl)->data[SC_AGONY]) 
    2832                 skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); 
    2833         } 
    2834         else clif_skill_fail(sd,skillid,0,0); 
    2835         break; 
    2836  
     2817                if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
     2818                        skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); 
     2819                        clif_specialeffect(bl, 587, AREA); //Big Purple Flame Effect on target 
     2820                        clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     2821                        //If target is on Agonizing status already, just cause damage, no extra DoT 
     2822                        if(!status_get_sc(bl)->data[SC_AGONY]) 
     2823                                skill_addtimerskill(src,tick+3000,bl->id,0,0,skillid,skilllv,skilllv,flag); 
     2824                } 
     2825                else clif_skill_fail(sd,skillid,0,0); 
     2826                break; 
    28372827 
    28382828        case NPC_MAGICALATTACK: 
     
    28722862                                        count++; // natural water cell 
    28732863                                else 
    2874                                 if( (unit = map_find_skill_unit_oncell(src,x,y,SA_DELUGE,NULL)) != NULL 
     2864                                if( (unit = map_find_skill_unit_oncell(src,x,y,SA_DELUGE,NULL)) != NULL  
    28752865                                ||  (unit = map_find_skill_unit_oncell(src,x,y,NJ_SUITON,NULL)) != NULL ) 
    28762866                                { 
     
    29372927                                skill_attack(BF_MAGIC,src,src,src,skillid,skilllv,tick,flag); 
    29382928                        status_percent_damage(src, src, 0, 100, false); 
    2939                 } 
     2929                }                
    29402930                if (sd) skill_blockpc_start (sd, skillid, (skilllv < 5 ? 10000: 15000)); 
    29412931                break; 
     
    29982988        } 
    29992989 
    3000         map_freeblock_unlock(); 
     2990        map_freeblock_unlock();  
    30012991 
    30022992        if (sd && !(flag&1) && sd->state.arrow_atk) //Consume arrow on last invocation to this skill. 
     
    30062996 
    30072997/*========================================== 
    3008  * 
     2998 *  
    30092999 *------------------------------------------*/ 
    30103000int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, int skillid, int skilllv, unsigned int tick, int flag) 
     
    30203010        int i; 
    30213011        enum sc_type type; 
    3022  
     3012         
    30233013        if(skillid > 0 && skilllv <= 0) return 0;       // celest 
    30243014 
     
    30413031                return 1; 
    30423032 
     3033        // Added DEATHPACT [Brain] 
     3034        //if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO) 
    30433035        if(src!=bl && status_isdead(bl) && skillid != ALL_RESURRECTION && skillid != PR_REDEMPTIO && skillid != NC_DEATHPACT) 
    30443036                return 1; 
     
    30463038        tstatus = status_get_status_data(bl); 
    30473039        sstatus = status_get_status_data(src); 
    3048  
     3040         
    30493041        //Check for undead skills that convert a no-damage skill into a damage one. [Skotlex] 
    30503042        switch (skillid) { 
     
    30673059                        } 
    30683060                        break; 
    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; 
     3061//right place? 
     3062                case AD_DARKHEAL:       // Adept Dark Heal [Brain] 
     3063                        // Only player casted spells can be offensive (copyed from AL_HEAL code above) 
     3064                        if (sd && (battle_check_living(tstatus->race,tstatus->def_ele)) //Check if target is a living creature 
     3065                                && !pc_checkskill(dstsd,NC_PHYLACTERY) //Or he doesnt have Phylactery (non-perma undead) 
     3066                                && !status_get_sc(bl)->data[SC_OVERWHELMING]) { //Or Overwhelming Evil is off (most cases) 
     3067                                if (battle_check_target(src, bl, BCT_ENEMY) < 1) { 
     3068                                        //Offensive heal does not works on non-enemies. 
     3069                                        clif_skill_fail(sd,skillid,0,0); 
     3070                                        return 0; 
     3071                                } 
     3072                                return skill_castend_damage_id(src, bl, skillid, skilllv, tick, flag); 
     3073                        } 
     3074                        break; 
    30823075 
    30833076                case NPC_SMOKING: //Since it is a self skill, this one ends here rather than in damage_id. [Skotlex] 
     
    31073100                        int heal = skill_calc_heal(src, bl, skilllv); 
    31083101                        int heal_get_jobexp; 
    3109  
     3102         
    31103103                        if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM)) 
    31113104                                heal=0; 
    3112                 // Profane Soul reduces the healed recieved by 3% per skilllv [Brain] 
    3113                 if(dstsd) { 
    3114                 heal = heal * (100 - pc_checkskill(dstsd,AD_PROFANE)*3)/100; 
    3115                 //Wont heal even if he got elemental armors [Brain] 
    3116                 if(pc_checkskill(dstsd,NC_PHYLACTERY)) heal = skilllv; 
    3117                 } 
     3105//To not allow heal for joo 
     3106                        // Profane Soul reduces the healed recieved by 3% per skilllv [Brain] 
     3107                        if(dstsd) { 
     3108                                heal = heal * (100 - pc_checkskill(dstsd,AD_PROFANE)*3)/100; 
     3109                                //Wont heal even if he got elemental armors [Brain] 
     3110                                if(pc_checkskill(dstsd,NC_PHYLACTERY)) heal = skilllv; 
     3111                        } 
    31183112                        if (sd) { 
    31193113                                if ((i = pc_skillheal_bonus(sd, skillid))) 
     
    31513145                } 
    31523146                break; 
    3153  
    31543147        case AD_DARKHEAL: // Adept Dark Heal [Brain] 
    3155         { 
    3156                 int heal = skill_calc_heal(src, bl, skilllv); 
    3157                 if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM)) 
    3158                 heal=0; 
    3159                 if(battle_check_undead(tstatus->race,tstatus->def_ele) || tstatus->race==RC_UNDEAD // Check if our target is undead or demon 
    3160                 || tstatus->race==RC_DEMON || pc_checkskill(dstsd,NC_PHYLACTERY)//Or has a phylactery 
    3161                 || status_get_sc(bl)->data[SC_OVERWHELMING]) { //Or is on OverWhelm status, checking again... 
    3162                 clif_skill_nodamage(src, bl, skillid, heal, 1); 
    3163                 clif_skill_nodamage(NULL, bl, AL_HEAL, heal, 1); //Subtle way to show heal numbers AND effect =D 
    3164                 status_heal(bl, heal, 0, 0); 
    3165                 } else { 
    3166                 clif_skill_nodamage(src, bl, skillid, 0, 1); 
    3167                 clif_skill_nodamage(NULL, bl, AL_HEAL, 0, 1); 
    3168                 } 
    3169         clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target 
    3170         } 
    3171         break; 
    3172  
     3148                { 
     3149                        int heal = skill_calc_heal(src, bl, skilllv); 
     3150                        if (status_isimmune(bl) || (dstmd && dstmd->class_ == MOBID_EMPERIUM)) 
     3151                                heal=0; 
     3152                        if(battle_check_undead(tstatus->race,tstatus->def_ele) || tstatus->race==RC_UNDEAD // Check if our target is undead or demon 
     3153                                || tstatus->race==RC_DEMON || pc_checkskill(dstsd,NC_PHYLACTERY)//Or has a phylactery 
     3154                                || status_get_sc(bl)->data[SC_OVERWHELMING]) { //Or is on OverWhelm status, checking again... 
     3155                                clif_skill_nodamage(src, bl, skillid, heal, 1); 
     3156                                clif_skill_nodamage(NULL, bl, AL_HEAL, heal, 1); //Subtle way to show heal numbers AND effect =D 
     3157                                status_heal(bl, heal, 0, 0); 
     3158                        } else { 
     3159                                clif_skill_nodamage(src, bl, skillid, 0, 1); 
     3160                                clif_skill_nodamage(NULL, bl, AL_HEAL, 0, 1); 
     3161                        } 
     3162                clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite Effect on target 
     3163                } 
     3164                break; 
    31733165 
    31743166        case PR_REDEMPTIO: 
     
    32023194                } else //Invalid target, skip resurrection. 
    32033195                        break; 
    3204  
     3196                 
    32053197        case ALL_RESURRECTION: 
    3206         case NC_DEATHPACT: // Necro Death Pact [Brain] 
     3198        case NC_DEATHPACT: // Necro Death Pact [Brain] (Seems fine) 
    32073199                if(sd && map_flag_gvg(bl->m)) 
    32083200                {       //No reviving in WoE grounds! 
     
    32123204                if (!status_isdead(bl)) 
    32133205                        break; 
    3214                 { 
     3206                {        
    32153207                        int per = 0, sper = 0; 
    32163208                        if (map[bl->m].flag.pvp && dstsd && dstsd->pvp_point < 0) 
     
    32233215                        case 4: per=80; break; 
    32243216                        case 5: per=100; break; //Added a 5th level because NC_DEATHPACT got 5 lvs [Brain] 
    3225                         } 
    3226                         if(dstsd && dstsd->special_state.restart_full_recover) 
     3217//above seems ok 
     3218                        } 
     3219                        if(dstsd && dstsd->special_state.restart_full_recover)  
    32273220                                per = sper = 100; 
    32283221                        if (status_revive(bl, per, sper)) 
    32293222                        { 
    32303223                                clif_skill_nodamage(src,bl,ALL_RESURRECTION,skilllv,1); //Both Redemptio and Res show this skill-animation. 
    3231                                                 if(skillid==NC_DEATHPACT) { // Necro Death Pact [Brain] 
    3232                         clif_skill_nodamage(src, bl, skillid, skilllv, 
    3233                         sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3234                         break; 
    3235                 } 
    3236  
    3237                                 if(sd && dstsd && battle_config.resurrection_exp > 0) 
     3224//Seriously, how is this right? It just doesnt look right but i may be ignoring something. 
     3225                                if(skillid==NC_DEATHPACT) { // Necro Death Pact [Brain] 
     3226                                        clif_skill_nodamage(src, bl, skillid, skilllv,  
     3227                                                sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3228                                        break; 
     3229                                } 
     3230 
     3231                                if(sd && dstsd && battle_config.resurrection_exp > 0)  
    32383232                                { 
    32393233                                        int exp = 0,jexp = 0; 
     
    32533247                } 
    32543248                break; 
    3255  
     3249//Huge lump of code here. 
    32563250        case AD_PWBLIND: // Adept Power Word: Blind [Brain] 
    3257         if(!tsc->data[type]) { 
    3258                 clif_skill_nodamage(src, bl, skillid, skilllv,1); 
    3259                 if(sc_start(bl, type,(30 + skilllv * 10 + (status_get_lv(src) - sstatus->int_)/5), 
    3260                 skilllv, skill_get_time(skillid,skilllv))) 
    3261                 { 
    3262                 if(dstmd) mob_unlocktarget(dstmd,tick);  //Removes current target 
    3263                 clif_specialeffect(bl, 379, AREA); //379.Soul Drain (2nd Part) 
    3264                 break; 
    3265                 } 
    3266         } else clif_skill_fail(sd,skillid,0,0); 
    3267         break; 
    3268  
     3251                if(!tsc->data[type]) { 
     3252                        clif_skill_nodamage(src, bl, skillid, skilllv,1); 
     3253                        if(sc_start(bl, type,(30 + skilllv * 10 + (status_get_lv(src) - sstatus->int_)/5), 
     3254                                skilllv, skill_get_time(skillid,skilllv)))  
     3255                        { 
     3256                                if(dstmd) mob_unlocktarget(dstmd,tick);  //Removes current target 
     3257                                clif_specialeffect(bl, 379, AREA); //379.Soul Drain (2nd Part) 
     3258                                break; 
     3259                        } 
     3260                } else clif_skill_fail(sd,skillid,0,0); 
     3261                break; 
    32693262        case AD_PWFEAR: // Adept Power Word: Fear [Brain] 
    3270         if(!tsc->data[type]) { 
    3271                 clif_skill_nodamage(src, bl, skillid, skilllv,1); 
    3272                 if(dstsd) 
    3273                 type = SC_CONFUSION; //Players cant be affected by SC_FEAR 
    3274                 if(sc_start(bl, type, (30 + skilllv * 10), skilllv, skill_get_time(skillid,skilllv))) 
    3275                 { 
    3276                 clif_specialeffect(bl, 372, AREA); //372.Death 
    3277                 unit_escape(bl, bl, 30); 
    3278                 } 
    3279         } else clif_skill_fail(sd,skillid,0,0); 
    3280         break; 
     3263                if(!tsc->data[type]) { 
     3264                        clif_skill_nodamage(src, bl, skillid, skilllv,1); 
     3265                        if(dstsd) 
     3266                                type = SC_CONFUSION; //Players cant be affected by SC_FEAR 
     3267                        if(sc_start(bl, type, (30 + skilllv * 10), skilllv, skill_get_time(skillid,skilllv))) 
     3268                        { 
     3269                                clif_specialeffect(bl, 372, AREA); //372.Death 
     3270                                unit_escape(bl, bl, 30); 
     3271                        } 
     3272                } else clif_skill_fail(sd,skillid,0,0); 
     3273                break; 
    32813274        case WL_HOWLOFPAIN: // Warlock Howl of Pain [Brain] 
    3282         //These must be here first or else the code wont execute them. 
    3283         clif_specialeffect(src, 670, AREA); // Monster skill SCREAM effect on caster (no sound) 
    3284         clif_soundeffectall(bl, "wraith_die.wav", 0, AREA); //Wraith Laugh Sound 
    3285         if (flag & 1) { 
    3286                 //Check if target is a living creature AND a valid enemy 
    3287                 if (battle_check_target(src, bl, BCT_ENEMY) && battle_check_living(tstatus->race,tstatus->def_ele)) 
    3288                 { 
    3289                 if(sc_start(bl,type,10+skilllv*10,skilllv,skill_get_time(skillid,skilllv))) 
    3290                 { 
    3291                         if(dstmd) //PROVOKE Effect on mobs 
    3292                         mob_target(dstmd,src,skill_get_range2(src,skillid,skilllv)); 
    3293                         // Breaks Frozen and Sleep status 
    3294                         if(tsc && tsc->count){ 
    3295                         if(tsc->data[SC_FREEZE]) 
    3296                                 status_change_end(bl,SC_FREEZE,-1); 
    3297                         if(tsc->data[SC_SLEEP]) 
    3298                                 status_change_end(bl,SC_SLEEP,-1); 
    3299                         } 
    3300                         clif_emotion(bl,6); //anger emote on target 
    3301                         break; 
    3302                 } else { //What will happen if the status fail: 
     3275                //These must be here first or else the code wont execute them. 
     3276                clif_specialeffect(src, 670, AREA); // Monster skill SCREAM effect on caster (no sound) 
     3277                clif_soundeffectall(bl, "wraith_die.wav", 0, AREA); //Wraith Laugh Sound 
     3278                if (flag & 1) { 
     3279                        //Check if target is a living creature AND a valid enemy 
     3280                        if (battle_check_target(src, bl, BCT_ENEMY) && battle_check_living(tstatus->race,tstatus->def_ele)) 
    33033281                        { 
    3304                         if (sd) //If is a player 
    3305                                 clif_skill_fail(sd,skillid,0,0); 
    3306                         map_freeblock_unlock(); //Else is a mob 
    3307                         return 0; 
    3308                         } 
    3309                         unit_skillcastcancel(bl, 2); //In any case, will cancel casting 
    3310                 } 
    3311                 } 
    3312         } else { 
    3313                 map_foreachinrange(skill_area_sub, src, 
    3314                 skill_get_splash(skillid, skilllv), BL_CHAR, 
    3315                 src, skillid, skilllv, tick, flag|BCT_ENEMY|1, 
    3316                 skill_castend_nodamage_id); 
    3317                 clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
    3318                 map_freeblock_unlock(); 
    3319                 return 1; 
    3320         } 
    3321         break; 
     3282                                if(sc_start(bl,type,10+skilllv*10,skilllv,skill_get_time(skillid,skilllv))) 
     3283                                { 
     3284                                        if(dstmd) //PROVOKE Effect on mobs 
     3285                                                mob_target(dstmd,src,skill_get_range2(src,skillid,skilllv)); 
     3286                                        // Breaks Frozen and Sleep status 
     3287                                        if(tsc && tsc->count){ 
     3288                                                if(tsc->data[SC_FREEZE]) 
     3289                                                        status_change_end(bl,SC_FREEZE,-1); 
     3290                                                if(tsc->data[SC_SLEEP]) 
     3291                                                        status_change_end(bl,SC_SLEEP,-1); 
     3292                                        } 
     3293                                        clif_emotion(bl,6); //anger emote on target 
     3294                                        break; 
     3295                                } else { //What will happen if the status fail: 
     3296                                        { 
     3297                                                if (sd) //If is a player 
     3298                                                        clif_skill_fail(sd,skillid,0,0); 
     3299                                                map_freeblock_unlock(); //Else is a mob 
     3300                                                return 0; 
     3301                                        } 
     3302                                        unit_skillcastcancel(bl, 2); //In any case, will cancel casting 
     3303                                } 
     3304                        } 
     3305                } else { 
     3306                        map_foreachinrange(skill_area_sub, src, 
     3307                                skill_get_splash(skillid, skilllv), BL_CHAR, 
     3308                                src, skillid, skilllv, tick, flag|BCT_ENEMY|1, 
     3309                                skill_castend_nodamage_id); 
     3310                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3311                        map_freeblock_unlock(); 
     3312                        return 1; 
     3313                } 
     3314                break; 
    33223315        case WL_HOWLOFTERROR: // Warlock Howl of Terror [Brain] 
    3323         if (flag & 1) { 
    3324                 int rate; 
    3325                 //Check if target is a living creature AND a valid enemy 
    3326                 if (battle_check_target(src, bl, BCT_ENEMY) 
    3327                 && battle_check_living(tstatus->race,tstatus->def_ele)) { 
    3328                 rate = 10 + skilllv*5 + pc_checkskill(sd,AD_PWFEAR)*3; 
    3329                 if(dstsd) { 
    3330                         rate -= 10; // 10% less chance on players 
    3331                         type = SC_CONFUSION; //Players cant be affected by SC_FEAR 
    3332                 } 
    3333                 if(sc_start(bl,type,rate,skilllv,skill_get_time(skillid,skilllv))) 
    3334                         clif_specialeffect(bl, 372, AREA); //Same as PW: Fear 
    3335                 } 
    3336         } else { 
    3337                 map_foreachinrange(skill_area_sub, src, 
    3338                 skill_get_splash(skillid, skilllv), BL_CHAR, 
    3339                 src, skillid, skilllv, tick, flag|BCT_ENEMY|1, 
    3340                 skill_castend_nodamage_id); 
    3341                 clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
    3342         } 
    3343         clif_specialeffect(src, 668, AREA); // Monster skill SCREAM effect on caster (with sound) 
    3344         break; 
    3345  
     3316                if (flag & 1) { 
     3317                        int rate; 
     3318                        //Check if target is a living creature AND a valid enemy 
     3319                        if (battle_check_target(src, bl, BCT_ENEMY) 
     3320                                && battle_check_living(tstatus->race,tstatus->def_ele)) { 
     3321                                rate = 10 + skilllv*5 + pc_checkskill(sd,AD_PWFEAR)*3; 
     3322                                if(dstsd) {  
     3323                                        rate -= 10; // 10% less chance on players 
     3324                                        type = SC_CONFUSION; //Players cant be affected by SC_FEAR 
     3325                                } 
     3326                                if(sc_start(bl,type,rate,skilllv,skill_get_time(skillid,skilllv))) 
     3327                                        clif_specialeffect(bl, 372, AREA); //Same as PW: Fear 
     3328                        } 
     3329                } else { 
     3330                        map_foreachinrange(skill_area_sub, src, 
     3331                                skill_get_splash(skillid, skilllv), BL_CHAR, 
     3332                                src, skillid, skilllv, tick, flag|BCT_ENEMY|1, 
     3333                                skill_castend_nodamage_id); 
     3334                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3335                } 
     3336                clif_specialeffect(src, 668, AREA); // Monster skill SCREAM effect on caster (with sound) 
     3337                break; 
     3338// Would be easy to screw up in that. 
    33463339 
    33473340        case AL_DECAGI: 
     
    33613354                } 
    33623355                break; 
    3363  
     3356//another huge lump 
    33643357        case NC_DARKMOON: //Necro Dark Moon [Brain] 
    3365         if (flag&1) { 
    3366                 //Check my enemies 
    3367                 if (battle_check_target(src, bl, BCT_ENEMY) && 
    3368                 battle_check_living(tstatus->race,tstatus->def_ele)) 
    3369                 { 
    3370                 if(sc_start(bl,SC_BLIND,50,skilllv,skill_get_time(skillid,skilllv))) 
    3371                         clif_specialeffect(bl, 580, AREA); //Box of Rain effect on target 
    3372                 } 
    3373                 else { //Now my Party members 
    3374                 if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { 
    3375                         clif_skill_nodamage(bl,bl,skillid,skilllv, 
    3376                         sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3377                         clif_specialeffect(bl, 521, AREA); //Red Flashing Aura Sprite effect on target 
    3378                 } else if (sd) { 
    3379                         party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), 
    3380                         src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); 
    3381                 } 
    3382                 } 
    3383         } else { 
    3384                 map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, 
    3385                 src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); 
    3386                 clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
    3387         } 
    3388         clif_specialeffect(src, 407, AREA); //Soul Change Effect on caster 
    3389         clif_soundeffectall(bl, "se_wolf1.wav", 0, AREA); //Wolf Howl Sound 
    3390         break; 
     3358                if (flag&1) { 
     3359                        //Check my enemies 
     3360                        if (battle_check_target(src, bl, BCT_ENEMY) && 
     3361                                battle_check_living(tstatus->race,tstatus->def_ele)) 
     3362                        { 
     3363                                if(sc_start(bl,SC_BLIND,50,skilllv,skill_get_time(skillid,skilllv))) 
     3364                                        clif_specialeffect(bl, 580, AREA); //Box of Rain effect on target 
     3365                        } 
     3366                        else { //Now my Party members 
     3367                                if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { 
     3368                                        clif_skill_nodamage(bl,bl,skillid,skilllv, 
     3369                                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3370                                        clif_specialeffect(bl, 521, AREA); //Red Flashing Aura Sprite effect on target 
     3371                                } else if (sd) { 
     3372                                        party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), 
     3373                                                src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); 
     3374                                } 
     3375                        } 
     3376                } else { 
     3377                        map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, 
     3378                                src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); 
     3379                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3380                } 
     3381                clif_specialeffect(src, 407, AREA); //Soul Change Effect on caster 
     3382                clif_soundeffectall(bl, "se_wolf1.wav", 0, AREA); //Wolf Howl Sound 
     3383                break; 
    33913384        case NC_REQUIEM: //Necro Requiem [Brain] 
    3392         if (flag&1) { 
    3393                 //Check my enemies 
    3394                 if (battle_check_target(src, bl, BCT_ENEMY) && 
    3395                         battle_check_living(tstatus->race,tstatus->def_ele)) 
    3396                 { 
    3397                 if(sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))) 
    3398                         clif_specialeffect(bl, 578, AREA); //Box of Curse effect on target 
    3399                 } 
    3400                 else { //Now my Party members 
    3401                 if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { 
    3402                         clif_skill_nodamage(bl,bl,skillid,skilllv, 
    3403                         sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3404                         clif_specialeffect(bl, 572, AREA); //Warmth Soul effect on target 
    3405                 } else if (sd) { 
    3406                         party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), 
    3407                         src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); 
    3408                 } 
    3409                 } 
    3410         } else { 
    3411                 map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, 
    3412                 src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); 
    3413                 clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
    3414         } 
    3415         int rnds = rand()%3; 
    3416         switch(rnds) { 
    3417                 case 1: 
    3418                 clif_soundeffectall(bl, "chant1.wav", 0, AREA); //Chanting Sound 
    3419                 break; 
    3420                 case 2: 
    3421                 clif_soundeffectall(bl, "chant2.wav", 0, AREA); //Chanting Sound 
    3422                 break; 
    3423                 case 3: 
    3424                 clif_soundeffectall(bl, "chant3.wav", 0, AREA); //Chanting Sound 
    3425                 break; 
    3426         } 
    3427         break; 
    3428  
     3385                if (flag&1) { 
     3386                        //Check my enemies 
     3387                        if (battle_check_target(src, bl, BCT_ENEMY) && 
     3388                                        battle_check_living(tstatus->race,tstatus->def_ele)) 
     3389                        { 
     3390                                if(sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))) 
     3391                                        clif_specialeffect(bl, 578, AREA); //Box of Curse effect on target 
     3392                        } 
     3393                        else { //Now my Party members 
     3394                                if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { 
     3395                                        clif_skill_nodamage(bl,bl,skillid,skilllv, 
     3396                                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3397                                        clif_specialeffect(bl, 572, AREA); //Warmth Soul effect on target 
     3398                                } else if (sd) { 
     3399                                        party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), 
     3400                                                src,skillid,skilllv,tick, flag|BCT_ALL|1,skill_castend_nodamage_id); 
     3401                                } 
     3402                        } 
     3403                } else { 
     3404                        map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, 
     3405                                src, skillid, skilllv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); 
     3406                        clif_skill_nodamage(src, bl, skillid, skilllv, 1); 
     3407                } 
     3408                int rnds = rand()%3; 
     3409                switch(rnds) { 
     3410                        case 1: 
     3411                                clif_soundeffectall(bl, "chant1.wav", 0, AREA); //Chanting Sound 
     3412                                break; 
     3413                        case 2: 
     3414                                clif_soundeffectall(bl, "chant2.wav", 0, AREA); //Chanting Sound 
     3415                                break; 
     3416                        case 3: 
     3417                                clif_soundeffectall(bl, "chant3.wav", 0, AREA); //Chanting Sound 
     3418                                break; 
     3419                } 
     3420                break; 
    34293421 
    34303422        case PR_LEXDIVINA: 
     
    34323424                        status_change_end(bl,type, -1); 
    34333425                        clif_skill_nodamage (src, bl, skillid, skilllv, 1); 
    3434                 } else 
    3435                         clif_skill_nodamage (src, bl, skillid, skilllv, 
     3426                } else  
     3427                        clif_skill_nodamage (src, bl, skillid, skilllv,  
    34363428                                sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    34373429                break; 
     
    34493441                        abra_skilllv = min(skilllv, skill_get_max(abra_skillid)); 
    34503442                        clif_skill_nodamage (src, bl, skillid, skilllv, 1); 
    3451  
     3443                         
    34523444                        if( sd ) 
    34533445                        {// player-casted 
     
    34633455                                int target_id = 0; 
    34643456                                if (!ud) break; 
    3465                                 if (inf&INF_SELF_SKILL || inf&INF_SUPPORT_SKILL) { 
     3457                                if (inf&INF_SELF_SKILL || inf&INF_SUPPORT_SKILL) {  
    34663458                                        if (src->type == BL_PET) 
    34673459                                                bl = (struct block_list*)((TBL_PET*)src)->msd; 
    34683460                                        if (!bl) bl = src; 
    3469                                         unit_skilluse_id(src, bl->id, abra_skillid, abra_skilllv); 
     3461                                        unit_skilluse_id(src, bl->id, abra_skillid, abra_skilllv);  
    34703462                                } else {        //Assume offensive skills 
    34713463                                        if (ud->target) 
     
    34803472                                                bl = map_id2bl(target_id); 
    34813473                                                if (!bl) bl = src; 
    3482                                                 unit_skilluse_pos(src, bl->x, bl->y, abra_skillid, abra_skilllv); 
     3474                                                unit_skilluse_pos(src, bl->x, bl->y, abra_skillid, abra_skilllv);  
    34833475                                        } else 
    34843476                                                unit_skilluse_id(src, target_id, abra_skillid, abra_skilllv); 
     
    35543546        case CR_PROVIDENCE: 
    35553547                if(sd && dstsd){ //Check they are not another crusader [Skotlex] 
    3556                         if ((dstsd->class_&MAPID_UPPERMASK) == MAPID_CRUSADER) { 
     3548                        if ((dstsd->class_&MAPID_UPPERMASK) == MAPID_CRUSADER) {         
    35573549                                clif_skill_fail(sd,skillid,0,0); 
    35583550                                map_freeblock_unlock(); 
     
    35633555                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    35643556                break; 
    3565  
     3557                 
    35663558        case CG_MARIONETTE: 
    35673559                { 
     
    36613653 
    36623654                sc_start(bl,SC_SEVENWIND,100,skilllv,skill_get_time(skillid,skilllv)); 
    3663  
     3655                         
    36643656                break; 
    36653657 
     
    36923684        case LK_BERSERK: 
    36933685        case KN_AUTOCOUNTER: 
    3694         case KN_TWOHANDQUICKEN: 
     3686        case KN_TWOHANDQUICKEN:  
    36953687        case KN_ONEHAND: 
    36963688        case CR_SPEARQUICKEN: 
     
    37033695        case MO_BLADESTOP: 
    37043696        case LK_AURABLADE: 
    3705         case LK_PARRYING: 
     3697        case LK_PARRYING:        
    37063698        case LK_CONCENTRATION: 
    37073699        case WS_CARTBOOST: 
     
    37293721        case NPC_DEFENDER: 
    37303722        case NPC_MAGICMIRROR: 
    3731         case ALL_ATFIELD: 
     3723        case ALL_ATFIELD:       //AT Field [Brain] ( still dont think this belongs.) 
    37323724                clif_skill_nodamage(src,bl,skillid,skilllv, 
    37333725                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    37343726                break; 
     3727//ANOTHER large lump but it really doesnt feel like it fits here. 
    37353728        case AD_LUST:   // Adept Blood Lust [Brain] 
    3736         clif_specialeffect(src, 220, AREA); //Berserk Pot effect 
    3737         clif_specialeffect(src, 455, AREA); //Red Lightnings 
    3738         clif_skill_nodamage(src,bl,skillid,skilllv, 
    3739                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3740         break; 
     3729                clif_specialeffect(src, 220, AREA); //Berserk Pot effect 
     3730                clif_specialeffect(src, 455, AREA); //Red Lightnings 
     3731                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3732                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3733                break; 
    37413734        case NC_DECREPIFY: //Necro Decrepify [Brain] 
    3742         if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
    3743                 clif_specialeffect(bl, 403, AREA); //Mind Breaker Effect on target 
    3744                 clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
    3745                 clif_skill_nodamage(src,bl,skillid,skilllv, 
    3746                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3747         } 
    3748         else clif_skill_fail(sd,skillid,0,0); 
    3749         break; 
     3735                if(battle_check_living(tstatus->race,tstatus->def_ele)){ 
     3736                        clif_specialeffect(bl, 403, AREA); //Mind Breaker Effect on target 
     3737                        clif_specialeffect(src, 454, AREA); //Black Cast Effect on caster 
     3738                        clif_skill_nodamage(src,bl,skillid,skilllv, 
     3739                                sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3740                } 
     3741                else clif_skill_fail(sd,skillid,0,0); 
     3742                break; 
    37503743        case WL_CURSEWEAKNESS: // Warlock Curse of Weakness [Brain] 
    3751         clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite effect on target 
    3752         clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
    3753         clif_skill_nodamage(src,bl,skillid,skilllv, 
    3754                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3755         break; 
    3756         case WL_CURSEEXHAUST: // Warlock Curse of Exhaustion [Brain] 
    3757         clif_specialeffect(bl, 135, AREA); //Ice Breaking effect on target 
    3758         clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
    3759         clif_skill_nodamage(src,bl,skillid,skilllv, 
    3760                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3761         break; 
    3762         case WL_CURSETONGUES: // Warlock Curse of Tongues [Brain] 
    3763         clif_specialeffect(bl, 72, AREA); //Spinning Lights effect on target 
    3764         clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
    3765         clif_skill_nodamage(src,bl,skillid,skilllv, 
    3766                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3767         break; 
    3768         case WL_CURSEDOOM: // Warlock Curse of Doom (temp) [Brain] 
    3769         if(!tsc->data[type]) { 
    3770                 clif_specialeffect(bl, 196, AREA); //Small Curse Reaper effect on target 
     3744                clif_specialeffect(bl, 656, AREA); //Blinking Green Sprite effect on target 
    37713745                clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
    37723746                clif_skill_nodamage(src,bl,skillid,skilllv, 
    3773                 sc_start4(bl,type,100, 
    3774                         skilllv,skillid,src->id,skill_get_time(skillid,skilllv),1000)); 
    3775         } else clif_skill_fail(sd,skillid,0,0); 
    3776         break; 
     3747                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3748                break; 
     3749        case WL_CURSEEXHAUST: // Warlock Curse of Exhaustion [Brain] 
     3750                clif_specialeffect(bl, 135, AREA); //Ice Breaking effect on target 
     3751                clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
     3752                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3753                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3754                break; 
     3755        case WL_CURSETONGUES: // Warlock Curse of Tongues [Brain] 
     3756                clif_specialeffect(bl, 72, AREA); //Spinning Lights effect on target 
     3757                clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
     3758                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3759                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3760                break; 
     3761        case WL_CURSEDOOM: // Warlock Curse of Doom (temp) [Brain] 
     3762                if(!tsc->data[type]) { 
     3763                        clif_specialeffect(bl, 196, AREA); //Small Curse Reaper effect on target 
     3764                        clif_specialeffect(src, 59, AREA); //Purple Cast Effect on caster 
     3765                        clif_skill_nodamage(src,bl,skillid,skilllv, 
     3766                                sc_start4(bl,type,100, 
     3767                                        skilllv,skillid,src->id,skill_get_time(skillid,skilllv),1000)); 
     3768                } else clif_skill_fail(sd,skillid,0,0); 
     3769                break; 
    37773770        case WL_OVERWHELMING: // Warlock Overwhelming Evil [Brain] 
    3778         clif_specialeffect(src, 348, AREA); //1000 Blades Trespassing effect on caster 
    3779         clif_skill_nodamage(src,bl,skillid,skilllv, 
    3780                 sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    3781         break; 
     3771                clif_specialeffect(src, 348, AREA); //1000 Blades Trespassing effect on caster 
     3772                clif_skill_nodamage(src,bl,skillid,skilllv, 
     3773                        sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
     3774                break; 
     3775 
    37823776        case MG_SIGHT: 
    37833777        case AL_RUWACH: 
     
    38943888                if (!i) 
    38953889                { 
    3896                         if (sd) 
     3890                        if (sd)  
    38973891                                clif_skill_fail(sd,skillid,0,0); 
    38983892                        map_freeblock_unlock(); 
     
    39803974                        skill_additional_effect(src,bl,skillid,skilllv,BF_MISC,tick); //Use Misc rather than weapon to signal passive pushback 
    39813975                } 
    3982                 break; 
     3976                break;   
    39833977 
    39843978        case MO_ABSORBSPIRITS: 
     
    39963990                clif_skill_nodamage(src,bl,skillid,skilllv,i?1:0); 
    39973991                break; 
    3998  
     3992//this feels more like it fits. 
    39993993        case WL_DRAINSOUL: // Warlock Drain Soul [Brain] 
    4000         i = 0; 
    4001         if (dstsd && (sd == dstsd || map_flag_vs(src->m))) 
    4002         {       //check if target is a player and we are in versus map 
    4003                 i = tstatus->max_sp * skilllv/100;//i = SkillLv% of player Max SP 
    4004                 if(dstsd->spiritball && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER) { 
    4005                 i += dstsd->spiritball * 5;//will drain Monk Spirits and regain 5 SP per Spirit 
    4006                 pc_delspiritball(dstsd,dstsd->spiritball,0); 
    4007                 } 
    4008         } else if (dstmd && !(tstatus->mode&MD_BOSS) && battle_check_living(tstatus->race,tstatus->def_ele)) 
    4009         {       // check if target is a monster and not a Boss 
    4010                 i = dstmd->level/5 * skilllv;//i = mob level/5 * Skill Lvl 
    4011                 mob_target(dstmd,src,0);//This will turn the mob agressive against the caster 
    4012         } 
    4013         if(i < skilllv) i = skilllv; //Minimum 1 sp per skill lvl 
    4014         if (i) { 
    4015                 clif_specialeffect(src, 253, AREA); //Absorb Mana effect on caster 
    4016                 clif_specialeffect(bl, 52, AREA); //Lightning Hit effect on target 
    4017                 status_heal(src, 0, i, 3); //caster drains sp 
    4018                 status_zap(bl, 0, i*skilllv); //target lost sp equal to 1*SkillLv the amount drained 
    4019         } 
    4020         clif_skill_nodamage(src,bl,skillid,skilllv,i?1:0); 
    4021         break; 
    4022  
     3994                i = 0; 
     3995                if (dstsd && (sd == dstsd || map_flag_vs(src->m))) 
     3996                {       //check if target is a player and we are in versus map 
     3997                        i = tstatus->max_sp * skilllv/100;//i = SkillLv% of player Max SP 
     3998                        if(dstsd->spiritball && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER) { 
     3999                                i += dstsd->spiritball * 5;//will drain Monk Spirits and regain 5 SP per Spirit 
     4000                                pc_delspiritball(dstsd,dstsd->spiritball,0); 
     4001                        } 
     4002                } else if (dstmd && !(tstatus->mode&MD_BOSS) && battle_check_living(tstatus->race,tstatus->def_ele)) 
     4003                {       // check if target is a monster and not a Boss 
     4004                        i = dstmd->level/5 * skilllv;//i = mob level/5 * Skill Lvl 
     4005                        mob_target(dstmd,src,0);//This will turn the mob agressive against the caster 
     4006                } 
     4007                if(i < skilllv) i = skilllv; //Minimum 1 sp per skill lvl 
     4008                if (i) { 
     4009                        clif_specialeffect(src, 253, AREA); //Absorb Mana effect on caster 
     4010                        clif_specialeffect(bl, 52, AREA); //Lightning Hit effect on target 
     4011                        status_heal(src, 0, i, 3); //caster drains sp 
     4012                        status_zap(bl, 0, i*skilllv); //target lost sp equal to 1*SkillLv the amount drained 
     4013                } 
     4014                clif_skill_nodamage(src,bl,skillid,skilllv,i?1:0); 
     4015                break; 
    40234016 
    40244017        case AC_MAKINGARROW: 
     
    41134106                } 
    41144107                break; 
    4115  
     4108         
    41164109        case WZ_SIGHTRASHER: 
    41174110                //Passive side of the attack. 
     
    42214214        case SM_AUTOBERSERK:    // Celest 
    42224215                if (tsce) 
    4223                         i = status_change_end(bl, type, -1); 
     4216                        i = status_change_end(bl, type, -1);                             
    42244217                else 
    42254218                        i = sc_start(bl,type,100,skilllv,60000); 
     
    42354228                break; 
    42364229        case TK_RUN: 
    4237                         if (tsce) 
     4230                        if (tsce)  
    42384231                                clif_skill_nodamage(src,bl,skillid,skilllv, 
    42394232                                        status_change_end(bl, type, -1)); 
     
    43314324                        if (dstmd) 
    43324325                                mob_target(dstmd,src,skill_get_range2(src,skillid,skilllv)); 
    4333  
     4326                         
    43344327                        if (tsc->data[SC_STONE]) { 
    43354328                                status_change_end(bl,SC_STONE,-1); 
     
    44824475                } 
    44834476                break; 
    4484  
     4477                 
    44854478        case TF_PICKSTONE: 
    44864479                if(sd) { 
     
    45394532                //Note that Full Strip autospell doesn't use a duration 
    45404533                if (!clif_skill_nodamage(src,bl,skillid,skilllv, 
    4541                                 skill_strip_equip(bl, location, i, skilllv, 
     4534                                skill_strip_equip(bl, location, i, skilllv,  
    45424535                                sd&&skillid==ST_FULLSTRIP&&!pc_checkskill(sd, skillid)?0:skill_get_time(skillid,skilllv))) 
    45434536                        && sd) 
     
    46954688                                        continue; 
    46964689                                switch (i) { 
    4697                                 case SC_WEIGHT50:    case SC_WEIGHT90:    case SC_HALLUCINATION: 
     4690                                case SC_WEIGHT50:    case SC_WEIGHT90:    case SC_HALLUCINATION:  
    46984691                                case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR: 
    46994692                                case SC_STRIPHELM:   case SC_CP_WEAPON:   case SC_CP_SHIELD: 
     
    47454738                                y = src->y + diry[dir]*skilllv*2; 
    47464739                        } 
    4747  
     4740                         
    47484741                        clif_skill_nodamage(src,bl,TK_HIGHJUMP,skilllv,1); 
    47494742                        if(!map_count_oncell(src->m,x,y,BL_PC|BL_NPC|BL_MOB) && map_getcell(src->m,x,y,CELL_CHKREACH)) { 
     
    47894782                                } else if (!dstsd || map_flag_vs(bl->m)) //HP damage only on pvp-maps when against players. 
    47904783                                        hp = tstatus->max_hp/50; //Recover 2% HP [Skotlex] 
    4791  
     4784                                 
    47924785                                clif_skill_nodamage(src,bl,skillid,skilllv,1); 
    47934786                                unit_skillcastcancel(bl,0); 
     
    47994792                                else 
    48004793                                        hp = 0; 
    4801  
     4794                                 
    48024795                                if (sp) //Recover some of the SP used 
    48034796                                        sp = sp*(25*(skilllv-1))/100; 
     
    48754868        case NPC_CHANGETELEKINESIS: 
    48764869                clif_skill_nodamage(src,bl,skillid,skilllv, 
    4877                         sc_start2(bl, type, 100, skilllv, skill_get_ele(skillid,skilllv), 
     4870                        sc_start2(bl, type, 100, skilllv, skill_get_ele(skillid,skilllv),  
    48784871                                skill_get_time(skillid, skilllv))); 
    48794872                break; 
     
    48834876                if(tstatus->def_ele==ELE_UNDEAD || tstatus->def_ele==ELE_DARK) break; 
    48844877                clif_skill_nodamage(src,bl,skillid,skilllv, 
    4885                         sc_start2(bl, type, 100, skilllv, skill_get_ele(skillid,skilllv), 
     4878                        sc_start2(bl, type, 100, skilllv, skill_get_ele(skillid,skilllv),  
    48864879                                skill_get_time(skillid, skilllv))); 
    48874880                break; 
     
    49004893                                        sc_start(bl,type,100,skilllv,skill_time)) 
    49014894                        && ud) {        //Disable attacking/acting/moving for skill's duration. 
    4902                                 ud->attackabletime = 
     4895                                ud->attackabletime =  
    49034896                                ud->canact_tick = 
    49044897                                ud->canmove_tick = tick + skill_time; 
     
    49444937                } 
    49454938                break; 
    4946  
     4939         
    49474940        case NPC_SPEEDUP: 
    49484941                { 
     
    50175010                        sc_start(bl,type,100,100,skill_get_time(skillid, skilllv))); 
    50185011                break; 
    5019  
     5012                 
    50205013        case NPC_AGIUP: 
    50215014                sc_start(bl,SC_SPEEDUP1,100,skilllv,skill_get_time(skillid, skilllv)); 
     
    50295022                        sc_start4(bl,type,100,skilllv,0,0,6,skill_get_time(skillid,skilllv))); 
    50305023                break; 
    5031  
     5024                 
    50325025        case NPC_SIEGEMODE: 
    50335026                // not sure what it does 
     
    51795172                                return 1; 
    51805173                        } 
    5181  
     5174         
    51825175                        if (tsce) 
    51835176                        {       //HelloKitty2 (?) explained that this silently fails when target is 
     
    51905183                        if (!clif_skill_nodamage(src,bl,skillid,skilllv, 
    51915184                                sc_start(bl,type,55+5*skilllv,skilllv,skill_get_time(skillid,skilllv)))) 
    5192                         { 
     5185                        {        
    51935186                                if (sd) clif_skill_fail(sd,skillid,0,0); 
    51945187                                map_freeblock_unlock(); 
     
    53715364                                        break; 
    53725365                                default: 
    5373                                         break; 
    5374                                 } 
     5366                                        break;                   
     5367                                }                        
    53755368                        } while ((--count) > 0); 
    53765369                        clif_skill_nodamage(src,bl,skillid,skilllv,1); 
     
    54325425                        clif_skill_nodamage(src,bl,skillid,skilllv, 
    54335426                                sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); 
    5434  
     5427                 
    54355428                if (skillid == SL_SKE) 
    54365429                        sc_start(src,SC_SMA,100,skilllv,skill_get_time(SL_SMA,skilllv)); 
    54375430 
    54385431                break; 
    5439  
     5432                 
    54405433        // New guild skills [Celest] 
    54415434        case GD_BATTLEORDER: 
     
    55155508                                clif_feel_info(sd, skilllv-1, 1); 
    55165509                } 
    5517                 break; 
     5510                break;   
    55185511 
    55195512        case SG_HATE: 
     
    55955588                        static const int per[5][2]={{20,50},{50,60},{25,75},{60,64},{34,67}}; 
    55965589                        int rnd = rand()%100; 
    5597                         i = (skilllv-1)%5; 
     5590                        i = (skilllv-1)%5;  
    55985591                        if(rnd<per[i][0]) //Self 
    55995592                                bl = src; 
     
    56625655                mobskill_event(dstmd, src, tick, MSC_SKILLUSED|(skillid<<16)); 
    56635656        } 
    5664  
     5657         
    56655658        if (sd && !(flag&1) && sd->state.arrow_atk) //Consume arrow on last invocation to this skill. 
    56665659                battle_consume_ammo(sd, skillid, skilllv); 
     
    56945687        } 
    56955688 
    5696         if(ud->skillid != SA_CASTCANCEL ) { 
     5689        if(ud->skillid != SA_CASTCANCEL ) 
     5690        {// otherwise handled in unit_skillcastcancel() 
    56975691                if( ud->skilltimer != tid ) { 
    56985692                        ShowError("skill_castend_id: Timer mismatch %d!=%d!\n", ud->skilltimer, tid); 
     
    57005694                        return 0; 
    57015695                } 
    5702                 if( sd && ud->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST)) 
    5703                         status_freecast_switch(sd); 
    5704                 ud->skilltimer=-1; 
     5696 
     5697                if( sd && ud->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST) > 0 ) 
     5698                {// restore original walk speed 
     5699                        ud->skilltimer = -1; 
     5700                        status_calc_bl(&sd->bl, SCB_SPEED); 
     5701                } 
     5702 
     5703                ud->skilltimer = -1; 
    57055704        } 
    57065705 
     
    57655764                        if(inf2 & (INF2_PARTY_ONLY|INF2_GUILD_ONLY) && src != target) 
    57665765                        { 
    5767                                 inf |= 
     5766                                inf |=   
    57685767                                        (inf2&INF2_PARTY_ONLY?BCT_PARTY:0)| 
    57695768                                        (inf2&INF2_GUILD_ONLY?BCT_GUILD:0); 
     
    58075806                if(sd && !skill_check_condition(sd,ud->skillid, ud->skilllv,1)) 
    58085807                        break; 
    5809  
     5808                         
    58105809                if(hd && !skill_check_condition_hom(hd,ud->skillid, ud->skilllv,1))     //[orn] 
    58115810                        break; 
     
    58165815                if (ud->walktimer != -1 && ud->skillid != TK_RUN) 
    58175816                        unit_stop_walking(src,1); 
    5818  
     5817                 
    58195818                ud->canact_tick = tick + skill_delayfix(src, ud->skillid, ud->skilllv); 
    5820  
     5819         
    58215820                if (skill_get_state(ud->skillid) != ST_MOVE_ENABLE) 
    58225821                        unit_set_walkdelay(src, tick, battle_config.default_walk_delay+skill_get_walkdelay(ud->skillid, ud->skilllv), 1); 
    5823  
     5822                 
    58245823                if(battle_config.skill_log && battle_config.skill_log&src->type) 
    58255824                        ShowInfo("Type %d, ID %d skill castend id [id =%d, lv=%d, target ID %d]\n", 
     
    58765875                        if (dy > 0) dy++; 
    58775876                        else if(dy < 0) dy--; 
    5878  
     5877                         
    58795878                        if (unit_movepos(src, src->x+dx, src->y+dy, 1, 1)) 
    58805879                        {       //Display movement + animation. 
     
    58975896 
    58985897/*========================================== 
    5899  * 
     5898 *  
    59005899 *------------------------------------------*/ 
    59015900int skill_castend_pos(int tid, unsigned int tick, int id, intptr data) 
     
    59185917                return 0; 
    59195918        } 
    5920  
     5919         
    59215920        if( ud->skilltimer != tid ) 
    59225921        { 
     
    59265925        } 
    59275926 
    5928         if(sd && ud->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST)) 
    5929                 status_freecast_switch(sd); 
    5930  
     5927        if( sd && ud->skilltimer != -1 && pc_checkskill(sd,SA_FREECAST) > 0 ) 
     5928        {// restore original walk speed 
     5929                ud->skilltimer=-1; 
     5930                status_calc_bl(&sd->bl, SCB_SPEED); 
     5931        } 
    59315932        ud->skilltimer=-1; 
     5933 
    59325934        do { 
    59335935                if(status_isdead(src)) 
     
    59375939                        skill_get_unit_flag(ud->skillid)&UF_NOREITERATION && 
    59385940                        skill_check_unit_range(src,ud->skillx,ud->skilly,ud->skillid,ud->skilllv) 
    5939                   ) 
     5941                  )  
    59405942                { 
    59415943                        if (sd) clif_skill_fail(sd,ud->skillid,0,0); 
     
    59765978                        } 
    59775979                } 
    5978  
     5980                         
    59795981                if(sd && !skill_check_condition(sd,ud->skillid, ud->skilllv, 1)) 
    59805982                        break; 
     
    60626064                skill_area_temp[1] = src->id; 
    60636065                i = skill_get_splash(skillid, skilllv); 
    6064                 map_foreachinarea(skill_area_sub, 
     6066                map_foreachinarea(skill_area_sub,  
    60656067                        src->m, x-i, y-i, x+i, y+i, BL_PC, 
    60666068                        src, skillid, skilllv, tick, flag|BCT_ALL|1, 
     
    60896091                        src->m, x-i, y-i, x+i,y+i,BL_SKILL); 
    60906092                break; 
    6091  
     6093//the code changed alot and jumped around. 
    60926094        case WL_HELLFIRE: // Warlock Hellfire [Brain] 
    6093         //clif_specialeffect(sd, 92, AREA); //Meteor Effect on caster, cant set on ground 
    6094         clif_skill_poseffect(src,WZ_METEOR,skilllv,x,y,tick); //Meteor Effect 
    6095         clif_skill_nodamage(src, src, skillid, 0, 1); //Lalala, just to show the skill yell correctly 
    6096         clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
    6097         // Continue reading because skill_unitsetting is bellow 
    6098  
    6099  
     6095                //clif_specialeffect(sd, 92, AREA); //Meteor Effect on caster, cant set on ground 
     6096                clif_skill_poseffect(src,WZ_METEOR,skilllv,x,y,tick); //Meteor Effect 
     6097                clif_skill_nodamage(src, src, skillid, 0, 1); //Lalala, just to show the skill yell correctly 
     6098                clif_specialeffect(src, 55, AREA); //Red Cast Effect on caster 
     6099                // Continue reading because skill_unitsetting is bellow 
    61006100        case MG_SAFETYWALL: 
    6101         case MG_FIREWALL: 
     6101        case MG_FIREWALL:        
    61026102        case MG_THUNDERSTORM: 
    61036103        case AL_PNEUMA: 
     
    62566256                                md->deletetimer = add_timer (gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, md->bl.id, 0); 
    62576257                                mob_spawn (md); //Now it is ready for spawning. 
    6258                 // @showsummon command implementation [Brainstorm] 
    6259                 if(sd->state.showsummon){ 
    6260                         char output[256]; 
    6261                         sprintf(output, 
    6262                         "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
    6263                         md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
    6264                         clif_disp_onlyself(sd,output,strlen(output)); 
    6265                         sprintf(output, 
    6266                         "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
    6267                         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); 
    6268                         clif_disp_onlyself(sd,output,strlen(output)); 
    6269                 } 
    6270  
    6271                         } 
    6272                 } 
    6273                 break; 
    6274  
     6258//Does this really belong here? 
     6259                                // @showsummon command implementation [Brainstorm] 
     6260                                if(sd->state.showsummon){ 
     6261                                        char output[256]; 
     6262                                        sprintf(output, 
     6263                                                "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
     6264                                                md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
     6265                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6266                                        sprintf(output, 
     6267                                                "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
     6268                                                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); 
     6269                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6270                                } 
     6271 
     6272                        } 
     6273                } 
     6274                break; 
     6275                 
     6276//HUGE lump of code! 
     6277//Some of the code repeats itself, Unless it just recites it for other classes it may be a problem 
    62756278        case AD_FAMILIAR: // Adept Summon Familiar [Brain] 
    6276         if( sd ) 
    6277         { 
    6278                 int id; 
    6279                 int mob_class; 
    6280                 struct mob_data* md; 
    6281                 mob_class = pc_readglobalreg(sd, "ADEPT_FAMILIAR"); 
    6282                 if( mob_class == 0 ) 
     6279                if( sd ) 
    62836280                { 
    6284                 mob_class = mob_get_random_id(4, 0x1, 0); 
    6285                 pc_setglobalreg(sd, "ADEPT_FAMILIAR", mob_class); 
    6286                 } 
    6287                 id = mob_once_spawn(sd,src->m,src->x,src->y,"--en--",mob_class,1,""); 
    6288                 md = (struct mob_data *)map_id2bl(id); 
    6289                 if( md != NULL ) 
    6290                 { 
    6291                 md->master_id = sd->bl.id; 
    6292                 md->special_state.ai = 1; 
    6293                 md->status.mode = md->status.mode|MD_AGGRESSIVE; 
    6294                 status_calc_mob(md,0); //Recalc their stats based on passive bonus 
    6295                 md->status.hp = md->status.max_hp; //Must be here or the code wont update it 
    6296                 // @showsummon command implementation [Brainstorm] 
    6297                 if(sd->state.showsummon){ 
    6298                         char output[256]; 
    6299                         sprintf(output, 
    6300                         "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
    6301                         md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
    6302                         clif_disp_onlyself(sd,output,strlen(output)); 
    6303                         sprintf(output, 
    6304                         "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
    6305                         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); 
    6306                         clif_disp_onlyself(sd,output,strlen(output)); 
    6307                 } 
    6308                 md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); 
    6309                 } 
    6310         } 
    6311         break; 
     6281                        int id; 
     6282                        int mob_class; 
     6283                        struct mob_data* md; 
     6284 
     6285                        mob_class = pc_readglobalreg(sd, "ADEPT_FAMILIAR"); 
     6286                        if( mob_class == 0 ) 
     6287                        { 
     6288                                mob_class = mob_get_random_id(4, 0x1, 0); 
     6289                                pc_setglobalreg(sd, "ADEPT_FAMILIAR", mob_class); 
     6290                        } 
     6291                        id = mob_once_spawn(sd,src->m,src->x,src->y,"--en--",mob_class,1,""); 
     6292                        md = (struct mob_data *)map_id2bl(id); 
     6293                        if( md != NULL ) 
     6294                        { 
     6295                                md->master_id = sd->bl.id; 
     6296                                md->special_state.ai = 1; 
     6297                                md->status.mode = md->status.mode|MD_AGGRESSIVE; 
     6298                                status_calc_mob(md,0); //Recalc their stats based on passive bonus 
     6299                                md->status.hp = md->status.max_hp; //Must be here or the code wont update it 
     6300                                // @showsummon command implementation [Brainstorm] 
     6301                                if(sd->state.showsummon){ 
     6302                                        char output[256]; 
     6303                                        sprintf(output, 
     6304                                                "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
     6305                                                md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
     6306                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6307                                        sprintf(output, 
     6308                                                "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
     6309                                                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); 
     6310                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6311                                } 
     6312                                md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); 
     6313                        } 
     6314                } 
     6315                break; 
    63126316        case NC_SKELETON: // Raise Skeleton [Brain] 
    63136317        case NC_ARCHER: // Raise Archer Skeleton 
     
    63176321        case NC_SHADOW: // Raise Shadow 
    63186322        case NC_WRAITH: // Raise Wraith 
    6319         if( sd ) 
    6320         { 
    6321                 static const int mob_skeleton[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General 
    6322                 static const int mob_archer[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier 
    6323                 static const int mob_zombie[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master 
    6324                 static const int mob_mummy[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy 
    6325                 static const int mob_ghost[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror 
    6326                 static const int mob_shadow[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan 
    6327                 static const int mob_wraith[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead 
    6328                 int id; 
    6329                 int mob_class; 
    6330                 struct mob_data *md; 
    6331  
    6332                 switch( skillid ) 
     6323                if( sd ) 
    63336324                { 
    6334                 case NC_SKELETON: mob_class = mob_skeleton[skilllv-1]; break; 
    6335                 case NC_ARCHER:   mob_class = mob_archer[skilllv-1]; break; 
    6336                 case NC_ZOMBIE:   mob_class = mob_zombie[skilllv-1]; break; 
    6337                 case NC_MUMMY:  mob_class = mob_mummy[skilllv-1]; break; 
    6338                 case NC_GHOST:  mob_class = mob_ghost[skilllv-1]; break; 
    6339                 case NC_SHADOW:   mob_class = mob_shadow[skilllv-1]; break; 
    6340                 case NC_WRAITH:   mob_class = mob_wraith[skilllv-1]; break; 
    6341                 default: 
    6342                         mob_class = 1002; // poring 
    6343                         ShowDebug("skill_castend_pos2: undefined skill #%d used to raise mobs, defaulting to poring\n"); 
    6344                         break; 
    6345                 } 
    6346                 id = mob_once_spawn(sd,src->m,src->x,src->y,"--ja--",mob_class,1,""); 
    6347                 if((md=(struct mob_data *)map_id2bl(id))) 
    6348                 { 
    6349                 md->master_id=sd->bl.id; 
    6350                 md->special_state.ai=1; 
    6351                 md->status.mode=md->db->status.mode|MD_AGGRESSIVE; 
    6352                 status_calc_mob(md,0); //Recalc their stats based on passive bonus 
    6353                 md->status.hp = md->status.max_hp; //Must be here or the code wont update it 
    6354                 // @showsummon command implementation [Brainstorm] 
    6355                 if(sd->state.showsummon){ 
    6356                         char output[256]; 
    6357                         sprintf(output, 
    6358                         "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
    6359                         md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
    6360                         clif_disp_onlyself(sd,output,strlen(output)); 
    6361                         sprintf(output, 
    6362                         "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
    6363                         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); 
    6364                         clif_disp_onlyself(sd,output,strlen(output)); 
    6365                 } 
    6366                 md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); 
    6367                 } 
    6368         } 
    6369         break; 
    6370  
     6325                        static const int mob_skeleton[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General 
     6326                        static const int mob_archer[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier 
     6327                        static const int mob_zombie[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master 
     6328                        static const int mob_mummy[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy 
     6329                        static const int mob_ghost[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror 
     6330                        static const int mob_shadow[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan 
     6331                        static const int mob_wraith[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead 
     6332                        int id; 
     6333                        int mob_class; 
     6334                        struct mob_data *md; 
     6335 
     6336                        switch( skillid ) 
     6337                        { 
     6338                                case NC_SKELETON: mob_class = mob_skeleton[skilllv-1]; break; 
     6339                                case NC_ARCHER:   mob_class = mob_archer[skilllv-1]; break; 
     6340                                case NC_ZOMBIE:   mob_class = mob_zombie[skilllv-1]; break; 
     6341                                case NC_MUMMY:    mob_class = mob_mummy[skilllv-1]; break; 
     6342                                case NC_GHOST:    mob_class = mob_ghost[skilllv-1]; break; 
     6343                                case NC_SHADOW:   mob_class = mob_shadow[skilllv-1]; break; 
     6344                                case NC_WRAITH:   mob_class = mob_wraith[skilllv-1]; break; 
     6345                                default: 
     6346                                        mob_class = 1002; // poring 
     6347                                        ShowDebug("skill_castend_pos2: undefined skill #%d used to raise mobs, defaulting to poring\n"); 
     6348                                        break; 
     6349                        } 
     6350                        id = mob_once_spawn(sd,src->m,src->x,src->y,"--ja--",mob_class,1,""); 
     6351                        if((md=(struct mob_data *)map_id2bl(id))) 
     6352                        { 
     6353                                md->master_id=sd->bl.id; 
     6354                                md->special_state.ai=1; 
     6355                                md->status.mode=md->db->status.mode|MD_AGGRESSIVE; 
     6356                                status_calc_mob(md,0); //Recalc their stats based on passive bonus 
     6357                                md->status.hp = md->status.max_hp; //Must be here or the code wont update it 
     6358//I bet this should NOT be here -- Critical 
     6359                                if(sd->state.showsummon){ 
     6360                                        char output[256]; 
     6361                                        sprintf(output, 
     6362                                                "[Summon] HP : %d | STR : %d DEX : %d VIT : %d INT : %d AGI : %d LUK : %d", 
     6363                                                md->status.max_hp,md->status.str,md->status.dex,md->status.vit,md->status.int_,md->status.agi,md->status.luk); 
     6364                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6365                                        sprintf(output, 
     6366                                                "[%s] ATK : %d~%d | DEF: %d+%d MDEF: %d+%d | HIT: %d FLEE: %d", 
     6367                                                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); 
     6368                                        clif_disp_onlyself(sd,output,strlen(output)); 
     6369                                } 
     6370                                md->deletetimer = add_timer(gettick() + skill_get_time(skillid,skilllv), mob_timer_delete, id, 0); 
     6371                        } 
     6372                } 
     6373                break; 
    63716374 
    63726375 
     
    63956398                        potion_hp = potion_hp * (100+i)/100; 
    63966399                        potion_sp = potion_sp * (100+i)/100; 
    6397  
     6400                         
    63986401                        if(potion_hp > 0 || potion_sp > 0) { 
    63996402                                i = skill_get_splash(skillid, skilllv); 
     
    64176420                        potion_hp = potion_hp * (100+i)/100; 
    64186421                        potion_sp = potion_sp * (100+i)/100; 
    6419  
     6422                         
    64206423                        if(potion_hp > 0 || potion_sp > 0) { 
    64216424                                i = skill_get_splash(skillid, skilllv); 
     
    64396442                } 
    64406443                break; 
    6441  
     6444         
    64426445        case HW_GRAVITATION: 
    64436446                if ((sg = skill_unitsetting(src,skillid,skilllv,x,y,0))) 
     
    65216524        if (sd && !(flag&1) && sd->state.arrow_atk) //Consume arrow if a ground skill was not invoked. [Skotlex] 
    65226525                battle_consume_ammo(sd, skillid, skilllv); 
    6523  
     6526                 
    65246527        return 0; 
    65256528} 
    65266529 
    65276530/*========================================== 
    6528  * 
     6531 *  
    65296532 *------------------------------------------*/ 
    65306533int skill_castend_map (struct map_session_data *sd, short skill_num, const char *map) 
     
    65346537//Simplify skill_failed code. 
    65356538#define skill_failed(sd) { sd->menuskill_id = sd->menuskill_val = 0; } 
    6536         if(skill_num != sd->menuskill_id) 
     6539        if(skill_num != sd->menuskill_id)  
    65376540                return 0; 
    65386541 
     
    65696572                return 0; 
    65706573        } 
    6571  
     6574         
    65726575        switch(skill_num) 
    65736576        { 
     
    66106613                                } 
    66116614                        } 
    6612  
     6615                 
    66136616                        //When it's an item-used warp-portal, the skill-lv used is lost.. assume max level. 
    66146617                        lv = sd->skillitem==skill_num?skill_get_max(skill_num):pc_checkskill(sd,skill_num); 
    66156618                        wx = sd->menuskill_val>>16; 
    66166619                        wy = sd->menuskill_val&0xffff; 
    6617  
     6620                         
    66186621                        if( lv <= 0 ) return 0; 
    66196622                        if( lv > 4 ) lv = 4; // crash prevention 
     
    66346637                                return 0; 
    66356638                        } 
    6636  
     6639                         
    66376640                        // This makes Warp Portal fail if the cell is not empty 
    66386641                        //if(skill_check_unit_range2(&sd->bl,wx,wy,skill_num,lv) > 0) { 
     
    66936696                return 0; //Nothing to remove, this unit is not overlapped. 
    66946697 
    6695         if (unit->val1 != unit->group->skill_id) 
     6698        if (unit->val1 != unit->group->skill_id)  
    66966699        {       //Reset state 
    66976700                unit->val1 = unit->group->skill_id; 
    66986701                unit->val2 &= ~UF_ENSEMBLE; 
    66996702        } 
    6700  
     6703         
    67016704        return map_foreachincell(skill_dance_overlap_sub, unit->bl.m,unit->bl.x,unit->bl.y,BL_SKILL, unit,flag); 
    67026705} 
     
    67826785        switch(skillid) 
    67836786        { 
     6787//seems good. 
    67846788        case WL_HELLFIRE: // Warlock Hellfire [Brain] 
    6785         if(map_flag_vs(src->m)) target = BCT_ALL; 
    6786         break; 
     6789                if(map_flag_vs(src->m)) target = BCT_ALL; 
     6790                break; 
    67876791        case MG_SAFETYWALL: 
    67886792                val2=skilllv+1; 
     
    68606864                        {       //Use the previous limit (minus the elapsed time) [Skotlex] 
    68616865                                limit = old_sg->limit - DIFF_TICK(gettick(), old_sg->tick); 
    6862                                 if (limit < 0)  //This can happen... 
     6866                                if (limit < 0)  //This can happen...  
    68636867                                        limit = skill_get_time(skillid,skilllv); 
    68646868                        } 
     
    71077111                return NULL; 
    71087112        } 
    7109  
     7113         
    71107114 
    71117115        if (skillid == NJ_TATAMIGAESHI) //Store number of tiles. 
     
    71167120 
    71177121/*========================================== 
    7118  * 
     7122 *  
    71197123 *------------------------------------------*/ 
    71207124static int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, unsigned int tick) 
     
    71297133        nullpo_retr(0, src); 
    71307134        nullpo_retr(0, bl); 
    7131  
     7135         
    71327136        if(bl->prev==NULL || !src->alive || status_isdead(bl)) 
    71337137                return 0; 
     
    71397143                        && !skill_get_inf2(sg->skill_id) == INF2_TRAP) //Traps work on top of land protector, magical or not [Brain] 
    71407144                return 0; //AoE skills are ineffective. [Skotlex] 
    7141  
     7145         
    71427146        sc = status_get_sc(bl); 
    7143  
     7147         
    71447148        if (sc && sc->option&OPTION_HIDE && sg->skill_id != WZ_HEAVENDRIVE) 
    71457149                return 0; //Hidden characters are immune to AoE skills except Heaven's Drive. [Skotlex] 
    7146  
     7150         
    71477151        type = status_skill2sc(sg->skill_id); 
    71487152        sce = (sc && type != -1)?sc->data[type]:NULL; 
     
    72407244                } 
    72417245                break; 
    7242  
     7246         
    72437247        case UNT_FOGWALL: 
    72447248                if (!sce) 
     
    72617265//                      src->limit = DIFF_TICK(tick+700,sg->tick); 
    72627266//              break; 
    7263  
     7267         
    72647268        case UNT_MOONLIT: 
    72657269                //Knockback out of area if affected char isn't in Moonlit effect 
     
    72757279 
    72767280/*========================================== 
    7277  * 
     7281 *  
    72787282 *------------------------------------------*/ 
    72797283int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, unsigned int tick) 
     
    73027306        tsc = status_get_sc(bl); 
    73037307        tstatus = status_get_status_data(bl); 
    7304         if (sg->state.magic_power)  //For magic power. 
     7308        if (sg->state.magic_power)  //For magic power.  
    73057309        { 
    73067310                sc = status_get_sc(ss); 
     
    73317335                        return 0; 
    73327336                ts->tick = tick+sg->interval; 
    7333  
     7337                 
    73347338                if ((skillid==CR_GRANDCROSS || skillid==NPC_GRANDDARKNESS) && !battle_config.gx_allhit) 
    73357339                        ts->tick += sg->interval*(map_count_oncell(bl->m,bl->x,bl->y,BL_CHAR)-1); 
     
    73827386                                if (status_isimmune(bl)) 
    73837387                                        heal = 0;       /* 黄金蟲カヌドヒヌル量 */ 
    7384                 // Profane Soul reduces the healed recieved by 3% per skilllv [Brain] 
    7385                 if(tsd) { 
    7386                         heal = heal * (100 - pc_checkskill(tsd,AD_PROFANE)*3)/100; 
    7387                         //Wont heal even if he got elemental armors [Brain] 
    7388                         if(pc_checkskill(tsd,NC_PHYLACTERY)) heal = sg->skill_lv; 
    7389                 } 
    7390  
     7388//Okay? 
     7389                                // Profane Soul reduces the healed recieved by 3% per skilllv [Brain] 
     7390                                if(tsd) { 
     7391                                        heal = heal * (100 - pc_checkskill(tsd,AD_PROFANE)*3)/100; 
     7392                                        //Wont heal even if he got elemental armors [Brain] 
     7393                                        if(pc_checkskill(tsd,NC_PHYLACTERY)) heal = sg->skill_lv; 
     7394                                } 
    73917395                                clif_skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1); 
    73927396                                status_heal(bl, heal, 0, 0); 
     
    73997403 
    74007404                case UNT_EVILLAND: 
    7401                         if (tstatus->race!=RC_UNDEAD && tstatus->race!=RC_DEMON) 
     7405                        //Will heal demon and undead element monsters, but not players. 
     7406                        if (bl->type != BL_PC && !battle_check_undead(tstatus->race, tstatus->def_ele) && tstatus->race!=RC_DEMON) 
    74027407                        {       //Damage enemies 
    74037408                                if(battle_check_target(&src->bl,bl,BCT_ENEMY)>0) 
     
    74237428 
    74247429                case UNT_ATTACK_SKILLS: 
    7425                         switch (sg->skill_id) 
     7430                        switch (sg->skill_id)  
    74267431                        { 
    74277432                                case SG_SUN_WARM: //SG skills [Komurka] 
     
    74617466                                break; 
    74627467                                default: 
    7463                                         skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); 
     7468                                        skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);                      
    74647469                        } 
    74657470                        break; 
     
    74857490                                if (status_change_start(bl,type,10000,sg->skill_lv,sg->group_id,0,0,sec, 8)) 
    74867491                                { 
    7487                                         struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL; 
     7492                                        struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL;  
    74887493                                        if (td) sec = DIFF_TICK(td->tick, tick); 
    74897494                                        map_moveblock(bl, src->bl.x, src->bl.y, tick); 
     
    75567561                        clif_skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1); 
    75577562                        status_heal(bl, heal, 0, 0); 
    7558                         break; 
     7563                        break;   
    75597564                } 
    75607565 
     
    77317736                        status_change_end(bl,type,-1); 
    77327737                break; 
    7733  
     7738                 
    77347739        case UNT_SPIDERWEB: 
    77357740                { 
     
    77597764        if (sc && !sc->count) 
    77607765                sc = NULL; 
    7761  
     7766         
    77627767        type = status_skill2sc(skill_id); 
    77637768        sce = (sc && type != -1)?sc->data[type]:NULL; 
     
    77767781                case BD_ETERNALCHAOS: 
    77777782                case BD_DRUMBATTLEFIELD: 
    7778                 case BD_RINGNIBELUNGEN: 
     7783                case BD_RINGNIBELUNGEN:  
    77797784                case BD_ROKISWEIL: 
    77807785                case BD_INTOABYSS: 
     
    77857790                                //FIXME: This code is not perfect, it doesn't checks for the real ensemble's owner, 
    77867791                                //it only checks if you are doing the same ensemble. So if there's two chars doing an ensemble 
    7787                                 //which overlaps, by stepping outside of the other parther's ensemble will cause you to cancel 
     7792                                //which overlaps, by stepping outside of the other parther's ensemble will cause you to cancel  
    77887793                                //your own. Let's pray that scenario is pretty unlikely and noone will complain too much about it. 
    77897794                                skill_stop_dancing(bl); 
     
    78007805                                status_change_end(bl, type, -1); 
    78017806                        break; 
    7802  
     7807                         
    78037808                case BA_POEMBRAGI: 
    78047809                case BA_WHISTLE: 
     
    78077812                case DC_HUMMING: 
    78087813                case DC_DONTFORGETME: 
    7809                 case DC_FORTUNEKISS: 
     7814                case DC_FORTUNEKISS:     
    78107815                case DC_SERVICEFORYOU: 
    78117816                        if (sce) 
     
    78577862 
    78587863        nullpo_retr(0, group); 
    7859  
     7864         
    78607865        dissonance = skill_dance_switch(unit, 0); 
    78617866 
     
    79427947        if ((skillid != PR_BENEDICTIO && *c >=1) || *c >=2) 
    79437948                return 0; //Partner found for ensembles, or the two companions for Benedictio. [Skotlex] 
    7944  
     7949         
    79457950        if (bl == src) 
    79467951                return 0; 
     
    79517956        if (tsd->sc.data[SC_SILENCE] || tsd->sc.opt1) 
    79527957                return 0; 
    7953  
     7958         
    79547959        switch(skillid) 
    79557960        { 
     
    80368041 
    80378042/*========================================== 
    8038  * 
     8043 *  
    80398044 *------------------------------------------*/ 
    80408045static int skill_check_condition_mob_master_sub (struct block_list *bl, va_list ap) 
     
    80598064 
    80608065/*========================================== 
    8061  * Determines if a given skill should be made to consume ammo 
     8066 * Determines if a given skill should be made to consume ammo  
    80628067 * when used by the player. [Skotlex] 
    80638068 *------------------------------------------*/ 
     
    80988103                sd->skillitem = sd->skillitemlv = 0; 
    80998104                //Need to do arrow state check. 
    8100                 sd->state.arrow_atk = skill_get_ammotype(skill)?1:0; 
     8105                sd->state.arrow_atk = skill_get_ammotype(skill)?1:0;  
    81018106                //Need to do Spiritball check. 
    81028107                sd->spiritball_old = sd->spiritball; 
     
    81088113        if (!sc->count) 
    81098114                sc = NULL; 
    8110  
     8115         
    81118116        if(pc_is90overweight(sd)) { 
    81128117                clif_skill_fail(sd,skill,9,0); 
     
    81328137        if (sd->menuskill_id == AM_PHARMACY && 
    81338138                (skill == AM_PHARMACY || skill == AC_MAKINGARROW || skill == BS_REPAIRWEAPON || 
    8134                 skill == AM_TWILIGHT1 || skill == AM_TWILIGHT2  || skill == AM_TWILIGHT3 
     8139                skill == AM_TWILIGHT1 || skill == AM_TWILIGHT2  || skill == AM_TWILIGHT3  
    81358140        )) { 
    81368141                sd->skillitem = sd->skillitemlv = 0; 
     
    83568361                } 
    83578362                break; 
    8358  
     8363                 
    83598364        case TK_READYCOUNTER: 
    83608365        case TK_READYDOWN: 
     
    83848389                                status_change_end(&sd->bl, SC_COMBO, -1); 
    83858390                                sd->skillid_old = sd->skilllv_old = 0; 
    8386                                 return 0; //Can't repeat previous combo skill. 
     8391                                return 0; //Can't repeat previous combo skill.                           
    83878392                        } 
    83888393                        break; 
    8389                 } else 
     8394                } else  
    83908395                if(sc->data[SC_COMBO]->val1 == skill) 
    83918396                        break; //Combo ready. 
     
    84468451                } 
    84478452                break; 
     8453//Weird to me. 
    84488454        case AD_FAMILIAR: //Adept Familiar [Flavio] 
    8449         { 
    8450                 short familiar[1] ={ pc_readglobalreg(sd, "ADEPT_FAMILIAR") }; 
    8451                 int maxcount = skill_get_maxcount(skill,lv); 
    8452                 int count = 0; 
    8453                 count = mob_countslave_class(&sd->bl, 1, familiar ); 
    8454                 if( count >= maxcount ) 
    84558455                { 
    8456                 clif_skill_fail(sd,skill,0,0); 
    8457                 return 0; 
    8458                 } 
    8459         } 
    8460         break; 
     8456                        short familiar[1] ={ pc_readglobalreg(sd, "ADEPT_FAMILIAR") }; 
     8457                        int maxcount = skill_get_maxcount(skill,lv); 
     8458                        int count = 0; 
     8459                        count = mob_countslave_class(&sd->bl, 1, familiar ); 
     8460                        if( count >= maxcount ) 
     8461                        { 
     8462                                clif_skill_fail(sd,skill,0,0); 
     8463                                return 0; 
     8464                        } 
     8465                } 
     8466                break; 
    84618467        case NC_SKELETON: // Raise Skeleton [Brain] 
    84628468        case NC_ARCHER: // Raise Archer Skeleton 
     
    84668472        case NC_SHADOW: // Raise Shadow 
    84678473        case NC_WRAITH: // Raise Wraith 
    8468         {// corrigido o limite de spawns [Flavio] 
    8469                 short summon1[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General 
    8470                 short summon2[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier 
    8471                 short summon3[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master 
    8472                 short summon4[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy 
    8473                 short summon5[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror 
    8474                 short summon6[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan 
    8475                 short summon7[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead 
    8476                 int maxcount = skill_get_maxcount(skill,lv); 
    8477                 int count = 0; 
    8478                 switch( skill ) 
    8479                 { 
    8480                 case NC_SKELETON: count = mob_countslave_class(&sd->bl, 5, summon1); break; 
    8481                 case NC_ARCHER: count = mob_countslave_class(&sd->bl, 5, summon2); break; 
    8482                 case NC_ZOMBIE: count = mob_countslave_class(&sd->bl, 5, summon3); break; 
    8483                 case NC_MUMMY: count = mob_countslave_class(&sd->bl, 5, summon4); break; 
    8484                 case NC_GHOST: count = mob_countslave_class(&sd->bl, 5, summon5); break; 
    8485                 case NC_SHADOW: count = mob_countslave_class(&sd->bl, 5, summon6); break; 
    8486                 case NC_WRAITH: count = mob_countslave_class(&sd->bl, 5, summon7); break; 
    8487                 } 
    8488                 if( count >= maxcount ) 
    8489                 { 
    8490                 clif_skill_fail(sd,skill,0,0); 
    8491                 return 0; 
    8492                 } 
    8493         } 
    8494         break; 
    8495  
     8474                {// corrigido o limite de spawns [Flavio] 
     8475                        short summon1[5]={ 3201, 3202, 3203, 3204, 3205 }; // Skeleton, Orc Skeleton, Soldier Skeleton, Pirate Skeleton, Skeleton General 
     8476                        short summon2[5]={ 3206, 3207, 3208, 3209, 3210 }; // Archer Skeleton, Firelock Soldier 
     8477                        short summon3[5]={ 3211, 3212, 3213, 3214, 3215 }; // Zombie, Ghoul, Zombie Master 
     8478                        short summon4[5]={ 3216, 3217, 3218, 3219, 3220 }; // Mummy, Ancient Mummy 
     8479                        short summon5[5]={ 3221, 3222, 3223, 3224, 3225 }; // Whisper, Nightmare, Nightmare Terror 
     8480                        short summon6[5]={ 3226, 3227, 3228, 3229, 3230 }; // Injustice, Raydric, Dullahan 
     8481                        short summon7[5]={ 3231, 3232, 3233, 3234, 3235 }; // Wraith, Wraith Dead 
     8482                        int maxcount = skill_get_maxcount(skill,lv); 
     8483                        int count = 0; 
     8484                        switch( skill ) 
     8485                        { 
     8486                        case NC_SKELETON: count = mob_countslave_class(&sd->bl, 5, summon1); break; 
     8487                        case NC_ARCHER: count = mob_countslave_class(&sd->bl, 5, summon2); break; 
     8488                        case NC_ZOMBIE: count = mob_countslave_class(&sd->bl, 5, summon3); break; 
     8489                        case NC_MUMMY: count = mob_countslave_class(&sd->bl, 5, summon4); break; 
     8490                        case NC_GHOST: count = mob_countslave_class(&sd->bl, 5, summon5); break; 
     8491                        case NC_SHADOW: count = mob_countslave_class(&sd->bl, 5, summon6); break; 
     8492                        case NC_WRAITH: count = mob_countslave_class(&sd->bl, 5, summon7); break; 
     8493                        } 
     8494                        if( count >= maxcount ) 
     8495                        { 
     8496                                clif_skill_fail(sd,skill,0,0); 
     8497                                return 0; 
     8498                        } 
     8499                } 
     8500                break; 
    84968501        case WZ_FIREPILLAR: // celest 
    84978502                if (lv <= 5)    // no gems required at level 1-5 
     
    85028507                if(!(sc && sc->data[SC_SMA])) 
    85038508                        return 0; 
    8504                 break; 
     8509                break;   
    85058510 
    85068511        case HT_POWER: 
     
    85548559                                        clif_skill_fail(sd,skill,0,0); 
    85558560                                        return 0; 
    8556                                 } 
     8561                                }        
    85578562                        } 
    85588563                } 
     
    86068611                //Only invoke on skill begin cast (instant cast skill). [Kevin] 
    86078612                if(sp>0 && !type) 
    8608                 { 
     8613                {  
    86098614                        if (status->sp < (unsigned int)sp) 
    86108615                                clif_skill_fail(sd,skill,1,0); 
     
    86328637                } 
    86338638                break; 
    8634  
     8639         
    86358640        case NJ_ISSEN: 
    86368641                if (status->hp < 2) { 
     
    86448649                } 
    86458650                break; 
    8646  
     8651         
    86478652        case NJ_ZENYNAGE: 
    86488653                if(sd->status.zeny < zeny) { 
     
    86868691                        return 0; 
    86878692                } 
    8688  
     8693         
    86898694                if(weapon && !pc_check_weapontype(sd,weapon)) { 
    86908695                        clif_skill_fail(sd,skill,6,0); 
     
    87828787                if (sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == skill) 
    87838788                        sd->ud.canmove_tick = gettick(); //When using a combo, cancel the can't move delay to enable the skill. [Skotlex] 
    8784  
     8789                         
    87858790                if (!unit_can_move(&sd->bl)) { 
    87868791                        clif_skill_fail(sd,skill,0,0); 
     
    88738878int skill_castfix (struct block_list *bl, int skill_id, int skill_lv) 
    88748879{ 
    8875         int time = skill_get_cast(skill_id, skill_lv); 
     8880        int time = skill_get_cast(skill_id, skill_lv);   
    88768881        struct map_session_data *sd; 
    88778882 
    88788883        nullpo_retr(0, bl); 
    88798884        sd = BL_CAST(BL_PC, bl); 
    8880  
     8885         
    88818886        // calculate base cast time (reduced by dex) 
    88828887        if (!(skill_get_castnodex(skill_id, skill_lv)&1)) { 
     
    89268931                        status_change_end(bl, SC_SUFFRAGIUM, -1); 
    89278932                } 
    8928         if (sc->data[SC_DECREPIFY]) // Necro Decrepify [Brain] 
    8929                 if(sc->data[SC_DECREPIFY]->val2>=3) 
    8930                 time += time * 25/100; //+25% cast time 
    8931         if (sc->data[SC_CURSETONGUES]) { //Warlock Curse of Tongues [Brain] 
    8932                 time += time * sc->data[SC_CURSETONGUES]->val2 / 100; 
    8933                 status_change_end(bl, SC_CURSETONGUES, -1); 
    8934         } 
    8935  
     8933//Curse skills... 
     8934                if (sc->data[SC_DECREPIFY]) // Necro Decrepify [Brain] 
     8935                        if(sc->data[SC_DECREPIFY]->val2>=3) 
     8936                                time += time * 25/100; //+25% cast time 
     8937                if (sc->data[SC_CURSETONGUES]) { //Warlock Curse of Tongues [Brain] 
     8938                        time += time * sc->data[SC_CURSETONGUES]->val2 / 100; 
     8939                        status_change_end(bl, SC_CURSETONGUES, -1); 
     8940                } 
    89368941                if (sc->data[SC_MEMORIZE]) { 
    89378942                        time>>=1; 
     
    89528957        int delaynodex = skill_get_delaynodex(skill_id, skill_lv); 
    89538958        int time = skill_get_delay(skill_id, skill_lv); 
    8954  
     8959         
    89558960        nullpo_retr(0, bl); 
    89568961 
     
    89598964 
    89608965        if (bl->type&battle_config.no_skill_delay) 
    8961                 return battle_config.min_skill_delay_limit; 
     8966                return battle_config.min_skill_delay_limit;  
    89628967 
    89638968        if (time < 0) 
     
    89768981        default: 
    89778982                if (battle_config.delay_dependon_dex && !(delaynodex&1)) 
    8978                 {       // if skill delay is allowed to be reduced by dex 
     8983                {       // if skill delay is allowed to be reduced by dex  
    89798984                        int scale = battle_config.castrate_dex_scale - status_get_dex(bl); 
    89808985                        if (scale > 0) 
     
    89848989                } 
    89858990                if (battle_config.delay_dependon_agi && !(delaynodex&1)) 
    8986                 {       // if skill delay is allowed to be reduced by agi 
     8991                {       // if skill delay is allowed to be reduced by agi  
    89878992                        int scale = battle_config.castrate_dex_scale - status_get_agi(bl); 
    89888993                        if (scale > 0) 
     
    90289033 
    90299034/*========================================= 
    9030  * 
     9035 *  
    90319036 *-----------------------------------------*/ 
    90329037void skill_brandishspear_first (struct square *tc, int dir, int x, int y) 
     
    95529557        return count; 
    95539558} 
    9554  
     9559         
    95559560/*========================================== 
    95569561 * Returns the first element field found [Skotlex] 
     
    97069711 
    97079712/*========================================== 
    9708  * 
     9713 *  
    97099714 *------------------------------------------*/ 
    97109715int skill_chastle_mob_changetarget(struct block_list *bl,va_list ap) 
     
    97399744        unit = (struct skill_unit *)src; 
    97409745        tick = va_arg(ap,int); 
    9741  
     9746         
    97429747        nullpo_retr(0, sg = unit->group); 
    97439748        nullpo_retr(0, ss = map_id2bl(sg->src_id)); 
     
    97499754                case UNT_SHOCKWAVE: 
    97509755                case UNT_SANDMAN: 
    9751                 case UNT_FLASHER: 
     9756                case UNT_FLASHER:         
    97529757                        skill_additional_effect(ss,bl,sg->skill_id,sg->skill_lv,BF_MISC,tick); 
    97539758                        break; 
     
    97959800                if (type != scs[i] && sc->data[scs[i]]) 
    97969801                        status_change_end(bl, scs[i], -1); 
    9797  
     9802                 
    97989803        return 0; 
    97999804} 
     
    98139818                        wall = false; 
    98149819        } 
    9815  
     9820                 
    98169821        if( sce ) 
    98179822        { 
     
    98569861        if(!sc->count || !(sce=sc->data[SC_DANCING])) 
    98579862                return; 
    9858  
     9863         
    98599864        group = (struct skill_unit_group *)sce->val2; 
    98609865        sce->val2 = 0; 
    9861  
     9866         
    98629867        if (sce->val4) 
    98639868        { 
     
    99939998        nullpo_retr(NULL, src); 
    99949999        nullpo_retr(NULL, ud); 
    9995  
     10000         
    999610001        // find a free spot to store the new unit group 
    999710002        ARR_FIND( 0, MAX_SKILLUNITGROUP, i, ud->skillunit[i] == NULL ); 
     
    1005310058 
    1005410059        if (!src) src=map_id2bl(group->src_id); 
    10055         ud = unit_bl2ud(src); 
     10060        ud = unit_bl2ud(src);    
    1005610061        if(!src || !ud) { 
    1005710062                ShowError("skill_delunitgroup: Group's source not found! (src_id: %d skill_id: %d)\n", group->src_id, group->skill_id); 
    10058                 return 0; 
     10063                return 0;        
    1005910064        } 
    1006010065        if (skill_get_unit_flag(group->skill_id)&(UF_DANCE|UF_SONG|UF_ENSEMBLE)) 
     
    1015210157        if (group->interval==-1) 
    1015310158                return NULL; 
    10154  
     10159         
    1015510160        ud = unit_bl2ud(bl); 
    1015610161        if (!ud) return NULL; 
     
    1039410399        int skill_id; 
    1039510400        int i; 
    10396  
     10401         
    1039710402        nullpo_retr(0, group); 
    10398  
     10403         
    1039910404        if( !unit->alive || target->prev == NULL ) 
    1040010405                return 0; 
     
    1047510480                //cells do not get deleted within them. [Skotlex] 
    1047610481                if( dissonance ) skill_dance_switch(unit, 1); 
    10477  
     10482                         
    1047810483                if( flag&4 ) 
    1047910484                        skill_unit_onleft(skill_id,target,tick); 
     
    1050210507                memset(skill_unit_temp, 0, sizeof(skill_unit_temp)); 
    1050310508        } 
    10504  
     10509                 
    1050510510        map_foreachincell(skill_unit_move_sub,bl->m,bl->x,bl->y,BL_SKILL,bl,tick,flag); 
    1050610511 
     
    1068010685        if (qty < 1) 
    1068110686                qty = 1; 
    10682  
     10687         
    1068310688        if (!skill_id) //A skill can be specified for some override cases. 
    1068410689                skill_id = skill_produce_db[idx].req_skill; 
    10685  
     10690         
    1068610691        slot[0]=slot1; 
    1068710692        slot[1]=slot2; 
     
    1076110766                        case AM_TWILIGHT2: 
    1076210767                        case AM_TWILIGHT3: 
    10763                                 make_per = pc_checkskill(sd,AM_LEARNINGPOTION)*100 
     10768                                make_per = pc_checkskill(sd,AM_LEARNINGPOTION)*50 
    1076410769                                        + pc_checkskill(sd,AM_PHARMACY)*300 + sd->status.job_level*20 
    10765                                         + status->int_*5 + status->dex*10+status->luk*10; 
     10770                                        + (status->int_/2)*10 + status->dex*10+status->luk*10; 
     10771                                if(merc_is_hom_active(sd->hd)) {//Player got a homun 
     10772                                        int skill; 
     10773                                        if((skill=merc_hom_checkskill(sd->hd,HVAN_INSTRUCT)) > 0) //His homun is a vanil with instruction change 
     10774                                                make_per += skill*100; //+1% bonus per level 
     10775                                } 
    1076610776                                switch(nameid){ 
    1076710777                                        case 501: // Red Potion 
    1076810778                                        case 503: // Yellow Potion 
    1076910779                                        case 504: // White Potion 
    10770                                         case 605: // Anodyne 
    10771                                         case 606: // Aloevera 
    10772                                                 make_per += 2000; 
     10780                                                make_per += (1+rand()%100)*10 + 2000; 
    1077310781                                                break; 
    10774                                         case 505: // Blue Potion 
    10775                                                 make_per -= 500; 
    10776                                                 break; 
    10777                                         case 545: // Condensed Red Potion 
    10778                                         case 546: // Condensed Yellow Potion 
    10779                                         case 547: // Condensed White Potion 
    10780                                                 make_per -= 1000; 
    10781                                             break; 
    10782                                         case 970: // Alcohol 
    10783                                                 make_per += 1000; 
    10784                                                 break; 
    10785                                         case 7139: // Glistening Coat 
    10786                                                 make_per -= 1000; 
     10782                                        case 970: // Alcohol 
     10783                                                make_per += (1+rand()%100)*10 + 1000; 
    1078710784                                                break; 
    1078810785                                        case 7135: // Bottle Grenade 
     
    1079010787                                        case 7137: // Plant Bottle 
    1079110788                                        case 7138: // Marine Sphere Bottle 
     10789                                                make_per += (1+rand()%100)*10; 
     10790                                                break; 
     10791                                        case 546: // Condensed Yellow Potion 
     10792                                                make_per -= (1+rand()%50)*10; 
     10793                                                break; 
     10794                                        case 547: // Condensed White Potion 
     10795                                        case 7139: // Glistening Coat 
     10796                                                make_per -= (1+rand()%100)*10; 
     10797                                            break; 
     10798                                        //Common items, recieve no bonus or penalty, listed just because they are commonly produced 
     10799                                        case 505: // Blue Potion 
     10800                                        case 545: // Condensed Red Potion 
     10801                                        case 605: // Anodyne 
     10802                                        case 606: // Aloevera 
    1079210803                                        default: 
    1079310804                                                break; 
     
    1082710838// - Baby Class Penalty = 80% (from adult's chance) ----// 
    1082810839        if (sd->class_&JOBL_BABY) //if it's a Baby Class 
    10829                 make_per = (make_per * 80) / 100; //Lupus 
     10840                make_per = (make_per * 70) / 100; //Baby penalty is 30% 
    1083010841 
    1083110842        if(make_per < 1) make_per = 1; 
    1083210843 
    10833  
     10844         
    1083410845        if(rand()%10000 < make_per || qty > 1){ //Success, or crafting multiple items. 
    1083510846                struct item tmp_item; 
     
    1090210913                                                skill_id != AM_TWILIGHT2 && 
    1090310914                                                skill_id != AM_TWILIGHT3) 
    10904                                                 continue; 
     10915                                                continue;                                                
    1090510916                                        //Add fame as needed. 
    1090610917                                        switch(++sd->potion_success_counter) { 
     
    1095510966                } 
    1095610967        } 
    10957         //Failure 
     10968        //Failure        
    1095810969//      if(log_config.produce) 
    1095910970//              log_produce(sd,nameid,slot1,slot2,slot3,0); 
     
    1104111052                return 0; 
    1104211053        if (sd) sd->blockskill[data] = 0; 
    11043  
     11054         
    1104411055        return 1; 
    1104511056} 
     
    1106811079                return 0; 
    1106911080        if (hd) hd->blockskill[data] = 0; 
    11070  
     11081         
    1107111082        return 1; 
    1107211083} 
     
    1107511086{ 
    1107611087        nullpo_retr (-1, hd); 
    11077  
     11088         
    1107811089        skillid = skill_get_index(skillid); 
    1107911090        if (skillid == 0) 
     
    1113511146                        if ((val[j]-val[j-step]) != diff) 
    1113611147                                break; 
    11137  
     11148         
    1113811149                if (j>=step) //No match, try next step. 
    1113911150                        continue; 
    11140  
     11151                 
    1114111152                for(; i < MAX_SKILL_LEVEL; i++) 
    1114211153                {       //Apply linear increase 
     
    1133511346                                memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); 
    1133611347                        } else { 
    11337                                 int dx[] = { 1, 1 ,0, 0,-1}; 
    11338                                 int dy[] = { 1, 0, 0,-1,-1}; 
     11348                                int dx[] = { 1, 1 ,0, 0,-1};  
     11349                                int dy[] = { 1, 0, 0,-1,-1};  
    1133911350                                memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx)); 
    1134011351                                memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); 
     
    1136611377                                memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); 
    1136711378                        } else { 
    11368                                 int dx[] = { 2, 1 ,0,-1,-2}; 
    11369                                 int dy[] = { 2, 1, 0,-1,-2}; 
     11379                                int dx[] = { 2, 1 ,0,-1,-2};  
     11380                                int dy[] = { 2, 1, 0,-1,-2};  
    1137011381                                memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx)); 
    1137111382                                memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); 
     
    1139611407 * skill_nocast_db.txt 
    1139711408 * skill_unit_db.txt 
    11398  * produce_db.txt 
     11409 * produce_db.txt  
    1139911410 * create_arrow_db.txt 
    1140011411 * abra_db.txt 
     
    1146511476        skill_split_atoi(split[5],skill_db[i].sp_rate); 
    1146611477        skill_split_atoi(split[6],skill_db[i].zeny); 
    11467  
     11478         
    1146811479        //FIXME: document this 
    1146911480        p = split[7]; 
     
    1148311494                p++; 
    1148411495        } 
    11485  
     11496         
    1148611497        //FIXME: document this 
    1148711498        p = split[8]; 
     
    1151711528        else if( strcmpi(split[10],"water")==0 ) skill_db[i].state = ST_WATER; 
    1151811529        else skill_db[i].state = ST_NONE; 
    11519  
     11530         
    1152011531        skill_split_atoi(split[11],skill_db[i].spiritball); 
    1152111532        for( j = 0; j < 10; j++ ) { 
     
    1153311544        if( !i ) // invalid skill id 
    1153411545                return false; 
    11535  
     11546         
    1153611547        skill_split_atoi(split[1],skill_db[i].cast); 
    1153711548        skill_split_atoi(split[2],skill_db[i].delay); 
     
    1154911560        if( !i ) // invalid skill id 
    1155011561                return false; 
    11551  
     11562         
    1155211563        skill_split_atoi(split[1],skill_db[i].castnodex); 
    1155311564        if( split[2] ) // optional column 
     
    1157511586        if( !i ) // invalid skill id 
    1157611587                return false; 
    11577  
     11588         
    1157811589        skill_db[i].unit_id[0] = strtol(split[1],NULL,16); 
    1157911590        skill_db[i].unit_id[1] = strtol(split[2],NULL,16); 
     
    1162111632        skill_produce_db[current].req_skill = atoi(split[2]); 
    1162211633        skill_produce_db[current].req_skill_lv = atoi(split[3]); 
    11623  
     11634         
    1162411635        for( x = 4, y = 0; x+1 < columns && split[x] && split[x+1] && y < MAX_PRODUCE_RESOURCE; x += 2, y++ ) 
    1162511636        { 
     
    1164011651 
    1164111652        skill_arrow_db[current].nameid = i; 
    11642  
     11653         
    1164311654        for( x = 1, y = 0; x+1 < columns && split[x] && split[x+1] && y < MAX_ARROW_RESOURCE; x += 2, y++ ) 
    1164411655        { 
     
    1167911690        memset(skill_arrow_db,0,sizeof(skill_arrow_db)); 
    1168011691        memset(skill_abra_db,0,sizeof(skill_abra_db)); 
    11681  
     11692         
    1168211693        // load skill databases 
    1168311694        safestrncpy(skill_db[0].name, "UNKNOWN_SKILL", sizeof(skill_db[0].name)); 
     
    1170711718        skilldb_name2id = strdb_alloc(DB_OPT_DUP_KEY, 0); 
    1170811719        skill_readdb(); 
    11709  
     11720         
    1171011721        skill_unit_ers = ers_new(sizeof(struct skill_unit_group)); 
    1171111722        skill_timer_ers  = ers_new(sizeof(struct skill_timerskill)); 
    11712  
     11723         
    1171311724        add_timer_func_list(skill_unit_timer,"skill_unit_timer"); 
    1171411725        add_timer_func_list(skill_castend_id,"skill_castend_id"); 
     
    1171611727        add_timer_func_list(skill_timerskill,"skill_timerskill"); 
    1171711728        add_timer_func_list(skill_blockpc_end, "skill_blockpc_end"); 
    11718  
     11729         
    1171911730        add_timer_interval(gettick()+SKILLUNITTIMER_INTERVAL,skill_unit_timer,0,0,SKILLUNITTIMER_INTERVAL); 
    1172011731 
     
    1172911740        return 0; 
    1173011741} 
    11731  
     11742//Why is this after the cleanup code? 
    1173211743int skill_additem(struct block_list* src, struct block_list *bl, int itemid, int amount)// ITEM GIVER [Brain] 
    1173311744{ 
     
    1173511746 
    1173611747        nullpo_retr(1, src); 
    11737         nullpo_retr(1, bl); 
     11748        nullpo_retr(1, bl);      
    1173811749 
    1173911750        if (src->m != bl->m) 
    11740         return 1; 
     11751                return 1; 
    1174111752        if (bl->prev == NULL) 
    11742         return 1; 
     11753                return 1; 
    1174311754        if (src->type == BL_PC) 
    11744         sd = (struct map_session_data *)src; 
     11755                sd = (struct map_session_data *)src; 
    1174511756        if (bl->type == BL_PC) 
    11746         tsd = (struct map_session_data *)bl; 
     11757                tsd = (struct map_session_data *)bl; 
    1174711758        if (status_isdead(bl)) 
    11748         return 1; 
     11759                return 1; 
    1174911760 
    1175011761        int eflag; 
    1175111762        struct item item_tmp; 
    1175211763        struct block_list tbl; 
    11753  
     11764         
    1175411765        memset(&item_tmp,0,sizeof(item_tmp)); 
    1175511766        memset(&tbl,0,sizeof(tbl)); 
     
    1176211773        eflag = pc_additem(sd,&item_tmp,amount); 
    1176311774        if(eflag) { 
    11764         clif_additem(sd,0,0,eflag); 
    11765         map_addflooritem(&item_tmp,amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0); 
     11775                clif_additem(sd,0,0,eflag); 
     11776                map_addflooritem(&item_tmp,amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0); 
    1176611777        } 
    1176711778        return 0; 
  • src/map/skill.h

    r22 r24  
    320320 
    321321int skill_arrow_create( struct map_session_data *sd,int nameid); 
    322  
    323 int skill_additem(struct block_list* src, struct block_list *bl, int itemid, int amount); // Item giver func [Brain] 
    324  
    325322 
    326323// mobƒXƒLƒ‹‚Ì‚œ‚ß 
     
    959956 
    960957        ALL_INCCARRY = 681, 
     958         
     959//most skills are irrelevant, will block comment them out. 
     960/*+     GM_SANDMAN = 688, 
     961+       CASH_BLESSING, 
     962+       CASH_INCAGI, 
     963+       CASH_ASSUMPTIO, 
     964+       ALL_CATCRY,*/ 
     965//Up there is irrelevant. 
     966  
    961967        AD_PWBLIND = 700,       // Custom Skills [Brainstorm] 
    962968        AD_PWFEAR, 
     
    987993        NC_DRAINLIFE, 
    988994        NC_DEATHPACT, 
    989  
     995//Still no idea why that is there. 
    990996        ALL_ATFIELD, //GM SKILL 
    991997 
    992         WL_CURSETONGUES, //732 
     998        WL_CURSETONGUES =732, //732 
    993999        WL_CURSEDOOM, 
    9941000        WL_CURSEEXHAUST, 
     
    10091015        WL_CORRUPTION, //749 
    10101016 
     1017//Irrelevant 
     1018/*+     TD_FISHING = 750, 
     1019+       TD_MINING, 
     1020+       TD_HERBALISM, 
     1021+       TD_LEATHERWORK, 
     1022+       TD_TAILORING, 
     1023+       TD_BLACKSMITHING, 
     1024+       TD_SCRIBESCROLLA, 
     1025+       TD_SCRIBESCROLLB, 
     1026+       TD_SCRIBESCROLLC, 
     1027+       TD_SHIELD, 
     1028+       TD_WOODCUTTING,*/ 
     1029// STOP! Cant use 800 (homun skills) NOR 900 (guild skills) 
    10111030 
    10121031        KN_CHARGEATK = 1001, 
  • src/map/status.c

    r22 r24  
    130130        set_sc( NPC_SILENCEATTACK , SC_SILENCE   , SI_BLANK    , SCB_NONE ); 
    131131        set_sc( DC_WINKCHARM      , SC_CONFUSION , SI_BLANK    , SCB_NONE ); 
    132         set_sc( AD_PWFEAR        , SC_FEAR        , SI_HALLUCINATION , SCB_SPEED ); //Fear Status by [Brainstorm] 
     132        //the visual effect is HALLUCINATION?! 
     133        set_sc( AD_PWFEAR         , SC_FEAR      , SI_HALLUCINATION , SCB_SPEED ); //Fear Status by [Brainstorm] 
    133134        set_sc( NPC_BLINDATTACK   , SC_BLIND     , SI_BLANK    , SCB_HIT|SCB_FLEE ); 
    134135        set_sc( LK_HEADCRUSH      , SC_BLEEDING  , SI_BLEEDING , SCB_REGEN ); 
     
    408409        set_sc( GD_BATTLEORDER       , SC_BATTLEORDERS    , SI_BLANK           , SCB_STR|SCB_INT|SCB_DEX ); 
    409410        set_sc( GD_REGENERATION      , SC_REGENERATION    , SI_BLANK           , SCB_REGEN ); 
    410  
     411        //Are we sure about this? 
    411412        // Custom Jobs Skills [Brain] 
    412         add_sc( AD_PWBLIND         , SC_BLIND); 
    413         add_sc( AD_PWFEAR               , SC_FEAR); 
    414         set_sc( AD_LUST           , SC_LUST             , SI_JOINTBEAT     , SCB_ASPD|SCB_BATK|SCB_WATK|SCB_REGEN); 
    415  
    416         set_sc( NC_DECREPIFY     , SC_DECREPIFY    , SI_BLEEDING        , SCB_SPEED|SCB_BATK|SCB_WATK|SCB_DEF2|SCB_MDEF2); 
    417         set_sc( NC_DARKMOON       , SC_DARKMOON , SI_MOON_COMFORT       , SCB_FLEE|SCB_HIT); 
    418         add_sc( NC_DARKMOON       , SC_BLIND); 
    419         set_sc( NC_REQUIEM         , SC_REQUIEM  , SI_KAIZEL      , SCB_BATK|SCB_WATK); 
    420         add_sc( NC_GHOULTOUCH   , SC_POISON); 
    421         set_sc( NC_PWSUFFER       , SC_SUFFER     , SI_BLANK       , SCB_DEF|SCB_DEF2); 
    422         set_sc( NC_DEATHPACT     , SC_DEATHPACT    , SI_BIOMOBTRICKDEAD , SCB_DEF_ELE|SCB_REGEN); 
     413        add_sc( AD_PWBLIND           , SC_BLIND); 
     414        add_sc( AD_PWFEAR            , SC_FEAR); 
     415        set_sc( AD_LUST              , SC_LUST            , SI_JOINTBEAT       , SCB_ASPD|SCB_BATK|SCB_WATK|SCB_REGEN);  
     416        set_sc( NC_DECREPIFY         , SC_DECREPIFY       , SI_BLEEDING        , SCB_SPEED|SCB_BATK|SCB_WATK|SCB_DEF2|SCB_MDEF2); 
     417        set_sc( NC_DARKMOON          , SC_DARKMOON        , SI_MOON_COMFORT    , SCB_FLEE|SCB_HIT); 
     418        add_sc( NC_DARKMOON          , SC_BLIND); 
     419        set_sc( NC_REQUIEM           , SC_REQUIEM         , SI_KAIZEL          , SCB_BATK|SCB_WATK); 
     420        add_sc( NC_GHOULTOUCH        , SC_POISON); 
     421        set_sc( NC_PWSUFFER          , SC_SUFFER          , SI_BLANK           , SCB_DEF|SCB_DEF2); 
     422        set_sc( NC_DEATHPACT         , SC_DEATHPACT       , SI_BIOMOBTRICKDEAD , SCB_DEF_ELE|SCB_REGEN); 
    423423         
    424         set_sc( WL_SEARING         , SC_SEARING  , SI_BLANK        , SCB_NONE); 
    425         set_sc( WL_IMMOLATE       , SC_IMMOLATE , SI_BLANK         , SCB_NONE); 
    426         add_sc( WL_SHADOWBURN   , SC_STUN); 
    427         set_sc( WL_PWAGONY         , SC_AGONY      , SI_BLANK      , SCB_MDEF|SCB_MDEF2); 
    428         set_sc( WL_CURSETONGUES   , SC_CURSETONGUES     , SI_SLOWCAST   , SCB_NONE); 
    429         set_sc( WL_CURSEDOOM     , SC_DOOM              , SI_BLANK         , SCB_NONE); 
    430         set_sc( WL_CURSEWEAKNESS         , SC_CURSEWEAKNESS   , SI_STRIPWEAPON  , SCB_BATK|SCB_WATK); 
    431         set_sc( WL_CURSEEXHAUST   , SC_CURSEEXHAUST     , SI_CRITICALWOUND   , SCB_DEF|SCB_MDEF); 
    432         add_sc( WL_HOWLOFTERROR   , SC_FEAR); 
    433         set_sc( WL_HOWLOFPAIN   , SC_PROVOKE     , SI_PROVOKE    , SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK); 
    434         set_sc( WL_OVERWHELMING   , SC_OVERWHELMING     , SI_ENERGYCOAT   , SCB_DEF|SCB_MDEF|SCB_MATK|SCB_REGEN|SCB_DEF_ELE); 
    435          
    436         set_sc( ALL_ATFIELD       , SC_ATFIELD   , SI_UTSUSEMI  ,SCB_NONE); 
     424        set_sc( WL_SEARING           , SC_SEARING         , SI_BLANK           , SCB_NONE); 
     425        set_sc( WL_IMMOLATE          , SC_IMMOLATE        , SI_BLANK           , SCB_NONE); 
     426        add_sc( WL_SHADOWBURN        , SC_STUN); 
     427        set_sc( WL_PWAGONY           , SC_AGONY           , SI_BLANK           , SCB_MDEF|SCB_MDEF2); 
     428        set_sc( WL_CURSETONGUES      , SC_CURSETONGUES    , SI_SLOWCAST        , SCB_NONE); 
     429        set_sc( WL_CURSEDOOM         , SC_DOOM            , SI_BLANK           , SCB_NONE); 
     430        set_sc( WL_CURSEWEAKNESS     , SC_CURSEWEAKNESS   , SI_STRIPWEAPON    , SCB_BATK|SCB_WATK); 
     431        set_sc( WL_CURSEEXHAUST      , SC_CURSEEXHAUST    , SI_CRITICALWOUND   , SCB_DEF|SCB_MDEF); 
     432        add_sc( WL_HOWLOFTERROR      , SC_FEAR); 
     433        set_sc( WL_HOWLOFPAIN        , SC_PROVOKE         , SI_PROVOKE        , SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK); 
     434        set_sc( WL_OVERWHELMING      , SC_OVERWHELMING    , SI_ENERGYCOAT      , SCB_DEF|SCB_MDEF|SCB_MATK|SCB_REGEN|SCB_DEF_ELE); 
     435//WTF IS THIS DOING HERE AT ALL?!        
     436        set_sc( ALL_ATFIELD          , SC_ATFIELD         , SI_UTSUSEMI        ,SCB_NONE); 
    437437 
    438438 
     
    675675                        status_change_end(target,SC_WINKCHARM,-1); 
    676676                        status_change_end(target,SC_CONFUSION,-1); 
    677                         //error... definately... 
    678                         if (sc->data[SC_FEAR]) //Fear Status by [Brainstorm] 
    679                         status_change_end(target, SC_FEAR, -1); 
     677/*+                     if (sc->data[SC_FEAR]) //Fear Status by [Brainstorm] 
     678+                               status_change_end(target, SC_FEAR, -1);*/ 
     679//Modifying the above... 
     680            status_change_end(target,SC_FEAR,-1); 
    680681                        status_change_end(target,SC_TRICKDEAD,-1); 
    681682                        status_change_end(target,SC_HIDING,-1); 
     
    689690                                        status_change_end(target, SC_ENDURE, -1); 
    690691                        } 
     692                        //May also work here... MAYBE 
     693//                      if (sc->data[SC_FEAR]) //Fear Status by [Brainstorm] 
     694//                              status_change_end(target, SC_FEAR, -1); 
    691695                        if ((sce=sc->data[SC_GRAVITATION]) && sce->val3 == BCT_SELF) 
    692696                        { 
     
    12261230} 
    12271231 
    1228 void status_calc_bl(struct block_list *bl, unsigned long flag); 
    1229  
    12301232// Basic ASPD value 
    12311233int status_base_amotion_pc(struct map_session_data* sd, struct status_data* status) 
     
    13721374        if (md->master_id && md->special_state.ai>1) 
    13731375                flag|=16; 
    1374  
     1376// a flag o_O 
    13751377        if (md->master_id && md->special_state.ai) 
    1376         flag|=32; //Adept/Necro/Warlock Summon Stats Bonus [Brainstorm] 
    1377  
    1378  
     1378                flag|=32; //Adept/Necro/Warlock Summon Stats Bonus [Brainstorm] 
    13791379        if (!flag) 
    13801380        { //No special status required. 
     
    14931493                status->aspd_rate -= 100*md->guardian_data->guardup_lv; 
    14941494        } 
     1495//Gentlemen, prepare to error your ass off! =O Unless I fixed that thing wayyyy up thar ^ 
    14951496        //Summon Bonus from Skills [Brainstorm] 
    14961497        if(flag&32) 
    14971498        { 
    1498         mbl = map_id2bl(md->master_id); 
    1499         if(mbl) 
    1500         { 
    1501                 struct unit_data *ud = unit_bl2ud(mbl); 
    1502                 //Remove special AI when this is used by regular mobs. 
    1503                 if (mbl->type == BL_MOB && !((TBL_MOB*)mbl)->special_state.ai) 
    1504                 md->special_state.ai = 0; 
    1505                  
    1506                 int master_lv = status_get_lv(mbl); 
    1507                 int skill_mastery = pc_checkskill((TBL_PC*)mbl,AD_SUMMONS); 
    1508                 int undead_mastery = pc_checkskill((TBL_PC*)mbl,NC_UNDEAD); 
     1499                mbl = map_id2bl(md->master_id); //WTF?! Your mom! It's there you liar compiling bastard! 
     1500                if(mbl) 
     1501                { 
     1502                        struct unit_data *ud = unit_bl2ud(mbl); 
     1503                        //Remove special AI when this is used by regular mobs. 
     1504                        if (mbl->type == BL_MOB && !((TBL_MOB*)mbl)->special_state.ai) 
     1505                                md->special_state.ai = 0; 
     1506                         
     1507                        int master_lv = status_get_lv(mbl); 
     1508                        int skill_mastery = pc_checkskill((TBL_PC*)mbl,AD_SUMMONS); 
     1509                        int undead_mastery = pc_checkskill((TBL_PC*)mbl,NC_UNDEAD); 
    15091510         
    1510                 if (ud->skillid == AD_FAMILIAR) 
    1511                 { 
    1512                 status->max_hp += (skill_mastery*10) + (master_lv*10); 
    1513                 status->str += (master_lv) + (skill_mastery); 
    1514                 status->dex += (master_lv) + (skill_mastery); 
    1515                 status->agi += (master_lv) + (skill_mastery); 
    1516                 status->int_ += (master_lv) + (skill_mastery); 
    1517                 status->vit += (master_lv) + (skill_mastery); 
    1518                 status->luk += (master_lv) + (skill_mastery); 
    1519                 status->rhw.atk += (skill_mastery*3) 
    1520                         + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 
    1521                 status->rhw.atk2 += (skill_mastery*3) 
    1522                         + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 
    1523                 status->speed -= skill_mastery; 
    1524                 status->def += (master_lv)/10 + (skill_mastery); 
    1525                 status->mdef += (master_lv)/10 + (skill_mastery); 
    1526                 //These are not automatically recalculated 
    1527                 status->hit += (master_lv*2) + (skill_mastery); 
    1528                 status->flee += (master_lv*2) + (skill_mastery); 
    1529                 status->def2 += (master_lv) + (skill_mastery); 
    1530                 status->mdef2 += (master_lv) + (skill_mastery); 
    1531                 }        
    1532                 else if(status->race==RC_UNDEAD) 
    1533                 { 
    1534                 status->max_hp += (undead_mastery*10) + (master_lv*2); 
    1535                 status->str += (undead_mastery*3) + (skill_mastery); 
    1536                 status->dex += (undead_mastery*3) + (skill_mastery); 
    1537                 status->agi += (undead_mastery*3) + (skill_mastery); 
    1538                 status->int_ += (undead_mastery*3) + (skill_mastery); 
    1539                 status->vit += (undead_mastery*3) + (skill_mastery); 
    1540                 status->luk += (undead_mastery*3) + (skill_mastery); 
    1541                 status->rhw.atk += (undead_mastery*3) + (skill_mastery*3) 
    1542                         + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 
    1543                 status->rhw.atk2 += (undead_mastery*3) + (skill_mastery*3) 
    1544                         + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 
    1545                 status->speed -= undead_mastery; 
    1546                 status->def += undead_mastery; 
    1547                 status->mdef += undead_mastery; 
    1548                 //These are not automatically recalculated 
    1549                 status->hit += (undead_mastery*3) + (skill_mastery); 
    1550                 status->flee += (undead_mastery*3) + (skill_mastery); 
    1551                 status->def2 += (undead_mastery*3) + (skill_mastery); 
    1552                 status->mdef2 += (undead_mastery*3) + (skill_mastery); 
    1553                 } 
    1554         } 
    1555         else ShowError("status_calc_mob: Monster summoned without a master at %s\n", map[md->bl.m].name); 
    1556         } 
    1557  
    1558  
     1511                        if (ud->skillid == AD_FAMILIAR) 
     1512                        { 
     1513                                status->max_hp += (skill_mastery*10) + (master_lv*10); 
     1514                                status->str += (master_lv) + (skill_mastery); 
     1515                                status->dex += (master_lv) + (skill_mastery); 
     1516                                status->agi += (master_lv) + (skill_mastery); 
     1517                                status->int_ += (master_lv) + (skill_mastery); 
     1518                                status->vit += (master_lv) + (skill_mastery); 
     1519                                status->luk += (master_lv) + (skill_mastery); 
     1520                                status->rhw.atk += (skill_mastery*3) 
     1521                                        + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 
     1522                                status->rhw.atk2 += (skill_mastery*3) 
     1523                                        + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 
     1524                                status->speed -= skill_mastery; 
     1525                                status->def += (master_lv)/10 + (skill_mastery); 
     1526                                status->mdef += (master_lv)/10 + (skill_mastery); 
     1527                                //These are not automatically recalculated 
     1528                                status->hit += (master_lv*2) + (skill_mastery); 
     1529                                status->flee += (master_lv*2) + (skill_mastery); 
     1530                                status->def2 += (master_lv) + (skill_mastery); 
     1531                                status->mdef2 += (master_lv) + (skill_mastery); 
     1532                        }        
     1533                        else if(status->race==RC_UNDEAD) 
     1534                        { 
     1535                                status->max_hp += (undead_mastery*10) + (master_lv*2); 
     1536                                status->str += (undead_mastery*3) + (skill_mastery); 
     1537                                status->dex += (undead_mastery*3) + (skill_mastery); 
     1538                                status->agi += (undead_mastery*3) + (skill_mastery); 
     1539                                status->int_ += (undead_mastery*3) + (skill_mastery); 
     1540                                status->vit += (undead_mastery*3) + (skill_mastery); 
     1541                                status->luk += (undead_mastery*3) + (skill_mastery); 
     1542                                status->rhw.atk += (undead_mastery*3) + (skill_mastery*3) 
     1543                                        + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 
     1544                                status->rhw.atk2 += (undead_mastery*3) + (skill_mastery*3) 
     1545                                        + (status->str+((status->str/10)*(status->str/10))+(status->dex/5)+(status->luk/10)); 
     1546                                status->speed -= undead_mastery; 
     1547                                status->def += undead_mastery; 
     1548                                status->mdef += undead_mastery; 
     1549                                //These are not automatically recalculated 
     1550                                status->hit += (undead_mastery*3) + (skill_mastery); 
     1551                                status->flee += (undead_mastery*3) + (skill_mastery); 
     1552                                status->def2 += (undead_mastery*3) + (skill_mastery); 
     1553                                status->mdef2 += (undead_mastery*3) + (skill_mastery); 
     1554                        } 
     1555                } 
     1556                else ShowError("status_calc_mob: Monster summoned without a master at %s\n", map[md->bl.m].name); 
     1557        } 
    15591558        //Initial battle status 
    15601559        if (!first) 
     
    17451744        sd->delayrate=100; 
    17461745        sd->dsprate=100; 
    1747         sd->speed_rate = 100; 
    17481746        sd->hprecov_rate = 100; 
    17491747        sd->sprecov_rate = 100; 
     
    18041802        status->aspd_rate = 1000; 
    18051803        status->ele_lv = 1; 
     1804//      status->race = RC_DEMIHUMAN; 
    18061805        status->race = RC_DEMIHUMAN;// This define players default race to DEMIHUMAN [Brain] 
    18071806        if(pc_checkskill(sd,NC_PHYLACTERY)>0) status->def_ele = ELE_UNDEAD; //Phylactery turns you UNDEAD 1 instead of NEUTRAL 
     1807 
    18081808 
    18091809        //zero up structures... 
     
    18601860                + sizeof(sd->crit_atk_rate) 
    18611861                + sizeof(sd->classchange) 
     1862                + sizeof(sd->speed_rate) 
    18621863                + sizeof(sd->speed_add_rate) 
    18631864                + sizeof(sd->aspd_add) 
     
    20422043        sd->perfect_hit += sd->perfect_hit_add; 
    20432044        sd->splash_range += sd->splash_add_range; 
    2044         if(sd->speed_add_rate)   
    2045                 sd->speed_rate += sd->speed_add_rate; 
    20462045 
    20472046        // Damage modifiers from weapon type 
     
    20962095                status->dex += skill; 
    20972096        if((skill=pc_checkskill(sd,WL_DEMONOLOGY))>0) //Warlock Demonology [Brain] 
    2098         status->str += skill/2; //+1 str per 2 skill points 
    2099  
     2097                status->str += skill/2; //+1 str per 2 skill points 
    21002098 
    21012099        // Bonuses from cards and equipment as well as base stat, remember to avoid overflows. 
     
    21362134                status->max_hp += skill*200; 
    21372135        if((skill=pc_checkskill(sd,AD_PROFANE))>0) // Adept Profane Soul [Brain] 
    2138         status->max_hp += status->max_hp * (skill*3)/100; 
    2139  
     2136                status->max_hp += status->max_hp * (skill*3)/100; 
    21402137 
    21412138        // Apply relative modifiers from equipment 
     
    21682165                status->max_sp += status->max_sp * 2*skill/100; 
    21692166        if((skill=pc_checkskill(sd,AD_PROFANE))>0) // Adept Profane Soul [Brain] 
    2170         status->max_sp += sd->status.max_sp * (skill*3)/100; 
    2171  
    2172  
     2167                status->max_sp += sd->status.max_sp * (skill*3)/100; 
    21732168        // Apply relative modifiers from equipment 
    21742169        if(sd->sprate < 0) 
     
    22632258                } 
    22642259        } 
     2260        //right place? 
    22652261        if((skill=pc_checkskill(sd,AD_FERVOR))>0) // Adept Unholy Fevor [Brain] 
    2266         status->hit += skill*2; 
     2262                status->hit += skill*2; 
    22672263 
    22682264// ----- FLEE CALCULATION ----- 
     
    22742270                status->flee += (skill*3)>>1; 
    22752271        if((skill=pc_checkskill(sd,AD_FERVOR))>0) // Adept Unholy Fevor [Brain] 
    2276         status->flee += skill*2; 
     2272                status->flee += skill*2; 
    22772273 
    22782274// ----- EQUIPMENT-DEF CALCULATION ----- 
     
    23012297                status->mdef = cap_value(i, CHAR_MIN, CHAR_MAX); 
    23022298        } 
     2299        //AMIDOINITRITE? 
    23032300        // Absolute modifiers from passive skills 
    23042301        if((skill=pc_checkskill(sd,AD_DARKFAITH))>0) // Adept Dark Faith [Brain] 
    2305         status->mdef += 1*skill; 
     2302                status->mdef += 1*skill; 
    23062303 
    23072304 
     
    23142311// ----- WALKING SPEED CALCULATION ----- 
    23152312 
    2316         if(sd->speed_rate < 0) 
    2317                 sd->speed_rate = 0; 
    2318         if(sd->speed_rate != 100) 
    2319                 status->speed = status->speed*sd->speed_rate/100; 
     2313        sd->speed_rate += sd->speed_add_rate; 
     2314        status->speed += status->speed * sd->speed_rate/100; 
    23202315 
    23212316        // Relative modifiers from passive skills 
     
    24112406                sd->subrace[RC_DRAGON]+=skill; 
    24122407        } 
    2413  
     2408// Racial slurs =O 
    24142409        if((skill=pc_checkskill(sd,AD_DARKFAITH))>0) // Adept Dark Faith [Brain] 
    2415         sd->subele[ELE_DARK] += skill*5; 
     2410                sd->subele[ELE_DARK] += skill*5; 
    24162411        if((skill=pc_checkskill(sd,WL_DEMONOLOGY))>0 ){ //Warlock Demonology [Brain] 
    2417         skill = skill*5; 
    2418         sd->right_weapon.addrace[RC_DEMON]+=skill; 
    2419         sd->magic_addrace[RC_DEMON]+=skill; 
    2420         sd->subrace[RC_DEMON]+=skill; 
     2412                skill = skill*5; 
     2413                sd->right_weapon.addrace[RC_DEMON]+=skill; 
     2414                sd->magic_addrace[RC_DEMON]+=skill; 
     2415                sd->subrace[RC_DEMON]+=skill; 
    24212416        } 
    24222417        if((pc_checkskill(sd,NC_PHYLACTERY))>0){ // Necro Phylactery [Brain] 
    2423         sd->subele[ELE_NEUTRAL] += 10;  //And increases neutral resistance by 10% 
    2424         } 
     2418                sd->subele[ELE_NEUTRAL] += 10;  //And increases neutral resistance by 10% 
     2419        } 
     2420 
    24252421 
    24262422 
     
    24482444                } 
    24492445                if(sd->sc.data[SC_DEATHPACT]) //Necro Death Pact [Brain] 
    2450                 sd->subele[ELE_NEUTRAL] += sd->sc.data[SC_DEATHPACT]->val2; 
    2451  
     2446                        sd->subele[ELE_NEUTRAL] += sd->sc.data[SC_DEATHPACT]->val2; 
    24522447                if(sc->data[SC_ARMOR_ELEMENT]) 
    24532448                {       //This status change should grant card-type elemental resist. 
     
    26052600        status->rhw.atk2 = status->str + hom->level; 
    26062601 
    2607         /*Passive bonus from Wolf Mastery (will only take effect when first created or level up) [Brainstorm] 
    2608         if((skill=pc_checkskill(hd->master,QHT_WOLFMASTERY)) > 0) 
    2609         { 
    2610         status->rhw.atk +=      skill * 3; 
    2611         status->rhw.atk2 +=     skill * 3; 
    2612         status->str +=  skill; 
    2613         status->agi +=  skill; 
    2614         status->vit +=  skill; 
    2615         status->dex +=  skill; 
    2616         status->int_ += skill; 
    2617         status->luk +=  skill; 
    2618         }*/ 
    2619  
    2620  
    26212602        status->aspd_rate = 1000; 
    26222603 
     
    27852766                || sc->data[SC_TRICKDEAD] 
    27862767                || sc->data[SC_BLEEDING] 
    2787                 || sc->data[SC_LUST]    // Adept Blood Lust, stops hp regen [Brain] 
     2768                || sc->data[SC_LUST]            // Adept Blood Lust, stops hp regen [Brain] 
    27882769                || sc->data[SC_DEATHPACT]       // Necro Death Pact 
    27892770 
     
    28942875                if(status->speed < battle_config.max_walk_speed) 
    28952876                        status->speed = battle_config.max_walk_speed; 
    2896  
    2897                 if ((skill=pc_checkskill(sd,SA_FREECAST))>0) { 
    2898                         //Store casting walk speed for quick restoration. [Skotlex] 
    2899                         sd->prev_speed = status->speed * (175-5*skill)/100; 
    2900                         if(sd->ud.skilltimer != -1) { //Swap speed. 
    2901                                 skill = status->speed; 
    2902                                 status->speed = sd->prev_speed; 
    2903                                 sd->prev_speed = skill; 
    2904                         } 
    2905                 } 
    2906         } 
     2877        } 
     2878 
    29072879        if(flag&(SCB_ASPD|SCB_AGI|SCB_DEX)) { 
    29082880                flag|=SCB_ASPD; 
     
    29162888 
    29172889                status->amotion = cap_value(skill,battle_config.max_aspd,2000); 
    2918  
    29192890                status->adelay = 2*status->amotion; 
    2920                 if ((skill=pc_checkskill(sd,SA_FREECAST))>0) { 
    2921                         //Store casting adelay for quick restoration. [Skotlex] 
    2922                         sd->prev_adelay = status->adelay*(150-5*skill)/100; 
    2923                         if(sd->ud.skilltimer != -1) { //Swap adelay. 
    2924                                 skill = status->adelay; 
    2925                                 status->adelay = sd->prev_adelay; 
    2926                                 sd->prev_adelay = skill; 
    2927                         } 
    2928                 } 
    2929  
    29302891        } 
    29312892 
     
    35673528                batk += 100; 
    35683529        if(sc->data[SC_LUST]) // Adept Blood Lust [Brain] 
    3569         batk += batk * sc->data[SC_LUST]->val2/100; 
     3530                batk += batk * sc->data[SC_LUST]->val2/100; 
    35703531        if(sc->data[SC_CURSEWEAKNESS]) // Warlock Curse of Weakness [Brain] 
    3571         batk -= batk * sc->data[SC_CURSEWEAKNESS]->val2/100; 
     3532                batk -= batk * sc->data[SC_CURSEWEAKNESS]->val2/100; 
    35723533        if(sc->data[SC_DECREPIFY]) // Necromancer Decrepify [Brain] 
    3573         if(sc->data[SC_DECREPIFY]->val2>=2) 
    3574                 batk -= batk * 25/100; 
    3575  
     3534                if(sc->data[SC_DECREPIFY]->val2>=2) 
     3535                        batk -= batk * 25/100; 
    35763536        return (unsigned short)cap_value(batk,0,USHRT_MAX); 
    35773537} 
     
    36083568                } 
    36093569        } 
    3610         if(sc->data[SC_BLOODLUST]) 
     3570        if(sc->data[SC_BLOODLUST])//WTF?! 
    36113571                watk += watk * sc->data[SC_BLOODLUST]->val2/100; 
    36123572        if(sc->data[SC_FLEET]) 
     
    36173577                watk -= watk * sc->data[SC_STRIPWEAPON]->val2/100; 
    36183578        if(sc->data[SC_LUST]) // Adept Blood Lust [Brain] 
    3619         watk += watk * sc->data[SC_LUST]->val2/100; 
     3579                watk += watk * sc->data[SC_LUST]->val2/100; 
    36203580        if(sc->data[SC_REQUIEM]){       //Necro Requiem [Brain] 
    3621         if(sc->data[SC_REQUIEM]->val2) 
    3622                 watk += sc->data[SC_REQUIEM]->val2*10; 
    3623         if(sc->data[SC_REQUIEM]->val3) 
    3624                 watk -= sc->data[SC_REQUIEM]->val3*10; 
    3625         } 
     3581                if(sc->data[SC_REQUIEM]->val2) 
     3582                        watk += sc->data[SC_REQUIEM]->val2*10; 
     3583                if(sc->data[SC_REQUIEM]->val3) 
     3584                        watk -= sc->data[SC_REQUIEM]->val3*10; 
     3585        }//???? 
    36263586        if(sc->data[SC_CURSEWEAKNESS]) // Warlock Curse of Weakness [Brain] 
    3627         watk -= watk * sc->data[SC_CURSEWEAKNESS]->val2/100; 
     3587                watk -= watk * sc->data[SC_CURSEWEAKNESS]->val2/100; 
    36283588        if(sc->data[SC_DECREPIFY]) // Necromancer Decrepify [Brain] 
    3629         if(sc->data[SC_DECREPIFY]->val2>=2) 
    3630                 watk -= watk * 25/100; 
    3631  
     3589                if(sc->data[SC_DECREPIFY]->val2>=2) 
     3590                        watk -= watk * 25/100; 
    36323591 
    36333592        return (unsigned short)cap_value(watk,0,USHRT_MAX); 
     
    36503609                matk += matk * sc->data[SC_INCMATKRATE]->val1/100; 
    36513610        if(sc->data[SC_OVERWHELMING]) // Warlock Overwhelming Evil [Brain] 
    3652         matk += matk * sc->data[SC_OVERWHELMING]->val2/100; 
    3653  
     3611                matk += matk * sc->data[SC_OVERWHELMING]->val2/100; 
    36543612 
    36553613        return (unsigned short)cap_value(matk,0,USHRT_MAX); 
     
    37003658                hit += 20; // RockmanEXE; changed based on updated [Reddozen] 
    37013659        if(sc->data[SC_DARKMOON]){      //Necro Dark Moon [Brain] 
    3702         if(sc->data[SC_DARKMOON]->val2) 
    3703                 hit += sc->data[SC_DARKMOON]->val2; 
    3704         if(sc->data[SC_DARKMOON]->val3) 
    3705                 hit -= sc->data[SC_DARKMOON]->val3; 
    3706         } 
    3707  
     3660                if(sc->data[SC_DARKMOON]->val2) 
     3661                        hit += sc->data[SC_DARKMOON]->val2; 
     3662                if(sc->data[SC_DARKMOON]->val3) 
     3663                        hit -= sc->data[SC_DARKMOON]->val3; 
     3664        } 
    37083665         
    37093666        return (short)cap_value(hit,1,SHRT_MAX); 
     
    37473704                flee += 10 + sc->data[SC_SPEED]->val1 * 10 ; 
    37483705        if(sc->data[SC_DARKMOON]){      //Necro Dark Moon [Brain] 
    3749         if(sc->data[SC_DARKMOON]->val2) 
    3750                 flee += sc->data[SC_DARKMOON]->val2; 
    3751         if(sc->data[SC_DARKMOON]->val3) 
    3752                 flee -= sc->data[SC_DARKMOON]->val3; 
    3753         } 
    3754  
     3706                if(sc->data[SC_DARKMOON]->val2) 
     3707                        flee += sc->data[SC_DARKMOON]->val2; 
     3708                if(sc->data[SC_DARKMOON]->val3) 
     3709                        flee -= sc->data[SC_DARKMOON]->val3; 
     3710        } 
    37553711 
    37563712        return (short)cap_value(flee,1,SHRT_MAX); 
     
    38123768                def -= def * (sc->data[SC_FLING]->val2)/100; 
    38133769        if(sc->data[SC_SUFFER]) // Necro Power Word: Suffer [Brain] 
    3814         def <<=1; // -25% def 
     3770                def <<=1; // -25% def 
    38153771        if (sc->data[SC_CURSEEXHAUST]) // Warlock Curse of Exhaustion [Brain] 
    3816         def -= sc->data[SC_CURSEEXHAUST]->val2; 
     3772                def -= sc->data[SC_CURSEEXHAUST]->val2; 
    38173773        if (sc->data[SC_OVERWHELMING]) // Warlock Overwhelming Evil [Brain] 
    3818          def += sc->data[SC_OVERWHELMING]->val1; 
     3774                def += sc->data[SC_OVERWHELMING]->val1; 
    38193775 
    38203776 
     
    38533809                def2 -= def2 * (sc->data[SC_FLING]->val3)/100; 
    38543810        if(sc->data[SC_SUFFER]) // Necro Power Word: Suffer [Brain] 
    3855         def2 -= def2 * 25/100; // -25% def 
     3811                def2 -= def2 * 25/100; // -25% def 
    38563812        if(sc->data[SC_DECREPIFY]) // Necromancer Decrepify [Brain] 
    3857         if(sc->data[SC_DECREPIFY]->val2>=4) 
    3858                 def2 -= def2 * 25/100; 
     3813                if(sc->data[SC_DECREPIFY]->val2>=4) 
     3814                        def2 -= def2 * 25/100; 
    38593815 
    38603816 
     
    38863842                mdef += 1; //Skill info says it adds a fixed 1 Mdef point. 
    38873843        if(sc->data[SC_AGONY])   // Warlock Power Word: Agony [Brain] 
    3888         mdef -= 25*mdef/100; // -25% mdef 
     3844                mdef -= 25*mdef/100; // -25% mdef 
    38893845        if (sc->data[SC_CURSEEXHAUST]) // Warlock Curse of Exhaustion [Brain] 
    3890         mdef -= sc->data[SC_CURSEEXHAUST]->val2; 
     3846                mdef -= sc->data[SC_CURSEEXHAUST]->val2; 
    38913847        if (sc->data[SC_OVERWHELMING]) // Warlock Overwhelming Evil [Brain] 
    3892          mdef += sc->data[SC_OVERWHELMING]->val1; 
    3893  
     3848                mdef += sc->data[SC_OVERWHELMING]->val1; 
    38943849 
    38953850        return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX); 
     
    39063861                mdef2 -= mdef2 * sc->data[SC_MINDBREAKER]->val3/100; 
    39073862        if(sc->data[SC_AGONY])   // Warlock Power Word: Agony [Brain] 
    3908         mdef2 -= mdef2 * 25/100; // -25% mdef 
     3863                mdef2 -= mdef2 * 25/100; // -25% mdef 
    39093864        if(sc->data[SC_DECREPIFY]) // Necromancer Decrepify [Brain] 
    3910         if(sc->data[SC_DECREPIFY]->val2>=5) 
    3911                 mdef2 -= mdef2 * 25/100; 
     3865                if(sc->data[SC_DECREPIFY]->val2>=5) 
     3866                        mdef2 -= mdef2 * 25/100; 
    39123867 
    39133868 
     
    39173872static unsigned short status_calc_speed(struct block_list *bl, struct status_change *sc, int speed) 
    39183873{ 
     3874        TBL_PC* sd = BL_CAST(BL_PC, bl); 
     3875 
    39193876        //Default speed coming in means there's no speed_rate adjustments.  
    39203877        int new_speed = speed; 
    39213878        bool default_speed = (speed == DEFAULT_WALK_SPEED); 
     3879 
     3880        if( sd && sd->ud.skilltimer != -1 && pc_checkskill(sd,SA_FREECAST) > 0 ) 
     3881                speed = speed * (175 - 5 * pc_checkskill(sd,SA_FREECAST))/100; 
    39223882 
    39233883        if(!sc || !sc->count) 
     
    39643924                        else if(sc->data[SC_WINDWALK]) 
    39653925                                new_speed -= new_speed * sc->data[SC_WINDWALK]->val3/100; 
    3966                 else if(sc->data[SC_FEAR]) //Fear Status by [Brainstorm] 
    3967                 new_speed -= new_speed * 25/100; 
     3926                        else if(sc->data[SC_FEAR]) //Fear Status by [Brainstorm] 
     3927                                new_speed -= new_speed * 25/100; 
    39683928 
    39693929                } 
     
    40113971                speed = speed * 100/75; 
    40123972        if(sc->data[SC_DECREPIFY]) // Necromancer Decrepify [Brain] 
    4013         speed = speed * 100/75; //-25% walkspeed 
    4014  
     3973                speed = speed * 100/75; //-25% walkspeed 
    40153974         
    40163975        return (short)cap_value(speed,10,USHRT_MAX); 
     
    40834042                else if(sc->data[SC_MADNESSCANCEL]) 
    40844043                        aspd_rate -= 200; 
    4085         else if(sc->data[SC_LUST]) // Adept Blood Lust [Brain] 
    4086                 aspd_rate -= sc->data[SC_LUST]->val2*10; 
     4044                else if(sc->data[SC_LUST]) // Adept Blood Lust [Brain] 
     4045                        aspd_rate -= sc->data[SC_LUST]->val2*10; 
    40874046 
    40884047        } 
     
    41804139                return sc->data[SC_ELEMENTALCHANGE]->val2; 
    41814140        if( sc->data[SC_DEATHPACT]) // Necro Death Pact [Brain] 
    4182         return ELE_UNDEAD; 
     4141                return ELE_UNDEAD; 
    41834142        if( sc->data[SC_OVERWHELMING]) // Warlock Overwhelming Evil [Brain] 
    4184         return ELE_DARK; 
    4185  
     4143                return ELE_DARK; 
    41864144        return (unsigned char)cap_value(element,0,UCHAR_MAX); 
    41874145} 
     
    42034161                return sc->data[SC_ELEMENTALCHANGE]->val1; 
    42044162        if( sc->data[SC_DEATHPACT]) // Necro Death Pact [Brain] 
    4205         return 1; 
     4163                return 1; 
    42064164        if( sc->data[SC_OVERWHELMING]) // Warlock Overwhelming Evil [Brain] 
    4207         return 1; 
     4165                return 1; 
    42084166 
    42094167 
     
    42504208        } 
    42514209        return cap_value(mode,0,USHRT_MAX); 
    4252 } 
    4253  
    4254 /*========================================== 
    4255  * Quick swap of adelay/speed when starting ending SA_FREECAST 
    4256  *------------------------------------------*/ 
    4257 void status_freecast_switch(struct map_session_data *sd) 
    4258 { 
    4259         struct status_data *status; 
    4260         unsigned short b_speed,tmp; 
    4261  
    4262         status = &sd->battle_status; 
    4263  
    4264         b_speed = status->speed; 
    4265  
    4266         tmp = status->speed; 
    4267         status->speed = sd->prev_speed; 
    4268         sd->prev_speed = tmp; 
    4269  
    4270         tmp = status->adelay; 
    4271         status->adelay = sd->prev_adelay; 
    4272         sd->prev_adelay = tmp; 
    4273  
    4274         if(b_speed != status->speed) 
    4275                 clif_updatestatus(sd,SP_SPEED); 
    42764210} 
    42774211 
     
    49454879        case SC_ASSNCROS: 
    49464880        case SC_LUST: // Adept Blood Lust [Brain] 
    4947  
    49484881                if (sc->data[SC_QUAGMIRE]) 
    49494882                        return 0; 
     
    50494982                 switch (type) { 
    50504983                        case SC_BLESSING: 
    5051                           if (status->race!=RC_UNDEAD && status->race!=RC_DEMON) 
     4984                          if (!undead_flag && status->race!=RC_DEMON) 
    50524985                                  break; 
    50534986                        case SC_QUAGMIRE: 
     
    50634996                        case SC_RICHMANKIM: 
    50644997                        case SC_ROKISWEIL: 
    5065                 //New status [Brainstorm] 
    5066                 case SC_FEAR: 
    5067                 case SC_DECREPIFY: 
    5068                 case SC_DARKMOON: 
    5069                 case SC_REQUIEM: 
    5070                 case SC_CURSETONGUES: 
    5071                 case SC_CURSEWEAKNESS: 
    5072                 case SC_CURSEEXHAUST: 
    5073  
     4998 //Not sure if its the right place. 
     4999                        //New status [Brainstorm] 
     5000                        case SC_FEAR: 
     5001                        case SC_DECREPIFY: 
     5002                        case SC_DARKMOON: 
     5003                        case SC_REQUIEM: 
     5004                        case SC_CURSETONGUES: 
     5005                        case SC_CURSEWEAKNESS: 
     5006                        case SC_CURSEEXHAUST: 
     5007//SC Fogwall Must have been added after he did this? 
    50745008                        case SC_FOGWALL: 
    50755009                                return 0; 
     
    50835017                //TO-DO Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM 
    50845018                //but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm] 
    5085                 if (status->race!=RC_UNDEAD && status->race!=RC_DEMON) { 
     5019                if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) { 
    50865020                        if (sc->data[SC_CURSE]) 
    50875021                                status_change_end(bl,SC_CURSE,-1); 
    50885022                        if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) 
    50895023                                status_change_end(bl,SC_STONE,-1); 
    5090                 // Warlock Curses are canceled by blessing [Brain] 
     5024//hell of a time finding this 
     5025                        // Warlock Curses are canceled by blessing [Brain] 
     5026                        if (sc->data[SC_CURSEWEAKNESS]) 
     5027                                status_change_end(bl,SC_CURSEWEAKNESS,-1); 
     5028                        if (sc->data[SC_CURSETONGUES]) 
     5029                                status_change_end(bl,SC_CURSETONGUES,-1); 
     5030                        if (sc->data[SC_CURSEEXHAUST]) 
     5031                                status_change_end(bl,SC_CURSEEXHAUST,-1); 
     5032                        if (sc->data[SC_DOOM]) // This skill would be way funnier if we could igore this concept, no? 
     5033                                status_change_end(bl,SC_DOOM,-1);//But then people would abuse on WoEs 
     5034                } 
     5035                break; 
     5036        case SC_CURSEWEAKNESS: // Warlock Curse of Weakness removes Impositio Manus [Brain] 
     5037                if (sc->data[SC_IMPOSITIO]) 
     5038                        status_change_end(bl,SC_IMPOSITIO,-1); 
     5039                if (sc->data[SC_BLESSING]) //The opposite is also valid, curses cancel blessing [Brain] 
     5040                        status_change_end(bl,SC_BLESSING,-1); 
     5041                break; 
     5042        case SC_CURSETONGUES: // Warlock Curse of Tongues removes Suffragium [Brain] 
     5043                if (sc->data[SC_SUFFRAGIUM]) 
     5044                        status_change_end(bl,SC_SUFFRAGIUM,-1); 
     5045                if (sc->data[SC_BLESSING]) 
     5046                        status_change_end(bl,SC_BLESSING,-1); 
     5047                break; 
     5048        case SC_CURSEEXHAUST: // Warlock Curse of Exhaustion removes angelus [Brain] 
     5049                if (sc->data[SC_ANGELUS]) 
     5050                        status_change_end(bl,SC_ANGELUS,-1); 
     5051        case SC_DOOM: 
     5052                if (sc->data[SC_BLESSING]) 
     5053                        status_change_end(bl,SC_BLESSING,-1); 
     5054                break; 
     5055        case SC_IMPOSITIO: // Impositio Manus removes Curse of Weakness [Brain] 
    50915056                if (sc->data[SC_CURSEWEAKNESS]) 
    5092                 status_change_end(bl,SC_CURSEWEAKNESS,-1); 
     5057                        status_change_end(bl,SC_CURSEWEAKNESS,-1); 
     5058                break; 
     5059        case SC_SUFFRAGIUM: // Suffragium removes Curse of Tongues [Brain] 
    50935060                if (sc->data[SC_CURSETONGUES]) 
    5094                 status_change_end(bl,SC_CURSETONGUES,-1); 
     5061                        status_change_end(bl,SC_CURSETONGUES,-1); 
     5062                break; 
     5063        case SC_ANGELUS: // Angelus removes Curse of Exhaustion [Brain] 
    50955064                if (sc->data[SC_CURSEEXHAUST]) 
    5096                 status_change_end(bl,SC_CURSEEXHAUST,-1); 
    5097                 if (sc->data[SC_DOOM]) // This skill would be way funnier if we could igore this concept, no? 
    5098                 status_change_end(bl,SC_DOOM,-1);//But then people would abuse on WoEs 
    5099  
    5100                 } 
    5101                 break; 
    5102         case SC_CURSEWEAKNESS: // Warlock Curse of Weakness removes Impositio Manus [Brain] 
    5103         if (sc->data[SC_IMPOSITIO]) 
    5104                 status_change_end(bl,SC_IMPOSITIO,-1); 
    5105         if (sc->data[SC_BLESSING]) //The opposite is also valid, curses cancel blessing [Brain] 
    5106                 status_change_end(bl,SC_BLESSING,-1); 
    5107         break; 
    5108         case SC_CURSETONGUES: // Warlock Curse of Tongues removes Suffragium [Brain] 
    5109         if (sc->data[SC_SUFFRAGIUM]) 
    5110                 status_change_end(bl,SC_SUFFRAGIUM,-1); 
    5111         if (sc->data[SC_BLESSING]) 
    5112                 status_change_end(bl,SC_BLESSING,-1); 
    5113         break; 
    5114         case SC_CURSEEXHAUST: // Warlock Curse of Exhaustion removes angelus [Brain] 
    5115         if (sc->data[SC_ANGELUS]) 
    5116                 status_change_end(bl,SC_ANGELUS,-1); 
    5117         case SC_DOOM: 
    5118         if (sc->data[SC_BLESSING]) 
    5119                 status_change_end(bl,SC_BLESSING,-1); 
    5120         break; 
    5121         case SC_IMPOSITIO: // Impositio Manus removes Curse of Weakness [Brain] 
    5122         if (sc->data[SC_CURSEWEAKNESS]) 
    5123                 status_change_end(bl,SC_CURSEWEAKNESS,-1); 
    5124         break; 
    5125         case SC_SUFFRAGIUM: // Suffragium removes Curse of Tongues [Brain] 
    5126         if (sc->data[SC_CURSETONGUES]) 
    5127                 status_change_end(bl,SC_CURSETONGUES,-1); 
    5128         break; 
    5129         case SC_ANGELUS: // Angelus removes Curse of Exhaustion [Brain] 
    5130         if (sc->data[SC_CURSEEXHAUST]) 
    5131                 status_change_end(bl,SC_CURSEEXHAUST,-1); 
    5132         break; 
    5133  
     5065                        status_change_end(bl,SC_CURSEEXHAUST,-1); 
     5066                break; 
    51345067        case SC_INCREASEAGI: 
    51355068                status_change_end(bl,SC_DECREASEAGI,-1); 
     
    51505083                status_change_end(bl,SC_TWOHANDQUICKEN,-1); 
    51515084                status_change_end(bl,SC_ONEHAND,-1); 
     5085// may need tinkering 
    51525086                if(sc->data[SC_LUST])   // Adept Blood Lust [Brain] 
    5153                 status_change_end(bl,SC_LUST,-1); 
    5154  
    5155                 break; 
     5087                        status_change_end(bl,SC_LUST,-1); 
     5088                break; 
     5089//may be in the wrong place. 
    51565090        case SC_ONEHAND: 
    51575091                //Removes the Aspd potion effect, as reported by Vicious. [Skotlex] 
     
    52115145                status_change_end(bl,SC_MADNESSCANCEL,-1); 
    52125146                break; 
    5213         case SC_FREEZE: //Frozen status ends immolating AND searing status [Brain] 
    5214         if(sc->data[SC_IMMOLATE]) 
    5215                 status_change_end(bl,SC_IMMOLATE,-1); 
    5216         case SC_IMMOLATE: // Warlock Immolate [Brain] 
    5217         if(sc->data[SC_SEARING]) //Immolating status ends searing status 
    5218                 status_change_end(bl,SC_SEARING,-1); 
    5219         break; 
    5220  
    52215147        case SC_MADNESSCANCEL: 
    52225148                status_change_end(bl,SC_ADJUSTMENT,-1); 
     
    52275153                status_change_end(bl,SC_INCREASEAGI,-1); 
    52285154                break; 
    5229                  
     5155//Code has changed since this 
     5156        case SC_FREEZE: //Frozen status ends immolating AND searing status [Brain] 
     5157                if(sc->data[SC_IMMOLATE]) 
     5158                        status_change_end(bl,SC_IMMOLATE,-1); 
     5159        case SC_IMMOLATE: // Warlock Immolate [Brain] 
     5160                if(sc->data[SC_SEARING]) //Immolating status ends searing status 
     5161                        status_change_end(bl,SC_SEARING,-1); 
     5162                break; 
    52305163        } 
    52315164 
     
    52505183                        case SC_SILENCE: 
    52515184                        case SC_CONFUSION: 
     5185   //Should Edit depending on the one that will work for the modified ver. 
    52525186                        case SC_FEAR: //Fear Status by [Brainstorm] 
    52535187                        case SC_BLIND: 
     
    55605494                        clif_emotion(bl,1); 
    55615495                        break; 
    5562         case SC_FEAR: //Fear Status by [Brainstorm] 
    5563                 clif_emotion(bl,16); // e_wah 
    5564                 if(sd) tick /= 2; 
    5565                 break; 
    5566  
     5496                case SC_FEAR: //Fear Status by [Brainstorm] 
     5497                        clif_emotion(bl,16); // e_wah 
     5498                        if(sd) tick /= 2; 
     5499                        break; 
    55675500                case SC_BLEEDING: 
    55685501                        val4 = tick/10000; 
     
    59415874                        } 
    59425875                        break; 
    5943  
    5944         case SC_ATFIELD: // AT-Field [Brainstorm] 
    5945                 val2 = 100; // 100% Block chance 
    5946                 val3 = 100; // Dodge 100 attacks total. 
    5947                 val4 = tick/1000; 
    5948                 tick = 1000; 
    5949                 break; 
    5950  
    5951  
     5876                         
     5877//WHAT RELEVENCE DOES THIS HAVE AT ALL DAMNIT?! 
     5878                case SC_ATFIELD: // AT-Field [Brainstorm] 
     5879                        val2 = 100; // 100% Block chance 
     5880                        val3 = 100; // Dodge 100 attacks total. 
     5881                        val4 = tick/1000; 
     5882                        tick = 1000; 
     5883                        break; 
     5884                         
     5885                         
    59525886                case SC_COMBO: 
    59535887                { 
     
    59925926                        break; 
    59935927                case SC_BLESSING: 
    5994                         if (status->race!=RC_UNDEAD && status->race!=RC_DEMON) 
     5928                        if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) 
    59955929                                val2 = val1; 
    59965930                        else 
    59975931                                val2 = 0; //0 -> Half stat. 
    59985932                        break; 
    5999         case SC_REQUIEM: //Necro Requiem and Dark Moon [Brain] 
    6000         case SC_DARKMOON: 
    6001                 if (undead_flag || status->race==RC_UNDEAD || status->race==RC_DEMON) 
    6002                 val2 = val1; //Demon and Undead get buffed 
    6003                 else if(status->race==RC_FORMLESS || status->def_ele==ELE_GHOST || bl->type == BL_PC) 
    6004                 { 
    6005                 val1 = 0; //No status change for Formless and Ghosts, and non-undead players 
    6006                 tick = 0; //Cancel status to not show requiem icon without a reason 
    6007                 } 
    6008                 else 
    6009                 val3 = val1; //Everything else (living) get negative status (requiem only) 
    6010                 break; 
    6011         case SC_DECREPIFY: //Necro Decrepify [Brain] 
    6012                 val2 = val1; 
    6013         break; 
     5933                case SC_REQUIEM: //Necro Requiem and Dark Moon [Brain] 
     5934                case SC_DARKMOON: 
     5935                        if (undead_flag || status->race==RC_UNDEAD || status->race==RC_DEMON) 
     5936                                val2 = val1; //Demon and Undead get buffed 
     5937                        else if(status->race==RC_FORMLESS || status->def_ele==ELE_GHOST || bl->type == BL_PC) 
     5938                        { 
     5939                                val1 = 0; //No status change for Formless and Ghosts, and non-undead players 
     5940                                tick = 0; //Cancel status to not show requiem icon without a reason 
     5941                        } 
     5942                        else 
     5943                                val3 = val1; //Everything else (living) get negative status (requiem only) 
     5944                        break; 
     5945                case SC_DECREPIFY: //Necro Decrepify [Brain] 
     5946                        val2 = val1; 
     5947                break; 
    60145948 
    60155949                case SC_TRICKDEAD: 
     
    60535987                        val2 = 5*val1; //watk increase 
    60545988                        break; 
    6055         case SC_CURSEWEAKNESS: // Warlock Curse of Weakness [Brain] 
    6056                 val2 = 5*val1; //batk/watk decrease 
    6057                 break; 
    6058         case SC_CURSEEXHAUST: // Warlock Curse of Exhaustion [Brain] 
    6059                 val2 = 2*val1; //def/mdef decrease 
    6060                 break; 
    6061         case SC_CURSETONGUES: // Warlock Curse of Tongues [Brain] 
    6062                 val2 = 10*val1; //casttime increase 
    6063                 break; 
    6064  
     5989                case SC_CURSEWEAKNESS: // Warlock Curse of Weakness [Brain] 
     5990                        val2 = 5*val1; //batk/watk decrease 
     5991                        break; 
     5992                case SC_CURSEEXHAUST: // Warlock Curse of Exhaustion [Brain] 
     5993                        val2 = 2*val1; //def/mdef decrease 
     5994                        break; 
     5995                case SC_CURSETONGUES: // Warlock Curse of Tongues [Brain] 
     5996                        val2 = 10*val1; //casttime increase 
     5997                        break; 
    60655998                case SC_MELTDOWN: 
    60665999                        val2 = 100*val1; //Chance to break weapon 
     
    61196052                        break; 
    61206053                case SC_LUST: // Adept Blood Lust [Brain] 
    6121                 val2 = 5+3*val1; //Aspd/bAtk/wAtk change 
    6122                 val3 = tick>0?tick:1000; //Interval at which HP is drained. 
    6123                 break; 
    6124         case SC_DEATHPACT: // Necro Death Pact [Brain] 
    6125                 val2 = 5*val1; //Neutral property resistance 
    6126                 val3 = tick>0?tick:10000; //Interval at which HP is drained. 
    6127                 break; 
    6128         case SC_OVERWHELMING: // Warlock Overwhelming Evil [Brain] 
    6129                 val2 = 2*val1; //matk bonus 
    6130                 val3 = tick>0?tick:1000; //Interval at which SP is drained. 
    6131                 break; 
    6132  
     6054                        val2 = 5+3*val1; //Aspd/bAtk/wAtk change 
     6055                        val3 = tick>0?tick:1000; //Interval at which HP is drained. 
     6056                        break; 
     6057                case SC_DEATHPACT: // Necro Death Pact [Brain] 
     6058                        val2 = 5*val1; //Neutral property resistance 
     6059                        val3 = tick>0?tick:10000; //Interval at which HP is drained. 
     6060                        break; 
     6061                case SC_OVERWHELMING: // Warlock Overwhelming Evil [Brain] 
     6062                        val2 = 2*val1; //matk bonus 
     6063                        val3 = tick>0?tick:1000; //Interval at which SP is drained. 
     6064                        break; 
    61336065                case SC_MINDBREAKER: 
    61346066                        val2 = 20*val1; //matk increase. 
     
    63146246                                unit_skillcastcancel(bl, 0); 
    63156247                break; 
    6316  
    6317         case SC_FEAR: //Fear Status by [Brainstorm] 
    6318                 unit_stop_attack(bl); 
    6319         break; 
    6320  
    6321  
     6248                case SC_FEAR: //Fear Status by [Brainstorm] 
     6249                        unit_stop_attack(bl); 
     6250                break; 
    63226251        } 
    63236252 
     
    67656694                        } 
    67666695                        break; 
    6767         case SC_SPLASHER: 
    6768         case SC_DOOM: // Warlock Curse of Doom [Brain] 
    6769          
     6696                case SC_SPLASHER: 
     6697//Why is Doom here? 
     6698                case SC_DOOM: // Warlock Curse of Doom [Brain]   
    67706699                        { 
    67716700                                struct block_list *src=map_id2bl(sce->val3); 
     
    71357064                sc_timer_next(sce->val2+tick, status_change_timer, bl->id, data); 
    71367065                return 0; 
    7137  
    71387066        case SC_LUST:   // Adept Blood Lust [Brain] 
    7139         if(!status_charge(bl, status->max_hp/100, 0)) 
    7140                 break; //Not enough HP to continue. 
    7141         sc_timer_next(sce->val3+tick, status_change_timer, bl->id, data); 
    7142         return 0; 
     7067                if(!status_charge(bl, status->max_hp/100, 0)) 
     7068                        break; //Not enough HP to continue. 
     7069                sc_timer_next(sce->val3+tick, status_change_timer, bl->id, data); 
     7070                return 0; 
    71437071        case SC_DEATHPACT:      // Necro Death Pact [Brain] 
    7144         // Drains 1 HP every second (status wont kill, but dying will cancel it) 
    7145         status_charge(bl, 1, 0); 
    7146         sc_timer_next(sce->val3+tick, status_change_timer, bl->id, data); 
    7147         return 0; 
     7072                // Drains 1 HP every second (status wont kill, but dying will cancel it) 
     7073                status_charge(bl, 1, 0); 
     7074                sc_timer_next(sce->val3+tick, status_change_timer, bl->id, data); 
     7075                return 0; 
    71487076        case SC_OVERWHELMING:   // Warlock Overwhelming Evil [Brain] 
    7149         if(!status_charge(bl, 0, status->max_sp/100)) 
    7150                 break; //Not enough SP to continue. 
    7151         sc_timer_next(sce->val3+tick, status_change_timer, bl->id, data); 
    7152         return 0; 
    7153  
     7077                if(!status_charge(bl, 0, status->max_sp/100)) 
     7078                        break; //Not enough SP to continue. 
     7079                sc_timer_next(sce->val3+tick, status_change_timer, bl->id, data); 
     7080                return 0;  
    71547081 
    71557082        case SC_CHASEWALK: 
     
    73877314                break; 
    73887315        case SC_DOOM: // Warlock Curse of Doom [Brain] 
    7389         if((sce->val4 -= 500) > 0) { 
    7390                 sc_timer_next(500 + tick, status_change_timer, bl->id, data); 
    7391                 return 0; 
    7392         } 
    7393         break; 
     7316                if((sce->val4 -= 500) > 0) { 
     7317                        sc_timer_next(500 + tick, status_change_timer, bl->id, data); 
     7318                        return 0; 
     7319                } 
     7320                break; 
    73947321 
    73957322        case SC_MARIONETTE: 
     
    75607487                        case SC_MATKFOOD: 
    75617488                        case SC_DOOM: // Warlock Curse of Doom [Brain] 
    7562  
    75637489                                continue; 
    75647490                                 
  • src/map/status.h

    r22 r24  
    294294        SC_SEVENWIND, 
    295295        SC_DEF_RATE, 
     296        SC_SPREGEN, 
     297        SC_WALKSPEED, 
    296298        SC_DECREPIFY, // New status [brain] 
    297299        SC_LUST, 
     
    310312        SC_OVERWHELMING, 
    311313        SC_FEAR, 
    312         SC_SPREGEN, 
    313         SC_WALKSPEED, 
    314314        SC_MAX, //Automatically updated max, used in for's to check we are within bounds. 
    315315} sc_type; 
     
    823823void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, struct status_change *sc); 
    824824 
    825 void status_freecast_switch(struct map_session_data *sd); 
    826825int status_getrefinebonus(int lv,int type); 
    827826int status_check_skilluse(struct block_list *src, struct block_list *target, int skill_num, int flag); // [Skotlex] 
  • src/map/unit.c

    r22 r24  
    374374        if (sc && sc->data[SC_CONFUSION]) //Randomize the target position 
    375375                map_random_dir(bl, &ud->to_x, &ud->to_y); 
    376  
    377376        if (sc && sc->data[SC_FEAR]) //Flee from my target [Brainstorm] 
    378         unit_escape(bl, tbl, 15); 
    379  
     377                unit_escape(bl, tbl, 15); 
    380378 
    381379        if(ud->walktimer != -1) { 
     
    10911089        if(casttime > 0) { 
    10921090                ud->skilltimer = add_timer( tick+casttime, skill_castend_id, src->id, 0 ); 
    1093                 if(sd && pc_checkskill(sd,SA_FREECAST)) 
    1094                         status_freecast_switch(sd); 
     1091                if( sd && pc_checkskill(sd,SA_FREECAST) > 0 ) 
     1092                        status_calc_bl(&sd->bl, SCB_SPEED); 
    10951093                else 
    10961094                        unit_stop_walking(src,1); 
     
    11921190        if(casttime > 0) { 
    11931191                ud->skilltimer = add_timer( tick+casttime, skill_castend_pos, src->id, 0 ); 
    1194                 if(sd && pc_checkskill(sd,SA_FREECAST)) 
    1195                         status_freecast_switch(sd); 
     1192                if( sd && pc_checkskill(sd,SA_FREECAST) > 0 ) 
     1193                        status_calc_bl(&sd->bl, SCB_SPEED); 
    11961194                else 
    11971195                        unit_stop_walking(src,1); 
     
    15251523        } 
    15261524         
    1527         ud->canact_tick=tick; 
    1528         if(sd && pc_checkskill(sd,SA_FREECAST)) 
    1529                 status_freecast_switch(sd); 
    1530          
     1525        ud->canact_tick = tick; 
     1526 
    15311527        if(type&1 && sd) 
    15321528                skill = sd->skillid_old; 
     
    15401536        if(ret<0) 
    15411537                ShowError("delete timer error : skillid : %d\n",ret); 
    1542          
     1538 
     1539        ud->skilltimer = -1; 
     1540 
     1541        if( sd && pc_checkskill(sd,SA_FREECAST) > 0 ) 
     1542                status_calc_bl(&sd->bl, SCB_SPEED); 
     1543 
    15431544        if(bl->type==BL_MOB) ((TBL_MOB*)bl)->skillidx  = -1; 
    15441545 
    1545         ud->skilltimer = -1; 
    15461546        clif_skillcastcancel(bl); 
    15471547        return 1;