summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJedzkie <jedzkie13@rocketmail.com>2015-11-22 12:31:38 +0800
committerJedzkie <jedzkie13@rocketmail.com>2015-11-22 12:31:38 +0800
commitf65e0326ac7e6faf17451d4c6d275e4fd3133cc0 (patch)
treefd1bb3ffce470848147eb123c7d845935d5975d5
parentbaa7e560172eb729824f4a2966c440b4ee1f0eb9 (diff)
downloadhercules-f65e0326ac7e6faf17451d4c6d275e4fd3133cc0.tar.gz
hercules-f65e0326ac7e6faf17451d4c6d275e4fd3133cc0.tar.bz2
hercules-f65e0326ac7e6faf17451d4c6d275e4fd3133cc0.tar.xz
hercules-f65e0326ac7e6faf17451d4c6d275e4fd3133cc0.zip
ItemDB Update:
- Implemented the Geffen Scrolls and Mental Potion official effects. Thanks to Kyeme. (Ref: http://herc.ws/board/topic/1125-please-implement-the-magic-scroll-mental-potion-etc/)
-rw-r--r--db/const.txt12
-rw-r--r--db/pre-re/item_db.conf51
-rw-r--r--db/re/item_db.conf61
-rw-r--r--db/sc_config.txt18
-rw-r--r--src/map/skill.c14
-rw-r--r--src/map/status.c62
-rw-r--r--src/map/status.h14
7 files changed, 153 insertions, 79 deletions
diff --git a/db/const.txt b/db/const.txt
index 430407967..332960b9f 100644
--- a/db/const.txt
+++ b/db/const.txt
@@ -1287,6 +1287,18 @@ SC_LJOSALFAR 588
SC_MERMAID_LONGING 589
SC_ACARAJE 590
+SC_TARGET_ASPD 591
+
+// Geffen Scrolls
+SC_SKELSCROLL 592
+SC_DISTRUCTIONSCROLL 593
+SC_ROYALSCROLL 594
+SC_IMMUNITYSCROLL 595
+SC_MYSTICSCROLL 596
+SC_BATTLESCROLL 597
+SC_ARMORSCROLL 598
+SC_FREYJASCROLL 599
+SC_SOULSCROLL 600
e_gasp 0
e_what 1
diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf
index abb7b5a2e..21c2b16cf 100644
--- a/db/pre-re/item_db.conf
+++ b/db/pre-re/item_db.conf
@@ -69560,13 +69560,14 @@ item_db: (
Trade: {
nodrop: true
notrade: true
- noselltonpc: true
- nocart: true
nostorage: true
- nogstorage: true
+ nocart: true
+ noselltonpc: true
nomail: true
noauction: true
+ nogstorage: true
}
+ Script: <" sc_start SC_SKELSCROLL,1800000,5; ">
},
{
Id: 12746
@@ -69578,17 +69579,13 @@ item_db: (
Trade: {
nodrop: true
notrade: true
- nocart: true
nostorage: true
- nogstorage: true
+ nocart: true
nomail: true
noauction: true
+ nogstorage: true
}
- Script: <"
- autobonus "{bonus2 bAddRace,RC_Boss,5}",10000,1800000;
- autobonus "{bonus2 bAddRace,RC_Angel,5;}",10000,1800000;
- autobonus "{bonus2 bAddEle,Ele_Holy,5;}",10000,1800000;
- ">
+ Script: <" sc_start SC_DISTRUCTIONSCROLL,1800000,5; ">
},
{
Id: 12747
@@ -69597,7 +69594,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <" autobonus "{bonus2 bSubRace,RC_Boss,5;}",10000,1800000; ">
+ Script: <" sc_start SC_ROYALSCROLL,1800000,5; ">
},
{
Id: 12748
@@ -69606,7 +69603,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <" autobonus "{bonus2 bAddEle,Ele_Neutral,-5;}",10000,1800000; ">
+ Script: <" sc_start SC_IMMUNITYSCROLL,1800000,5; ">
},
{
Id: 12749
@@ -69615,7 +69612,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <" sc_start SC_PLUSMAGICPOWER,180000,5; ">
+ Script: <" sc_start SC_MYSTICSCROLL,1800000,5; ">
},
{
Id: 12750
@@ -69624,10 +69621,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <"
- sc_start SC_ATTHASTE_POTION3,1800000,5;
- sc_start SC_PLUSATTACKPOWER,1800000,5;
- ">
+ Script: <" sc_start SC_BATTLESCROLL,1800000,5; ">
},
{
Id: 12751
@@ -69636,10 +69630,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <"
- sc_start SC_PROTECT_DEF,1800000,5;
- sc_start SC_FOOD_BASICAVOIDANCE,1800000,10;
- ">
+ Script: <" sc_start2 SC_ARMORSCROLL,1800000,5,10; ">
},
{
Id: 12752
@@ -69648,10 +69639,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <"
- sc_start SC_PROTECT_MDEF,1800000,5;
- sc_start SC_INCFLEE2,1800000,10;
- ">
+ Script: <" sc_start2 SC_FREYJASCROLL,1800000,5,10; ">
},
{
Id: 12753
@@ -69660,10 +69648,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <"
- sc_start SC_INCMHPRATE,1800000,5;
- sc_start SC_INCMSPRATE,1800000,5;
- ">
+ Script: <" sc_start SC_SOULSCROLL,1800000,5; ">
},
{
Id: 12754
@@ -86399,7 +86384,7 @@ item_db: (
noselltonpc: true
nogstorage: true
}
- Script: <" getitem 14600,20; ">
+ Script: <" getitem Mental_Potion,20; ">
},
{
Id: 14350
@@ -86413,7 +86398,7 @@ item_db: (
noselltonpc: true
nogstorage: true
}
- Script: <" getitem 14600,50; ">
+ Script: <" getitem Mental_Potion,50; ">
},
{
Id: 14351
@@ -87972,6 +87957,10 @@ item_db: (
noselltonpc: true
nogstorage: true
}
+ Script: <"
+ specialeffect2 EF_SPELLBREAKER;
+ sc_start SC_TARGET_ASPD,1800000,10;
+ ">
},
{
Id: 14601
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index eab943b32..5596edd58 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -86030,20 +86030,21 @@ item_db: (
{
Id: 12745
AegisName: "Skull_Scroll"
- Name: "Vivid Notation"
+ Name: "Skull Scroll"
Type: 2
Buy: 20
Weight: 10
Trade: {
nodrop: true
notrade: true
- noselltonpc: true
- nocart: true
nostorage: true
- nogstorage: true
+ nocart: true
+ noselltonpc: true
nomail: true
noauction: true
+ nogstorage: true
}
+ Script: <" sc_start SC_SKELSCROLL,1800000,5; ">
},
{
Id: 12746
@@ -86052,11 +86053,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <"
- autobonus "{bonus2 bAddRace,RC_Boss,5;}",10000,1800000;
- autobonus "{bonus2 bAddRace,RC_Angel,5;}",10000,1800000;
- autobonus "{bonus2 bAddEle,Ele_Holy,5;}",10000,1800000;
- ">
+ Script: <" sc_start SC_DISTRUCTIONSCROLL,1800000,5; ">
},
{
Id: 12747
@@ -86065,7 +86062,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <" autobonus "{bonus2 bSubRace,RC_Boss,5;}",10000,1800000; ">
+ Script: <" sc_start SC_ROYALSCROLL,1800000,5; ">
},
{
Id: 12748
@@ -86074,7 +86071,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <" autobonus "{bonus2 bAddEle,Ele_Neutral,-5;}",10000,1800000; ">
+ Script: <" sc_start SC_IMMUNITYSCROLL,1800000,5; ">
},
{
Id: 12749
@@ -86083,7 +86080,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <" sc_start SC_PLUSMAGICPOWER,180000,5; ">
+ Script: <" sc_start SC_MYSTICSCROLL,1800000,5; ">
},
{
Id: 12750
@@ -86092,10 +86089,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <"
- sc_start SC_ATTHASTE_POTION3,1800000,5;
- sc_start SC_PLUSATTACKPOWER,1800000,5;
- ">
+ Script: <" sc_start SC_BATTLESCROLL,1800000,5; ">
},
{
Id: 12751
@@ -86104,10 +86098,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <"
- sc_start SC_PROTECT_DEF,1800000,5;
- sc_start SC_FOOD_BASICAVOIDANCE,1800000,10;
- ">
+ Script: <" sc_start2 SC_ARMORSCROLL,1800000,5,10; ">
},
{
Id: 12752
@@ -86116,10 +86107,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <"
- sc_start SC_PROTECT_MDEF,1800000,5;
- sc_start SC_INCFLEE2,1800000,10;
- ">
+ Script: <" sc_start2 SC_FREYJASCROLL,1800000,5,10; ">
},
{
Id: 12753
@@ -86128,10 +86116,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <"
- sc_start SC_INCMHPRATE,1800000,5;
- sc_start SC_INCMSPRATE,1800000,5;
- ">
+ Script: <" sc_start SC_SOULSCROLL,1800000,5; ">
},
{
Id: 12754
@@ -109148,13 +109133,13 @@ item_db: (
Trade: {
nodrop: true
notrade: true
- noselltonpc: true
nocart: true
- nogstorage: true
+ noselltonpc: true
nomail: true
noauction: true
+ nogstorage: true
}
- Script: <" getitem 14600,20; ">
+ Script: <" getitem Mental_Potion,20; ">
},
{
Id: 14350
@@ -109166,13 +109151,13 @@ item_db: (
Trade: {
nodrop: true
notrade: true
- noselltonpc: true
nocart: true
- nogstorage: true
+ noselltonpc: true
nomail: true
noauction: true
+ nogstorage: true
}
- Script: <" getitem 14600,50; ">
+ Script: <" getitem Mental_Potion,50; ">
},
{
Id: 14351
@@ -111544,12 +111529,16 @@ item_db: (
Trade: {
nodrop: true
notrade: true
- noselltonpc: true
nocart: true
- nogstorage: true
+ noselltonpc: true
nomail: true
noauction: true
+ nogstorage: true
}
+ Script: <"
+ specialeffect2 EF_SPELLBREAKER;
+ sc_start SC_TARGET_ASPD,1800000,10;
+ ">
},
{
Id: 14601
diff --git a/db/sc_config.txt b/db/sc_config.txt
index 9ae43aaa0..8a55fb45d 100644
--- a/db/sc_config.txt
+++ b/db/sc_config.txt
@@ -89,7 +89,7 @@ SC_SAFETYWALL, 28
SC_PNEUMA, 28
SC_ASSUMPTIO, 16
SC_BASILICA, 26
-//SC_GROUNDMAGIC, 26 //is divided to SC_VOLCANO, 0xSC_DELUGE, 0xSC_VIOLENTGALE
+//SC_GROUNDMAGIC, 26 // is divided to SC_VOLCANO, 0xSC_DELUGE, 0xSC_VIOLENTGALE
SC_VOLCANO, 26
SC_DELUGE, 26
SC_VIOLENTGALE, 26
@@ -399,8 +399,20 @@ SC_FULL_THROTTLE, 18
SC_REBOUND, 18
SC_TELEKINESIS_INTENSE, 18
SC_ACARAJE, 64
+SC_TARGET_ASPD, 92
-//Guild Auras should not be saved
+// Geffen Scrolls
+SC_SKELSCROLL, 90
+SC_DISTRUCTIONSCROLL, 90
+SC_ROYALSCROLL, 90
+SC_IMMUNITYSCROLL, 90
+SC_MYSTICSCROLL, 90
+SC_BATTLESCROLL, 90
+SC_ARMORSCROLL, 90
+SC_FREYJASCROLL, 90
+SC_SOULSCROLL, 90
+
+// Guild Auras should not be saved
SC_LEADERSHIP,78
SC_GLORYWOUNDS,78
SC_SOULCOLD,78
@@ -443,5 +455,5 @@ SC_DECORATION_OF_MUSIC, 207
SC_LJOSALFAR, 207
SC_MERMAID_LONGING, 207
-//Cant Clear
+// Cant Clear
SC_ALL_RIDING, 141
diff --git a/src/map/skill.c b/src/map/skill.c
index 8984bf0fa..8a782fc9a 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -14316,15 +14316,17 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, uint16
req.sp = cap_value(req.sp * sp_skill_rate_bonus / 100, 0, SHRT_MAX);
- if( sc ) {
- if( sc->data[SC__LAZINESS] )
+ if (sc) {
+ if (sc->data[SC__LAZINESS])
req.sp += req.sp + sc->data[SC__LAZINESS]->val1 * 10;
- if( sc->data[SC_UNLIMITED_HUMMING_VOICE] )
+ if (sc->data[SC_UNLIMITED_HUMMING_VOICE])
req.sp += req.sp * sc->data[SC_UNLIMITED_HUMMING_VOICE]->val3 / 100;
- if( sc->data[SC_RECOGNIZEDSPELL] )
+ if (sc->data[SC_RECOGNIZEDSPELL])
req.sp += req.sp / 4;
- if( sc->data[SC_TELEKINESIS_INTENSE] && skill->get_ele(skill_id, skill_lv) == ELE_GHOST)
+ if (sc->data[SC_TELEKINESIS_INTENSE] && skill->get_ele(skill_id, skill_lv) == ELE_GHOST)
req.sp -= req.sp * sc->data[SC_TELEKINESIS_INTENSE]->val2 / 100;
+ if (sc->data[SC_TARGET_ASPD])
+ req.sp -= req.sp * sc->data[SC_TARGET_ASPD]->val1 / 100;
}
req.zeny = skill->dbs->db[idx].zeny[skill_lv-1];
@@ -14739,6 +14741,8 @@ int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id, uint16
VARCAST_REDUCTION(50);
}
}
+ if (sc->data[SC_MYSTICSCROLL])
+ VARCAST_REDUCTION(sc->data[SC_MYSTICSCROLL]->val1);
// Fixed cast reduction bonuses
if( sc->data[SC__LAZINESS] )
fixcast_r = max(fixcast_r, sc->data[SC__LAZINESS]->val2);
diff --git a/src/map/status.c b/src/map/status.c
index 7567fc129..2e5eb5392 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -825,6 +825,7 @@ void initChangeTables(void) {
status->dbs->IconChangeTable[SC_ATKER_BLOOD] = SI_ATKER_BLOOD;
status->dbs->IconChangeTable[SC_TARGET_BLOOD] = SI_TARGET_BLOOD;
status->dbs->IconChangeTable[SC_ACARAJE] = SI_ACARAJE;
+ status->dbs->IconChangeTable[SC_TARGET_ASPD] = SI_TARGET_ASPD;
// Mercenary Bonus Effects
status->dbs->IconChangeTable[SC_MER_FLEE] = SI_MER_FLEE;
@@ -976,6 +977,7 @@ void initChangeTables(void) {
status->dbs->ChangeFlagTable[SC_WALKSPEED] |= SCB_SPEED;
status->dbs->ChangeFlagTable[SC_ITEMSCRIPT] |= SCB_ALL;
status->dbs->ChangeFlagTable[SC_TARGET_BLOOD] |= SCB_ALL;
+ status->dbs->ChangeFlagTable[SC_TARGET_ASPD] |= SCB_MAXSP;
// Cash Items
status->dbs->ChangeFlagTable[SC_FOOD_STR_CASH] = SCB_STR;
@@ -1026,6 +1028,17 @@ void initChangeTables(void) {
status->dbs->ChangeFlagTable[SC_MDEFSET] |= SCB_MDEF|SCB_MDEF2;
status->dbs->ChangeFlagTable[SC_MYSTERIOUS_POWDER] |= SCB_MAXHP;
status->dbs->ChangeFlagTable[SC_ACARAJE] |= SCB_HIT | SCB_ASPD;
+
+ // Geffen Scrolls
+ status->dbs->ChangeFlagTable[SC_SKELSCROLL] |= SCB_ALL;
+ status->dbs->ChangeFlagTable[SC_DISTRUCTIONSCROLL] |= SCB_ALL;
+ status->dbs->ChangeFlagTable[SC_ROYALSCROLL] |= SCB_ALL;
+ status->dbs->ChangeFlagTable[SC_IMMUNITYSCROLL] |= SCB_ALL;
+ status->dbs->ChangeFlagTable[SC_MYSTICSCROLL] |= SCB_MATK;
+ status->dbs->ChangeFlagTable[SC_BATTLESCROLL] |= SCB_BATK | SCB_ASPD;
+ status->dbs->ChangeFlagTable[SC_ARMORSCROLL] |= SCB_DEF | SCB_FLEE;
+ status->dbs->ChangeFlagTable[SC_FREYJASCROLL] |= SCB_MDEF | SCB_FLEE2;
+ status->dbs->ChangeFlagTable[SC_SOULSCROLL] |= SCB_MAXHP | SCB_MAXSP;
status->dbs->ChangeFlagTable[SC_ALL_RIDING] = SCB_SPEED;
status->dbs->ChangeFlagTable[SC_WEDDING] = SCB_SPEED;
@@ -2957,6 +2970,32 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) {
sd->magic_addele[ELE_WIND] += 25;
if( sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3 )
sd->magic_addele[ELE_EARTH] += 25;
+
+ // Geffen Scrolls
+ if (sc->data[SC_SKELSCROLL]) {
+#ifdef RENEWAL
+ sd->race_tolerance[RC_DEMIHUMAN] += sc->data[SC_SKELSCROLL]->val1;
+#else
+ sd->subrace[RC_DEMIHUMAN] += sc->data[SC_SKELSCROLL]->val1;
+#endif
+ }
+ if (sc->data[SC_DISTRUCTIONSCROLL]) {
+ sd->right_weapon.addrace[RC_ANGEL] += sc->data[SC_DISTRUCTIONSCROLL]->val1;
+ sd->left_weapon.addrace[RC_ANGEL] += sc->data[SC_DISTRUCTIONSCROLL]->val1;
+ sd->right_weapon.addele[ELE_HOLY] += sc->data[SC_DISTRUCTIONSCROLL]->val1;
+ sd->left_weapon.addele[ELE_HOLY] += sc->data[SC_DISTRUCTIONSCROLL]->val1;
+ sd->right_weapon.addrace[RC_BOSS] += sc->data[SC_DISTRUCTIONSCROLL]->val1;
+ sd->left_weapon.addrace[RC_BOSS] += sc->data[SC_DISTRUCTIONSCROLL]->val1;
+ }
+ if (sc->data[SC_ROYALSCROLL]) {
+#ifdef RENEWAL
+ sd->race_tolerance[RC_BOSS] += sc->data[SC_ROYALSCROLL]->val1;
+#else
+ sd->subrace[RC_BOSS] += sc->data[SC_ROYALSCROLL]->val1;
+#endif
+ }
+ if (sc->data[SC_IMMUNITYSCROLL])
+ sd->subele[ELE_NEUTRAL] += sd->subele[ELE_NEUTRAL] * sc->data[SC_IMMUNITYSCROLL]->val1 / 100;
}
status_cpy(&sd->battle_status, bstatus);
@@ -4715,6 +4754,8 @@ unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc,
matk += matk * sc->data[SC_MOONLIT_SERENADE]->val2/100;
if (sc->data[SC_MTF_MATK])
matk += matk * 25 / 100;
+ if (sc->data[SC_MYSTICSCROLL])
+ matk += matk * sc->data[SC_MYSTICSCROLL]->val1 / 100;
return (unsigned short)cap_value(matk,0,USHRT_MAX);
}
@@ -4895,9 +4936,10 @@ signed short status_calc_flee(struct block_list *bl, struct status_change *sc, i
if(status_get_element(bl) == ELE_WATER) //water type
flee /= 2;
}
-
if( sc->data[SC_OVERED_BOOST] ) // should be final and unmodifiable by any means
flee = sc->data[SC_OVERED_BOOST]->val2;
+ if (sc->data[SC_ARMORSCROLL])
+ flee += sc->data[SC_ARMORSCROLL]->val2;
return (short)cap_value(flee,1,SHRT_MAX);
}
@@ -4918,6 +4960,8 @@ signed short status_calc_flee2(struct block_list *bl, struct status_change *sc,
flee2 += sc->data[SC_WHISTLE]->val3*10;
if(sc->data[SC__UNLUCKY])
flee2 -= flee2 * sc->data[SC__UNLUCKY]->val2 / 100;
+ if (sc->data[SC_FREYJASCROLL])
+ flee2 += sc->data[SC_FREYJASCROLL]->val2;
return (short)cap_value(flee2,10,SHRT_MAX);
}
@@ -5017,6 +5061,8 @@ defType status_calc_def(struct block_list *bl, struct status_change *sc, int def
}
if (sc->data[SC_UNLIMIT])
return 1;
+ if (sc->data[SC_ARMORSCROLL])
+ def += sc->data[SC_ARMORSCROLL]->val1;
return (defType)cap_value(def,DEFTYPE_MIN,DEFTYPE_MAX);
}
@@ -5145,6 +5191,8 @@ defType status_calc_mdef(struct block_list *bl, struct status_change *sc, int md
mdef -= mdef *25 / 100;
if (sc->data[SC_UNLIMIT])
return 1;
+ if (sc->data[SC_FREYJASCROLL])
+ mdef += sc->data[SC_FREYJASCROLL]->val1;
return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX);
}
@@ -5493,6 +5541,8 @@ short status_calc_aspd(struct block_list *bl, struct status_change *sc, short fl
bonus += 3 * sc->data[SC_STAR_COMFORT]->val1;
if (sc->data[SC_ACARAJE])
bonus += sc->data[SC_ACARAJE]->val2;
+ if (sc->data[SC_BATTLESCROLL])
+ bonus += sc->data[SC_BATTLESCROLL]->val1;
}
return (bonus + pots);
@@ -5656,6 +5706,8 @@ short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int
aspd_rate -= sc->data[SC_GOLDENE_FERSE]->val3 * 10;
if (sc->data[SC_ACARAJE])
aspd_rate += sc->data[SC_ACARAJE]->val2 * 10;
+ if (sc->data[SC_BATTLESCROLL])
+ aspd_rate += sc->data[SC_BATTLESCROLL]->val1 * 10;
return (short)cap_value(aspd_rate,0,SHRT_MAX);
}
@@ -5701,10 +5753,8 @@ unsigned int status_calc_maxhp(struct block_list *bl, struct status_change *sc,
maxhp += 3000;
if(sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 2)
maxhp += 500;
-
if(sc->data[SC_MER_HP])
maxhp += maxhp * sc->data[SC_MER_HP]->val2/100;
-
if(sc->data[SC_EPICLESIS])
maxhp += maxhp * 5 * sc->data[SC_EPICLESIS]->val1 / 100;
if(sc->data[SC_VENOMBLEED])
@@ -5741,6 +5791,8 @@ unsigned int status_calc_maxhp(struct block_list *bl, struct status_change *sc,
maxhp += maxhp * sc->data[SC_GOLDENE_FERSE]->val2 / 100;
if(sc->data[SC_FRIGG_SONG])
maxhp += maxhp * sc->data[SC_FRIGG_SONG]->val2 / 100;
+ if (sc->data[SC_SOULSCROLL])
+ maxhp += maxhp * sc->data[SC_SOULSCROLL]->val1 / 100;
return (unsigned int)cap_value(maxhp,1,UINT_MAX);
}
@@ -5768,6 +5820,10 @@ unsigned int status_calc_maxsp(struct block_list *bl, struct status_change *sc,
maxsp += 50;
if (sc->data[SC_VITATA_500])
maxsp += maxsp * sc->data[SC_VITATA_500]->val2 / 100;
+ if (sc->data[SC_TARGET_ASPD])
+ maxsp += maxsp * sc->data[SC_TARGET_ASPD]->val1 / 100;
+ if (sc->data[SC_SOULSCROLL])
+ maxsp += maxsp * sc->data[SC_SOULSCROLL]->val1 / 100;
return cap_value(maxsp,1,UINT_MAX);
}
diff --git a/src/map/status.h b/src/map/status.h
index 7635248d0..a0fcde988 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -747,6 +747,18 @@ typedef enum sc_type {
SC_MERMAID_LONGING,
SC_ACARAJE, // 590
+ SC_TARGET_ASPD,
+
+ // Geffen Scrolls
+ SC_SKELSCROLL,
+ SC_DISTRUCTIONSCROLL,
+ SC_ROYALSCROLL,
+ SC_IMMUNITYSCROLL,
+ SC_MYSTICSCROLL,
+ SC_BATTLESCROLL,
+ SC_ARMORSCROLL,
+ SC_FREYJASCROLL,
+ SC_SOULSCROLL, // 600
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
} sc_type;
@@ -1058,7 +1070,7 @@ enum si_type {
SI_CRITICALPERCENT = 295,
SI_PLUSAVOIDVALUE = 296,
//SI_ATKER_ASPD = 297,
- //SI_TARGET_ASPD = 298,
+ SI_TARGET_ASPD = 298,
//SI_ATKER_MOVESPEED = 299,
SI_ATKER_BLOOD = 300,