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: