Jump to content
  • 0
Sign in to follow this  
utofaery

Crash rebellion random mapserver scriptcommand Class

Question

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.

Share this post


Link to post
Share on other sites

19 answers to this question

Recommended Posts

  • 0

crash dump ?

couldn't reproduce your error

if you have random crash, 1st thing you should do is try to reproduce the error by taking out your source edits and plugins 1 by 1

Share this post


Link to post
Share on other sites
  • 0

@utofaery to see crash need some kind of crash dump, atleast something.

Also do you have any custom mods or plugins?

Share this post


Link to post
Share on other sites
  • 0

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??

Share this post


Link to post
Share on other sites
  • 0

use gdb for get back trace on linux

or use visual studio on windows

Share this post


Link to post
Share on other sites
  • 0
11 hours ago, utofaery said:

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

any kind of source edit can be critical

 

good timing, I just reproduce a crash with rathena test server,
not going to tell how to reproduce, let's see how long they take to find this bug

so, here's the screenshots

you should get this window when there's a crash, select Debug the Program

crashdump_vs_1.png

Open a new instance with Visual Studio

crashdump_vs_2.png

then you can see the trace from Visual Studio, the Call Stack field matters a lot

crashdump_vs_3.png

Share this post


Link to post
Share on other sites
  • 0

rathena seems sort of ... changing everything from 32-bit into 64-bit
rathena can crash my arathi basin script ... ->https://rathena.org/board/topic/104325-wow-arathi-basin/?do=findComment&comment=356135  fixed
also crash my MVP ladder script ... -> https://github.com/rathena/rathena/issues/3881
these 2 bugs are just fixed recently

yeah I just found 3rd bug ... as you can see from the crash dump, it has something to do with array

 

hercules works just fine ....
com;on I'm quick to report bugs on hercules, you know it :P

Share this post


Link to post
Share on other sites
  • 0

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">
 

 

 

Edited by utofaery

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

 

 

Share this post


Link to post
Share on other sites
  • 0
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);
}

 

Share this post


Link to post
Share on other sites
  • 0

every time there is a crash, I always see that window come out
if the window doesn't come out, no idea .... I used this method to debug my test server ever since I used visual studio 2010

I think you should show us the patch what have you done on your server...
and we hercules don't use patch, everything should be plugin

 

29 minutes ago, 4144 said:

Replace


Nydhogg's Memory

to


Nydhogg''s Memory

 

in MySQL is

Nydhogg\'s Memory

perhaps different syntax

Share this post


Link to post
Share on other sites
  • 0

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

 

Share this post


Link to post
Share on other sites
  • 0

Unhandled exception thrown: read access violation.
**dstmd** was nullptr. occurred

 

This happen'd when I use Heal skill (28) on any target.

Spoiler

'map-server.exe' (Win32): Loaded 'C:\Users\Rio\Desktop\Hercules\map-server.exe'. Symbols loaded.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\ws2_32.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\msvcrt.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\rpcrt4.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\nsi.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Users\Rio\Desktop\Hercules\libmysql.dll'. Module was built without symbols.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\wsock32.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\advapi32.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\sechost.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Users\Rio\Desktop\Hercules\zlib1.dll'. Module was built without symbols.
'map-server.exe' (Win32): Loaded 'C:\Users\Rio\Desktop\Hercules\pcre3.dll'. Module was built without symbols.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\user32.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\gdi32.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\lpk.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\usp10.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\cryptsp.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\rsaenh.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\cryptbase.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\imm32.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\msctf.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\api-ms-win-core-synch-l1-2-0.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\nlaapi.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\NapiNSP.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\pnrpnsp.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\mswsock.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\dnsapi.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\winrnr.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\IPHLPAPI.DLL'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\winnsi.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\FWPUCLNT.DLL'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\rasadhlp.dll'. Cannot find or open the PDB file.
'map-server.exe' (Win32): Loaded 'C:\Users\Rio\Desktop\Hercules\plugins\HPMHooking_map.dll'. Symbols loaded.
'map-server.exe' (Win32): Loaded 'C:\Users\Rio\Desktop\Hercules\plugins\mapcache.dll'. Symbols loaded.
'map-server.exe' (Win32): Loaded 'C:\Users\Rio\Desktop\Hercules\plugins\xGetStorageList.dll'. Symbols loaded.
'map-server.exe' (Win32): Loaded 'C:\Users\Rio\Desktop\Hercules\plugins\xMaxLvlCheck.dll'. Symbols loaded.
'map-server.exe' (Win32): Loaded 'C:\Windows\System32\WSHTCPIP.DLL'. Cannot find or open the PDB file.
The thread 0x2ca8 has exited with code 0 (0x0).
Unhandled exception thrown: read access violation.
**dstmd** was nullptr.

 

Share this post


Link to post
Share on other sites
  • 0
3 hours ago, utofaery said:

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..!

  Reveal hidden contents

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

can't test your patch because you convert the [tab] into [space]

try upload your patch somewhere else, like github, google drive or https://pastebin.com/
or just use <Code> tag ... seriously

Share this post


Link to post
Share on other sites
  • 0
#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 );
}

// src/plugins/xGetStorageList.c


#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 );
}
// src/plugins/xMaxLvlCheck.c 

The 2 plugins.

 

 

Mobbranch.txt << need seperate it.
db/mob_customMVP.txt
db/mob_customNormal.txt

 

Unversioned files are not here,

or do I need to pack them up as zip???

Mobbranch.txt

Git Diff.txt

Share this post


Link to post
Share on other sites
  • 0
3 hours ago, AnnieRuru said:

apply patch failed, sorry can't help. You are on your own on this one

k

The down side is Only player can't play or use Heal(28) and some unknown crashy stuff...

any way thanks for helping though.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...

Important Information

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