Jump to content

utofaery

Members
  • Content Count

    101
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by utofaery


  1. I don't have patch only plugin 2 from your hand I think.

    so it all fall backs to minor source edit?

    all I have is the tortoise git generated diff from main branch of hercules of what I changed in src folder.

    I never did use any patch.

    src folder diff generated from tortoise git 

    It's very long..!

    Spoiler

    diff --git a/src/common/mmo.h b/src/common/mmo.h
    index 4b8f49fa2..58218ae4a 100644
    --- a/src/common/mmo.h
    +++ b/src/common/mmo.h
    @@ -64,7 +64,7 @@
     // 20120307 - 2012-03-07aRagexeRE+ - 0x970
     
     #ifndef PACKETVER
    -    #define PACKETVER 20141022
    +    #define PACKETVER 20180620 //xsa
     #endif // PACKETVER
     
     //Uncomment the following line if your client is ragexeRE instead of ragexe (required because of conflicting packets in ragexe vs ragexeRE).
    diff --git a/src/config/renewal.h b/src/config/renewal.h
    index 6c45abc0e..e418fb121 100644
    --- a/src/config/renewal.h
    +++ b/src/config/renewal.h
    @@ -57,7 +57,7 @@
     /// example:
     ///  on a skill whos cast time is 10s, only 8s may be reduced. the other 2s are part of a
     ///  "fixed cast time" which can only be reduced by specialist items and skills
    -#define RENEWAL_CAST
    +//#define RENEWAL_CAST //xsa
     
     /// renewal drop rate algorithms
     /// (disable by commenting the line)
    @@ -72,7 +72,7 @@
     ///
     /// leave this line to enable renewal item exp rate algorithms
     /// while enabled a special modified based on the difference between the player and monster level is applied
    -#define RENEWAL_EXP
    +//#define RENEWAL_EXP //xsa
     
     /// renewal level modifier on damage
     /// (disable by commenting the line)
    diff --git a/src/map/atcommand.c b/src/map/atcommand.c
    index 0a1fd6da3..1678ab45a 100644
    --- a/src/map/atcommand.c
    +++ b/src/map/atcommand.c
    @@ -1948,11 +1948,11 @@ ACMD(go)
             int x, y;
             int min_match; ///< Minimum string length to match
         } data[] = {
    -        { MAP_PRONTERA,    156, 191, 3 }, //  0 = Prontera
    +        { MAP_PRONTERA,    156, 180, 3 }, //  0 = Prontera//xsa
             { MAP_MORROC,      156,  93, 4 }, //  1 = Morroc
             { MAP_GEFFEN,      119,  59, 3 }, //  2 = Geffen
             { MAP_PAYON,       162, 233, 3 }, //  3 = Payon
    -        { MAP_ALBERTA,     192, 147, 3 }, //  4 = Alberta
    +        { MAP_ALBERTA,     117, 57, 3 }, //  4 = Alberta //xsa
     #ifdef RENEWAL
             { MAP_IZLUDE,      128, 146, 3 }, //  5 = Izlude (Renewal)
     #else
    @@ -1966,7 +1966,7 @@ ACMD(go)
             { MAP_GONRYUN,     160, 120, 3 }, // 11 = Kunlun
             { MAP_UMBALA,       89, 157, 3 }, // 12 = Umbala
             { MAP_NIFLHEIM,     21, 153, 3 }, // 13 = Niflheim
    -        { MAP_LOUYANG,     217,  40, 3 }, // 14 = Luoyang
    +        { MAP_LOUYANG,     210, 108, 3 }, // 14 = Luoyang //xsa
             { MAP_NOVICE,       53, 111, 3 }, // 15 = Training Grounds
             { MAP_JAIL,         23,  61, 3 }, // 16 = Prison
             { MAP_JAWAII,      249, 127, 3 }, // 17 = Jawaii
    @@ -6475,8 +6475,8 @@ ACMD(summon)
     
         if (duration < 1)
             duration =1;
    -    else if (duration > 60)
    -        duration =60;
    +    else if (duration > 600)
    +        duration =600;
     
         if ((mob_id = atoi(name)) == 0)
             mob_id = mob->db_searchname(name);
    @@ -6493,10 +6493,10 @@ ACMD(summon)
     
         md->master_id = sd->bl.id;
         md->special_state.ai = AI_ATTACK;
    -    md->deletetimer = timer->add(tick+(duration*60000),mob->timer_delete,md->bl.id,0);
    +    md->deletetimer = timer->add(tick+(duration*600000),mob->timer_delete,md->bl.id,0);
         clif->specialeffect(&md->bl,344,AREA);
         mob->spawn(md);
    -    sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
    +    sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 600000);
         clif->skill_poseffect(&sd->bl,AM_CALLHOMUN,1,md->bl.x,md->bl.y,tick);
         clif->message(fd, msg_fd(fd,39)); // All monster summoned!
     
    @@ -6928,8 +6928,8 @@ ACMD(showmobs)
     
         if (mob->db(mob_id)->status.mode&MD_BOSS && !pc_has_permission(sd, PC_PERM_SHOW_BOSS)) {
             // If player group does not have access to boss mobs.
    -        clif->message(fd, msg_fd(fd,1251)); // Can't show boss mobs!
    -        return false;
    +//xsa        clif->message(fd, msg_fd(fd,1251)); // Can't show boss mobs!
    +//xsa        return false;
         }
     
         if (mob_id == atoi(mob_name)) {
    diff --git a/src/map/itemdb.h b/src/map/itemdb.h
    index 0c08efbeb..4018e0231 100644
    --- a/src/map/itemdb.h
    +++ b/src/map/itemdb.h
    @@ -46,7 +46,7 @@ struct hplugin_data_store;
     #endif
     
     #ifndef MAX_ITEMDELAYS
    -#define MAX_ITEMDELAYS 10 // The maximum number of item delays
    +#define MAX_ITEMDELAYS 1 // The maximum number of item delays //xsa
     #endif
     
     #ifndef MAX_SEARCH
    diff --git a/src/map/mob.c b/src/map/mob.c
    index d82e49bcc..e0d59e89d 100644
    --- a/src/map/mob.c
    +++ b/src/map/mob.c
    @@ -4716,7 +4716,9 @@ static int mob_read_randommonster(void)
             DBPATH"mob_poring.txt",
             DBPATH"mob_boss.txt",
             "mob_pouch.txt",
    -        "mob_classchange.txt"};
    +        "mob_classchange.txt", //xsa
    +        "mob_customNormal.txt", //xsa
    +        "mob_customMVP.txt"}; //xsa
     
         memset(&summon, 0, sizeof(summon));
     
    diff --git a/src/map/mob.h b/src/map/mob.h
    index 4cb3877ed..f684e5619 100644
    --- a/src/map/mob.h
    +++ b/src/map/mob.h
    @@ -30,12 +30,12 @@
     
     struct hplugin_data_store;
     
    -#define MAX_RANDOMMONSTER 5
    +#define MAX_RANDOMMONSTER 9 //xsa // 5
     
     // Change this to increase the table size in your mob_db to accommodate a larger mob database.
     // Be sure to note that IDs 4001 to 4048 are reserved for advanced/baby/expanded classes.
     // Notice that the last 1000 entries are used for player clones, so always set this to desired value +1000
    -#define MAX_MOB_DB 5000
    +#define MAX_MOB_DB 20000 // 5000 //xsa
     
     //The number of drops all mobs have and the max drop-slot that the steal skill will attempt to steal from.
     #define MAX_MOB_DROP 10
    diff --git a/src/map/pc.c b/src/map/pc.c
    index 5410ae96a..b03dbe035 100644
    --- a/src/map/pc.c
    +++ b/src/map/pc.c
    @@ -6091,10 +6091,11 @@ static int pc_checkallowskill(struct map_session_data *sd)
             SC_EXEEDBREAK,
         };
         const enum sc_type scs_list[] = {
    -        SC_AUTOGUARD,
    -        SC_DEFENDER,
    -        SC_REFLECTSHIELD,
    -        SC_LG_REFLECTDAMAGE
    +            SC_NONE
    +//xsa        SC_AUTOGUARD,
    +//xsa        SC_DEFENDER,
    +//xsa        SC_REFLECTSHIELD,
    +//xsa        SC_LG_REFLECTDAMAGE
         };
         int i;
         nullpo_ret(sd);
    diff --git a/src/map/pc.h b/src/map/pc.h
    index 90e59edb2..803cc5679 100644
    --- a/src/map/pc.h
    +++ b/src/map/pc.h
    @@ -42,7 +42,7 @@
     /**
      * Defines
      **/
    -#define MAX_PC_BONUS 10
    +#define MAX_PC_BONUS 100 //xsa // 10
     #define MAX_PC_FEELHATE 3
     #define MAX_PC_DEVOTION 5          ///< Max amount of devotion targets
     #define PVP_CALCRANK_INTERVAL 1000 ///< PVP calculation interval
    diff --git a/src/map/skill.c b/src/map/skill.c
    index 069db55df..012baad91 100644
    --- a/src/map/skill.c
    +++ b/src/map/skill.c
    @@ -1313,7 +1313,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                     // Automatic trigger of Blitz Beat
                     if (pc_isfalcon(sd) && sd->weapontype == W_BOW && (temp=pc->checkskill(sd,HT_BLITZBEAT))>0 &&
                         rnd()%1000 <= sstatus->luk*3 ) {
    -                    rate = sd->status.job_level / 10 + 1;
    +                    rate = sd->status.job_level / 5 + 1; // xsa
                         skill->castend_damage_id(src,bl,HT_BLITZBEAT,(temp<rate)?temp:rate,tick,SD_LEVEL);
                     }
                     // Automatic trigger of Warg Strike [Jobbie]
    @@ -1389,14 +1389,14 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 /* Fall through */
             case TF_POISON:
             case AS_SPLASHER:
    -            if (!sc_start2(src,bl,SC_POISON,(4*skill_lv+10),skill_lv,src->id,skill->get_time2(skill_id,skill_lv))
    +            if (!sc_start2(src,bl,SC_POISON,(4*skill_lv+30),skill_lv,src->id,skill->get_time2(skill_id,skill_lv))//xsa
                  && sd && skill_id==TF_POISON
                 )
                     clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
                 break;
     
             case AS_SONICBLOW:
    -            sc_start(src,bl,SC_STUN,(2*skill_lv+10),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,(2*skill_lv+30),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case WZ_FIREPILLAR:
    @@ -1407,7 +1407,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
         #ifndef RENEWAL
             case WZ_FROSTNOVA:
         #endif
    -            if (!sc_start(src,bl,SC_FREEZE,skill_lv*3+35,skill_lv,skill->get_time2(skill_id,skill_lv))
    +            if (!sc_start(src,bl,SC_FREEZE,skill_lv*3+350,skill_lv,skill->get_time2(skill_id,skill_lv))//xsa
                  && sd && skill_id == MG_FROSTDIVER
                 )
                     clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
    @@ -1415,7 +1415,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
     
         #ifdef RENEWAL
             case WZ_FROSTNOVA:
    -            sc_start(src,bl,SC_FREEZE,skill_lv*5+33,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_FREEZE,skill_lv*5+330,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
         #endif
     
    @@ -1428,7 +1428,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
              * Storm Gust counter was dropped in renewal
              **/
             #ifdef RENEWAL
    -            sc_start(src,bl,SC_FREEZE,65-(5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_FREEZE,650-(5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
             #else
                 //On third hit, there is a 150% to freeze the target
                 if(tsc->sg_counter >= 3 &&
    @@ -1443,23 +1443,27 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 break;
     
             case WZ_METEOR:
    -            sc_start(src,bl,SC_STUN,3*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,30*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case WZ_VERMILION:
    -            sc_start(src,bl,SC_BLIND,4*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_BLIND,40*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case HT_FREEZINGTRAP:
    +            sc_start(src,bl,SC_FREEZE,(30*skill_lv+35),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +            break;//xsa
             case MA_FREEZINGTRAP:
                 sc_start(src,bl,SC_FREEZE,(3*skill_lv+35),skill_lv,skill->get_time2(skill_id,skill_lv));
                 break;
     
             case HT_FLASHER:
    -            sc_start(src,bl,SC_BLIND,(10*skill_lv+30),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_BLIND,(100*skill_lv+30),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case HT_LANDMINE:
    +            sc_start(src,bl,SC_STUN,(50*skill_lv+30),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +            break;//xsa
             case MA_LANDMINE:
                 sc_start(src,bl,SC_STUN,(5*skill_lv+30),skill_lv,skill->get_time2(skill_id,skill_lv));
                 break;
    @@ -1469,25 +1473,32 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 break;
     
             case HT_SANDMAN:
    +            sc_start(src,bl,SC_SLEEP,(100*skill_lv+40),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +            break;//xsa
             case MA_SANDMAN:
                 sc_start(src,bl,SC_SLEEP,(10*skill_lv+40),skill_lv,skill->get_time2(skill_id,skill_lv));
                 break;
     
             case TF_SPRINKLESAND:
    -            sc_start(src,bl,SC_BLIND,20,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_BLIND,200,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case TF_THROWSTONE:
    -            if( !sc_start(src,bl,SC_STUN,3,skill_lv,skill->get_time(skill_id,skill_lv)) )
    -                sc_start(src,bl,SC_BLIND,3,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            if( !sc_start(src,bl,SC_STUN,30,skill_lv,skill->get_time(skill_id,skill_lv)) )//xsa
    +                sc_start(src,bl,SC_BLIND,30,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case NPC_DARKCROSS:
    +            sc_start(src,bl,SC_BLIND,3*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +            break;//xsa
             case CR_HOLYCROSS:
    -            sc_start(src,bl,SC_BLIND,3*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_BLIND,30*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case CR_GRANDCROSS:
    +            if(!dstsd && (battle->check_undead(tstatus->race,tstatus->def_ele) || tstatus->race == RC_DEMON))//xsa
    +                sc_start(src,bl,SC_BLIND,1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +            break;//xsa
             case NPC_GRANDDARKNESS:
                 //Chance to cause blind status vs demon and undead element, but not against players
                 if(!dstsd && (battle->check_undead(tstatus->race,tstatus->def_ele) || tstatus->race == RC_DEMON))
    @@ -1507,7 +1518,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 break;
     
             case CR_SHIELDCHARGE:
    -            sc_start(src,bl,SC_STUN,(15+skill_lv*5),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,(150+skill_lv*5),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case PA_PRESSURE:
    @@ -1515,28 +1526,28 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 break;
     
             case RG_RAID:
    -            sc_start(src,bl,SC_STUN,(10+3*skill_lv),skill_lv,skill->get_time(skill_id,skill_lv));
    -            sc_start(src,bl,SC_BLIND,(10+3*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,(100+3*skill_lv),skill_lv,skill->get_time(skill_id,skill_lv));//xsa
    +            sc_start(src,bl,SC_BLIND,(100+3*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
     
         #ifdef RENEWAL
    -            sc_start(src,bl,SC_RAID,100,7,5000);
    +            sc_start(src,bl,SC_RAID,1000,7,5000);//xsa
                 break;
     
             case RG_BACKSTAP:
    -            sc_start(src,bl,SC_STUN,(5+2*skill_lv),skill_lv,skill->get_time(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,(50+2*skill_lv),skill_lv,skill->get_time(skill_id,skill_lv));//xsa
         #endif
                 break;
     
             case BA_FROSTJOKER:
    -            sc_start(src,bl,SC_FREEZE,(15+5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_FREEZE,(150+5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case DC_SCREAM:
    -            sc_start(src,bl,SC_STUN,(25+5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,(250+5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case BD_LULLABY:
    -            sc_start(src,bl,SC_SLEEP,15,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_SLEEP,150,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case DC_UGLYDANCE:
    @@ -1629,13 +1640,13 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 //Any enemies hit by this skill will receive Stun, Darkness, or external bleeding status ailment with a 5%+5*skill_lv% chance.
                 switch(rnd()%3) {
                     case 0:
    -                    sc_start(src,bl,SC_BLIND,(5+skill_lv*5),skill_lv,skill->get_time2(skill_id,1));
    +                    sc_start(src,bl,SC_BLIND,(50+skill_lv*5),skill_lv,skill->get_time2(skill_id,1));//xsa
                         break;
                     case 1:
    -                    sc_start(src,bl,SC_STUN,(5+skill_lv*5),skill_lv,skill->get_time2(skill_id,2));
    +                    sc_start(src,bl,SC_STUN,(50+skill_lv*5),skill_lv,skill->get_time2(skill_id,2));//xsa
                         break;
                     default:
    -                    sc_start2(src,bl,SC_BLOODING,(5+skill_lv*5),skill_lv,src->id,skill->get_time2(skill_id,3));
    +                    sc_start2(src,bl,SC_BLOODING,(50+skill_lv*5),skill_lv,src->id,skill->get_time2(skill_id,3));//xsa
                 }
                 break;
     
    @@ -4477,20 +4488,20 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
                     if( skill_id == MO_EXTREMITYFIST ) {
                         mbl = src;
                         i = 3; // for Asura(from caster)
    -                    status->set_sp(src, 0, STATUS_HEAL_DEFAULT);
    -                    status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
    +//xsa                    status->set_sp(src, 0, STATUS_HEAL_DEFAULT);
    +//xsa                    status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
                         status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
    -#ifdef RENEWAL
    -                    sc_start(src, src,SC_EXTREMITYFIST2,100,skill_lv,skill->get_time(skill_id,skill_lv));
    -#endif // RENEWAL
    +//xsa#ifdef RENEWAL
    +//xsa                    sc_start(src, src,SC_EXTREMITYFIST2,100,skill_lv,skill->get_time(skill_id,skill_lv));
    +//xsa#endif // RENEWAL
                     } else {
                         status_change_end(src, SC_NJ_NEN, INVALID_TIMER);
                         status_change_end(src, SC_HIDING, INVALID_TIMER);
    -#ifdef RENEWAL
    -                    status->set_hp(src, max(status_get_max_hp(src)/100, 1), STATUS_HEAL_DEFAULT);
    -#else // not RENEWAL
    -                    status->set_hp(src, 1, STATUS_HEAL_DEFAULT);
    -#endif // RENEWAL
    +//xsa#ifdef RENEWAL
    +//xsa                    status->set_hp(src, max(status_get_max_hp(src)/100, 1), STATUS_HEAL_DEFAULT);
    +//xsa#else // not RENEWAL
    +//xsa                    status->set_hp(src, 1, STATUS_HEAL_DEFAULT);
    +//xsa#endif // RENEWAL
                     }
                     dir = map->calc_dir(src,bl->x,bl->y);
                     if( dir > 0 && dir < 4) x = -i;
    @@ -5847,10 +5858,10 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
             sc = &sd->sc;
             if (sc->count) {
                 //End states
    -            status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
    +//xsa            status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
                 status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
     #ifdef RENEWAL
    -            sc_start(src, src, SC_EXTREMITYFIST2, 100, ud->skill_lv, skill->get_time(ud->skill_id, ud->skill_lv));
    +//xsa            sc_start(src, src, SC_EXTREMITYFIST2, 100, ud->skill_lv, skill->get_time(ud->skill_id, ud->skill_lv));
     #endif
             }
             if (target && target->m == src->m) {
    @@ -6098,7 +6109,8 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                     if (skill_id == AB_HIGHNESSHEAL) {
                         heal = heal * (17 + 3 * skill_lv) / 10;
                     }
    -                if (status->isimmune(bl) || (dstmd != NULL && (dstmd->class_ == MOBID_EMPELIUM || mob_is_battleground(dstmd))))
    +                if ( dstmd->class_ == mob_is_battleground(dstmd))//xsa
    +//xsa                if (status->isimmune(bl) || (dstmd != NULL && (dstmd->class_ == MOBID_EMPELIUM || mob_is_battleground(dstmd))))
                         heal = 0;
     
                     if (sd != NULL && dstsd != NULL && sd->status.partner_id == dstsd->status.char_id && (sd->job & MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0)
    @@ -7496,11 +7508,11 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
     
                 //Rate in percent
                 if ( skill_id == ST_FULLSTRIP ) {
    -                rate = 5 + 2*skill_lv + (sstatus->dex - tstatus->dex)/5;
    +                rate = 50 + 2*skill_lv + (sstatus->dex - tstatus->dex)/5;//xsa
                 } else if( skill_id == SC_STRIPACCESSARY ) {
    -                rate = 12 + 2 * skill_lv + (sstatus->dex - tstatus->dex)/5;
    +                rate = 120 + 2 * skill_lv + (sstatus->dex - tstatus->dex)/5;//xsa
                 } else {
    -                rate = 5 + 5*skill_lv + (sstatus->dex - tstatus->dex)/5;
    +                rate = 50 + 5*skill_lv + (sstatus->dex - tstatus->dex)/5;//xsa
                 }
     
                 if (rate < 5) rate = 5; //Minimum rate 5%
    @@ -8259,7 +8271,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                 if( tstatus->mode&MD_BOSS
     #ifndef RENEWAL
                   /** Renewal dropped the 3/4 hp requirement **/
    -             || tstatus-> hp > tstatus->max_hp*3/4
    +             || tstatus-> hp > tstatus->max_hp*99/100//xsa
     #endif // RENEWAL
                 ) {
                     if (sd) clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
    @@ -8270,7 +8282,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                     sc_start4(src,bl,type,100,skill_lv,skill_id,src->id,skill->get_time(skill_id,skill_lv),1000));
             #ifndef RENEWAL
                 if (sd)
    -                skill->blockpc_start(sd, skill_id, skill->get_time(skill_id, skill_lv) + 3000);
    +                skill->blockpc_start(sd, skill_id, skill->get_time(skill_id, skill_lv) /2 );//xsa
             #endif
                 break;
     
    @@ -8422,7 +8434,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                         map->freeblock_unlock();
                         return 0;
                     }
    -                if (rnd() % 100 > skill_lv * 8 || (dstmd && ((dstmd->guardian_data && dstmd->class_ == MOBID_EMPELIUM) || mob_is_battleground(dstmd)))) {
    +                if (rnd() % 100 > skill_lv * 80 || (dstmd && ((dstmd->guardian_data && dstmd->class_ == MOBID_EMPELIUM) || mob_is_battleground(dstmd)))) {//xsa
                         if (sd != NULL)
                             clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
     
    @@ -8449,8 +8461,8 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                             break;
                         case 3: // 1000 damage, random armor destroyed
                             {
    -                            status_fix_damage(src, bl, 1000, 0);
    -                            clif->damage(src,bl,0,0,1000,0,BDT_NORMAL,0);
    +                            status_fix_damage(src, bl, 10000, 0);//xsa
    +                            clif->damage(src,bl,0,0,10000,0,BDT_NORMAL,0);//xsa
                                 if( !status->isdead(bl) ) {
                                     int where[] = { EQP_ARMOR, EQP_SHIELD, EQP_HELM, EQP_SHOES, EQP_GARMENT };
                                     skill->break_equip(bl, where[rnd() % ARRAYLENGTH(where)], 10000, BCT_ENEMY);
    @@ -8461,7 +8473,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                             sc_start(src,bl,SC_INCATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
                             break;
                         case 5: // 2000HP heal, random teleported
    -                        status->heal(src, 2000, 0, STATUS_HEAL_DEFAULT);
    +                        status->heal(src, 20000, 0, STATUS_HEAL_DEFAULT);//xsa
                             if( !map_flag_vs(bl->m) )
                                 unit->warp(bl, -1,-1,-1, CLR_TELEPORT);
                             break;
    @@ -8474,37 +8486,37 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                         case 7: // stop freeze or stoned
                             {
                                 enum sc_type sc[] = { SC_STOP, SC_FREEZE, SC_STONE };
    -                            sc_start(src,bl,sc[rnd() % ARRAYLENGTH(sc)],100,skill_lv,skill->get_time2(skill_id,skill_lv));
    +                            sc_start(src,bl,sc[rnd() % ARRAYLENGTH(sc)],1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                             }
                             break;
                         case 8: // curse coma and poison
    -                        sc_start(src,bl,SC_COMA,100,skill_lv,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_CURSE,100,skill_lv,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_POISON,100,skill_lv,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_COMA,1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +                        sc_start(src,bl,SC_CURSE,1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +                        sc_start(src,bl,SC_POISON,1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                             break;
                         case 9: // confusion
    -                        sc_start(src,bl,SC_CONFUSION,100,skill_lv,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_CONFUSION,1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                             break;
                         case 10: // 6666 damage, atk matk halved, cursed
    -                        status_fix_damage(src, bl, 6666, 0);
    -                        clif->damage(src,bl,0,0,6666,0,BDT_NORMAL,0);
    +                        status_fix_damage(src, bl, 66666, 0);//xsa
    +                        clif->damage(src,bl,0,0,66666,0,BDT_NORMAL,0);//xsa
                             sc_start(src,bl,SC_INCATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
                             sc_start(src,bl,SC_INCMATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
                             sc_start(src,bl,SC_CURSE,skill_lv,100,skill->get_time2(skill_id,skill_lv));
                             break;
                         case 11: // 4444 damage
    -                        status_fix_damage(src, bl, 4444, 0);
    -                        clif->damage(src,bl,0,0,4444,0,BDT_NORMAL,0);
    +                        status_fix_damage(src, bl, 44444, 0);//xsa
    +                        clif->damage(src,bl,0,0,44444,0,BDT_NORMAL,0);//xsa
                             break;
                         case 12: // stun
    -                        sc_start(src,bl,SC_STUN,100,skill_lv,5000);
    +                        sc_start(src,bl,SC_STUN,1000,skill_lv,5000);//xsa
                             break;
                         case 13: // atk,matk,hit,flee,def reduced
    -                        sc_start(src,bl,SC_INCATKRATE,100,-20,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_INCMATKRATE,100,-20,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_INCHITRATE,100,-20,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_INCFLEERATE,100,-20,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_INCDEFRATE,100,-20,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_INCATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_INCMATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_INCHITRATE,100,-50,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_INCFLEERATE,100,-50,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_INCDEFRATE,100,-50,skill->get_time2(skill_id,skill_lv));
                             sc_start(src,bl,type,100,skill_lv,skill->get_time2(skill_id,skill_lv));
                             break;
                         default:
    @@ -12471,7 +12483,7 @@ static int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int
                         clif->fixpos(bl);
                         sg->val2 = bl->id;
                     } else {
    -                    sec = 3000; //Couldn't trap it?
    +                    sec = 10000; //Couldn't trap it?//xsa
                     }
                     sg->limit = DIFF_TICK32(tick,sg->tick)+sec;
                 }
    @@ -16270,24 +16282,24 @@ static int skill_autospell(struct map_session_data *sd, uint16 skill_id)
     
         if(!skill_lv || !lv) return 0; // Player must learn the skill before doing auto-spell [Lance]
     
    -    if(skill_id==MG_NAPALMBEAT) maxlv=3;
    +    if(skill_id==MG_NAPALMBEAT) maxlv=10;//xsa
         else if(skill_id==MG_COLDBOLT || skill_id==MG_FIREBOLT || skill_id==MG_LIGHTNINGBOLT){
             if (sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_SAGE)
                 maxlv =10; //Soul Linker bonus. [Skotlex]
    -        else if(skill_lv==2) maxlv=1;
    -        else if(skill_lv==3) maxlv=2;
    -        else if(skill_lv>=4) maxlv=3;
    +        else if(skill_lv==2) maxlv=10;//xsa
    +        else if(skill_lv==3) maxlv=10;//xsa
    +        else if(skill_lv>=4) maxlv=10;//xsa
         }
         else if(skill_id==MG_SOULSTRIKE){
             if(skill_lv==5) maxlv=1;
    -        else if(skill_lv==6) maxlv=2;
    -        else if(skill_lv>=7) maxlv=3;
    +        else if(skill_lv==6) maxlv=10;//xsa
    +        else if(skill_lv>=7) maxlv=10;//xsa
         }
         else if(skill_id==MG_FIREBALL){
             if(skill_lv==8) maxlv=1;
    -        else if(skill_lv>=9) maxlv=2;
    +        else if(skill_lv>=9) maxlv=10;//xsa
         }
    -    else if(skill_id==MG_FROSTDIVER) maxlv=1;
    +    else if(skill_id==MG_FROSTDIVER) maxlv=10;//xsa
         else return 0;
     
         if(maxlv > lv)
    diff --git a/src/map/status.c b/src/map/status.c
    index 65b52cbcf..9119be641 100644
    --- a/src/map/status.c
    +++ b/src/map/status.c
    @@ -298,10 +298,10 @@ static void initChangeTables(void)
         add_sc( MO_BLADESTOP         , SC_BLADESTOP_WAIT  );
         add_sc( MO_BLADESTOP         , SC_BLADESTOP       );
         status->set_sc( MO_EXPLOSIONSPIRITS  , SC_EXPLOSIONSPIRITS, SI_EXPLOSIONSPIRITS, SCB_CRI|SCB_REGEN );
    -    status->set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST   , SI_BLANK           , SCB_REGEN );
    -#ifdef RENEWAL
    -    status->set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST2  , SI_EXTREMITYFIST   , SCB_NONE );
    -#endif
    +//xsa    status->set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST   , SI_BLANK           , SCB_REGEN );
    +//xsa#ifdef RENEWAL
    +//xsa    status->set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST2  , SI_EXTREMITYFIST   , SCB_NONE );
    +//xsa#endif
         add_sc( SA_MAGICROD          , SC_MAGICROD        );
         status->set_sc( SA_AUTOSPELL         , SC_AUTOSPELL       , SI_AUTOSPELL       , SCB_NONE );
         status->set_sc( SA_FLAMELAUNCHER     , SC_PROPERTYFIRE    , SI_PROPERTYFIRE    , SCB_ATK_ELE );
    @@ -3502,7 +3502,7 @@ static int status_calc_homunculus_(struct homun_data *hd, enum e_status_calc_opt
         homun->calc_skilltree(hd, 0);
     
         if ( (skill_lv = homun->checkskill(hd, HAMI_SKIN)) > 0 )
    -        hstatus->def += skill_lv * 4;
    +        hstatus->def += skill_lv * 40;//xsa
     
         if ( (skill_lv = homun->checkskill(hd, HVAN_INSTRUCT)) > 0 ) {
             hstatus->int_ += 1 + skill_lv / 2 + skill_lv / 4 + skill_lv / 5;
    @@ -3510,10 +3510,10 @@ static int status_calc_homunculus_(struct homun_data *hd, enum e_status_calc_opt
         }
     
         if ( (skill_lv = homun->checkskill(hd, HAMI_SKIN)) > 0 )
    -        hstatus->max_hp += skill_lv * 2 * hstatus->max_hp / 100;
    +        hstatus->max_hp += 10 * skill_lv * 2 * hstatus->max_hp / 100;//xsa
     
         if ( (skill_lv = homun->checkskill(hd, HLIF_BRAIN)) > 0 )
    -        hstatus->max_sp += (1 + skill_lv / 2 - skill_lv / 4 + skill_lv / 5) * hstatus->max_sp / 100;
    +        hstatus->max_sp += 10 * (1 + skill_lv / 2 - skill_lv / 4 + skill_lv / 5) * hstatus->max_sp / 100;//xsa
     
         if ( opt&SCO_FIRST ) {
             hd->battle_status.hp = hom->hp;
    @@ -3610,7 +3610,7 @@ static void status_calc_regen(struct block_list *bl, struct status_data *st, str
         if (bl->type == BL_HOM) {
             struct homun_data *hd = BL_UCAST(BL_HOM, bl);
             if( (skill_lv = homun->checkskill(hd,HAMI_SKIN)) > 0 ) {
    -            val = regen->hp*(100+5*skill_lv)/100;
    +            val = regen->hp*10*(100+5*skill_lv)/100;//xsa
                 regen->hp = cap_value(val, 1, SHRT_MAX);
             }
             if( (skill_lv = homun->checkskill(hd,HLIF_BRAIN)) > 0 ) {
    @@ -4658,7 +4658,7 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
         if(sc->data[SC_LEADERSHIP])
             str += sc->data[SC_LEADERSHIP]->val1;
         if(sc->data[SC_SHOUT])
    -        str += 4;
    +        str += 10;//xsa
         if(sc->data[SC_TRUESIGHT])
             str += 5;
         if(sc->data[SC_STRUP])
    @@ -5927,7 +5927,7 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
                 if( sc->data[SC_RUN] )
                     val = max( val, 55 );
                 if( sc->data[SC_HLIF_AVOID] )
    -                val = max( val, 10 * sc->data[SC_HLIF_AVOID]->val1 );
    +                val = max( val, 100 * sc->data[SC_HLIF_AVOID]->val1 );//xsa
                 if( sc->data[SC_INVINCIBLE] && !sc->data[SC_INVINCIBLEOFF] )
                     val = max( val, 75 );
                 if( sc->data[SC_CLOAKINGEXCEED] )
    @@ -5969,7 +5969,8 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
             if( sc->data[SC_STEELBODY] )
                 speed = 200;
             if( sc->data[SC_DEFENDER] )
    -            speed = max(speed, 200);
    +            speed += speed - ( 35 - ( 5 * pc->checkskill(sd, CR_DEFENDER) ) ) ;//xsa
    +//xsa            speed = max(speed, 200);
             if( sc->data[SC_WALKSPEED] && sc->data[SC_WALKSPEED]->val1 > 0 ) // ChangeSpeed
                 speed = speed * 100 / sc->data[SC_WALKSPEED]->val1;
     
    @@ -7103,26 +7104,58 @@ static int status_get_sc_def(struct block_list *src, struct block_list *bl, enum
         //Status that are blocked by Golden Thief Bug card or Wand of Hermod
         if (status->isimmune(bl))
             switch (type) {
    -        case SC_DEC_AGI:
    +        case SC_EXTREMITYFIST:
    +        case SC_EXTREMITYFIST2:
    +        case SC_STOP:
    +        case SC_ANKLESNARE:
    +        case SC_STONE:
    +        case SC_FREEZE:
    +        case SC_STUN:
    +        case SC_SLEEP:
    +        case SC_POISON:
    +        case SC_CURSE:
             case SC_SILENCE:
    +        case SC_CONFUSION:
    +        case SC_BLIND:
    +        case SC_BLOODING:
    +        case SC_DPOISON:
    +        case SC_FEAR:
    +        case SC_COLD:
    +        case SC_BURNING:
    +        case SC_DEEP_SLEEP:
    +        case SC_DEC_AGI:
    +        case SC_BROKENARMOR:
    +        case SC_BROKENWEAPON:
    +        case SC_NOEQUIPWEAPON:
    +        case SC_NOEQUIPSHIELD:
    +        case SC_NOEQUIPARMOR:
    +        case SC_NOEQUIPHELM:
    +        case SC__STRIPACCESSARY:
    +        case SC_PROPERTYUNDEAD:
    +        case SC_ORCISH:
    +        case SC_BERSERK:
    +        case SC_SKE:
    +        case SC_SWOO:
    +        case SC_SKA:
    +//xsa        case SC_SILENCE:
             case SC_COMA:
    -        case SC_INC_AGI:
    -        case SC_BLESSING:
    +//xsa        case SC_INC_AGI:
    +//xsa        case SC_BLESSING:
             case SC_SLOWPOISON:
             case SC_IMPOSITIO:
             case SC_LEXAETERNA:
    -        case SC_SUFFRAGIUM:
    -        case SC_BENEDICTIO:
    +//xsa        case SC_SUFFRAGIUM:
    +//xsa        case SC_BENEDICTIO:
             case SC_PROVIDENCE:
    -        case SC_KYRIE:
    -        case SC_ASSUMPTIO:
    -        case SC_ANGELUS:
    -        case SC_MAGNIFICAT:
    -        case SC_GLORIA:
    -        case SC_WINDWALK:
    +//xsa        case SC_KYRIE:
    +//xsa        case SC_ASSUMPTIO:
    +//xsa        case SC_ANGELUS:
    +//xsa        case SC_MAGNIFICAT:
    +//xsa        case SC_GLORIA:
    +//xsa        case SC_WINDWALK:
             case SC_MAGICROD:
             case SC_ILLUSION:
    -        case SC_STONE:
    +//xsa        case SC_STONE:
             case SC_QUAGMIRE:
             case SC_NJ_SUITON:
             case SC_SWING:
    @@ -7256,7 +7289,7 @@ static int status_get_sc_def(struct block_list *src, struct block_list *bl, enum
             break;
         case SC_ANKLESNARE:
             if(st->mode&MD_BOSS) // Lasts 5 times less on bosses
    -            tick /= 5;
    +//xsa            tick /= 5;
             sc_def = st->agi*50;
             break;
         case SC_MAGICMIRROR:
    @@ -7414,6 +7447,8 @@ static int status_get_sc_def(struct block_list *src, struct block_list *bl, enum
         //Minimum durations
         switch (type) {
         case SC_ANKLESNARE:
    +        tick = max(tick, 7000); //Minimum duration 5s//xsa
    +        break;//xsa
         case SC_BURNING:
         case SC_MARSHOFABYSS:
         case SC_STASIS:
    @@ -8017,21 +8052,21 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en
                         tick += pc->checkskill(sd,GC_RESEARCHNEWPOISON)*3000;
                     break;
                 case SC_POISONREACT:
    -                val2=(val1+1)/2 + val1/10; // Number of counters [Skotlex]
    -                val3=50; // + 5*val1; //Chance to counter. [Skotlex]
    +                val2= ( (val1+1)/2 + val1/10 ) * 10; // Number of counters [Skotlex]//xsa
    +                val3=75; // + 5*val1; //Chance to counter. [Skotlex]//xsa
                     break;
                 case SC_MAGICROD:
                     val2 = val1*20; //SP gained
                     break;
                 case SC_KYRIE:
    -                val2 = APPLY_RATE(st->max_hp, (val1 * 2 + 10)); //%Max HP to absorb
    +                val2 = APPLY_RATE(st->max_hp, (val1 * 2 + 10 * 10 )); //%Max HP to absorb//xsa
                     // val4 holds current about of party memebers when casting AB_PRAEFATIO,
                     // as Praefatio's barrier has more health and blocks more hits than Kyrie Elesion.
                     if( val4 < 1 ) //== PR_KYRIE
    -                    val3 = (val1 / 2 + 5); // Hits
    +                    val3 = (val1 / 2 + 15); // Hits//xsa
                     else { //== AB_PRAEFATIO
                         val2 += val4 * 2; //Increase barrier strength per party member.
    -                    val3 = 6 + val1;
    +                    val3 = 16 + val1;//xsa
                     }
                     if( sd )
                         val1 = min(val1,pc->checkskill(sd,PR_KYRIE)); // use skill level to determine barrier health.
    @@ -8290,7 +8325,7 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en
                     break;
                 case SC_CHASEWALK:
                     val2 = tick>0?tick:10000; //Interval at which SP is drained.
    -                val3 = 35 - 5 * val1; //Speed adjustment.
    +                val3 = 45 - 5 * val1; //Speed adjustment.//xsa
                     if (sc->data[SC_SOULLINK] && sc->data[SC_SOULLINK]->val2 == SL_ROGUE)
                         val3 -= 40;
                     val4 = 10+val1*2; //SP cost.
    @@ -8481,12 +8516,12 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en
                     break;
                 case SC_SWORDREJECT:
                     val2 = 15*val1; //Reflect chance
    -                val3 = 3; //Reflections
    +                val3 = 6; //Reflections//xsa
                     tick = INFINITE_DURATION;
                     break;
     
                 case SC_MEMORIZE:
    -                val2 = 5; //Memorized casts.
    +                val2 = 10; //Memorized casts.//xsa
                     tick = INFINITE_DURATION;
                     break;
     
    @@ -10321,7 +10356,7 @@ static bool status_end_sc_before_start(struct block_list *bl, struct status_data
                 break;
             case SC_KYRIE:
                 //Cancels Assumptio
    -            status_change_end(bl, SC_ASSUMPTIO, INVALID_TIMER);
    +//xsa            status_change_end(bl, SC_ASSUMPTIO, INVALID_TIMER);
                 break;
             case SC_MAGNIFICAT:
                 //Cancels Offertorium
    @@ -10361,7 +10396,7 @@ static bool status_end_sc_before_start(struct block_list *bl, struct status_data
         #endif
                 break;
             case SC_ASSUMPTIO:
    -            status_change_end(bl, SC_KYRIE, INVALID_TIMER);
    +//xsa            status_change_end(bl, SC_KYRIE, INVALID_TIMER);
                 status_change_end(bl, SC_KAITE, INVALID_TIMER);
                 break;
             case SC_KAITE:
     

     

    Another thing I found crash server is heal (28) skill

    in when use that skill heal (28) on self or others map server instant restart

     


  2. 8 minutes ago, 4144 said:

    About leaks it show line number. you should see what you code have at this line and around it.

     

     

    I had achievement_db and quest_db emptied
    and only keep minimal mobs, warps, and woe script while disable everything else.
    so I don't get notified so many time of found something or any how

    Spoiler

    quest_db: (
    )

    achievement_db: (
    )
     

     

    Empty line can create Leaks?  

    or does it has to do with having quest db emptied?

    Spoiler

    Parts from script.c
        case QINFO_QUEST:
        {
            struct questinfo_qreq quest_req = { 0 };
            struct quest_db *quest_data = NULL;

            quest_req.id = script_getnum(st, 3);
            quest_req.state = script_getnum(st, 4);

            quest_data = quest->db(quest_req.id);
            if (quest_data == &quest->dummy) {
                ShowWarning("buildin_setquestinfo: invalid quest given (%d).\n", quest_req.id);
                return false;
            }
            if (quest_req.state < Q_INACTIVE || quest_req.state > Q_COMPLETE) {
                ShowWarning("buildin_setquestinfo: invalid quest state given (%d).\n", quest_req.state);
                return false;
            }
    // script.c line 21178 << this line?? empty line???
            if (VECTOR_LENGTH(qi->quest_requirement) == 0)
                VECTOR_INIT(qi->quest_requirement);
            VECTOR_ENSURE(qi->quest_requirement, 1, 1);
            VECTOR_PUSH(qi->quest_requirement, quest_req);
            break;
        }

     


    Parts from map.c
    static void map_add_questinfo(int m, struct questinfo *qi)
    {
        nullpo_retv(qi);
        Assert_retv(m >= 0 && m < map->count);
    // map.c line 6034 << this line?? empty line???
        VECTOR_ENSURE(map->list[m].qi_data, 1, 1);
        VECTOR_PUSH(map->list[m].qi_data, *qi);
    }

     


  3. In a case where \conf\plugins.conf

    contains non existing plugin

    All 3 server will keep restarting and flashing

    while upon closing only map server show what error is

    so can there be a pause be put to pause execution of the server when plugin not found error occur???

    to prevent infinite restarting all 3 server?

     

    conf/plugins.conf


    plugins_list: [
        /* Enable HPMHooking when plugins in use rely on Hooking */
        "HPMHooking",
    //    "db2sql",
        //"sample",
        //"other",
        "mapcache",
        "xGetStorageList",
        "xMaxLvlCheck",
        "xsa",  // << intended test case!  non existance plugin uncompiled

    ]

     

    Error shown on map server:

    [Status]: HPM: Loaded plugin 'Mapcache' (1.0.0).
    [Status]: HPM: Loaded plugin 'getstoragelist' (x_O).
    [Status]: HPM: Loaded plugin 'maxbaselv' (x_O).
    [Fatal Error]: HPM:plugin_load: failed to load 'plugins/xsa.dll' (error: The spe
    cified module could not be found.
    )!

    Map-Server has terminated abnormally.
    Restarting in 5 seconds, press Ctrl+C to cancel.//xsa
    The system cannot find the path specified.
     


  4. Another question HeidiSql not like this line of sql

    +REPLACE INTO `mob_skill_db` VALUES (2142,'Nydhogg's Memory@NPC_SUMMONSLAVE','idle',196,1,10000,0,0,'no','self','onspawn',NULL,2143,NULL,NULL,NULL,NULL,NULL,NULL);
     

    Nydhogg's Memory  << the ' between "Nydhogg" and "s" is the one it doesn't like 

    How would I restructure them so it works?

     

     

    HeidiSql 9.4.0.5125

    MariaDB 10.3


  5. About the crash It's not showing that kind of image

    crashdump_vs_1.png

    map server just auto restart

    like I cast heal on myself ... mapserver auto restart

    or I job change instant restart again...seems creepy...

     

     

    Edit:

    Found this in the file 

    C:\Users\Rio\Desktop\Hercules\log\map-server.exe.leaks

    Spoiler

    Memory manager: Memory leaks found at 2019/01/18 18h53m56s (Exported rev 'Unknown').
    0001 : c:\users\rio\desktop\hercules\src\map\script.c line 21178 size 8 address 0x0776C3D4
    0002 : c:\users\rio\desktop\hercules\src\map\script.c line 21178 size 8 address 0x0776C414
    0003 : c:\users\rio\desktop\hercules\src\map\script.c line 21178 size 8 address 0x0776C434
    0004 : c:\users\rio\desktop\hercules\src\map\map.c line 6034 size 364 address 0x0778BE7C
    0005 : c:\users\rio\desktop\hercules\src\map\map.c line 6034 size 364 address 0x0778BFFC
    0006 : c:\users\rio\desktop\hercules\src\map\map.c line 6034 size 364 address 0x0778C17C
    0007 : c:\users\rio\desktop\hercules\src\map\map.c line 6034 size 364 address 0x0778C2FC
    0008 : c:\users\rio\desktop\hercules\src\map\map.c line 6034 size 364 address 0x0778C47C
    0009 : c:\users\rio\desktop\hercules\src\map\script.c line 21178 size 8 address 0x079A6654
    0010 : c:\users\rio\desktop\hercules\src\map\script.c line 21178 size 8 address 0x079A6694
     

    Is this something important?

    all the line is alike in that file

     

     

    Here's a diff of what Changed in src folder

    Spoiler

    diff --git a/src/common/mmo.h b/src/common/mmo.h
    index 4b8f49fa2..58218ae4a 100644
    --- a/src/common/mmo.h
    +++ b/src/common/mmo.h
    @@ -64,7 +64,7 @@
     // 20120307 - 2012-03-07aRagexeRE+ - 0x970
     
     #ifndef PACKETVER
    -    #define PACKETVER 20141022
    +    #define PACKETVER 20180620 //xsa
     #endif // PACKETVER
     
     //Uncomment the following line if your client is ragexeRE instead of ragexe (required because of conflicting packets in ragexe vs ragexeRE).
    diff --git a/src/config/renewal.h b/src/config/renewal.h
    index 6c45abc0e..e418fb121 100644
    --- a/src/config/renewal.h
    +++ b/src/config/renewal.h
    @@ -57,7 +57,7 @@
     /// example:
     ///  on a skill whos cast time is 10s, only 8s may be reduced. the other 2s are part of a
     ///  "fixed cast time" which can only be reduced by specialist items and skills
    -#define RENEWAL_CAST
    +//#define RENEWAL_CAST //xsa
     
     /// renewal drop rate algorithms
     /// (disable by commenting the line)
    @@ -72,7 +72,7 @@
     ///
     /// leave this line to enable renewal item exp rate algorithms
     /// while enabled a special modified based on the difference between the player and monster level is applied
    -#define RENEWAL_EXP
    +//#define RENEWAL_EXP //xsa
     
     /// renewal level modifier on damage
     /// (disable by commenting the line)
    diff --git a/src/map/atcommand.c b/src/map/atcommand.c
    index 0a1fd6da3..1678ab45a 100644
    --- a/src/map/atcommand.c
    +++ b/src/map/atcommand.c
    @@ -1948,11 +1948,11 @@ ACMD(go)
             int x, y;
             int min_match; ///< Minimum string length to match
         } data[] = {
    -        { MAP_PRONTERA,    156, 191, 3 }, //  0 = Prontera
    +        { MAP_PRONTERA,    156, 180, 3 }, //  0 = Prontera//xsa
             { MAP_MORROC,      156,  93, 4 }, //  1 = Morroc
             { MAP_GEFFEN,      119,  59, 3 }, //  2 = Geffen
             { MAP_PAYON,       162, 233, 3 }, //  3 = Payon
    -        { MAP_ALBERTA,     192, 147, 3 }, //  4 = Alberta
    +        { MAP_ALBERTA,     117, 57, 3 }, //  4 = Alberta //xsa
     #ifdef RENEWAL
             { MAP_IZLUDE,      128, 146, 3 }, //  5 = Izlude (Renewal)
     #else
    @@ -1966,7 +1966,7 @@ ACMD(go)
             { MAP_GONRYUN,     160, 120, 3 }, // 11 = Kunlun
             { MAP_UMBALA,       89, 157, 3 }, // 12 = Umbala
             { MAP_NIFLHEIM,     21, 153, 3 }, // 13 = Niflheim
    -        { MAP_LOUYANG,     217,  40, 3 }, // 14 = Luoyang
    +        { MAP_LOUYANG,     210, 108, 3 }, // 14 = Luoyang //xsa
             { MAP_NOVICE,       53, 111, 3 }, // 15 = Training Grounds
             { MAP_JAIL,         23,  61, 3 }, // 16 = Prison
             { MAP_JAWAII,      249, 127, 3 }, // 17 = Jawaii
    @@ -6475,8 +6475,8 @@ ACMD(summon)
     
         if (duration < 1)
             duration =1;
    -    else if (duration > 60)
    -        duration =60;
    +    else if (duration > 600)
    +        duration =600;
     
         if ((mob_id = atoi(name)) == 0)
             mob_id = mob->db_searchname(name);
    @@ -6493,10 +6493,10 @@ ACMD(summon)
     
         md->master_id = sd->bl.id;
         md->special_state.ai = AI_ATTACK;
    -    md->deletetimer = timer->add(tick+(duration*60000),mob->timer_delete,md->bl.id,0);
    +    md->deletetimer = timer->add(tick+(duration*600000),mob->timer_delete,md->bl.id,0);
         clif->specialeffect(&md->bl,344,AREA);
         mob->spawn(md);
    -    sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
    +    sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 600000);
         clif->skill_poseffect(&sd->bl,AM_CALLHOMUN,1,md->bl.x,md->bl.y,tick);
         clif->message(fd, msg_fd(fd,39)); // All monster summoned!
     
    @@ -6928,8 +6928,8 @@ ACMD(showmobs)
     
         if (mob->db(mob_id)->status.mode&MD_BOSS && !pc_has_permission(sd, PC_PERM_SHOW_BOSS)) {
             // If player group does not have access to boss mobs.
    -        clif->message(fd, msg_fd(fd,1251)); // Can't show boss mobs!
    -        return false;
    +//xsa        clif->message(fd, msg_fd(fd,1251)); // Can't show boss mobs!
    +//xsa        return false;
         }
     
         if (mob_id == atoi(mob_name)) {
    diff --git a/src/map/itemdb.h b/src/map/itemdb.h
    index 0c08efbeb..4018e0231 100644
    --- a/src/map/itemdb.h
    +++ b/src/map/itemdb.h
    @@ -46,7 +46,7 @@ struct hplugin_data_store;
     #endif
     
     #ifndef MAX_ITEMDELAYS
    -#define MAX_ITEMDELAYS 10 // The maximum number of item delays
    +#define MAX_ITEMDELAYS 1 // The maximum number of item delays //xsa
     #endif
     
     #ifndef MAX_SEARCH
    diff --git a/src/map/mob.c b/src/map/mob.c
    index d82e49bcc..e0d59e89d 100644
    --- a/src/map/mob.c
    +++ b/src/map/mob.c
    @@ -4716,7 +4716,9 @@ static int mob_read_randommonster(void)
             DBPATH"mob_poring.txt",
             DBPATH"mob_boss.txt",
             "mob_pouch.txt",
    -        "mob_classchange.txt"};
    +        "mob_classchange.txt", //xsa
    +        "mob_customNormal.txt", //xsa
    +        "mob_customMVP.txt"}; //xsa
     
         memset(&summon, 0, sizeof(summon));
     
    diff --git a/src/map/mob.h b/src/map/mob.h
    index 4cb3877ed..f684e5619 100644
    --- a/src/map/mob.h
    +++ b/src/map/mob.h
    @@ -30,12 +30,12 @@
     
     struct hplugin_data_store;
     
    -#define MAX_RANDOMMONSTER 5
    +#define MAX_RANDOMMONSTER 9 //xsa // 5
     
     // Change this to increase the table size in your mob_db to accommodate a larger mob database.
     // Be sure to note that IDs 4001 to 4048 are reserved for advanced/baby/expanded classes.
     // Notice that the last 1000 entries are used for player clones, so always set this to desired value +1000
    -#define MAX_MOB_DB 5000
    +#define MAX_MOB_DB 20000 // 5000 //xsa
     
     //The number of drops all mobs have and the max drop-slot that the steal skill will attempt to steal from.
     #define MAX_MOB_DROP 10
    diff --git a/src/map/pc.c b/src/map/pc.c
    index 5410ae96a..b03dbe035 100644
    --- a/src/map/pc.c
    +++ b/src/map/pc.c
    @@ -6091,10 +6091,11 @@ static int pc_checkallowskill(struct map_session_data *sd)
             SC_EXEEDBREAK,
         };
         const enum sc_type scs_list[] = {
    -        SC_AUTOGUARD,
    -        SC_DEFENDER,
    -        SC_REFLECTSHIELD,
    -        SC_LG_REFLECTDAMAGE
    +            SC_NONE
    +//xsa        SC_AUTOGUARD,
    +//xsa        SC_DEFENDER,
    +//xsa        SC_REFLECTSHIELD,
    +//xsa        SC_LG_REFLECTDAMAGE
         };
         int i;
         nullpo_ret(sd);
    diff --git a/src/map/pc.h b/src/map/pc.h
    index 90e59edb2..803cc5679 100644
    --- a/src/map/pc.h
    +++ b/src/map/pc.h
    @@ -42,7 +42,7 @@
     /**
      * Defines
      **/
    -#define MAX_PC_BONUS 10
    +#define MAX_PC_BONUS 100 //xsa // 10
     #define MAX_PC_FEELHATE 3
     #define MAX_PC_DEVOTION 5          ///< Max amount of devotion targets
     #define PVP_CALCRANK_INTERVAL 1000 ///< PVP calculation interval
    diff --git a/src/map/skill.c b/src/map/skill.c
    index 069db55df..012baad91 100644
    --- a/src/map/skill.c
    +++ b/src/map/skill.c
    @@ -1313,7 +1313,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                     // Automatic trigger of Blitz Beat
                     if (pc_isfalcon(sd) && sd->weapontype == W_BOW && (temp=pc->checkskill(sd,HT_BLITZBEAT))>0 &&
                         rnd()%1000 <= sstatus->luk*3 ) {
    -                    rate = sd->status.job_level / 10 + 1;
    +                    rate = sd->status.job_level / 5 + 1; // xsa
                         skill->castend_damage_id(src,bl,HT_BLITZBEAT,(temp<rate)?temp:rate,tick,SD_LEVEL);
                     }
                     // Automatic trigger of Warg Strike [Jobbie]
    @@ -1389,14 +1389,14 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 /* Fall through */
             case TF_POISON:
             case AS_SPLASHER:
    -            if (!sc_start2(src,bl,SC_POISON,(4*skill_lv+10),skill_lv,src->id,skill->get_time2(skill_id,skill_lv))
    +            if (!sc_start2(src,bl,SC_POISON,(4*skill_lv+30),skill_lv,src->id,skill->get_time2(skill_id,skill_lv))//xsa
                  && sd && skill_id==TF_POISON
                 )
                     clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
                 break;
     
             case AS_SONICBLOW:
    -            sc_start(src,bl,SC_STUN,(2*skill_lv+10),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,(2*skill_lv+30),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case WZ_FIREPILLAR:
    @@ -1407,7 +1407,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
         #ifndef RENEWAL
             case WZ_FROSTNOVA:
         #endif
    -            if (!sc_start(src,bl,SC_FREEZE,skill_lv*3+35,skill_lv,skill->get_time2(skill_id,skill_lv))
    +            if (!sc_start(src,bl,SC_FREEZE,skill_lv*3+350,skill_lv,skill->get_time2(skill_id,skill_lv))//xsa
                  && sd && skill_id == MG_FROSTDIVER
                 )
                     clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
    @@ -1415,7 +1415,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
     
         #ifdef RENEWAL
             case WZ_FROSTNOVA:
    -            sc_start(src,bl,SC_FREEZE,skill_lv*5+33,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_FREEZE,skill_lv*5+330,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
         #endif
     
    @@ -1428,7 +1428,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
              * Storm Gust counter was dropped in renewal
              **/
             #ifdef RENEWAL
    -            sc_start(src,bl,SC_FREEZE,65-(5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_FREEZE,650-(5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
             #else
                 //On third hit, there is a 150% to freeze the target
                 if(tsc->sg_counter >= 3 &&
    @@ -1443,23 +1443,27 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 break;
     
             case WZ_METEOR:
    -            sc_start(src,bl,SC_STUN,3*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,30*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case WZ_VERMILION:
    -            sc_start(src,bl,SC_BLIND,4*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_BLIND,40*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case HT_FREEZINGTRAP:
    +            sc_start(src,bl,SC_FREEZE,(30*skill_lv+35),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +            break;//xsa
             case MA_FREEZINGTRAP:
                 sc_start(src,bl,SC_FREEZE,(3*skill_lv+35),skill_lv,skill->get_time2(skill_id,skill_lv));
                 break;
     
             case HT_FLASHER:
    -            sc_start(src,bl,SC_BLIND,(10*skill_lv+30),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_BLIND,(100*skill_lv+30),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case HT_LANDMINE:
    +            sc_start(src,bl,SC_STUN,(50*skill_lv+30),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +            break;//xsa
             case MA_LANDMINE:
                 sc_start(src,bl,SC_STUN,(5*skill_lv+30),skill_lv,skill->get_time2(skill_id,skill_lv));
                 break;
    @@ -1469,25 +1473,32 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 break;
     
             case HT_SANDMAN:
    +            sc_start(src,bl,SC_SLEEP,(100*skill_lv+40),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +            break;//xsa
             case MA_SANDMAN:
                 sc_start(src,bl,SC_SLEEP,(10*skill_lv+40),skill_lv,skill->get_time2(skill_id,skill_lv));
                 break;
     
             case TF_SPRINKLESAND:
    -            sc_start(src,bl,SC_BLIND,20,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_BLIND,200,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case TF_THROWSTONE:
    -            if( !sc_start(src,bl,SC_STUN,3,skill_lv,skill->get_time(skill_id,skill_lv)) )
    -                sc_start(src,bl,SC_BLIND,3,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            if( !sc_start(src,bl,SC_STUN,30,skill_lv,skill->get_time(skill_id,skill_lv)) )//xsa
    +                sc_start(src,bl,SC_BLIND,30,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case NPC_DARKCROSS:
    +            sc_start(src,bl,SC_BLIND,3*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +            break;//xsa
             case CR_HOLYCROSS:
    -            sc_start(src,bl,SC_BLIND,3*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_BLIND,30*skill_lv,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case CR_GRANDCROSS:
    +            if(!dstsd && (battle->check_undead(tstatus->race,tstatus->def_ele) || tstatus->race == RC_DEMON))//xsa
    +                sc_start(src,bl,SC_BLIND,1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +            break;//xsa
             case NPC_GRANDDARKNESS:
                 //Chance to cause blind status vs demon and undead element, but not against players
                 if(!dstsd && (battle->check_undead(tstatus->race,tstatus->def_ele) || tstatus->race == RC_DEMON))
    @@ -1507,7 +1518,7 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 break;
     
             case CR_SHIELDCHARGE:
    -            sc_start(src,bl,SC_STUN,(15+skill_lv*5),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,(150+skill_lv*5),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case PA_PRESSURE:
    @@ -1515,28 +1526,28 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 break;
     
             case RG_RAID:
    -            sc_start(src,bl,SC_STUN,(10+3*skill_lv),skill_lv,skill->get_time(skill_id,skill_lv));
    -            sc_start(src,bl,SC_BLIND,(10+3*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,(100+3*skill_lv),skill_lv,skill->get_time(skill_id,skill_lv));//xsa
    +            sc_start(src,bl,SC_BLIND,(100+3*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
     
         #ifdef RENEWAL
    -            sc_start(src,bl,SC_RAID,100,7,5000);
    +            sc_start(src,bl,SC_RAID,1000,7,5000);//xsa
                 break;
     
             case RG_BACKSTAP:
    -            sc_start(src,bl,SC_STUN,(5+2*skill_lv),skill_lv,skill->get_time(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,(50+2*skill_lv),skill_lv,skill->get_time(skill_id,skill_lv));//xsa
         #endif
                 break;
     
             case BA_FROSTJOKER:
    -            sc_start(src,bl,SC_FREEZE,(15+5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_FREEZE,(150+5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case DC_SCREAM:
    -            sc_start(src,bl,SC_STUN,(25+5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_STUN,(250+5*skill_lv),skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case BD_LULLABY:
    -            sc_start(src,bl,SC_SLEEP,15,skill_lv,skill->get_time2(skill_id,skill_lv));
    +            sc_start(src,bl,SC_SLEEP,150,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                 break;
     
             case DC_UGLYDANCE:
    @@ -1629,13 +1640,13 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
                 //Any enemies hit by this skill will receive Stun, Darkness, or external bleeding status ailment with a 5%+5*skill_lv% chance.
                 switch(rnd()%3) {
                     case 0:
    -                    sc_start(src,bl,SC_BLIND,(5+skill_lv*5),skill_lv,skill->get_time2(skill_id,1));
    +                    sc_start(src,bl,SC_BLIND,(50+skill_lv*5),skill_lv,skill->get_time2(skill_id,1));//xsa
                         break;
                     case 1:
    -                    sc_start(src,bl,SC_STUN,(5+skill_lv*5),skill_lv,skill->get_time2(skill_id,2));
    +                    sc_start(src,bl,SC_STUN,(50+skill_lv*5),skill_lv,skill->get_time2(skill_id,2));//xsa
                         break;
                     default:
    -                    sc_start2(src,bl,SC_BLOODING,(5+skill_lv*5),skill_lv,src->id,skill->get_time2(skill_id,3));
    +                    sc_start2(src,bl,SC_BLOODING,(50+skill_lv*5),skill_lv,src->id,skill->get_time2(skill_id,3));//xsa
                 }
                 break;
     
    @@ -4477,20 +4488,20 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
                     if( skill_id == MO_EXTREMITYFIST ) {
                         mbl = src;
                         i = 3; // for Asura(from caster)
    -                    status->set_sp(src, 0, STATUS_HEAL_DEFAULT);
    -                    status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
    +//xsa                    status->set_sp(src, 0, STATUS_HEAL_DEFAULT);
    +//xsa                    status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
                         status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
    -#ifdef RENEWAL
    -                    sc_start(src, src,SC_EXTREMITYFIST2,100,skill_lv,skill->get_time(skill_id,skill_lv));
    -#endif // RENEWAL
    +//xsa#ifdef RENEWAL
    +//xsa                    sc_start(src, src,SC_EXTREMITYFIST2,100,skill_lv,skill->get_time(skill_id,skill_lv));
    +//xsa#endif // RENEWAL
                     } else {
                         status_change_end(src, SC_NJ_NEN, INVALID_TIMER);
                         status_change_end(src, SC_HIDING, INVALID_TIMER);
    -#ifdef RENEWAL
    -                    status->set_hp(src, max(status_get_max_hp(src)/100, 1), STATUS_HEAL_DEFAULT);
    -#else // not RENEWAL
    -                    status->set_hp(src, 1, STATUS_HEAL_DEFAULT);
    -#endif // RENEWAL
    +//xsa#ifdef RENEWAL
    +//xsa                    status->set_hp(src, max(status_get_max_hp(src)/100, 1), STATUS_HEAL_DEFAULT);
    +//xsa#else // not RENEWAL
    +//xsa                    status->set_hp(src, 1, STATUS_HEAL_DEFAULT);
    +//xsa#endif // RENEWAL
                     }
                     dir = map->calc_dir(src,bl->x,bl->y);
                     if( dir > 0 && dir < 4) x = -i;
    @@ -5847,10 +5858,10 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
             sc = &sd->sc;
             if (sc->count) {
                 //End states
    -            status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
    +//xsa            status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
                 status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
     #ifdef RENEWAL
    -            sc_start(src, src, SC_EXTREMITYFIST2, 100, ud->skill_lv, skill->get_time(ud->skill_id, ud->skill_lv));
    +//xsa            sc_start(src, src, SC_EXTREMITYFIST2, 100, ud->skill_lv, skill->get_time(ud->skill_id, ud->skill_lv));
     #endif
             }
             if (target && target->m == src->m) {
    @@ -6098,7 +6109,8 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                     if (skill_id == AB_HIGHNESSHEAL) {
                         heal = heal * (17 + 3 * skill_lv) / 10;
                     }
    -                if (status->isimmune(bl) || (dstmd != NULL && (dstmd->class_ == MOBID_EMPELIUM || mob_is_battleground(dstmd))))
    +                if ( dstmd->class_ == mob_is_battleground(dstmd))//xsa
    +//xsa                if (status->isimmune(bl) || (dstmd != NULL && (dstmd->class_ == MOBID_EMPELIUM || mob_is_battleground(dstmd))))
                         heal = 0;
     
                     if (sd != NULL && dstsd != NULL && sd->status.partner_id == dstsd->status.char_id && (sd->job & MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0)
    @@ -7496,11 +7508,11 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
     
                 //Rate in percent
                 if ( skill_id == ST_FULLSTRIP ) {
    -                rate = 5 + 2*skill_lv + (sstatus->dex - tstatus->dex)/5;
    +                rate = 50 + 2*skill_lv + (sstatus->dex - tstatus->dex)/5;//xsa
                 } else if( skill_id == SC_STRIPACCESSARY ) {
    -                rate = 12 + 2 * skill_lv + (sstatus->dex - tstatus->dex)/5;
    +                rate = 120 + 2 * skill_lv + (sstatus->dex - tstatus->dex)/5;//xsa
                 } else {
    -                rate = 5 + 5*skill_lv + (sstatus->dex - tstatus->dex)/5;
    +                rate = 50 + 5*skill_lv + (sstatus->dex - tstatus->dex)/5;//xsa
                 }
     
                 if (rate < 5) rate = 5; //Minimum rate 5%
    @@ -8259,7 +8271,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                 if( tstatus->mode&MD_BOSS
     #ifndef RENEWAL
                   /** Renewal dropped the 3/4 hp requirement **/
    -             || tstatus-> hp > tstatus->max_hp*3/4
    +             || tstatus-> hp > tstatus->max_hp*99/100//xsa
     #endif // RENEWAL
                 ) {
                     if (sd) clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
    @@ -8270,7 +8282,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                     sc_start4(src,bl,type,100,skill_lv,skill_id,src->id,skill->get_time(skill_id,skill_lv),1000));
             #ifndef RENEWAL
                 if (sd)
    -                skill->blockpc_start(sd, skill_id, skill->get_time(skill_id, skill_lv) + 3000);
    +                skill->blockpc_start(sd, skill_id, skill->get_time(skill_id, skill_lv) /2 );//xsa
             #endif
                 break;
     
    @@ -8422,7 +8434,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                         map->freeblock_unlock();
                         return 0;
                     }
    -                if (rnd() % 100 > skill_lv * 8 || (dstmd && ((dstmd->guardian_data && dstmd->class_ == MOBID_EMPELIUM) || mob_is_battleground(dstmd)))) {
    +                if (rnd() % 100 > skill_lv * 80 || (dstmd && ((dstmd->guardian_data && dstmd->class_ == MOBID_EMPELIUM) || mob_is_battleground(dstmd)))) {//xsa
                         if (sd != NULL)
                             clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
     
    @@ -8449,8 +8461,8 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                             break;
                         case 3: // 1000 damage, random armor destroyed
                             {
    -                            status_fix_damage(src, bl, 1000, 0);
    -                            clif->damage(src,bl,0,0,1000,0,BDT_NORMAL,0);
    +                            status_fix_damage(src, bl, 10000, 0);//xsa
    +                            clif->damage(src,bl,0,0,10000,0,BDT_NORMAL,0);//xsa
                                 if( !status->isdead(bl) ) {
                                     int where[] = { EQP_ARMOR, EQP_SHIELD, EQP_HELM, EQP_SHOES, EQP_GARMENT };
                                     skill->break_equip(bl, where[rnd() % ARRAYLENGTH(where)], 10000, BCT_ENEMY);
    @@ -8461,7 +8473,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                             sc_start(src,bl,SC_INCATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
                             break;
                         case 5: // 2000HP heal, random teleported
    -                        status->heal(src, 2000, 0, STATUS_HEAL_DEFAULT);
    +                        status->heal(src, 20000, 0, STATUS_HEAL_DEFAULT);//xsa
                             if( !map_flag_vs(bl->m) )
                                 unit->warp(bl, -1,-1,-1, CLR_TELEPORT);
                             break;
    @@ -8474,37 +8486,37 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
                         case 7: // stop freeze or stoned
                             {
                                 enum sc_type sc[] = { SC_STOP, SC_FREEZE, SC_STONE };
    -                            sc_start(src,bl,sc[rnd() % ARRAYLENGTH(sc)],100,skill_lv,skill->get_time2(skill_id,skill_lv));
    +                            sc_start(src,bl,sc[rnd() % ARRAYLENGTH(sc)],1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                             }
                             break;
                         case 8: // curse coma and poison
    -                        sc_start(src,bl,SC_COMA,100,skill_lv,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_CURSE,100,skill_lv,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_POISON,100,skill_lv,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_COMA,1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +                        sc_start(src,bl,SC_CURSE,1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
    +                        sc_start(src,bl,SC_POISON,1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                             break;
                         case 9: // confusion
    -                        sc_start(src,bl,SC_CONFUSION,100,skill_lv,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_CONFUSION,1000,skill_lv,skill->get_time2(skill_id,skill_lv));//xsa
                             break;
                         case 10: // 6666 damage, atk matk halved, cursed
    -                        status_fix_damage(src, bl, 6666, 0);
    -                        clif->damage(src,bl,0,0,6666,0,BDT_NORMAL,0);
    +                        status_fix_damage(src, bl, 66666, 0);//xsa
    +                        clif->damage(src,bl,0,0,66666,0,BDT_NORMAL,0);//xsa
                             sc_start(src,bl,SC_INCATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
                             sc_start(src,bl,SC_INCMATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
                             sc_start(src,bl,SC_CURSE,skill_lv,100,skill->get_time2(skill_id,skill_lv));
                             break;
                         case 11: // 4444 damage
    -                        status_fix_damage(src, bl, 4444, 0);
    -                        clif->damage(src,bl,0,0,4444,0,BDT_NORMAL,0);
    +                        status_fix_damage(src, bl, 44444, 0);//xsa
    +                        clif->damage(src,bl,0,0,44444,0,BDT_NORMAL,0);//xsa
                             break;
                         case 12: // stun
    -                        sc_start(src,bl,SC_STUN,100,skill_lv,5000);
    +                        sc_start(src,bl,SC_STUN,1000,skill_lv,5000);//xsa
                             break;
                         case 13: // atk,matk,hit,flee,def reduced
    -                        sc_start(src,bl,SC_INCATKRATE,100,-20,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_INCMATKRATE,100,-20,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_INCHITRATE,100,-20,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_INCFLEERATE,100,-20,skill->get_time2(skill_id,skill_lv));
    -                        sc_start(src,bl,SC_INCDEFRATE,100,-20,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_INCATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_INCMATKRATE,100,-50,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_INCHITRATE,100,-50,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_INCFLEERATE,100,-50,skill->get_time2(skill_id,skill_lv));
    +                        sc_start(src,bl,SC_INCDEFRATE,100,-50,skill->get_time2(skill_id,skill_lv));
                             sc_start(src,bl,type,100,skill_lv,skill->get_time2(skill_id,skill_lv));
                             break;
                         default:
    @@ -12471,7 +12483,7 @@ static int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int
                         clif->fixpos(bl);
                         sg->val2 = bl->id;
                     } else {
    -                    sec = 3000; //Couldn't trap it?
    +                    sec = 10000; //Couldn't trap it?//xsa
                     }
                     sg->limit = DIFF_TICK32(tick,sg->tick)+sec;
                 }
    @@ -16270,24 +16282,24 @@ static int skill_autospell(struct map_session_data *sd, uint16 skill_id)
     
         if(!skill_lv || !lv) return 0; // Player must learn the skill before doing auto-spell [Lance]
     
    -    if(skill_id==MG_NAPALMBEAT) maxlv=3;
    +    if(skill_id==MG_NAPALMBEAT) maxlv=10;//xsa
         else if(skill_id==MG_COLDBOLT || skill_id==MG_FIREBOLT || skill_id==MG_LIGHTNINGBOLT){
             if (sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_SAGE)
                 maxlv =10; //Soul Linker bonus. [Skotlex]
    -        else if(skill_lv==2) maxlv=1;
    -        else if(skill_lv==3) maxlv=2;
    -        else if(skill_lv>=4) maxlv=3;
    +        else if(skill_lv==2) maxlv=10;//xsa
    +        else if(skill_lv==3) maxlv=10;//xsa
    +        else if(skill_lv>=4) maxlv=10;//xsa
         }
         else if(skill_id==MG_SOULSTRIKE){
             if(skill_lv==5) maxlv=1;
    -        else if(skill_lv==6) maxlv=2;
    -        else if(skill_lv>=7) maxlv=3;
    +        else if(skill_lv==6) maxlv=10;//xsa
    +        else if(skill_lv>=7) maxlv=10;//xsa
         }
         else if(skill_id==MG_FIREBALL){
             if(skill_lv==8) maxlv=1;
    -        else if(skill_lv>=9) maxlv=2;
    +        else if(skill_lv>=9) maxlv=10;//xsa
         }
    -    else if(skill_id==MG_FROSTDIVER) maxlv=1;
    +    else if(skill_id==MG_FROSTDIVER) maxlv=10;//xsa
         else return 0;
     
         if(maxlv > lv)
    diff --git a/src/map/status.c b/src/map/status.c
    index 65b52cbcf..9119be641 100644
    --- a/src/map/status.c
    +++ b/src/map/status.c
    @@ -298,10 +298,10 @@ static void initChangeTables(void)
         add_sc( MO_BLADESTOP         , SC_BLADESTOP_WAIT  );
         add_sc( MO_BLADESTOP         , SC_BLADESTOP       );
         status->set_sc( MO_EXPLOSIONSPIRITS  , SC_EXPLOSIONSPIRITS, SI_EXPLOSIONSPIRITS, SCB_CRI|SCB_REGEN );
    -    status->set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST   , SI_BLANK           , SCB_REGEN );
    -#ifdef RENEWAL
    -    status->set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST2  , SI_EXTREMITYFIST   , SCB_NONE );
    -#endif
    +//xsa    status->set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST   , SI_BLANK           , SCB_REGEN );
    +//xsa#ifdef RENEWAL
    +//xsa    status->set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST2  , SI_EXTREMITYFIST   , SCB_NONE );
    +//xsa#endif
         add_sc( SA_MAGICROD          , SC_MAGICROD        );
         status->set_sc( SA_AUTOSPELL         , SC_AUTOSPELL       , SI_AUTOSPELL       , SCB_NONE );
         status->set_sc( SA_FLAMELAUNCHER     , SC_PROPERTYFIRE    , SI_PROPERTYFIRE    , SCB_ATK_ELE );
    @@ -3502,7 +3502,7 @@ static int status_calc_homunculus_(struct homun_data *hd, enum e_status_calc_opt
         homun->calc_skilltree(hd, 0);
     
         if ( (skill_lv = homun->checkskill(hd, HAMI_SKIN)) > 0 )
    -        hstatus->def += skill_lv * 4;
    +        hstatus->def += skill_lv * 40;//xsa
     
         if ( (skill_lv = homun->checkskill(hd, HVAN_INSTRUCT)) > 0 ) {
             hstatus->int_ += 1 + skill_lv / 2 + skill_lv / 4 + skill_lv / 5;
    @@ -3510,10 +3510,10 @@ static int status_calc_homunculus_(struct homun_data *hd, enum e_status_calc_opt
         }
     
         if ( (skill_lv = homun->checkskill(hd, HAMI_SKIN)) > 0 )
    -        hstatus->max_hp += skill_lv * 2 * hstatus->max_hp / 100;
    +        hstatus->max_hp += 10 * skill_lv * 2 * hstatus->max_hp / 100;//xsa
     
         if ( (skill_lv = homun->checkskill(hd, HLIF_BRAIN)) > 0 )
    -        hstatus->max_sp += (1 + skill_lv / 2 - skill_lv / 4 + skill_lv / 5) * hstatus->max_sp / 100;
    +        hstatus->max_sp += 10 * (1 + skill_lv / 2 - skill_lv / 4 + skill_lv / 5) * hstatus->max_sp / 100;//xsa
     
         if ( opt&SCO_FIRST ) {
             hd->battle_status.hp = hom->hp;
    @@ -3610,7 +3610,7 @@ static void status_calc_regen(struct block_list *bl, struct status_data *st, str
         if (bl->type == BL_HOM) {
             struct homun_data *hd = BL_UCAST(BL_HOM, bl);
             if( (skill_lv = homun->checkskill(hd,HAMI_SKIN)) > 0 ) {
    -            val = regen->hp*(100+5*skill_lv)/100;
    +            val = regen->hp*10*(100+5*skill_lv)/100;//xsa
                 regen->hp = cap_value(val, 1, SHRT_MAX);
             }
             if( (skill_lv = homun->checkskill(hd,HLIF_BRAIN)) > 0 ) {
    @@ -4658,7 +4658,7 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
         if(sc->data[SC_LEADERSHIP])
             str += sc->data[SC_LEADERSHIP]->val1;
         if(sc->data[SC_SHOUT])
    -        str += 4;
    +        str += 10;//xsa
         if(sc->data[SC_TRUESIGHT])
             str += 5;
         if(sc->data[SC_STRUP])
    @@ -5927,7 +5927,7 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
                 if( sc->data[SC_RUN] )
                     val = max( val, 55 );
                 if( sc->data[SC_HLIF_AVOID] )
    -                val = max( val, 10 * sc->data[SC_HLIF_AVOID]->val1 );
    +                val = max( val, 100 * sc->data[SC_HLIF_AVOID]->val1 );//xsa
                 if( sc->data[SC_INVINCIBLE] && !sc->data[SC_INVINCIBLEOFF] )
                     val = max( val, 75 );
                 if( sc->data[SC_CLOAKINGEXCEED] )
    @@ -5969,7 +5969,8 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
             if( sc->data[SC_STEELBODY] )
                 speed = 200;
             if( sc->data[SC_DEFENDER] )
    -            speed = max(speed, 200);
    +            speed += speed - ( 35 - ( 5 * pc->checkskill(sd, CR_DEFENDER) ) ) ;//xsa
    +//xsa            speed = max(speed, 200);
             if( sc->data[SC_WALKSPEED] && sc->data[SC_WALKSPEED]->val1 > 0 ) // ChangeSpeed
                 speed = speed * 100 / sc->data[SC_WALKSPEED]->val1;
     
    @@ -7103,26 +7104,58 @@ static int status_get_sc_def(struct block_list *src, struct block_list *bl, enum
         //Status that are blocked by Golden Thief Bug card or Wand of Hermod
         if (status->isimmune(bl))
             switch (type) {
    -        case SC_DEC_AGI:
    +        case SC_EXTREMITYFIST:
    +        case SC_EXTREMITYFIST2:
    +        case SC_STOP:
    +        case SC_ANKLESNARE:
    +        case SC_STONE:
    +        case SC_FREEZE:
    +        case SC_STUN:
    +        case SC_SLEEP:
    +        case SC_POISON:
    +        case SC_CURSE:
             case SC_SILENCE:
    +        case SC_CONFUSION:
    +        case SC_BLIND:
    +        case SC_BLOODING:
    +        case SC_DPOISON:
    +        case SC_FEAR:
    +        case SC_COLD:
    +        case SC_BURNING:
    +        case SC_DEEP_SLEEP:
    +        case SC_DEC_AGI:
    +        case SC_BROKENARMOR:
    +        case SC_BROKENWEAPON:
    +        case SC_NOEQUIPWEAPON:
    +        case SC_NOEQUIPSHIELD:
    +        case SC_NOEQUIPARMOR:
    +        case SC_NOEQUIPHELM:
    +        case SC__STRIPACCESSARY:
    +        case SC_PROPERTYUNDEAD:
    +        case SC_ORCISH:
    +        case SC_BERSERK:
    +        case SC_SKE:
    +        case SC_SWOO:
    +        case SC_SKA:
    +//xsa        case SC_SILENCE:
             case SC_COMA:
    -        case SC_INC_AGI:
    -        case SC_BLESSING:
    +//xsa        case SC_INC_AGI:
    +//xsa        case SC_BLESSING:
             case SC_SLOWPOISON:
             case SC_IMPOSITIO:
             case SC_LEXAETERNA:
    -        case SC_SUFFRAGIUM:
    -        case SC_BENEDICTIO:
    +//xsa        case SC_SUFFRAGIUM:
    +//xsa        case SC_BENEDICTIO:
             case SC_PROVIDENCE:
    -        case SC_KYRIE:
    -        case SC_ASSUMPTIO:
    -        case SC_ANGELUS:
    -        case SC_MAGNIFICAT:
    -        case SC_GLORIA:
    -        case SC_WINDWALK:
    +//xsa        case SC_KYRIE:
    +//xsa        case SC_ASSUMPTIO:
    +//xsa        case SC_ANGELUS:
    +//xsa        case SC_MAGNIFICAT:
    +//xsa        case SC_GLORIA:
    +//xsa        case SC_WINDWALK:
             case SC_MAGICROD:
             case SC_ILLUSION:
    -        case SC_STONE:
    +//xsa        case SC_STONE:
             case SC_QUAGMIRE:
             case SC_NJ_SUITON:
             case SC_SWING:
    @@ -7256,7 +7289,7 @@ static int status_get_sc_def(struct block_list *src, struct block_list *bl, enum
             break;
         case SC_ANKLESNARE:
             if(st->mode&MD_BOSS) // Lasts 5 times less on bosses
    -            tick /= 5;
    +//xsa            tick /= 5;
             sc_def = st->agi*50;
             break;
         case SC_MAGICMIRROR:
    @@ -7414,6 +7447,8 @@ static int status_get_sc_def(struct block_list *src, struct block_list *bl, enum
         //Minimum durations
         switch (type) {
         case SC_ANKLESNARE:
    +        tick = max(tick, 7000); //Minimum duration 5s//xsa
    +        break;//xsa
         case SC_BURNING:
         case SC_MARSHOFABYSS:
         case SC_STASIS:
    @@ -8017,21 +8052,21 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en
                         tick += pc->checkskill(sd,GC_RESEARCHNEWPOISON)*3000;
                     break;
                 case SC_POISONREACT:
    -                val2=(val1+1)/2 + val1/10; // Number of counters [Skotlex]
    -                val3=50; // + 5*val1; //Chance to counter. [Skotlex]
    +                val2= ( (val1+1)/2 + val1/10 ) * 10; // Number of counters [Skotlex]//xsa
    +                val3=75; // + 5*val1; //Chance to counter. [Skotlex]//xsa
                     break;
                 case SC_MAGICROD:
                     val2 = val1*20; //SP gained
                     break;
                 case SC_KYRIE:
    -                val2 = APPLY_RATE(st->max_hp, (val1 * 2 + 10)); //%Max HP to absorb
    +                val2 = APPLY_RATE(st->max_hp, (val1 * 2 + 10 * 10 )); //%Max HP to absorb//xsa
                     // val4 holds current about of party memebers when casting AB_PRAEFATIO,
                     // as Praefatio's barrier has more health and blocks more hits than Kyrie Elesion.
                     if( val4 < 1 ) //== PR_KYRIE
    -                    val3 = (val1 / 2 + 5); // Hits
    +                    val3 = (val1 / 2 + 15); // Hits//xsa
                     else { //== AB_PRAEFATIO
                         val2 += val4 * 2; //Increase barrier strength per party member.
    -                    val3 = 6 + val1;
    +                    val3 = 16 + val1;//xsa
                     }
                     if( sd )
                         val1 = min(val1,pc->checkskill(sd,PR_KYRIE)); // use skill level to determine barrier health.
    @@ -8290,7 +8325,7 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en
                     break;
                 case SC_CHASEWALK:
                     val2 = tick>0?tick:10000; //Interval at which SP is drained.
    -                val3 = 35 - 5 * val1; //Speed adjustment.
    +                val3 = 45 - 5 * val1; //Speed adjustment.//xsa
                     if (sc->data[SC_SOULLINK] && sc->data[SC_SOULLINK]->val2 == SL_ROGUE)
                         val3 -= 40;
                     val4 = 10+val1*2; //SP cost.
    @@ -8481,12 +8516,12 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en
                     break;
                 case SC_SWORDREJECT:
                     val2 = 15*val1; //Reflect chance
    -                val3 = 3; //Reflections
    +                val3 = 6; //Reflections//xsa
                     tick = INFINITE_DURATION;
                     break;
     
                 case SC_MEMORIZE:
    -                val2 = 5; //Memorized casts.
    +                val2 = 10; //Memorized casts.//xsa
                     tick = INFINITE_DURATION;
                     break;
     
    @@ -10321,7 +10356,7 @@ static bool status_end_sc_before_start(struct block_list *bl, struct status_data
                 break;
             case SC_KYRIE:
                 //Cancels Assumptio
    -            status_change_end(bl, SC_ASSUMPTIO, INVALID_TIMER);
    +//xsa            status_change_end(bl, SC_ASSUMPTIO, INVALID_TIMER);
                 break;
             case SC_MAGNIFICAT:
                 //Cancels Offertorium
    @@ -10361,7 +10396,7 @@ static bool status_end_sc_before_start(struct block_list *bl, struct status_data
         #endif
                 break;
             case SC_ASSUMPTIO:
    -            status_change_end(bl, SC_KYRIE, INVALID_TIMER);
    +//xsa            status_change_end(bl, SC_KYRIE, INVALID_TIMER);
                 status_change_end(bl, SC_KAITE, INVALID_TIMER);
                 break;
             case SC_KAITE:

    And Retarget Project because I had a 17xxx something SDK of 2017

    Spoiler


    diff --git a/vcproj-15/char-server.vcxproj b/vcproj-15/char-server.vcxproj
    index 253437275..6756fc25e 100644
    --- a/vcproj-15/char-server.vcxproj
    +++ b/vcproj-15/char-server.vcxproj
    @@ -14,7 +14,7 @@
         <ProjectGuid>{D356871D-58E1-450B-967A-E4E9646175AF}</ProjectGuid>
         <RootNamespace>char-server</RootNamespace>
         <Keyword>Win32Proj</Keyword>
    -    <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
    +    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
       </PropertyGroup>
       <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
       <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    diff --git a/vcproj-15/login-server.vcxproj b/vcproj-15/login-server.vcxproj
    index 9f372373b..f045fa290 100644
    --- a/vcproj-15/login-server.vcxproj
    +++ b/vcproj-15/login-server.vcxproj
    @@ -14,7 +14,7 @@
         <ProjectGuid>{D356871D-58E1-450B-967A-E5E9646175AF}</ProjectGuid>
         <RootNamespace>login-server</RootNamespace>
         <Keyword>Win32Proj</Keyword>
    -    <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
    +    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
       </PropertyGroup>
       <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
       <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    diff --git a/vcproj-15/map-server.vcxproj b/vcproj-15/map-server.vcxproj
    index ac24ce2a2..7009557f5 100644
    --- a/vcproj-15/map-server.vcxproj
    +++ b/vcproj-15/map-server.vcxproj
    @@ -14,7 +14,7 @@
         <ProjectGuid>{D356871D-58E1-450B-967A-E6E9646175AF}</ProjectGuid>
         <RootNamespace>map-server</RootNamespace>
         <Keyword>Win32Proj</Keyword>
    -    <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
    +    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
       </PropertyGroup>
       <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
       <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    diff --git a/vcproj-15/plugin-HPMHooking_char.vcxproj b/vcproj-15/plugin-HPMHooking_char.vcxproj
    index 9632998d4..454276905 100644
    --- a/vcproj-15/plugin-HPMHooking_char.vcxproj
    +++ b/vcproj-15/plugin-HPMHooking_char.vcxproj
    @@ -15,7 +15,7 @@
         <RootNamespace>plugin-HPMHooking_char</RootNamespace>
         <Keyword>Win32Proj</Keyword>
         <ProjectName>plugin-HPMHooking_char</ProjectName>
    -    <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
    +    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
       </PropertyGroup>
       <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
       <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    diff --git a/vcproj-15/plugin-HPMHooking_login.vcxproj b/vcproj-15/plugin-HPMHooking_login.vcxproj
    index e496847c1..98079d2be 100644
    --- a/vcproj-15/plugin-HPMHooking_login.vcxproj
    +++ b/vcproj-15/plugin-HPMHooking_login.vcxproj
    @@ -15,7 +15,7 @@
         <RootNamespace>plugin-HPMHooking_login</RootNamespace>
         <Keyword>Win32Proj</Keyword>
         <ProjectName>plugin-HPMHooking_login</ProjectName>
    -    <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
    +    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
       </PropertyGroup>
       <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
       <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    diff --git a/vcproj-15/plugin-HPMHooking_map.vcxproj b/vcproj-15/plugin-HPMHooking_map.vcxproj
    index 753f1cdbc..c63dcffa4 100644
    --- a/vcproj-15/plugin-HPMHooking_map.vcxproj
    +++ b/vcproj-15/plugin-HPMHooking_map.vcxproj
    @@ -15,7 +15,7 @@
         <RootNamespace>plugin-HPMHooking_map</RootNamespace>
         <Keyword>Win32Proj</Keyword>
         <ProjectName>plugin-HPMHooking_map</ProjectName>
    -    <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
    +    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
       </PropertyGroup>
       <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
       <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    diff --git a/vcproj-15/plugin-sample.vcxproj b/vcproj-15/plugin-sample.vcxproj
    index 85ceb0e43..3a77c655a 100644
    --- a/vcproj-15/plugin-sample.vcxproj
    +++ b/vcproj-15/plugin-sample.vcxproj
    @@ -15,7 +15,7 @@
         <RootNamespace>plugin-sample</RootNamespace>
         <Keyword>Win32Proj</Keyword>
         <ProjectName>plugin-sample</ProjectName>
    -    <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
    +    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
       </PropertyGroup>
       <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
       <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     

     

     


  6. First off I don't know where this belong to so putting it here.

    Spoiler

    [Error]: Reserved too small packet buffer for packet 0x0ABE with size 6, but mus
    t be size 38
    [Error]: --- failed assertion --------------------------------------------
    [Error]: c:\users\rio\desktop\hercules\src\common\socket.c:2138: '0' in function
     `unknown'
    [Error]: --- end failed assertion ---------------------------------------

    when using teleportation level 2
    client 20180621

    so is this a source packet error configured or not setting correctly?>

    mmo.h was compiled with 

        #define PACKETVER 20180620 //xsa


  7. 1. how to find crash dump?

    2. map server sometime random crash and finishes restart less that 10 seconds since I changed the 15 seconds in serv.bat to 5 seconds.

    plugins_list: [
        /* Enable HPMHooking when plugins in use rely on Hooking */
        "HPMHooking",
        "db2sql",
        //"sample",
        //"other",
        "mapcache",
        "xGetStorageList",
        "xMaxLvlCheck",
    ]
     

    Plugin 1 :  xGetStorageList

    Spoiler

    #include "common/hercules.h"
    #include "map/pc.h"
    #include "common/HPMDataCheck.h"

    HPExport struct hplugin_info pinfo = {
        "getstoragelist",
        SERVER_TYPE_MAP,
        "x_O",
        HPM_VERSION,
    };

    BUILDIN(getstoragelist) {
        struct map_session_data *sd = script->rid2sd(st);
        char card_var[SCRIPT_VARNAME_LENGTH];
        int i = 0, j = 0, k = 0;

        if ( sd == NULL )
            return true;

        for ( i = 0; i < VECTOR_LENGTH(sd->storage.item); i++ ) {
            pc->setreg( sd, reference_uid( script->add_variable("@storagelist_id"), j ), VECTOR_INDEX(sd->storage.item, i).nameid );
            pc->setreg( sd, reference_uid( script->add_variable("@storagelist_amount"), j ), VECTOR_INDEX(sd->storage.item, i).amount );
            pc->setreg( sd, reference_uid( script->add_variable("@storagelist_refine"), j ), VECTOR_INDEX(sd->storage.item, i).refine );
            pc->setreg( sd, reference_uid( script->add_variable("@storagelist_identify"), j ), VECTOR_INDEX(sd->storage.item, i).identify );
            pc->setreg( sd, reference_uid( script->add_variable("@storagelist_attribute"), j ), VECTOR_INDEX(sd->storage.item, i).attribute );
            for ( k = 0; k < MAX_SLOTS; k++ ) {
                sprintf( card_var, "@storagelist_card%d", k +1 );
                pc->setreg( sd, reference_uid( script->add_variable(card_var), j ), VECTOR_INDEX(sd->storage.item, i).card[k]);
            }
            pc->setreg( sd, reference_uid(script->add_variable("@storagelist_expire"), j ), VECTOR_INDEX(sd->storage.item, i).expire_time);
            pc->setreg( sd, reference_uid(script->add_variable("@storagelist_bound"), j ), VECTOR_INDEX(sd->storage.item, i).bound);
            for ( k = 0; k < MAX_ITEM_OPTIONS; k++ ) {
                sprintf( card_var, "@storagelist_opt_id%d", k + 1 );
                pc->setreg(sd, reference_uid(script->add_variable(card_var), j), VECTOR_INDEX(sd->storage.item, i).option[k].index);
                sprintf( card_var, "@storagelist_opt_val%d", k + 1 );
                pc->setreg(sd, reference_uid(script->add_variable(card_var), j), VECTOR_INDEX(sd->storage.item, i).option[k].value);
                sprintf( card_var, "@storagelist_opt_param%d", k + 1 );
                pc->setreg(sd, reference_uid(script->add_variable(card_var), j), VECTOR_INDEX(sd->storage.item, i).option[k].param);
            }
            j++;
        }
        pc->setreg( sd, script->add_variable("@storagelist_count") , j );
        return true;
    }

    HPExport void plugin_init (void) {
        addScriptCommand( "getstoragelist", "", getstoragelist );
    }

    Plugin 2 : xMaxLvlCheck

    Spoiler

    #include "common/hercules.h"
    #include "map/pc.h"
    #include "common/HPMDataCheck.h"

    HPExport struct hplugin_info pinfo = {
        "maxbaselv",
        SERVER_TYPE_MAP,
        "x_O",
        HPM_VERSION,
    };

    BUILDIN(maxbaselv) {
        struct map_session_data *sd = script->rid2sd(st);

        if ( sd == NULL )
            return true;

        script_pushint( st, pc->maxbaselv(sd) );
        return true;
    }

    BUILDIN(maxjoblv) {
        struct map_session_data *sd = script->rid2sd(st);

        if ( sd == NULL )
            return true;

        script_pushint( st, pc->maxjoblv(sd) );
        return true;
    }

    HPExport void plugin_init (void) {
        addScriptCommand( "maxbaselv", "", maxbaselv );
        addScriptCommand( "maxjoblv", "", maxjoblv );
    }

     

    Since I dont really know much of the source so,

    The only source edit would be 

     

    atcommand.c

    @go changed x y

    @summon increased duration

     

    skill.c, status.c

    increased or decreased value or chance

     

    Pc.h

    #define MAX_PC_BONUS 100 //xsa // 10  << Could this be the culprit???  
     

    pc.c

    static int pc_checkallowskill(struct map_session_data *sd)
                SC_NONE
    //xsa        SC_AUTOGUARD,
    //xsa        SC_DEFENDER,
    //xsa        SC_REFLECTSHIELD,
    //xsa        SC_LG_REFLECTDAMAGE
     

    mmo.h    

    #define PACKETVER 20180620 //xsa

     

    itemdb.h

    #define MAX_ITEMDELAYS 1 // The maximum number of item delays //xsa
     

    mob.c

            "mob_classchange.txt", //xsa
            "mob_customNormal.txt", //xsa  << added
            "mob_customMVP.txt"}; //xsa << added

    mob.h

    #define MAX_RANDOMMONSTER 9 //xsa // 5
    #define MAX_MOB_DB 20000 // 5000 //xsa
     

    renewal.h

    //#define RENEWAL_EXP
     

    how can this minor edit be crashy or is it critical??


  8. Why is that is you try to use npc to check player job class will randomly crashes mapserver 

    and mostly occur to rebellion or gunslinger class??

    eg.

    prontera,154,174,5    script    Tester    4_M_PAY_SOLDIER,{
        mes ("Good day~~!");
        if ( Class == Job_Rebellion ) {
            mes ("Class :: " + jobname(Job_Rebellion) ) ;
        }
        close2;
    end;
    }
     

    if talk to said npc multiple time can randomly crashes map server is this normal??

     

     

     

    Client 20180621 if matters.


  9. 3.  Are those 2 for plugin?

    and the procedure for mapcache.c plugin applies to these 2 also??

     

    4.  is this in there??

    @inventorylist_card1[]     - These four arrays contain card data for the
    @inventorylist_card2[]       items. These data slots are also used to store
    @inventorylist_card3[]       names inscribed on the items, so you can
    @inventorylist_card4[]       explicitly check if the character owns an item
     


  10. Q3 is actually I trying to clone the mob_branch.txt to a new Mob_customBranch.txt 

    changes to mob.c and mob.h respectively has be done.

    Spoiler

            DBPATH"mob_branch.txt",
            DBPATH"mob_poring.txt",
            DBPATH"mob_boss.txt",
            "mob_pouch.txt",
            "mob_classchange.txt",
            "mob_customNormal.txt",
            "mob_customMVP.txt"};

     

    #define MAX_RANDOMMONSTER 9 //xsa // 5
    #define MAX_MOB_DB 20000
     

    but map server spit out the error of 

    [Debug]: Can't store more random mobs from mob_customNormal.txt, increase size o
    f mob.c:summon variable!

    if I clone content from DBPATH"mob_branch.txt"  to mob_customNormal.txt

    so in the end is there a limitation of something or can I do to prevent map server from spitting out that kind of debug warning?


     


  11. I mean like since the Item box/Group was redesigned

    Could the monster Branches/pouch be made redesigned in the same way?

    so we only edit the new redesigned "monster_group.conf" and don't need to recompile if add any new monster group.

    eg. "mob_poring.txt", "mob_branch.txt", "mob_boss.txt", "mob_pouch.txt" and etc be merge into one monster group file?


  12. My bad was going through my very old archive trying to migrate stuff from old eathena db folder.

    Now I know it's all inside the skill db merged 

    but I got new question:

    Q1: what's the GM_SANDMAN do?

     

    Q2: what can I do to make monster that was spawn'ed from dead branch to be announced map wide?

    I don't know how to get the spawn'ed monster's ID.

     

    Q3: increase size of mob.c:summon variable

    how to do this ?

    I tried to add custom branches and this line output in map-server

    [Debug]: Can't store more random mobs from mob_customNormal.txt, increase size o
    f mob.c:summon variable!

     


  13. Q1

    How and what should I add into this script to make it keep the current and active pet from being shown like in the attached picture?

    as you can see in the attached picture there is only Poring Egg and Bapho Jr. Egg in the inventory 

    but why inside script the menu showing lori ruri which is the currently active pet???

    Spoiler


                        deletearray(.@PlayerEggList);

                        getinventorylist();
                        for ( .@i = 0; .@i < @inventorylist_count; .@i++ ) {
                            //for ( .@x = 0; .@x < .@petEggNamesize ; .@x++ ) {
                            .@x = 0;
                            .@petEggNamesize = getarraysize(.@petEggName);
                            while (.@x < .@petEggNamesize) {
                                .@x++;
                                if ( @inventorylist_id[.@i] == .@petEggName[.@x] ) {
                                    setarray .@PlayerEggList[getarraysize(.@PlayerEggList)] , .@petEggName[.@x] ;
                                }
                            }
                        }
                        mes ( "Player has " + ( getarraysize(.@PlayerEggList) - 1 ) + " available egg for trade") ;
    // compare is a success

                        .@menu$ = "+&Sort&Count&Item&Name+&^FF0000Quit^000000:";

                        .@x = getarraysize(.@PlayerEggList);
                        for ( .@c = 0; .@c < .@x; .@c = .@c + 1 ) {
                            if ( .@PlayerEggList != 0 ) {
                                if ( countitem ( .@PlayerEggList[.@c] ) > 0 ) {
    //                                dispbottom ( " .@c "+ .@c + " .@PlayerEggList " + .@PlayerEggList[.@c] + " "+ getitemname(.@PlayerEggList[.@c]) );
                                    .@menu$ += .@c + " " + countitem(.@PlayerEggList[.@c] ) + " " + getitemname(.@PlayerEggList[.@c]) + " :";
    //                                .@menu$ += .@c + " " + getitemname(.@PlayerEggList[.@c])+ " ( have "+countitem(.@PlayerEggList[.@c] ) + " ) :" ;
                                }
                            }
                        }

                        .@i = select(.@menu$)-1;
                        if ( .@i > getarraysize(.@PlayerEggList) ) {
                            dispbottom ( " Dont mess with bug or I bug you! " ) ;
                            close2;
                            end;
                        }
                        if ( .@i != 0 ) {
                            mes (" .@i " + .@i ); 
                            .@EggItemId = .@PlayerEggList[.@i];
                            .@EggCount = countitem(.@PlayerEggList[.@i] );
                            delitem ( .@EggItemId, .@EggCount ) ;
                            makepet ( .@EggItemId );
                            mes ( " Exchanged :: " + .@EggCount + " of " + .@EggItemId ) ;
                        }
                        if ( .@i == 0 ) { 
                            mes (" .@i " + .@i ); 
                        }

     

     

    what

    Error.png

     

     

    Q2

    has this  >>bonusautoscript<<  changed into >> autobonus << ?

    https://rathena.org/board/topic/94175-item-script-not-working-something-wrong-help-plz/


  14. from old eathena >> it does has this >> skill_unit_db.txt 

    and in skill_unit_db.txt has line as below

     

    115,0x90,    ,  0, 1,1000,enemy, 0x28000    //HT_SKIDTRAP        <<  "Changed Line"

     

    and now in Hercules DB folder all other skill files is mashup and fix into on skill_db.txt 

    which is why I need to know how can I convert the "Changed Line" above to new hercules format.


    The reason I asking is that within hercules DB has no detailed explaination of new skill_db.txt

     

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.