utofaery
-
Content Count
101 -
Joined
-
Last visited
-
Days Won
1
Posts posted by utofaery
-
-
Wrapper script << "something unfamiliar for me
or was it the runserver.bat???
-
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 howSpoilerquest_db: (
)achievement_db: (
)
Empty line can create Leaks?
or does it has to do with having quest db emptied?
SpoilerParts 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);
} -
In a case where \conf\plugins.conf
contains non existing plugin
All 3 server will keep restarting and flashing
while upon closing only map server show what error is
so can there be a pause be put to pause execution of the server when plugin not found error occur???
to prevent infinite restarting all 3 server?
conf/plugins.conf
plugins_list: [
/* Enable HPMHooking when plugins in use rely on Hooking */
"HPMHooking",
// "db2sql",
//"sample",
//"other",
"mapcache",
"xGetStorageList",
"xMaxLvlCheck",
"xsa", // << intended test case! non existance plugin uncompiled]
Error shown on map server:
[Status]: HPM: Loaded plugin 'Mapcache' (1.0.0).
[Status]: HPM: Loaded plugin 'getstoragelist' (x_O).
[Status]: HPM: Loaded plugin 'maxbaselv' (x_O).
[Fatal Error]: HPM:plugin_load: failed to load 'plugins/xsa.dll' (error: The spe
cified module could not be found.
)!Map-Server has terminated abnormally.
Restarting in 5 seconds, press Ctrl+C to cancel.//xsa
The system cannot find the path specified.
-
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
-
About the crash It's not showing that kind of image
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
SpoilerMemory 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
Spoilerdiff --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">
-
First off I don't know where this belong to so putting it here.
Spoiler[Error]: Reserved too small packet buffer for packet 0x0ABE with size 6, but mus
t be size 38
[Error]: --- failed assertion --------------------------------------------
[Error]: c:\users\rio\desktop\hercules\src\common\socket.c:2138: '0' in function
`unknown'
[Error]: --- end failed assertion ---------------------------------------when using teleportation level 2
client 20180621so is this a source packet error configured or not setting correctly?>
mmo.h was compiled with
#define PACKETVER 20180620 //xsa
-
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 << addedmob.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??
-
2018-07-04aRagexeRE
then you could use something newer or you could use something older...
-
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.
-
So people here might range from primary school 6 ~ form 3 middle school??
I learn of ragnarok at form 1 it was at the same time maple story got popular at where I stayed.
-
Thanks now I can have a storage cleaner...
-
3. Are those 2 for plugin?
and the procedure for mapcache.c plugin applies to these 2 also??
4. is this in there??
@inventorylist_card1[] - These four arrays contain card data for the
@inventorylist_card2[] items. These data slots are also used to store
@inventorylist_card3[] names inscribed on the items, so you can
@inventorylist_card4[] explicitly check if the character owns an item
-
1. Why not create some command to check each class max level for that purpose?>
2. For a good reason:
Easy clean up of storage by custom item through function call
alike to what getinventorylist() did but I wanted getinsteadlist()
so It's like easy cleanup of certain type of item in storage like etc, arrow, or any stash up item type
-
Disregard this post
Error of browser
-
What is the different between the first script with .@i++ and the second script ++.@i
why pre and post?
and when to use .@++ or ++.@i?
-
1.
I recently find out about this file.
What can I do to read maxLevel from it?
If ( I am magician ) {
get maxlevel from exp_group_db.conf and blablabla...
}
2.
How to get array of item from storage??
I know of getinventorylist and getcartinventorylist but there is no "getStorageInventoryList" available..
-
Q3 is actually I trying to clone the mob_branch.txt to a new Mob_customBranch.txt
changes to mob.c and mob.h respectively has be done.
SpoilerDBPATH"mob_branch.txt",
DBPATH"mob_poring.txt",
DBPATH"mob_boss.txt",
"mob_pouch.txt",
"mob_classchange.txt",
"mob_customNormal.txt",
"mob_customMVP.txt"};#define MAX_RANDOMMONSTER 9 //xsa // 5
#define MAX_MOB_DB 20000
but map server spit out the error of
[Debug]: Can't store more random mobs from mob_customNormal.txt, increase size o
f mob.c:summon variable!if I clone content from DBPATH"mob_branch.txt" to mob_customNormal.txt
so in the end is there a limitation of something or can I do to prevent map server from spitting out that kind of debug warning?
-
I mean like since the Item box/Group was redesigned
Could the monster Branches/pouch be made redesigned in the same way?
so we only edit the new redesigned "monster_group.conf" and don't need to recompile if add any new monster group.
eg. "mob_poring.txt", "mob_branch.txt", "mob_boss.txt", "mob_pouch.txt" and etc be merge into one monster group file?
-
My bad was going through my very old archive trying to migrate stuff from old eathena db folder.
Now I know it's all inside the skill db merged
but I got new question:
Q1: what's the GM_SANDMAN do?
Q2: what can I do to make monster that was spawn'ed from dead branch to be announced map wide?
I don't know how to get the spawn'ed monster's ID.
Q3: increase size of mob.c:summon variable
how to do this ?
I tried to add custom branches and this line output in map-server
[Debug]: Can't store more random mobs from mob_customNormal.txt, increase size o
f mob.c:summon variable! -
Suggestion:
Hey could the monster be "Group'ed" like this item group also???
so we don't have to recompile if we added multiple small monster group.
-
Q1
How and what should I add into this script to make it keep the current and active pet from being shown like in the attached picture?
as you can see in the attached picture there is only Poring Egg and Bapho Jr. Egg in the inventory
but why inside script the menu showing lori ruri which is the currently active pet???
Spoiler
deletearray(.@PlayerEggList);getinventorylist();
for ( .@i = 0; .@i < @inventorylist_count; .@i++ ) {
//for ( .@x = 0; .@x < .@petEggNamesize ; .@x++ ) {
.@x = 0;
.@petEggNamesize = getarraysize(.@petEggName);
while (.@x < .@petEggNamesize) {
.@x++;
if ( @inventorylist_id[.@i] == .@petEggName[.@x] ) {
setarray .@PlayerEggList[getarraysize(.@PlayerEggList)] , .@petEggName[.@x] ;
}
}
}
mes ( "Player has " + ( getarraysize(.@PlayerEggList) - 1 ) + " available egg for trade") ;
// compare is a success.@menu$ = "+&Sort&Count&Item&Name+&^FF0000Quit^000000:";
.@x = getarraysize(.@PlayerEggList);
for ( .@c = 0; .@c < .@x; .@c = .@c + 1 ) {
if ( .@PlayerEggList != 0 ) {
if ( countitem ( .@PlayerEggList[.@c] ) > 0 ) {
// dispbottom ( " .@c "+ .@c + " .@PlayerEggList " + .@PlayerEggList[.@c] + " "+ getitemname(.@PlayerEggList[.@c]) );
.@menu$ += .@c + " " + countitem(.@PlayerEggList[.@c] ) + " " + getitemname(.@PlayerEggList[.@c]) + " :";
// .@menu$ += .@c + " " + getitemname(.@PlayerEggList[.@c])+ " ( have "+countitem(.@PlayerEggList[.@c] ) + " ) :" ;
}
}
}.@i = select(.@menu$)-1;
if ( .@i > getarraysize(.@PlayerEggList) ) {
dispbottom ( " Dont mess with bug or I bug you! " ) ;
close2;
end;
}
if ( .@i != 0 ) {
mes (" .@i " + .@i );
.@EggItemId = .@PlayerEggList[.@i];
.@EggCount = countitem(.@PlayerEggList[.@i] );
delitem ( .@EggItemId, .@EggCount ) ;
makepet ( .@EggItemId );
mes ( " Exchanged :: " + .@EggCount + " of " + .@EggItemId ) ;
}
if ( .@i == 0 ) {
mes (" .@i " + .@i );
}what
Q2
has this >>bonusautoscript<< changed into >> autobonus << ?
https://rathena.org/board/topic/94175-item-script-not-working-something-wrong-help-plz/
-
from old eathena >> it does has this >> skill_unit_db.txt
and in skill_unit_db.txt has line as below
115,0x90, , 0, 1,1000,enemy, 0x28000 //HT_SKIDTRAP << "Changed Line"
and now in Hercules DB folder all other skill files is mashup and fix into on skill_db.txt
which is why I need to know how can I convert the "Changed Line" above to new hercules format.
The reason I asking is that within hercules DB has no detailed explaination of new skill_db.txt -
Thanks you really make the day.
-
Crash rebellion random mapserver scriptcommand Class
in General Server Support
Posted
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..!
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