summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJedzkie <jedzkie13@rocketmail.com>2015-11-17 22:09:25 +0800
committerJedzkie <jedzkie13@rocketmail.com>2015-11-17 22:09:25 +0800
commit912578159c8ccca9545e3c7dce9f7ce2b92bee2e (patch)
treee8dd81ba4fb87cca62a47ee2bc33bd5580bc1f9f
parent2a7a66e8ab2ca9d202d782aedcbe1bf80b1847cd (diff)
downloadhercules-912578159c8ccca9545e3c7dce9f7ce2b92bee2e.tar.gz
hercules-912578159c8ccca9545e3c7dce9f7ce2b92bee2e.tar.bz2
hercules-912578159c8ccca9545e3c7dce9f7ce2b92bee2e.tar.xz
hercules-912578159c8ccca9545e3c7dce9f7ce2b92bee2e.zip
Item DB Updates:
- Update Geffen Scrolls to its official behavior and effect. - Added Official item effect of Mental Potion. - Fixed Chinese Pestel item effect. - Fixed Vitata500 not giving 5% sp. - Added 'Costume: Time Accessory'.
-rw-r--r--db/const.txt14
-rw-r--r--db/pre-re/item_db.conf61
-rw-r--r--db/re/item_db.conf61
-rw-r--r--db/sc_config.txt17
-rw-r--r--src/map/skill.c38
-rw-r--r--src/map/status.c862
-rw-r--r--src/map/status.h617
7 files changed, 875 insertions, 795 deletions
diff --git a/db/const.txt b/db/const.txt
index 8cd614ff9..dea8e37cf 100644
--- a/db/const.txt
+++ b/db/const.txt
@@ -1285,6 +1285,20 @@ SC_MTF_HITFLEE 587
SC_LJOSALFAR 588
SC_MERMAID_LONGING 589
+SC_TIME_ACCESSORY 590
+
+// Geffen Scrolls
+SC_SKELSCROLL 591
+SC_DISTRUCTIONSCROLL 592
+SC_ROYALSCROLL 593
+SC_IMMUNITYSCROLL 594
+SC_MYSTICSCROLL 595
+SC_BATTLESCROLL 596
+SC_ARMORSCROLL 597
+SC_FREYJASCROLL 598
+SC_SOULSCROLL 599
+
+SC_TARGET_ASPD 600
e_gasp 0
e_what 1
diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf
index b66b1198c..0f8ea3163 100644
--- a/db/pre-re/item_db.conf
+++ b/db/pre-re/item_db.conf
@@ -69525,16 +69525,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Trade: {
- nodrop: true
- notrade: true
- noselltonpc: true
- nocart: true
- nostorage: true
- nogstorage: true
- nomail: true
- noauction: true
- }
+ Script: <" sc_start SC_SKELSCROLL,1800000,5; ">
},
{
Id: 12746
@@ -69543,20 +69534,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Trade: {
- nodrop: true
- notrade: true
- nocart: true
- nostorage: true
- nogstorage: true
- nomail: true
- noauction: 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
@@ -69565,7 +69543,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
@@ -69574,7 +69552,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
@@ -69583,7 +69561,7 @@ item_db: (
Type: 2
Buy: 20
Weight: 10
- Script: <" sc_start SC_PLUSMAGICPOWER,180000,5; ">
+ Script: <" sc_start SC_MYSTICSCROLL,1800000,0; ">
},
{
Id: 12750
@@ -69592,10 +69570,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,0; ">
},
{
Id: 12751
@@ -69604,10 +69579,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_start SC_ARMORSCROLL,1800000,0; ">
},
{
Id: 12752
@@ -69616,10 +69588,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_start SC_FREYJASCROLL,1800000,0; ">
},
{
Id: 12753
@@ -69628,10 +69597,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
@@ -69649,6 +69615,7 @@ item_db: (
nomail: true
noauction: true
}
+ Script: <" percentheal 50,50; ">
},
{
Id: 12755
@@ -87930,9 +87897,17 @@ item_db: (
Weight: 10
Trade: {
nodrop: true
+ notrade: true
noselltonpc: true
+ nocart: true
nogstorage: true
+ nomail: true
+ noauction: 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 2b0f70489..00d05b76d 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -85204,20 +85204,11 @@ 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
- nomail: true
- noauction: true
- }
+ Script: <" sc_start SC_SKELSCROLL,1800000,5; ">
},
{
Id: 12746
@@ -85226,11 +85217,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
@@ -85239,7 +85226,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
@@ -85248,7 +85235,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
@@ -85257,7 +85244,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
@@ -85266,10 +85253,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
@@ -85278,10 +85262,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_start SC_ARMORSCROLL,1800000,0; ">
},
{
Id: 12752
@@ -85290,10 +85271,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_start SC_FREYJASCROLL,1800000,0; ">
},
{
Id: 12753
@@ -85302,10 +85280,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
@@ -85314,6 +85289,16 @@ item_db: (
Type: 2
Buy: 0
Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ nocart: true
+ nostorage: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <" percentheal 50,50; ">
},
{
Id: 12755
@@ -110569,6 +110554,10 @@ item_db: (
nomail: true
noauction: true
}
+ Script: <"
+ specialeffect2 EF_SPELLBREAKER;
+ sc_start SC_TARGET_ASPD,1800000,10;
+ ">
},
{
Id: 14601
@@ -130835,6 +130824,8 @@ item_db: (
Type: 5
Loc: 2048
View: 1309
+ OnEquipScript: <" sc_start SC_TIME_ACCESSORY,-1,0; ">
+ OnUnequipScript: <" sc_end SC_TIME_ACCESSORY; ">
},
{
Id: 20247
diff --git a/db/sc_config.txt b/db/sc_config.txt
index 650409f6c..e2b2491e7 100644
--- a/db/sc_config.txt
+++ b/db/sc_config.txt
@@ -398,8 +398,18 @@ SC_MTF_CRIDAMAGE, 12
SC_FULL_THROTTLE, 18
SC_REBOUND, 18
SC_TELEKINESIS_INTENSE,18
+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
+SC_TARGET_ASPD, 92
-//Guild Auras should not be saved
+// Guild Auras should not be saved
SC_LEADERSHIP,78
SC_GLORYWOUNDS,78
SC_SOULCOLD,78
@@ -439,6 +449,9 @@ SC_MOONSTAR, 207
SC_SUPER_STAR, 207
SC_STRANGELIGHTS, 207
SC_DECORATION_OF_MUSIC, 207
+SC_LJOSALFAR, 207
+SC_MERMAID_LONGING, 207
+SC_TIME_ACCESSORY, 207
-//Cant Clear
+// Cant Clear
SC_ALL_RIDING, 141
diff --git a/src/map/skill.c b/src/map/skill.c
index cdf1c031f..827f8db8a 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];
@@ -14740,29 +14742,31 @@ int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id, uint16
}
}
// Fixed cast reduction bonuses
- if( sc->data[SC__LAZINESS] )
+ if (sc->data[SC__LAZINESS])
fixcast_r = max(fixcast_r, sc->data[SC__LAZINESS]->val2);
- if( sc->data[SC_DANCE_WITH_WUG])
+ if (sc->data[SC_DANCE_WITH_WUG])
fixcast_r = max(fixcast_r, sc->data[SC_DANCE_WITH_WUG]->val4);
- if( sc->data[SC_SECRAMENT] )
+ if (sc->data[SC_SECRAMENT])
fixcast_r = max(fixcast_r, sc->data[SC_SECRAMENT]->val2);
if (sd && skill_id >= WL_WHITEIMPRISON && skill_id < WL_FREEZE_SP) {
int radius_lv = pc->checkskill(sd, WL_RADIUS);
if (radius_lv)
fixcast_r = max(fixcast_r, (status_get_int(bl) + status->get_lv(bl)) / 15 + radius_lv * 5); // [{(Caster?s INT / 15) + (Caster?s Base Level / 15) + (Radius Skill Level x 5)}] %
}
+ if (sc->data[SC_MYSTICSCROLL])
+ VARCAST_REDUCTION(sc->data[SC_MYSTICSCROLL]->val1);
// Fixed cast non percentage bonuses
- if( sc->data[SC_MANDRAGORA] )
+ if (sc->data[SC_MANDRAGORA])
fixed += sc->data[SC_MANDRAGORA]->val1 * 500;
- if( sc->data[SC_IZAYOI] )
+ if (sc->data[SC_IZAYOI])
fixed = 0;
- if( sc->data[SC_GUST_OPTION] || sc->data[SC_BLAST_OPTION] || sc->data[SC_WILD_STORM_OPTION] )
+ if (sc->data[SC_GUST_OPTION] || sc->data[SC_BLAST_OPTION] || sc->data[SC_WILD_STORM_OPTION])
fixed -= 1000;
}
- if( sd && !(skill->get_castnodex(skill_id, skill_lv)&4) ){
+ if (sd && !(skill->get_castnodex(skill_id, skill_lv)&4)) {
VARCAST_REDUCTION( max(sd->bonus.varcastrate, 0) + max(i, 0) );
- fixcast_r = max(fixcast_r, sd->bonus.fixcastrate) + min(sd->bonus.fixcastrate,0);
+ fixcast_r = max(fixcast_r, sd->bonus.fixcastrate) + min(sd->bonus.fixcastrate, 0);
for( i = 0; i < ARRAYLENGTH(sd->skillcast) && sd->skillcast[i].id; i++ )
if( sd->skillcast[i].id == skill_id ){ // bonus2 bVariableCastrate
if( (i=sd->skillcast[i].val) > 0)
@@ -14771,12 +14775,12 @@ int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id, uint16
}
}
- if( varcast_r < 0 ) // now compute overall factors
+ if (varcast_r < 0 ) // now compute overall factors
time = time * (1 - (float)varcast_r / 100);
- if( !(skill->get_castnodex(skill_id, skill_lv)&1) )// reduction from status point
- time = (1 - sqrt( ((float)(status_get_dex(bl)*2 + status_get_int(bl)) / battle_config.vcast_stat_scale) )) * time;
+ if (!(skill->get_castnodex(skill_id, skill_lv)&1)) // reduction from status point
+ time = (1 - sqrt( ((float)(status_get_dex(bl) * 2 + status_get_int(bl)) / battle_config.vcast_stat_scale) )) * time;
// underflow checking/capping
- time = max(time, 0) + (1 - (float)min(fixcast_r, 100) / 100) * max(fixed,0);
+ time = max(time, 0) + (1 - (float)min(fixcast_r, 100) / 100) * max(fixed, 0);
#endif
return (int)time;
}
diff --git a/src/map/status.c b/src/map/status.c
index 1a07f74dc..0eb75aed7 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -759,22 +759,22 @@ void initChangeTables(void) {
// Storing the target job rather than simply SC_SOULLINK simplifies code later on.
status->dbs->Skill2SCTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST,
- status->dbs->Skill2SCTable[SL_MONK] = (sc_type)MAPID_MONK,
- status->dbs->Skill2SCTable[SL_STAR] = (sc_type)MAPID_STAR_GLADIATOR,
- status->dbs->Skill2SCTable[SL_SAGE] = (sc_type)MAPID_SAGE,
- status->dbs->Skill2SCTable[SL_CRUSADER] = (sc_type)MAPID_CRUSADER,
- status->dbs->Skill2SCTable[SL_SUPERNOVICE] = (sc_type)MAPID_SUPER_NOVICE,
- status->dbs->Skill2SCTable[SL_KNIGHT] = (sc_type)MAPID_KNIGHT,
- status->dbs->Skill2SCTable[SL_WIZARD] = (sc_type)MAPID_WIZARD,
- status->dbs->Skill2SCTable[SL_PRIEST] = (sc_type)MAPID_PRIEST,
- status->dbs->Skill2SCTable[SL_BARDDANCER] = (sc_type)MAPID_BARDDANCER,
- status->dbs->Skill2SCTable[SL_ROGUE] = (sc_type)MAPID_ROGUE,
- status->dbs->Skill2SCTable[SL_ASSASIN] = (sc_type)MAPID_ASSASSIN,
- status->dbs->Skill2SCTable[SL_BLACKSMITH] = (sc_type)MAPID_BLACKSMITH,
- status->dbs->Skill2SCTable[SL_HUNTER] = (sc_type)MAPID_HUNTER,
- status->dbs->Skill2SCTable[SL_SOULLINKER] = (sc_type)MAPID_SOUL_LINKER,
-
- //Status that don't have a skill associated.
+ status->dbs->Skill2SCTable[SL_MONK] = (sc_type)MAPID_MONK,
+ status->dbs->Skill2SCTable[SL_STAR] = (sc_type)MAPID_STAR_GLADIATOR,
+ status->dbs->Skill2SCTable[SL_SAGE] = (sc_type)MAPID_SAGE,
+ status->dbs->Skill2SCTable[SL_CRUSADER] = (sc_type)MAPID_CRUSADER,
+ status->dbs->Skill2SCTable[SL_SUPERNOVICE] = (sc_type)MAPID_SUPER_NOVICE,
+ status->dbs->Skill2SCTable[SL_KNIGHT] = (sc_type)MAPID_KNIGHT,
+ status->dbs->Skill2SCTable[SL_WIZARD] = (sc_type)MAPID_WIZARD,
+ status->dbs->Skill2SCTable[SL_PRIEST] = (sc_type)MAPID_PRIEST,
+ status->dbs->Skill2SCTable[SL_BARDDANCER] = (sc_type)MAPID_BARDDANCER,
+ status->dbs->Skill2SCTable[SL_ROGUE] = (sc_type)MAPID_ROGUE,
+ status->dbs->Skill2SCTable[SL_ASSASIN] = (sc_type)MAPID_ASSASSIN,
+ status->dbs->Skill2SCTable[SL_BLACKSMITH] = (sc_type)MAPID_BLACKSMITH,
+ status->dbs->Skill2SCTable[SL_HUNTER] = (sc_type)MAPID_HUNTER,
+ status->dbs->Skill2SCTable[SL_SOULLINKER] = (sc_type)MAPID_SOUL_LINKER,
+
+ // Status that don't have a skill associated.
status->dbs->IconChangeTable[SC_WEIGHTOVER50] = SI_WEIGHTOVER50;
status->dbs->IconChangeTable[SC_WEIGHTOVER90] = SI_WEIGHTOVER90;
status->dbs->IconChangeTable[SC_ATTHASTE_POTION1] = SI_ATTHASTE_POTION1;
@@ -802,7 +802,8 @@ void initChangeTables(void) {
status->dbs->IconChangeTable[SC_SPL_MATK] = SI_SPL_MATK;
status->dbs->IconChangeTable[SC_PLUSATTACKPOWER] = SI_PLUSATTACKPOWER;
status->dbs->IconChangeTable[SC_PLUSMAGICPOWER] = SI_PLUSMAGICPOWER;
- //Cash Items
+
+ // Cash Items
status->dbs->IconChangeTable[SC_FOOD_STR_CASH] = SI_FOOD_STR_CASH;
status->dbs->IconChangeTable[SC_FOOD_AGI_CASH] = SI_FOOD_AGI_CASH;
status->dbs->IconChangeTable[SC_FOOD_VIT_CASH] = SI_FOOD_VIT_CASH;
@@ -823,18 +824,22 @@ void initChangeTables(void) {
status->dbs->IconChangeTable[SC_L_LIFEPOTION] = SI_L_LIFEPOTION;
status->dbs->IconChangeTable[SC_ATKER_BLOOD] = SI_ATKER_BLOOD;
status->dbs->IconChangeTable[SC_TARGET_BLOOD] = SI_TARGET_BLOOD;
+ status->dbs->IconChangeTable[SC_TARGET_ASPD] = SI_TARGET_ASPD;
+
// Mercenary Bonus Effects
status->dbs->IconChangeTable[SC_MER_FLEE] = SI_MER_FLEE;
status->dbs->IconChangeTable[SC_MER_ATK] = SI_MER_ATK;
status->dbs->IconChangeTable[SC_MER_HP] = SI_MER_HP;
status->dbs->IconChangeTable[SC_MER_SP] = SI_MER_SP;
status->dbs->IconChangeTable[SC_MER_HIT] = SI_MER_HIT;
+
// Warlock Spheres
status->dbs->IconChangeTable[SC_SUMMON1] = SI_SPHERE_1;
status->dbs->IconChangeTable[SC_SUMMON2] = SI_SPHERE_2;
status->dbs->IconChangeTable[SC_SUMMON3] = SI_SPHERE_3;
status->dbs->IconChangeTable[SC_SUMMON4] = SI_SPHERE_4;
status->dbs->IconChangeTable[SC_SUMMON5] = SI_SPHERE_5;
+
// Warlock Preserved spells
status->dbs->IconChangeTable[SC_SPELLBOOK1] = SI_SPELLBOOK1;
status->dbs->IconChangeTable[SC_SPELLBOOK2] = SI_SPELLBOOK2;
@@ -872,7 +877,7 @@ void initChangeTables(void) {
status->dbs->IconChangeTable[SC_BANANA_BOMB] = SI_BANANA_BOMB;
status->dbs->IconChangeTable[SC_BANANA_BOMB_SITDOWN_POSTDELAY] = SI_BANANA_BOMB_SITDOWN_POSTDELAY;
- //Genetics New Food Items Status Icons
+ // Genetics New Food Items Status Icons
status->dbs->IconChangeTable[SC_SAVAGE_STEAK] = SI_SAVAGE_STEAK;
status->dbs->IconChangeTable[SC_COCKTAIL_WARG_BLOOD] = SI_COCKTAIL_WARG_BLOOD;
status->dbs->IconChangeTable[SC_MINOR_BBQ] = SI_MINOR_BBQ;
@@ -920,8 +925,9 @@ void initChangeTables(void) {
status->dbs->IconChangeTable[SC_DECORATION_OF_MUSIC] = SI_DECORATION_OF_MUSIC;
status->dbs->IconChangeTable[SC_LJOSALFAR] = SI_LJOSALFAR;
status->dbs->IconChangeTable[SC_MERMAID_LONGING] = SI_MERMAID_LONGING;
+ status->dbs->IconChangeTable[SC_TIME_ACCESSORY] = SI_TIME_ACCESSORY;
- //Other SC which are not necessarily associated to skills.
+ // Other SC which are not necessarily associated to skills.
status->dbs->ChangeFlagTable[SC_ATTHASTE_POTION1] = SCB_ASPD;
status->dbs->ChangeFlagTable[SC_ATTHASTE_POTION2] = SCB_ASPD;
status->dbs->ChangeFlagTable[SC_ATTHASTE_POTION3] = SCB_ASPD;
@@ -930,7 +936,7 @@ void initChangeTables(void) {
status->dbs->ChangeFlagTable[SC_MOVHASTE_INFINITY] = SCB_SPEED;
status->dbs->ChangeFlagTable[SC_PLUSATTACKPOWER] = SCB_BATK;
status->dbs->ChangeFlagTable[SC_PLUSMAGICPOWER] = SCB_MATK;
- status->dbs->ChangeFlagTable[SC_INCALLSTATUS] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK;
+ status->dbs->ChangeFlagTable[SC_INCALLSTATUS] |= SCB_STR | SCB_AGI | SCB_VIT | SCB_INT | SCB_DEX | SCB_LUK;
status->dbs->ChangeFlagTable[SC_CHASEWALK2] |= SCB_STR;
status->dbs->ChangeFlagTable[SC_INCAGI] |= SCB_AGI;
status->dbs->ChangeFlagTable[SC_INCVIT] |= SCB_VIT;
@@ -941,7 +947,7 @@ void initChangeTables(void) {
status->dbs->ChangeFlagTable[SC_INCHITRATE] |= SCB_HIT;
status->dbs->ChangeFlagTable[SC_INCFLEE] |= SCB_FLEE;
status->dbs->ChangeFlagTable[SC_INCFLEERATE] |= SCB_FLEE;
- status->dbs->ChangeFlagTable[SC_MTF_HITFLEE] |= SCB_HIT|SCB_FLEE;
+ status->dbs->ChangeFlagTable[SC_MTF_HITFLEE] |= SCB_HIT | SCB_FLEE;
status->dbs->ChangeFlagTable[SC_CRITICALPERCENT] |= SCB_CRI;
status->dbs->ChangeFlagTable[SC_INCASPDRATE] |= SCB_ASPD;
status->dbs->ChangeFlagTable[SC_PLUSAVOIDVALUE] |= SCB_FLEE2;
@@ -951,7 +957,7 @@ void initChangeTables(void) {
status->dbs->ChangeFlagTable[SC_MTF_MHP] |= SCB_MAXHP;
status->dbs->ChangeFlagTable[SC_INCMSP] |= SCB_MAXSP;
status->dbs->ChangeFlagTable[SC_MTF_MSP] |= SCB_MAXSP;
- status->dbs->ChangeFlagTable[SC_INCATKRATE] |= SCB_BATK|SCB_WATK;
+ status->dbs->ChangeFlagTable[SC_INCATKRATE] |= SCB_BATK | SCB_WATK;
status->dbs->ChangeFlagTable[SC_INCMATKRATE] |= SCB_MATK;
status->dbs->ChangeFlagTable[SC_INCDEFRATE] |= SCB_DEF;
status->dbs->ChangeFlagTable[SC_FOOD_STR] |= SCB_STR;
@@ -970,6 +976,20 @@ void initChangeTables(void) {
status->dbs->ChangeFlagTable[SC_ATKER_BLOOD] |= SCB_ALL;
status->dbs->ChangeFlagTable[SC_WALKSPEED] |= SCB_SPEED;
status->dbs->ChangeFlagTable[SC_ITEMSCRIPT] |= SCB_ALL;
+
+ // 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_TARGET_ASPD] |= SCB_MAXSP;
+
// Cash Items
status->dbs->ChangeFlagTable[SC_FOOD_STR_CASH] = SCB_STR;
status->dbs->ChangeFlagTable[SC_FOOD_AGI_CASH] = SCB_AGI;
@@ -977,23 +997,27 @@ void initChangeTables(void) {
status->dbs->ChangeFlagTable[SC_FOOD_DEX_CASH] = SCB_DEX;
status->dbs->ChangeFlagTable[SC_FOOD_INT_CASH] = SCB_INT;
status->dbs->ChangeFlagTable[SC_FOOD_LUK_CASH] = SCB_LUK;
+
// Mercenary Bonus Effects
status->dbs->ChangeFlagTable[SC_MER_FLEE] |= SCB_FLEE;
status->dbs->ChangeFlagTable[SC_MER_ATK] |= SCB_WATK;
status->dbs->ChangeFlagTable[SC_MER_HP] |= SCB_MAXHP;
status->dbs->ChangeFlagTable[SC_MER_SP] |= SCB_MAXSP;
status->dbs->ChangeFlagTable[SC_MER_HIT] |= SCB_HIT;
+
// Guillotine Cross Poison Effects
- status->dbs->ChangeFlagTable[SC_PARALYSE] |= SCB_FLEE|SCB_SPEED|SCB_ASPD;
+ status->dbs->ChangeFlagTable[SC_PARALYSE] |= SCB_FLEE | SCB_SPEED | SCB_ASPD;
status->dbs->ChangeFlagTable[SC_VENOMBLEED] |= SCB_MAXHP;
status->dbs->ChangeFlagTable[SC_MAGICMUSHROOM] |= SCB_REGEN;
status->dbs->ChangeFlagTable[SC_DEATHHURT] |= SCB_REGEN;
- status->dbs->ChangeFlagTable[SC_PYREXIA] |= SCB_HIT|SCB_FLEE;
+ status->dbs->ChangeFlagTable[SC_PYREXIA] |= SCB_HIT | SCB_FLEE;
status->dbs->ChangeFlagTable[SC_OBLIVIONCURSE] |= SCB_REGEN;
- // RG status
+
+ // Royal Guard status
status->dbs->ChangeFlagTable[SC_SHIELDSPELL_DEF] |= SCB_WATK;
status->dbs->ChangeFlagTable[SC_SHIELDSPELL_REF] |= SCB_DEF;
- // Meca status
+
+ // Mechanic status
status->dbs->ChangeFlagTable[SC_STEALTHFIELD_MASTER] |= SCB_SPEED;
status->dbs->ChangeFlagTable[SC_SAVAGE_STEAK] |= SCB_STR;
@@ -1008,17 +1032,17 @@ void initChangeTables(void) {
status->dbs->ChangeFlagTable[SC_MUSTLE_M] |= SCB_MAXHP;
status->dbs->ChangeFlagTable[SC_LIFE_FORCE_F] |= SCB_MAXSP;
status->dbs->ChangeFlagTable[SC_EXTRACT_WHITE_POTION_Z] |= SCB_REGEN;
- status->dbs->ChangeFlagTable[SC_VITATA_500] |= SCB_REGEN;
+ status->dbs->ChangeFlagTable[SC_VITATA_500] |= SCB_REGEN | SCB_MAXSP;
status->dbs->ChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD;
status->dbs->ChangeFlagTable[SC_REBOUND] |= SCB_SPEED|SCB_REGEN;
- status->dbs->ChangeFlagTable[SC_DEFSET] |= SCB_DEF|SCB_DEF2;
- status->dbs->ChangeFlagTable[SC_MDEFSET] |= SCB_MDEF|SCB_MDEF2;
+ status->dbs->ChangeFlagTable[SC_DEFSET] |= SCB_DEF | SCB_DEF2;
+ status->dbs->ChangeFlagTable[SC_MDEFSET] |= SCB_MDEF | SCB_MDEF2;
status->dbs->ChangeFlagTable[SC_MYSTERIOUS_POWDER] |= SCB_MAXHP;
status->dbs->ChangeFlagTable[SC_ALL_RIDING] = SCB_SPEED;
status->dbs->ChangeFlagTable[SC_WEDDING] = SCB_SPEED;
- status->dbs->ChangeFlagTable[SC_MTF_ASPD] = SCB_ASPD|SCB_HIT;
+ status->dbs->ChangeFlagTable[SC_MTF_ASPD] = SCB_ASPD | SCB_HIT;
status->dbs->ChangeFlagTable[SC_MTF_MATK] = SCB_MATK;
status->dbs->ChangeFlagTable[SC_MTF_MLEATKED] |= SCB_ALL;
@@ -1028,6 +1052,7 @@ void initChangeTables(void) {
status->dbs->ChangeFlagTable[SC_DECORATION_OF_MUSIC] |= SCB_NONE;
status->dbs->ChangeFlagTable[SC_LJOSALFAR] |= SCB_NONE;
status->dbs->ChangeFlagTable[SC_MERMAID_LONGING] |= SCB_NONE;
+ status->dbs->ChangeFlagTable[SC_TIME_ACCESSORY] |= SCB_NONE;
/* status->dbs->DisplayType Table [Ind/Hercules] */
status->dbs->DisplayType[SC_ALL_RIDING] = true;
@@ -1058,8 +1083,9 @@ void initChangeTables(void) {
status->dbs->DisplayType[SC_DECORATION_OF_MUSIC] = true;
status->dbs->DisplayType[SC_LJOSALFAR] = true;
status->dbs->DisplayType[SC_MERMAID_LONGING] = true;
+ status->dbs->DisplayType[SC_TIME_ACCESSORY] = true;
- if( !battle_config.display_hallucination ) //Disable Hallucination.
+ if (!battle_config.display_hallucination) // Disable Hallucination.
status->dbs->IconChangeTable[SC_ILLUSION] = SI_BLANK;
#undef add_sc
#undef set_sc_with_vfx
@@ -2741,16 +2767,16 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) {
// ----- EQUIPMENT-MDEF CALCULATION -----
// Apply relative modifiers from equipment
- if(sd->mdef_rate < 0)
+ if (sd->mdef_rate < 0)
sd->mdef_rate = 0;
- if(sd->mdef_rate != 100) {
- i = bstatus->mdef * sd->mdef_rate/100;
+ if (sd->mdef_rate != 100) {
+ i = bstatus->mdef * sd->mdef_rate / 100;
bstatus->mdef = cap_value(i, DEFTYPE_MIN, DEFTYPE_MAX);
}
#ifndef RENEWAL
if (!battle_config.magic_defense_type && bstatus->mdef > battle_config.max_def) {
- bstatus->mdef2 += battle_config.over_def_bonus*(bstatus->mdef -battle_config.max_def);
+ bstatus->mdef2 += battle_config.over_def_bonus * (bstatus->mdef -battle_config.max_def);
bstatus->mdef = (signed char)battle_config.max_def;
}
#endif
@@ -2760,62 +2786,62 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) {
// Basic ASPD value
i = status->base_amotion_pc(sd,bstatus);
- bstatus->amotion = cap_value(i,((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd),2000);
+ bstatus->amotion = cap_value(i, ((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd), 2000);
// Relative modifiers from passive skills
#ifndef RENEWAL_ASPD
- if((skill_lv=pc->checkskill(sd,SA_ADVANCEDBOOK))>0 && sd->status.weapon == W_BOOK)
- bstatus->aspd_rate -= 5*skill_lv;
- if((skill_lv = pc->checkskill(sd,SG_DEVIL)) > 0 && !pc->nextjobexp(sd))
- bstatus->aspd_rate -= 30*skill_lv;
- if((skill_lv=pc->checkskill(sd,GS_SINGLEACTION))>0 &&
+ if ((skill_lv=pc->checkskill(sd, SA_ADVANCEDBOOK)) > 0 && sd->status.weapon == W_BOOK)
+ bstatus->aspd_rate -= 5 * skill_lv;
+ if ((skill_lv = pc->checkskill(sd, SG_DEVIL)) > 0 && !pc->nextjobexp(sd))
+ bstatus->aspd_rate -= 30 * skill_lv;
+ if ((skill_lv=pc->checkskill(sd,GS_SINGLEACTION)) > 0 &&
(sd->status.weapon >= W_REVOLVER && sd->status.weapon <= W_GRENADE))
- bstatus->aspd_rate -= ((skill_lv+1)/2) * 10;
+ bstatus->aspd_rate -= ((skill_lv + 1) / 2) * 10;
if (pc_isridingpeco(sd))
- bstatus->aspd_rate += 500-100*pc->checkskill(sd,KN_CAVALIERMASTERY);
+ bstatus->aspd_rate += 500 - 100 * pc->checkskill(sd, KN_CAVALIERMASTERY);
else if (pc_isridingdragon(sd))
- bstatus->aspd_rate += 250-50*pc->checkskill(sd,RK_DRAGONTRAINING);
+ bstatus->aspd_rate += 250 - 50 * pc->checkskill(sd, RK_DRAGONTRAINING);
#else // needs more info
- if ( (skill_lv = pc->checkskill(sd, SG_DEVIL)) > 0 && !pc->nextjobexp(sd) )
+ if ((skill_lv = pc->checkskill(sd, SG_DEVIL)) > 0 && !pc->nextjobexp(sd))
bstatus->aspd_rate += 30 * skill_lv;
- if ( pc_isridingpeco(sd) )
+ if (pc_isridingpeco(sd))
bstatus->aspd_rate -= 500 - 100 * pc->checkskill(sd, KN_CAVALIERMASTERY);
- else if ( pc_isridingdragon(sd) )
+ else if (pc_isridingdragon(sd))
bstatus->aspd_rate -= 250 - 50 * pc->checkskill(sd, RK_DRAGONTRAINING);
#endif
- bstatus->adelay = 2*bstatus->amotion;
+ bstatus->adelay = 2 * bstatus->amotion;
// ----- DMOTION -----
//
- i = 800-bstatus->agi*4;
+ i = 800-bstatus->agi * 4;
bstatus->dmotion = cap_value(i, 400, 800);
- if(battle_config.pc_damage_delay_rate != 100)
- bstatus->dmotion = bstatus->dmotion*battle_config.pc_damage_delay_rate/100;
+ if (battle_config.pc_damage_delay_rate != 100)
+ bstatus->dmotion = bstatus->dmotion * battle_config.pc_damage_delay_rate / 100;
// ----- MISC CALCULATIONS -----
// Weight
- if((skill_lv=pc->checkskill(sd,MC_INCCARRY))>0)
+ if ((skill_lv = pc->checkskill(sd,MC_INCCARRY)) > 0)
sd->max_weight += 2000*skill_lv;
if (pc_isridingpeco(sd) && pc->checkskill(sd,KN_RIDING) > 0)
sd->max_weight += 10000;
else if(pc_isridingdragon(sd))
- sd->max_weight += 5000+2000*pc->checkskill(sd,RK_DRAGONTRAINING);
- if(sc->data[SC_KNOWLEDGE])
- sd->max_weight += sd->max_weight*sc->data[SC_KNOWLEDGE]->val1/10;
- if((skill_lv=pc->checkskill(sd,ALL_INCCARRY))>0)
- sd->max_weight += 2000*skill_lv;
+ sd->max_weight += 5000 + 2000 * pc->checkskill(sd, RK_DRAGONTRAINING);
+ if (sc->data[SC_KNOWLEDGE])
+ sd->max_weight += sd->max_weight * sc->data[SC_KNOWLEDGE]->val1 / 10;
+ if ((skill_lv = pc->checkskill(sd, ALL_INCCARRY)) > 0)
+ sd->max_weight += 2000 * skill_lv;
- sd->cart_weight_max = battle_config.max_cart_weight + (pc->checkskill(sd, GN_REMODELING_CART)*5000);
+ sd->cart_weight_max = battle_config.max_cart_weight + (pc->checkskill(sd, GN_REMODELING_CART) * 5000);
- if (pc->checkskill(sd,SM_MOVINGRECOVERY)>0)
+ if (pc->checkskill(sd,SM_MOVINGRECOVERY) > 0)
sd->regen.state.walk = 1;
else
sd->regen.state.walk = 0;
// Skill SP cost
- if((skill_lv=pc->checkskill(sd,HP_MANARECHARGE))>0 )
- sd->dsprate -= 4*skill_lv;
+ if ((skill_lv = pc->checkskill(sd,HP_MANARECHARGE)) > 0)
+ sd->dsprate -= 4 * skill_lv;
if(sc->data[SC_SERVICEFORYOU])
sd->dsprate -= sc->data[SC_SERVICEFORYOU]->val3;
@@ -2836,33 +2862,33 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) {
sd->sprecov_rate = 0;
// Anti-element and anti-race
- if((skill_lv=pc->checkskill(sd,CR_TRUST))>0)
- sd->subele[ELE_HOLY] += skill_lv*5;
- if((skill_lv=pc->checkskill(sd,BS_SKINTEMPER))>0) {
+ if ((skill_lv = pc->checkskill(sd, CR_TRUST)) > 0)
+ sd->subele[ELE_HOLY] += skill_lv * 5;
+ if ((skill_lv = pc->checkskill(sd, BS_SKINTEMPER)) > 0) {
sd->subele[ELE_NEUTRAL] += skill_lv;
- sd->subele[ELE_FIRE] += skill_lv*4;
+ sd->subele[ELE_FIRE] += skill_lv * 4;
}
- if((skill_lv=pc->checkskill(sd,NC_RESEARCHFE))>0) {
- sd->subele[ELE_EARTH] += skill_lv*10;
- sd->subele[ELE_FIRE] += skill_lv*10;
+ if ((skill_lv = pc->checkskill(sd, NC_RESEARCHFE)) > 0) {
+ sd->subele[ELE_EARTH] += skill_lv * 10;
+ sd->subele[ELE_FIRE] += skill_lv * 10;
}
- if((skill_lv=pc->checkskill(sd,SA_DRAGONOLOGY))>0 ) {
+ if ((skill_lv = pc->checkskill(sd, SA_DRAGONOLOGY)) > 0) {
#ifdef RENEWAL
- skill_lv = skill_lv*2;
+ skill_lv = skill_lv * 2;
#else
- skill_lv = skill_lv*4;
+ skill_lv = skill_lv * 4;
#endif
- sd->right_weapon.addrace[RC_DRAGON]+=skill_lv;
- sd->left_weapon.addrace[RC_DRAGON]+=skill_lv;
- sd->magic_addrace[RC_DRAGON]+=skill_lv;
+ sd->right_weapon.addrace[RC_DRAGON] += skill_lv;
+ sd->left_weapon.addrace[RC_DRAGON] += skill_lv;
+ sd->magic_addrace[RC_DRAGON] += skill_lv;
#ifdef RENEWAL
sd->race_tolerance[RC_DRAGON] += skill_lv;
#else
- sd->subrace[RC_DRAGON]+=skill_lv;
+ sd->subrace[RC_DRAGON] += skill_lv;
#endif
}
- if( (skill_lv = pc->checkskill(sd, AB_EUCHARISTICA)) > 0 ) {
+ if ((skill_lv = pc->checkskill(sd, AB_EUCHARISTICA)) > 0) {
sd->right_weapon.addrace[RC_DEMON] += skill_lv;
sd->right_weapon.addele[ELE_DARK] += skill_lv;
sd->left_weapon.addrace[RC_DEMON] += skill_lv;
@@ -2877,12 +2903,12 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) {
sd->subele[ELE_DARK] += skill_lv;
}
- if(sc->count) {
- if(sc->data[SC_CONCENTRATION]) { //Update the card-bonus data
- sc->data[SC_CONCENTRATION]->val3 = sd->param_bonus[1]; //Agi
- sc->data[SC_CONCENTRATION]->val4 = sd->param_bonus[4]; //Dex
+ if (sc->count) {
+ if (sc->data[SC_CONCENTRATION]) { // Update the card-bonus data
+ sc->data[SC_CONCENTRATION]->val3 = sd->param_bonus[1]; // Agi
+ sc->data[SC_CONCENTRATION]->val4 = sd->param_bonus[4]; // Dex
}
- if(sc->data[SC_SIEGFRIED]){
+ if (sc->data[SC_SIEGFRIED]){
i = sc->data[SC_SIEGFRIED]->val2;
sd->subele[ELE_WATER] += i;
sd->subele[ELE_EARTH] += i;
@@ -2894,7 +2920,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) {
sd->subele[ELE_GHOST] += i;
sd->subele[ELE_UNDEAD] += i;
}
- if(sc->data[SC_PROVIDENCE]){
+ if (sc->data[SC_PROVIDENCE]){
sd->subele[ELE_HOLY] += sc->data[SC_PROVIDENCE]->val2;
#ifdef RENEWAL
sd->race_tolerance[RC_DEMON] += sc->data[SC_PROVIDENCE]->val2;
@@ -2902,50 +2928,77 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) {
sd->subrace[RC_DEMON] += sc->data[SC_PROVIDENCE]->val2;
#endif
}
- if(sc->data[SC_ARMORPROPERTY]) {
- //This status change should grant card-type elemental resist.
+ if (sc->data[SC_ARMORPROPERTY]) {
+ // This status change should grant card-type elemental resist.
sd->subele[ELE_WATER] += sc->data[SC_ARMORPROPERTY]->val1;
sd->subele[ELE_EARTH] += sc->data[SC_ARMORPROPERTY]->val2;
sd->subele[ELE_FIRE] += sc->data[SC_ARMORPROPERTY]->val3;
sd->subele[ELE_WIND] += sc->data[SC_ARMORPROPERTY]->val4;
}
- if(sc->data[SC_ARMOR_RESIST]) { // Undead Scroll
+ if (sc->data[SC_ARMOR_RESIST]) { // Undead Scroll
sd->subele[ELE_WATER] += sc->data[SC_ARMOR_RESIST]->val1;
sd->subele[ELE_EARTH] += sc->data[SC_ARMOR_RESIST]->val2;
sd->subele[ELE_FIRE] += sc->data[SC_ARMOR_RESIST]->val3;
sd->subele[ELE_WIND] += sc->data[SC_ARMOR_RESIST]->val4;
}
- if( sc->data[SC_FIRE_CLOAK_OPTION] ) {
+ if (sc->data[SC_FIRE_CLOAK_OPTION]) {
i = sc->data[SC_FIRE_CLOAK_OPTION]->val2;
sd->subele[ELE_FIRE] += i;
sd->subele[ELE_WATER] -= i;
}
- if( sc->data[SC_WATER_DROP_OPTION] ) {
+ if (sc->data[SC_WATER_DROP_OPTION]) {
i = sc->data[SC_WATER_DROP_OPTION]->val2;
sd->subele[ELE_WATER] += i;
sd->subele[ELE_WIND] -= i;
}
- if( sc->data[SC_WIND_CURTAIN_OPTION] ) {
+ if (sc->data[SC_WIND_CURTAIN_OPTION]) {
i = sc->data[SC_WIND_CURTAIN_OPTION]->val2;
sd->subele[ELE_WIND] += i;
sd->subele[ELE_EARTH] -= i;
}
- if( sc->data[SC_STONE_SHIELD_OPTION] ) {
+ if (sc->data[SC_STONE_SHIELD_OPTION]) {
i = sc->data[SC_STONE_SHIELD_OPTION]->val2;
sd->subele[ELE_EARTH] += i;
sd->subele[ELE_FIRE] -= i;
}
- if( sc->data[SC_MTF_MLEATKED] )
+ if (sc->data[SC_MTF_MLEATKED])
sd->subele[ELE_NEUTRAL] += 2;
- if( sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3 )
+ if (sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3)
sd->magic_addele[ELE_FIRE] += 25;
- if( sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 3 )
+ if (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 3)
sd->magic_addele[ELE_WATER] += 25;
- if( sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 3 )
+ if (sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 3)
sd->magic_addele[ELE_WIND] += 25;
- if( sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3 )
+ if (sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3)
sd->magic_addele[ELE_EARTH] += 25;
+
+ // Geffen Scrolls [Frost]
+ 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);
// ----- CLIENT-SIDE REFRESH -----
@@ -3257,22 +3310,22 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
return;
regen->flag = RGN_HP|RGN_SP;
- if(regen->sregen)
+ if (regen->sregen)
{
if (regen->sregen->hp)
- regen->flag|=RGN_SHP;
+ regen->flag |= RGN_SHP;
if (regen->sregen->sp)
- regen->flag|=RGN_SSP;
+ regen->flag |= RGN_SSP;
regen->sregen->rate.hp = regen->sregen->rate.sp = 1;
}
if (regen->ssregen)
{
if (regen->ssregen->hp)
- regen->flag|=RGN_SHP;
+ regen->flag |= RGN_SHP;
if (regen->ssregen->sp)
- regen->flag|=RGN_SSP;
+ regen->flag |= RGN_SSP;
regen->ssregen->rate.hp = regen->ssregen->rate.sp = 1;
}
regen->rate.hp = regen->rate.sp = 1;
@@ -3291,7 +3344,7 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
)
regen->flag = 0; //No regen
- if ( sc->data[SC_DANCING] || sc->data[SC_OBLIVIONCURSE] || sc->data[SC_MAXIMIZEPOWER] || sc->data[SC_REBOUND]
+ if (sc->data[SC_DANCING] || sc->data[SC_OBLIVIONCURSE] || sc->data[SC_MAXIMIZEPOWER] || sc->data[SC_REBOUND]
|| ( bl->type == BL_PC && (((TBL_PC*)bl)->class_&MAPID_UPPERMASK) == MAPID_MONK
&& (sc->data[SC_EXTREMITYFIST] || (sc->data[SC_EXPLOSIONSPIRITS] && (!sc->data[SC_SOULLINK] || sc->data[SC_SOULLINK]->val2 != SL_MONK)))
)
@@ -3316,20 +3369,20 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
} else
regen->flag&=~sce->val4; //Remove regen as specified by val4
}
- if(sc->data[SC_GENTLETOUCH_REVITALIZE]) {
- regen->hp += regen->hp * ( 30 * sc->data[SC_GENTLETOUCH_REVITALIZE]->val1 + 50 ) / 100;
+ if (sc->data[SC_GENTLETOUCH_REVITALIZE]) {
+ regen->hp += regen->hp * (30 * sc->data[SC_GENTLETOUCH_REVITALIZE]->val1 + 50) / 100;
}
if ((sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 1) //if insignia lvl 1
|| (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 1)
|| (sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 1)
|| (sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 1))
regen->rate.hp *= 2;
- if( sc->data[SC_VITALITYACTIVATION] )
+ if (sc->data[SC_VITALITYACTIVATION])
regen->flag &=~RGN_SP;
- if(sc->data[SC_EXTRACT_WHITE_POTION_Z])
- regen->rate.hp += regen->rate.hp * sc->data[SC_EXTRACT_WHITE_POTION_Z]->val1/100;
- if(sc->data[SC_VITATA_500])
- regen->rate.sp += regen->rate.sp * sc->data[SC_VITATA_500]->val1/100;
+ if (sc->data[SC_EXTRACT_WHITE_POTION_Z])
+ regen->rate.hp += regen->rate.hp * sc->data[SC_EXTRACT_WHITE_POTION_Z]->val1 / 100;
+ if (sc->data[SC_VITATA_500])
+ regen->rate.sp += regen->rate.sp * 20 / 100;
}
/// Recalculates parts of an object's battle status according to the specified flags.
/// @param flag bitfield of values from enum scb_flag
@@ -4467,78 +4520,80 @@ unsigned short status_calc_luk(struct block_list *bl, struct status_change *sc,
}
unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, int batk, bool viewable)
{
- if(!sc || !sc->count)
- return cap_value(batk,0,USHRT_MAX);
+ if (!sc || !sc->count)
+ return cap_value(batk, 0, USHRT_MAX);
- if( !viewable ){
+ if (!viewable) {
/* some statuses that are hidden in the status window */
if(sc->data[SC_PLUSATTACKPOWER])
batk += sc->data[SC_PLUSATTACKPOWER]->val1;
- return (unsigned short)cap_value(batk,0,USHRT_MAX);
+ return (unsigned short)cap_value(batk, 0, USHRT_MAX);
}
#ifndef RENEWAL
- if(sc->data[SC_PLUSATTACKPOWER])
+ if (sc->data[SC_PLUSATTACKPOWER])
batk += sc->data[SC_PLUSATTACKPOWER]->val1;
- if(sc->data[SC_GS_MADNESSCANCEL])
+ if (sc->data[SC_GS_MADNESSCANCEL])
batk += 100;
- if(sc->data[SC_GS_GATLINGFEVER])
+ if (sc->data[SC_GS_GATLINGFEVER])
batk += sc->data[SC_GS_GATLINGFEVER]->val3;
#endif
- if(sc->data[SC_BATKFOOD])
+ if (sc->data[SC_BATKFOOD])
batk += sc->data[SC_BATKFOOD]->val1;
- if(sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 2)
+ if (sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 2)
batk += 50;
- if(bl->type == BL_ELEM
+ if (bl->type == BL_ELEM
&& ((sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 1)
|| (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 1)
|| (sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 1)
|| (sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 1))
)
batk += batk / 5;
- if(sc->data[SC_FULL_SWING_K])
+ if (sc->data[SC_FULL_SWING_K])
batk += sc->data[SC_FULL_SWING_K]->val1;
- if(sc->data[SC_VOLCANIC_ASH] && (bl->type==BL_MOB)){
+ if (sc->data[SC_VOLCANIC_ASH] && (bl->type == BL_MOB)){
if(status_get_element(bl) == ELE_WATER) //water type
batk /= 2;
}
- if(sc->data[SC_PYROCLASTIC])
+ if (sc->data[SC_PYROCLASTIC])
batk += sc->data[SC_PYROCLASTIC]->val2;
if (sc->data[SC_ANGRIFFS_MODUS])
batk += sc->data[SC_ANGRIFFS_MODUS]->val2;
- if(sc->data[SC_INCATKRATE])
- batk += batk * sc->data[SC_INCATKRATE]->val1/100;
- if(sc->data[SC_PROVOKE])
- batk += batk * sc->data[SC_PROVOKE]->val3/100;
+ if (sc->data[SC_INCATKRATE])
+ batk += batk * sc->data[SC_INCATKRATE]->val1 / 100;
+ if (sc->data[SC_PROVOKE])
+ batk += batk * sc->data[SC_PROVOKE]->val3 / 100;
#ifndef RENEWAL
- if(sc->data[SC_LKCONCENTRATION])
- batk += batk * sc->data[SC_LKCONCENTRATION]->val2/100;
+ if (sc->data[SC_LKCONCENTRATION])
+ batk += batk * sc->data[SC_LKCONCENTRATION]->val2 / 100;
#else
if ( sc->data[SC_NOEQUIPWEAPON] && bl->type != BL_PC )
batk -= batk * sc->data[SC_NOEQUIPWEAPON]->val2 / 100;
#endif
- if(sc->data[SC_SKE])
+ if (sc->data[SC_SKE])
batk += batk * 3;
- if(sc->data[SC_HAMI_BLOODLUST])
- batk += batk * sc->data[SC_HAMI_BLOODLUST]->val2/100;
- if(sc->data[SC_JOINTBEAT] && sc->data[SC_JOINTBEAT]->val2&BREAK_WAIST)
- batk -= batk * 25/100;
- if(sc->data[SC_CURSE])
- batk -= batk * 25/100;
- if( sc->data[SC_ZANGETSU] )
+ if (sc->data[SC_HAMI_BLOODLUST])
+ batk += batk * sc->data[SC_HAMI_BLOODLUST]->val2 / 100;
+ if (sc->data[SC_JOINTBEAT] && sc->data[SC_JOINTBEAT]->val2&BREAK_WAIST)
+ batk -= batk * 25 / 100;
+ if (sc->data[SC_CURSE])
+ batk -= batk * 25 / 100;
+ if (sc->data[SC_ZANGETSU])
batk += sc->data[SC_ZANGETSU]->val2;
#if 0 //Curse shouldn't effect on this? <- Curse OR Bleeding??
- if(sc->data[SC_BLOODING])
- batk -= batk * 25/100;
+ if (sc->data[SC_BLOODING])
+ batk -= batk * 25 / 100;
#endif // 0
- if(sc->data[SC_HLIF_FLEET])
- batk += batk * sc->data[SC_HLIF_FLEET]->val3/100;
- if(sc->data[SC__ENERVATION])
+ if (sc->data[SC_HLIF_FLEET])
+ batk += batk * sc->data[SC_HLIF_FLEET]->val3 / 100;
+ if (sc->data[SC__ENERVATION])
batk -= batk * sc->data[SC__ENERVATION]->val2 / 100;
- if(sc->data[SC_SATURDAY_NIGHT_FEVER])
+ if (sc->data[SC_SATURDAY_NIGHT_FEVER])
batk += 100 * sc->data[SC_SATURDAY_NIGHT_FEVER]->val1;
+ if (sc->data[SC_BATTLESCROLL])
+ batk += batk * sc->data[SC_BATTLESCROLL]->val1 / 100;
- return (unsigned short)cap_value(batk,0,USHRT_MAX);
+ return (unsigned short)cap_value(batk, 0, USHRT_MAX);
}
unsigned short status_calc_watk(struct block_list *bl, struct status_change *sc, int watk, bool viewable)
@@ -4662,14 +4717,14 @@ unsigned short status_calc_ematk(struct block_list *bl, struct status_change *sc
}
unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc, int matk, bool viewable)
{
- if(!sc || !sc->count)
- return cap_value(matk,0,USHRT_MAX);
+ if (!sc || !sc->count)
+ return cap_value(matk, 0, USHRT_MAX);
- if( !viewable ){
+ if (!viewable) {
/* some statuses that are hidden in the status window */
if (sc->data[SC_MINDBREAKER])
- matk += matk * sc->data[SC_MINDBREAKER]->val2/100;
- return (unsigned short)cap_value(matk,0,USHRT_MAX);
+ matk += matk * sc->data[SC_MINDBREAKER]->val2 / 100;
+ return (unsigned short)cap_value(matk, 0, USHRT_MAX);
}
#ifndef RENEWAL
@@ -4684,7 +4739,7 @@ unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc,
matk += sc->data[SC_AQUAPLAY_OPTION]->val2;
if (sc->data[SC_CHILLY_AIR_OPTION])
matk += sc->data[SC_CHILLY_AIR_OPTION]->val2;
- if(sc->data[SC_COOLER_OPTION])
+ if (sc->data[SC_COOLER_OPTION])
matk += sc->data[SC_COOLER_OPTION]->val2;
if (sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3)
matk += 50;
@@ -4696,15 +4751,17 @@ unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc,
if( sc->data[SC_ZANGETSU] )
matk += sc->data[SC_ZANGETSU]->val3;
if (sc->data[SC_MAGICPOWER] && sc->data[SC_MAGICPOWER]->val4)
- matk += matk * sc->data[SC_MAGICPOWER]->val3/100;
+ matk += matk * sc->data[SC_MAGICPOWER]->val3 / 100;
if (sc->data[SC_INCMATKRATE])
- matk += matk * sc->data[SC_INCMATKRATE]->val1/100;
+ matk += matk * sc->data[SC_INCMATKRATE]->val1 / 100;
if (sc->data[SC_MOONLIT_SERENADE])
- matk += matk * sc->data[SC_MOONLIT_SERENADE]->val2/100;
+ 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);
+ return (unsigned short)cap_value(matk, 0, USHRT_MAX);
}
signed short status_calc_critical(struct block_list *bl, struct status_change *sc, int critical, bool viewable) {
@@ -4797,115 +4854,118 @@ signed short status_calc_hit(struct block_list *bl, struct status_change *sc, in
}
signed short status_calc_flee(struct block_list *bl, struct status_change *sc, int flee, bool viewable) {
- if( bl->type == BL_PC ) {
- if( map_flag_gvg2(bl->m) )
- flee -= flee * battle_config.gvg_flee_penalty/100;
- else if( map->list[bl->m].flag.battleground )
- flee -= flee * battle_config.bg_flee_penalty/100;
+ if (bl->type == BL_PC) {
+ if (map_flag_gvg2(bl->m))
+ flee -= flee * battle_config.gvg_flee_penalty / 100;
+ else if (map->list[bl->m].flag.battleground)
+ flee -= flee * battle_config.bg_flee_penalty / 100;
}
- if(!sc || !sc->count)
- return cap_value(flee,1,SHRT_MAX);
+ if (!sc || !sc->count)
+ return cap_value(flee, 1, SHRT_MAX);
- if( !viewable ){
+ if (!viewable){
/* some statuses that are hidden in the status window */
- return (short)cap_value(flee,1,SHRT_MAX);
+ return (short)cap_value(flee, 1, SHRT_MAX);
}
- if(sc->data[SC_INCFLEE])
+ if (sc->data[SC_INCFLEE])
flee += sc->data[SC_INCFLEE]->val1;
- if(sc->data[SC_MTF_HITFLEE])
+ if (sc->data[SC_MTF_HITFLEE])
flee += sc->data[SC_MTF_HITFLEE]->val2;
- if(sc->data[SC_FOOD_BASICAVOIDANCE])
+ if (sc->data[SC_FOOD_BASICAVOIDANCE])
flee += sc->data[SC_FOOD_BASICAVOIDANCE]->val1;
- if(sc->data[SC_WHISTLE])
+ if (sc->data[SC_WHISTLE])
flee += sc->data[SC_WHISTLE]->val2;
- if(sc->data[SC_WINDWALK])
+ if (sc->data[SC_WINDWALK])
flee += sc->data[SC_WINDWALK]->val2;
- if(sc->data[SC_VIOLENTGALE])
+ if (sc->data[SC_VIOLENTGALE])
flee += sc->data[SC_VIOLENTGALE]->val2;
- if(sc->data[SC_MOON_COMFORT]) //SG skill [Komurka]
+ if (sc->data[SC_MOON_COMFORT]) //SG skill [Komurka]
flee += sc->data[SC_MOON_COMFORT]->val2;
- if(sc->data[SC_RG_CCONFINE_M])
+ if (sc->data[SC_RG_CCONFINE_M])
flee += 10;
if (sc->data[SC_ANGRIFFS_MODUS])
flee -= sc->data[SC_ANGRIFFS_MODUS]->val3;
- if(sc->data[SC_GS_ADJUSTMENT])
+ if (sc->data[SC_GS_ADJUSTMENT])
flee += 30;
- if(sc->data[SC_HLIF_SPEED])
+ if (sc->data[SC_HLIF_SPEED])
flee += 10 + sc->data[SC_HLIF_SPEED]->val1 * 10;
- if(sc->data[SC_GS_GATLINGFEVER])
+ if (sc->data[SC_GS_GATLINGFEVER])
flee -= sc->data[SC_GS_GATLINGFEVER]->val4;
- if(sc->data[SC_PARTYFLEE])
+ if (sc->data[SC_PARTYFLEE])
flee += sc->data[SC_PARTYFLEE]->val1 * 10;
- if(sc->data[SC_MER_FLEE])
+ if (sc->data[SC_MER_FLEE])
flee += sc->data[SC_MER_FLEE]->val2;
- if( sc->data[SC_HALLUCINATIONWALK] )
+ if (sc->data[SC_HALLUCINATIONWALK])
flee += sc->data[SC_HALLUCINATIONWALK]->val2;
- if( sc->data[SC_WATER_BARRIER] )
+ if (sc->data[SC_WATER_BARRIER])
flee -= sc->data[SC_WATER_BARRIER]->val3;
#ifdef RENEWAL
- if( sc->data[SC_SPEARQUICKEN] )
+ if (sc->data[SC_SPEARQUICKEN])
flee += 2 * sc->data[SC_SPEARQUICKEN]->val1;
#endif
- if(sc->data[SC_INCFLEERATE])
- flee += flee * sc->data[SC_INCFLEERATE]->val1/100;
- if(sc->data[SC_SPIDERWEB] && sc->data[SC_SPIDERWEB]->val1)
- flee -= flee * 50/100;
+ if (sc->data[SC_INCFLEERATE])
+ flee += flee * sc->data[SC_INCFLEERATE]->val1 / 100;
+ if (sc->data[SC_SPIDERWEB] && sc->data[SC_SPIDERWEB]->val1)
+ flee -= flee * 50 / 100;
if (sc->data[SC_BERSERK])
- flee -= flee * 50/100;
- if(sc->data[SC_BLIND])
- flee -= flee * 25/100;
- if(sc->data[SC_FEAR])
+ flee -= flee * 50 / 100;
+ if (sc->data[SC_BLIND])
+ flee -= flee * 25 / 100;
+ if (sc->data[SC_FEAR])
flee -= flee * 20 / 100;
- if(sc->data[SC_PARALYSE])
+ if (sc->data[SC_PARALYSE])
flee -= flee / 10; // 10% Flee reduction
- if(sc->data[SC_INFRAREDSCAN])
+ if (sc->data[SC_INFRAREDSCAN])
flee -= flee * 30 / 100;
- if( sc->data[SC__LAZINESS] )
+ if (sc->data[SC__LAZINESS])
flee -= flee * sc->data[SC__LAZINESS]->val3 / 100;
- if( sc->data[SC_GLOOMYDAY] )
- flee -= flee * ( 20 + 5 * sc->data[SC_GLOOMYDAY]->val1 ) / 100;
- if( sc->data[SC_SATURDAY_NIGHT_FEVER] )
+ if (sc->data[SC_GLOOMYDAY])
+ flee -= flee * ( 20 + 5 * sc->data[SC_GLOOMYDAY]->val1) / 100;
+ if (sc->data[SC_SATURDAY_NIGHT_FEVER])
flee -= flee * (40 + 10 * sc->data[SC_SATURDAY_NIGHT_FEVER]->val1) / 100;
- if ( sc->data[SC_FIRE_EXPANSION_SMOKE_POWDER] )
+ if (sc->data[SC_FIRE_EXPANSION_SMOKE_POWDER])
flee += flee * 20 / 100;
- if ( sc->data[SC_FIRE_EXPANSION_TEAR_GAS] )
+ if (sc->data[SC_FIRE_EXPANSION_TEAR_GAS])
flee -= flee * 50 / 100;
- if( sc->data[SC_WIND_STEP_OPTION] )
+ if (sc->data[SC_WIND_STEP_OPTION])
flee += flee * sc->data[SC_WIND_STEP_OPTION]->val2 / 100;
- if( sc->data[SC_ZEPHYR] )
+ if (sc->data[SC_ZEPHYR])
flee += sc->data[SC_ZEPHYR]->val2;
- if(sc->data[SC_VOLCANIC_ASH] && (bl->type==BL_MOB)){ //mob
- if(status_get_element(bl) == ELE_WATER) //water type
+ if (sc->data[SC_VOLCANIC_ASH] && (bl->type == BL_MOB)){ //mob
+ 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
+ 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 += 10;
- return (short)cap_value(flee,1,SHRT_MAX);
+ return (short)cap_value(flee, 1, SHRT_MAX);
}
signed short status_calc_flee2(struct block_list *bl, struct status_change *sc, int flee2, bool viewable)
{
- if(!sc || !sc->count)
- return cap_value(flee2,10,SHRT_MAX);
+ if (!sc || !sc->count)
+ return cap_value(flee2, 10, SHRT_MAX);
- if( !viewable ){
+ if (!viewable) {
/* some statuses that are hidden in the status window */
- return (short)cap_value(flee2,10,SHRT_MAX);
+ return (short)cap_value(flee2, 10, SHRT_MAX);
}
- if(sc->data[SC_PLUSAVOIDVALUE])
+ if (sc->data[SC_PLUSAVOIDVALUE])
flee2 += sc->data[SC_PLUSAVOIDVALUE]->val2;
- if(sc->data[SC_WHISTLE])
- flee2 += sc->data[SC_WHISTLE]->val3*10;
- if(sc->data[SC__UNLUCKY])
+ if (sc->data[SC_WHISTLE])
+ 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 += 100;
- return (short)cap_value(flee2,10,SHRT_MAX);
+ return (short)cap_value(flee2, 10, SHRT_MAX);
}
defType status_calc_def(struct block_list *bl, struct status_change *sc, int def, bool viewable)
{
@@ -4920,7 +4980,7 @@ defType status_calc_def(struct block_list *bl, struct status_change *sc, int def
if (sc->data[SC_OVERED_BOOST] && bl->type == BL_PC)
def -= def * 50 / 100;
if (sc->data[SC_NEUTRALBARRIER])
- def += def * (10 + 5*sc->data[SC_NEUTRALBARRIER]->val1) / 100;
+ def += def * (10 + 5 * sc->data[SC_NEUTRALBARRIER]->val1) / 100;
if (sc->data[SC_FORCEOFVANGUARD])
def += def * 2 * sc->data[SC_FORCEOFVANGUARD]->val1 / 100;
if (sc->data[SC_DEFSET])
@@ -4962,22 +5022,22 @@ defType status_calc_def(struct block_list *bl, struct status_change *sc, int def
if (sc->data[SC_FREEZE])
def >>=1;
if (sc->data[SC_INCDEFRATE])
- def += def * sc->data[SC_INCDEFRATE]->val1/100;
+ def += def * sc->data[SC_INCDEFRATE]->val1 / 100;
#endif
if (sc->data[SC_ANGRIFFS_MODUS])
def -= 30 + 20 * sc->data[SC_ANGRIFFS_MODUS]->val1;
if (sc->data[SC_CRUCIS])
- def -= def * sc->data[SC_CRUCIS]->val2/100;
+ def -= def * sc->data[SC_CRUCIS]->val2 / 100;
if (sc->data[SC_LKCONCENTRATION])
- def -= def * sc->data[SC_LKCONCENTRATION]->val4/100;
+ def -= def * sc->data[SC_LKCONCENTRATION]->val4 / 100;
if (sc->data[SC_SKE])
def >>=1;
if (sc->data[SC_PROVOKE] && bl->type != BL_PC) // Provoke doesn't alter player defense->
- def -= def * sc->data[SC_PROVOKE]->val4/100;
+ def -= def * sc->data[SC_PROVOKE]->val4 / 100;
if (sc->data[SC_NOEQUIPSHIELD])
- def -= def * sc->data[SC_NOEQUIPSHIELD]->val2/100;
+ def -= def * sc->data[SC_NOEQUIPSHIELD]->val2 / 100;
if (sc->data[SC_FLING])
- def -= def * (sc->data[SC_FLING]->val2)/100;
+ def -= def * (sc->data[SC_FLING]->val2) / 100;
if (sc->data[SC_ANALYZE])
def -= def * ( 14 * sc->data[SC_ANALYZE]->val1 ) / 100;
if (sc->data[SC_SATURDAY_NIGHT_FEVER])
@@ -4997,23 +5057,25 @@ defType status_calc_def(struct block_list *bl, struct status_change *sc, int def
def += sc->data[SC_SHIELDSPELL_REF]->val2;
if (sc->data[SC_PRESTIGE])
def += sc->data[SC_PRESTIGE]->val1;
- if (sc->data[SC_VOLCANIC_ASH] && (bl->type==BL_MOB)) {
- if (status_get_race(bl)==RC_PLANT)
+ if (sc->data[SC_VOLCANIC_ASH] && (bl->type == BL_MOB)) {
+ if (status_get_race(bl) == RC_PLANT)
def /= 2;
}
if (sc->data[SC_UNLIMIT])
return 1;
+ if (sc->data[SC_ARMORSCROLL])
+ def += 5;
return (defType)cap_value(def,DEFTYPE_MIN,DEFTYPE_MAX);
}
signed short status_calc_def2(struct block_list *bl, struct status_change *sc, int def2, bool viewable)
{
- if(!sc || !sc->count)
+ if (!sc || !sc->count)
#ifdef RENEWAL
- return (short)cap_value(def2,SHRT_MIN,SHRT_MAX);
+ return (short)cap_value(def2, SHRT_MIN, SHRT_MAX);
#else
- return (short)cap_value(def2,1,SHRT_MAX);
+ return (short)cap_value(def2, 1, SHRT_MAX);
#endif
if (!viewable) {
@@ -5085,54 +5147,56 @@ signed short status_calc_def2(struct block_list *bl, struct status_change *sc, i
defType status_calc_mdef(struct block_list *bl, struct status_change *sc, int mdef, bool viewable) {
- if(!sc || !sc->count)
- return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX);
+ if (!sc || !sc->count)
+ return (defType)cap_value(mdef, DEFTYPE_MIN, DEFTYPE_MAX);
- if( !viewable ){
+ if (!viewable) {
/* some statuses that are hidden in the status window */
if(sc->data[SC_NEUTRALBARRIER] )
mdef += mdef * (5 * sc->data[SC_NEUTRALBARRIER]->val1 + 10) / 100;
if(sc->data[SC_MDEFSET])
return sc->data[SC_MDEFSET]->val1;
- return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX);
+ return (defType)cap_value(mdef, DEFTYPE_MIN, DEFTYPE_MAX);
}
if (sc->data[SC_BERSERK])
return 0;
- if(sc->data[SC_BARRIER])
+ if (sc->data[SC_BARRIER])
return 100;
#ifndef RENEWAL // no longer provides 90 MDEF in renewal mode
- if(sc->data[SC_STEELBODY])
+ if (sc->data[SC_STEELBODY])
return 90;
#endif
- if(sc->data[SC_STONESKIN])
+ if (sc->data[SC_STONESKIN])
mdef += sc->data[SC_STONESKIN]->val3;
- if(sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3)
+ if (sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3)
mdef += 50;
- if(sc->data[SC_ENDURE])// It has been confirmed that eddga card grants 1 MDEF, not 0, not 10, but 1.
+ if (sc->data[SC_ENDURE])// It has been confirmed that eddga card grants 1 MDEF, not 0, not 10, but 1.
mdef += (sc->data[SC_ENDURE]->val4 == 0) ? sc->data[SC_ENDURE]->val1 : 1;
- if(sc->data[SC_STONEHARDSKIN])// Final MDEF increase divided by 10 since were using classic (pre-renewal) mechanics. [Rytech]
+ if (sc->data[SC_STONEHARDSKIN])// Final MDEF increase divided by 10 since were using classic (pre-renewal) mechanics. [Rytech]
mdef += sc->data[SC_STONEHARDSKIN]->val1;
- if(sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
- mdef += 25*mdef/100;
- if(sc->data[SC_FREEZE])
- mdef += 25*mdef/100;
- if(sc->data[SC_ANALYZE])
+ if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
+ mdef += 25 * mdef / 100;
+ if (sc->data[SC_FREEZE])
+ mdef += 25 * mdef / 100;
+ if (sc->data[SC_ANALYZE])
mdef -= mdef * ( 14 * sc->data[SC_ANALYZE]->val1 ) / 100;
- if(sc->data[SC_SYMPHONY_LOVE])
+ if (sc->data[SC_SYMPHONY_LOVE])
mdef += mdef * sc->data[SC_SYMPHONY_LOVE]->val2 / 100;
- if(sc->data[SC_GENTLETOUCH_CHANGE] && sc->data[SC_GENTLETOUCH_CHANGE]->val4)
+ if (sc->data[SC_GENTLETOUCH_CHANGE] && sc->data[SC_GENTLETOUCH_CHANGE]->val4)
mdef -= mdef * sc->data[SC_GENTLETOUCH_CHANGE]->val4 / 100;
if (sc->data[SC_ODINS_POWER])
mdef -= 20;
if(sc->data[SC_BURNING])
- mdef -= mdef *25 / 100;
+ mdef -= mdef * 25 / 100;
if (sc->data[SC_UNLIMIT])
return 1;
+ if (sc->data[SC_FREYJASCROLL])
+ mdef += 5;
- return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX);
+ return (defType)cap_value(mdef, DEFTYPE_MIN, DEFTYPE_MAX);
}
signed short status_calc_mdef2(struct block_list *bl, struct status_change *sc, int mdef2, bool viewable)
@@ -5370,27 +5434,27 @@ short status_calc_aspd(struct block_list *bl, struct status_change *sc, short fl
if (flag&1) {
int i;
// ASPD fixed values
- if (sc->data[i=SC_ATTHASTE_INFINITY]
- || sc->data[i=SC_ATTHASTE_POTION3]
- || sc->data[i=SC_ATTHASTE_POTION2]
- || sc->data[i=SC_ATTHASTE_POTION1]
+ if (sc->data[i = SC_ATTHASTE_INFINITY]
+ || sc->data[i = SC_ATTHASTE_POTION3]
+ || sc->data[i = SC_ATTHASTE_POTION2]
+ || sc->data[i = SC_ATTHASTE_POTION1]
)
pots += sc->data[i]->val1;
if (!sc->data[SC_QUAGMIRE]) {
- if(sc->data[SC_TWOHANDQUICKEN] && bonus < 7)
+ if (sc->data[SC_TWOHANDQUICKEN] && bonus < 7)
bonus = 7;
- if(sc->data[SC_ONEHANDQUICKEN] && bonus < 7)
+ if (sc->data[SC_ONEHANDQUICKEN] && bonus < 7)
bonus = 7;
- if(sc->data[SC_MER_QUICKEN] && bonus < 7) // needs more info
+ if (sc->data[SC_MER_QUICKEN] && bonus < 7) // needs more info
bonus = 7;
- if(sc->data[SC_ADRENALINE2] && bonus < 6)
+ if (sc->data[SC_ADRENALINE2] && bonus < 6)
bonus = 6;
- if(sc->data[SC_ADRENALINE] && bonus < 7)
+ if (sc->data[SC_ADRENALINE] && bonus < 7)
bonus = 7;
- if(sc->data[SC_SPEARQUICKEN] && bonus < 7)
+ if (sc->data[SC_SPEARQUICKEN] && bonus < 7)
bonus = 7;
- if(sc->data[SC_HLIF_FLEET] && bonus < 5)
+ if (sc->data[SC_HLIF_FLEET] && bonus < 5)
bonus = 5;
}
@@ -5460,7 +5524,6 @@ short status_calc_aspd(struct block_list *bl, struct status_change *sc, short fl
bonus -= sc->data[SC_MELON_BOMB]->val1;
if (sc->data[SC_PAIN_KILLER])
bonus -= sc->data[SC_PAIN_KILLER]->val2;
-
if (sc->data[SC_SWING]) // TODO: SC_SWING shouldn't stack with skill1 modifiers
bonus += sc->data[SC_SWING]->val3;
if (sc->data[SC_DANCE_WITH_WUG])
@@ -5477,6 +5540,8 @@ short status_calc_aspd(struct block_list *bl, struct status_change *sc, short fl
bonus += sc->data[SC_GS_GATLINGFEVER]->val1;
if (sc->data[SC_STAR_COMFORT])
bonus += 3 * sc->data[SC_STAR_COMFORT]->val1;
+ if (sc->data[SC_BATTLESCROLL])
+ bonus += sc->data[SC_BATTLESCROLL]->val1;
}
return (bonus + pots);
@@ -5489,16 +5554,15 @@ short status_calc_fix_aspd(struct block_list *bl, struct status_change *sc, int
if (!sc || !sc->count)
return cap_value(aspd, 0, 2000);
- if ((sc->data[SC_GUST_OPTION] || sc->data[SC_BLAST_OPTION]
- || sc->data[SC_WILD_STORM_OPTION]))
+ if ((sc->data[SC_GUST_OPTION] || sc->data[SC_BLAST_OPTION] || sc->data[SC_WILD_STORM_OPTION]))
aspd -= 50; // +5 ASPD
if (sc->data[SC_FIGHTINGSPIRIT] && sc->data[SC_FIGHTINGSPIRIT]->val2)
- aspd -= (bl->type==BL_PC?pc->checkskill((TBL_PC *)bl, RK_RUNEMASTERY):10) / 10 * 40;
+ aspd -= (bl->type == BL_PC ? pc->checkskill((TBL_PC *)bl, RK_RUNEMASTERY) : 10) / 10 * 40;
if (sc->data[SC_MTF_ASPD])
aspd -= 10;
-
if (sc->data[SC_OVERED_BOOST]) // should be final and unmodifiable by any means
aspd = (200 - sc->data[SC_OVERED_BOOST]->val3) * 10;
+
return cap_value(aspd, 0, 2000); // will be recap for proper bl anyway
}
@@ -5508,47 +5572,47 @@ short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int
{
int i;
- if(!sc || !sc->count)
- return cap_value(aspd_rate,0,SHRT_MAX);
+ if (!sc || !sc->count)
+ return cap_value(aspd_rate, 0, SHRT_MAX);
- if( !sc->data[SC_QUAGMIRE] ){
+ if (!sc->data[SC_QUAGMIRE]) {
int max = 0;
- if(sc->data[SC_STAR_COMFORT])
+ if (sc->data[SC_STAR_COMFORT])
max = sc->data[SC_STAR_COMFORT]->val2;
- if(sc->data[SC_TWOHANDQUICKEN] &&
+ if (sc->data[SC_TWOHANDQUICKEN] &&
max < sc->data[SC_TWOHANDQUICKEN]->val2)
max = sc->data[SC_TWOHANDQUICKEN]->val2;
- if(sc->data[SC_ONEHANDQUICKEN] &&
+ if (sc->data[SC_ONEHANDQUICKEN] &&
max < sc->data[SC_ONEHANDQUICKEN]->val2)
max = sc->data[SC_ONEHANDQUICKEN]->val2;
- if(sc->data[SC_MER_QUICKEN] &&
+ if (sc->data[SC_MER_QUICKEN] &&
max < sc->data[SC_MER_QUICKEN]->val2)
max = sc->data[SC_MER_QUICKEN]->val2;
- if(sc->data[SC_ADRENALINE2] &&
+ if (sc->data[SC_ADRENALINE2] &&
max < sc->data[SC_ADRENALINE2]->val3)
max = sc->data[SC_ADRENALINE2]->val3;
- if(sc->data[SC_ADRENALINE] &&
+ if (sc->data[SC_ADRENALINE] &&
max < sc->data[SC_ADRENALINE]->val3)
max = sc->data[SC_ADRENALINE]->val3;
- if(sc->data[SC_SPEARQUICKEN] &&
+ if (sc->data[SC_SPEARQUICKEN] &&
max < sc->data[SC_SPEARQUICKEN]->val2)
max = sc->data[SC_SPEARQUICKEN]->val2;
- if(sc->data[SC_GS_GATLINGFEVER] &&
+ if (sc->data[SC_GS_GATLINGFEVER] &&
max < sc->data[SC_GS_GATLINGFEVER]->val2)
max = sc->data[SC_GS_GATLINGFEVER]->val2;
- if(sc->data[SC_HLIF_FLEET] &&
+ if (sc->data[SC_HLIF_FLEET] &&
max < sc->data[SC_HLIF_FLEET]->val2)
max = sc->data[SC_HLIF_FLEET]->val2;
- if(sc->data[SC_ASSNCROS] &&
+ if (sc->data[SC_ASSNCROS] &&
max < sc->data[SC_ASSNCROS]->val2)
{
if (bl->type!=BL_PC)
@@ -5570,152 +5634,154 @@ short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int
aspd_rate -= max;
- if(sc->data[SC_BERSERK])
+ if (sc->data[SC_BERSERK])
aspd_rate -= 300;
- else if(sc->data[SC_GS_MADNESSCANCEL])
+ else if (sc->data[SC_GS_MADNESSCANCEL])
aspd_rate -= 200;
}
- if( sc->data[i=SC_ATTHASTE_INFINITY] ||
- sc->data[i=SC_ATTHASTE_POTION3] ||
- sc->data[i=SC_ATTHASTE_POTION2] ||
- sc->data[i=SC_ATTHASTE_POTION1] )
+ if (sc->data[i = SC_ATTHASTE_INFINITY] ||
+ sc->data[i = SC_ATTHASTE_POTION3] ||
+ sc->data[i = SC_ATTHASTE_POTION2] ||
+ sc->data[i = SC_ATTHASTE_POTION1])
aspd_rate -= sc->data[i]->val2;
- if(sc->data[SC_DONTFORGETME])
+ if (sc->data[SC_DONTFORGETME])
aspd_rate += 10 * sc->data[SC_DONTFORGETME]->val2;
- if(sc->data[SC_LONGING])
+ if (sc->data[SC_LONGING])
aspd_rate += sc->data[SC_LONGING]->val2;
- if(sc->data[SC_STEELBODY])
+ if (sc->data[SC_STEELBODY])
aspd_rate += 250;
- if(sc->data[SC_SKA])
+ if (sc->data[SC_SKA])
aspd_rate += 250;
- if(sc->data[SC_DEFENDER])
+ if (sc->data[SC_DEFENDER])
aspd_rate += sc->data[SC_DEFENDER]->val4;
- if(sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_ENEMY)
+ if (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_ENEMY)
aspd_rate += 250;
- if(sc->data[SC_GRAVITATION] && sc->data[SC_GRAVITATION]->val3 != BCT_SELF)
+ if (sc->data[SC_GRAVITATION] && sc->data[SC_GRAVITATION]->val3 != BCT_SELF)
aspd_rate += sc->data[SC_GRAVITATION]->val2;
- if(sc->data[SC_JOINTBEAT]) {
- if( sc->data[SC_JOINTBEAT]->val2&BREAK_WRIST )
+ if (sc->data[SC_JOINTBEAT]) {
+ if (sc->data[SC_JOINTBEAT]->val2&BREAK_WRIST)
aspd_rate += 250;
- if( sc->data[SC_JOINTBEAT]->val2&BREAK_KNEE )
+ if (sc->data[SC_JOINTBEAT]->val2&BREAK_KNEE)
aspd_rate += 100;
}
- if( sc->data[SC_FROSTMISTY] )
+ if (sc->data[SC_FROSTMISTY])
aspd_rate += 150;
- if( sc->data[SC_HALLUCINATIONWALK_POSTDELAY] )
+ if (sc->data[SC_HALLUCINATIONWALK_POSTDELAY])
aspd_rate += 500;
- if( sc->data[SC_FIGHTINGSPIRIT] && sc->data[SC_FIGHTINGSPIRIT]->val2 )
+ if (sc->data[SC_FIGHTINGSPIRIT] && sc->data[SC_FIGHTINGSPIRIT]->val2)
aspd_rate -= sc->data[SC_FIGHTINGSPIRIT]->val2;
- if( sc->data[SC_PARALYSE] )
+ if (sc->data[SC_PARALYSE])
aspd_rate += 100;
- if( sc->data[SC__BODYPAINT] )
+ if (sc->data[SC__BODYPAINT])
aspd_rate += 10 * 5 * sc->data[SC__BODYPAINT]->val1;
- if( sc->data[SC__INVISIBILITY] )
+ if (sc->data[SC__INVISIBILITY])
aspd_rate += sc->data[SC__INVISIBILITY]->val2 * 10 ;
- if( sc->data[SC__GROOMY] )
+ if (sc->data[SC__GROOMY])
aspd_rate += sc->data[SC__GROOMY]->val2 * 10;
- if( sc->data[SC_SWING] )
+ if (sc->data[SC_SWING])
aspd_rate -= sc->data[SC_SWING]->val3 * 10;
- if( sc->data[SC_DANCE_WITH_WUG] )
+ if (sc->data[SC_DANCE_WITH_WUG])
aspd_rate -= sc->data[SC_DANCE_WITH_WUG]->val3 * 10;
- if( sc->data[SC_GLOOMYDAY] )
+ if (sc->data[SC_GLOOMYDAY])
aspd_rate += ( 15 + 5 * sc->data[SC_GLOOMYDAY]->val1 );
- if( sc->data[SC_EARTHDRIVE] )
+ if (sc->data[SC_EARTHDRIVE])
aspd_rate += 250;
- if( sc->data[SC_GENTLETOUCH_CHANGE] )
+ if (sc->data[SC_GENTLETOUCH_CHANGE])
aspd_rate -= sc->data[SC_GENTLETOUCH_CHANGE]->val3 * 10;
- if( sc->data[SC_MELON_BOMB] )
+ if (sc->data[SC_MELON_BOMB])
aspd_rate += sc->data[SC_MELON_BOMB]->val1 * 10;
- if( sc->data[SC_BOOST500] )
- aspd_rate -= sc->data[SC_BOOST500]->val1 *10;
- if( sc->data[SC_EXTRACT_SALAMINE_JUICE] )
+ if (sc->data[SC_BOOST500])
+ aspd_rate -= sc->data[SC_BOOST500]->val1 * 10;
+ if (sc->data[SC_EXTRACT_SALAMINE_JUICE])
aspd_rate -= sc->data[SC_EXTRACT_SALAMINE_JUICE]->val1 * 10;
- if( sc->data[SC_INCASPDRATE] )
+ if (sc->data[SC_INCASPDRATE])
aspd_rate -= sc->data[SC_INCASPDRATE]->val1 * 10;
- if( sc->data[SC_PAIN_KILLER])
+ if (sc->data[SC_PAIN_KILLER])
aspd_rate += sc->data[SC_PAIN_KILLER]->val2 * 10;
- if( sc->data[SC_GOLDENE_FERSE])
+ if (sc->data[SC_GOLDENE_FERSE])
aspd_rate -= sc->data[SC_GOLDENE_FERSE]->val3 * 10;
+ if (sc->data[SC_BATTLESCROLL])
+ aspd_rate += sc->data[SC_BATTLESCROLL]->val1 * 10;
- return (short)cap_value(aspd_rate,0,SHRT_MAX);
+ return (short)cap_value(aspd_rate, 0, SHRT_MAX);
}
unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion) {
// It has been confirmed on official servers that MvP mobs have no dmotion even without endure
- if( bl->type == BL_MOB && (((TBL_MOB*)bl)->status.mode&MD_BOSS) )
+ if (bl->type == BL_MOB && (((TBL_MOB*)bl)->status.mode&MD_BOSS))
return 0;
- if( !sc || !sc->count || map_flag_gvg2(bl->m) || map->list[bl->m].flag.battleground )
- return cap_value(dmotion,0,USHRT_MAX);
+ if (!sc || !sc->count || map_flag_gvg2(bl->m) || map->list[bl->m].flag.battleground)
+ return cap_value(dmotion, 0, USHRT_MAX);
- if( sc->data[SC_ENDURE] )
+ if (sc->data[SC_ENDURE])
return 0;
- if( sc->data[SC_RUN] || sc->data[SC_WUGDASH] )
+ if (sc->data[SC_RUN] || sc->data[SC_WUGDASH])
return 0;
- return (unsigned short)cap_value(dmotion,0,USHRT_MAX);
+ return (unsigned short)cap_value(dmotion, 0, USHRT_MAX);
}
unsigned int status_calc_maxhp(struct block_list *bl, struct status_change *sc, uint64 maxhp)
{
- if(!sc || !sc->count)
- return (unsigned int)cap_value(maxhp,1,UINT_MAX);
+ if (!sc || !sc->count)
+ return (unsigned int)cap_value(maxhp, 1, UINT_MAX);
- if(sc->data[SC_INCMHPRATE])
- maxhp += maxhp * sc->data[SC_INCMHPRATE]->val1/100;
- if(sc->data[SC_INCMHP])
+ if (sc->data[SC_INCMHPRATE])
+ maxhp += maxhp * sc->data[SC_INCMHPRATE]->val1 / 100;
+ if (sc->data[SC_INCMHP])
maxhp += (sc->data[SC_INCMHP]->val1);
- if(sc->data[SC_MTF_MHP])
+ if (sc->data[SC_MTF_MHP])
maxhp += (sc->data[SC_MTF_MHP]->val1);
- if(sc->data[SC_APPLEIDUN])
- maxhp += maxhp * sc->data[SC_APPLEIDUN]->val2/100;
- if(sc->data[SC_DELUGE])
- maxhp += maxhp * sc->data[SC_DELUGE]->val2/100;
- if(sc->data[SC_BERSERK])
+ if (sc->data[SC_APPLEIDUN])
+ maxhp += maxhp * sc->data[SC_APPLEIDUN]->val2 / 100;
+ if (sc->data[SC_DELUGE])
+ maxhp += maxhp * sc->data[SC_DELUGE]->val2 / 100;
+ if (sc->data[SC_BERSERK])
maxhp += maxhp * 2;
- if(sc->data[SC_MARIONETTE_MASTER])
+ if (sc->data[SC_MARIONETTE_MASTER])
maxhp -= 1000;
- if(sc->data[SC_SOLID_SKIN_OPTION])
+ if (sc->data[SC_SOLID_SKIN_OPTION])
maxhp += 2000;// Fix amount.
- if(sc->data[SC_POWER_OF_GAIA])
+ if (sc->data[SC_POWER_OF_GAIA])
maxhp += 3000;
- if(sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 2)
+ 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_MER_HP])
+ maxhp += maxhp * sc->data[SC_MER_HP]->val2 / 100;
- if(sc->data[SC_EPICLESIS])
+ if (sc->data[SC_EPICLESIS])
maxhp += maxhp * 5 * sc->data[SC_EPICLESIS]->val1 / 100;
- if(sc->data[SC_VENOMBLEED])
+ if (sc->data[SC_VENOMBLEED])
maxhp -= maxhp * 15 / 100;
- if(sc->data[SC__WEAKNESS])
+ if (sc->data[SC__WEAKNESS])
maxhp -= maxhp * sc->data[SC__WEAKNESS]->val2 / 100;
- if(sc->data[SC_LERADS_DEW])
+ if (sc->data[SC_LERADS_DEW])
maxhp += sc->data[SC_LERADS_DEW]->val3;
- if(sc->data[SC_BEYOND_OF_WARCRY])
+ if (sc->data[SC_BEYOND_OF_WARCRY])
maxhp -= maxhp * sc->data[SC_BEYOND_OF_WARCRY]->val4 / 100;
- if(sc->data[SC_FORCEOFVANGUARD])
+ if (sc->data[SC_FORCEOFVANGUARD])
maxhp += maxhp * 3 * sc->data[SC_FORCEOFVANGUARD]->val1 / 100;
- if(sc->data[SC_INSPIRATION])
+ if (sc->data[SC_INSPIRATION])
maxhp += maxhp * 5 * sc->data[SC_INSPIRATION]->val1 / 100 + 600 * sc->data[SC_INSPIRATION]->val1;
- if(sc->data[SC_RAISINGDRAGON])
+ if (sc->data[SC_RAISINGDRAGON])
maxhp += maxhp * (2 + sc->data[SC_RAISINGDRAGON]->val1) / 100;
- if(sc->data[SC_GENTLETOUCH_CHANGE]) // Max HP decrease: [Skill Level x 4] %
+ if (sc->data[SC_GENTLETOUCH_CHANGE]) // Max HP decrease: [Skill Level x 4] %
maxhp -= maxhp * (4 * sc->data[SC_GENTLETOUCH_CHANGE]->val1) / 100;
- if(sc->data[SC_GENTLETOUCH_REVITALIZE])// Max HP increase: [Skill Level x 2] %
+ if (sc->data[SC_GENTLETOUCH_REVITALIZE])// Max HP increase: [Skill Level x 2] %
maxhp += maxhp * (2 * sc->data[SC_GENTLETOUCH_REVITALIZE]->val1) / 100;
- if(sc->data[SC_MUSTLE_M])
+ if (sc->data[SC_MUSTLE_M])
maxhp += maxhp * sc->data[SC_MUSTLE_M]->val1/100;
- if(sc->data[SC_MYSTERIOUS_POWDER])
+ if (sc->data[SC_MYSTERIOUS_POWDER])
maxhp -= sc->data[SC_MYSTERIOUS_POWDER]->val1 / 100;
- if(sc->data[SC_PETROLOGY_OPTION])
+ if (sc->data[SC_PETROLOGY_OPTION])
maxhp += maxhp * sc->data[SC_PETROLOGY_OPTION]->val2 / 100;
- if(sc->data[SC_CURSED_SOIL_OPTION])
+ if (sc->data[SC_CURSED_SOIL_OPTION])
maxhp += maxhp * sc->data[SC_CURSED_SOIL_OPTION]->val2 / 100;
- if(sc->data[SC_UPHEAVAL_OPTION])
+ if (sc->data[SC_UPHEAVAL_OPTION])
maxhp += maxhp * sc->data[SC_UPHEAVAL_OPTION]->val3 / 100;
if (sc->data[SC_ANGRIFFS_MODUS])
maxhp += maxhp * 5 * sc->data[SC_ANGRIFFS_MODUS]->val1 /100;
@@ -5723,51 +5789,59 @@ 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);
+ return (unsigned int)cap_value(maxhp, 1, UINT_MAX);
}
unsigned int status_calc_maxsp(struct block_list *bl, struct status_change *sc, unsigned int maxsp)
{
- if(!sc || !sc->count)
- return cap_value(maxsp,1,UINT_MAX);
+ if (!sc || !sc->count)
+ return cap_value(maxsp, 1, UINT_MAX);
- if(sc->data[SC_INCMSPRATE])
- maxsp += maxsp * sc->data[SC_INCMSPRATE]->val1/100;
- if(sc->data[SC_INCMSP])
+ if (sc->data[SC_INCMSPRATE])
+ maxsp += maxsp * sc->data[SC_INCMSPRATE]->val1 / 100;
+ if (sc->data[SC_INCMSP])
maxsp += (sc->data[SC_INCMSP]->val1);
- if(sc->data[SC_MTF_MSP])
+ if (sc->data[SC_MTF_MSP])
maxsp += (sc->data[SC_MTF_MSP]->val1);
- if(sc->data[SC_SERVICEFORYOU])
- maxsp += maxsp * sc->data[SC_SERVICEFORYOU]->val2/100;
- if(sc->data[SC_MER_SP])
- maxsp += maxsp * sc->data[SC_MER_SP]->val2/100;
- if(sc->data[SC_RAISINGDRAGON])
+ if (sc->data[SC_SERVICEFORYOU])
+ maxsp += maxsp * sc->data[SC_SERVICEFORYOU]->val2 / 100;
+ if (sc->data[SC_MER_SP])
+ maxsp += maxsp * sc->data[SC_MER_SP]->val2 / 100;
+ if (sc->data[SC_RAISINGDRAGON])
maxsp += maxsp * (2 + sc->data[SC_RAISINGDRAGON]->val1) / 100;
- if(sc->data[SC_LIFE_FORCE_F])
- maxsp += maxsp * sc->data[SC_LIFE_FORCE_F]->val1/100;
- if(sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3)
+ if (sc->data[SC_LIFE_FORCE_F])
+ maxsp += maxsp * sc->data[SC_LIFE_FORCE_F]->val1 / 100;
+ if (sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3)
maxsp += 50;
-
- return cap_value(maxsp,1,UINT_MAX);
+ if (sc->data[SC_VITATA_500])
+ maxsp += maxsp * 5 / 100;
+ if (sc->data[SC_SOULSCROLL])
+ maxsp += maxsp * sc->data[SC_SOULSCROLL]->val1 / 100;
+ if (sc->data[SC_TARGET_ASPD])
+ maxsp += maxsp * sc->data[SC_TARGET_ASPD]->val1 / 100;
+
+ return cap_value(maxsp, 1, UINT_MAX);
}
unsigned char status_calc_element(struct block_list *bl, struct status_change *sc, int element)
{
- if(!sc || !sc->count)
+ if (!sc || !sc->count)
return element;
- if(sc->data[SC_FREEZE])
+ if (sc->data[SC_FREEZE])
return ELE_WATER;
- if(sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
+ if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
return ELE_EARTH;
- if(sc->data[SC_BENEDICTIO])
+ if (sc->data[SC_BENEDICTIO])
return ELE_HOLY;
- if(sc->data[SC_PROPERTYUNDEAD])
+ if (sc->data[SC_PROPERTYUNDEAD])
return ELE_UNDEAD;
- if(sc->data[SC_ARMOR_PROPERTY])
+ if (sc->data[SC_ARMOR_PROPERTY])
return sc->data[SC_ARMOR_PROPERTY]->val2;
- if(sc->data[SC_SHAPESHIFT])
+ if (sc->data[SC_SHAPESHIFT])
return sc->data[SC_SHAPESHIFT]->val2;
return (unsigned char)cap_value(element,0,UCHAR_MAX);
@@ -5775,65 +5849,63 @@ unsigned char status_calc_element(struct block_list *bl, struct status_change *s
unsigned char status_calc_element_lv(struct block_list *bl, struct status_change *sc, int lv)
{
- if(!sc || !sc->count)
+ if (!sc || !sc->count)
return lv;
- if(sc->data[SC_FREEZE])
+ if (sc->data[SC_FREEZE])
return 1;
- if(sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
+ if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
return 1;
- if(sc->data[SC_BENEDICTIO])
+ if (sc->data[SC_BENEDICTIO])
return 1;
- if(sc->data[SC_PROPERTYUNDEAD])
+ if (sc->data[SC_PROPERTYUNDEAD])
return 1;
- if(sc->data[SC_ARMOR_PROPERTY])
+ if (sc->data[SC_ARMOR_PROPERTY])
return sc->data[SC_ARMOR_PROPERTY]->val1;
- if(sc->data[SC_SHAPESHIFT])
+ if (sc->data[SC_SHAPESHIFT])
return 1;
- if(sc->data[SC__INVISIBILITY])
+ if (sc->data[SC__INVISIBILITY])
return 1;
- return (unsigned char)cap_value(lv,1,4);
+ return (unsigned char)cap_value(lv, 1, 4);
}
unsigned char status_calc_attack_element(struct block_list *bl, struct status_change *sc, int element)
{
- if(!sc || !sc->count)
+ if (!sc || !sc->count)
return element;
- if(sc->data[SC_ENCHANTARMS])
+
+ if (sc->data[SC_ENCHANTARMS])
return sc->data[SC_ENCHANTARMS]->val2;
- if(sc->data[SC_PROPERTYWATER]
- || (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 2) )
+ if (sc->data[SC_PROPERTYWATER] || (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 2))
return ELE_WATER;
- if(sc->data[SC_PROPERTYGROUND]
- || (sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 2) )
+ if (sc->data[SC_PROPERTYGROUND] || (sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 2))
return ELE_EARTH;
- if(sc->data[SC_PROPERTYFIRE]
- || (sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 2) )
+ if (sc->data[SC_PROPERTYFIRE] || (sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 2))
return ELE_FIRE;
- if(sc->data[SC_PROPERTYWIND]
- || (sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 2) )
+ if (sc->data[SC_PROPERTYWIND] || (sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 2))
return ELE_WIND;
- if(sc->data[SC_ENCHANTPOISON])
+ if (sc->data[SC_ENCHANTPOISON])
return ELE_POISON;
- if(sc->data[SC_ASPERSIO])
+ if (sc->data[SC_ASPERSIO])
return ELE_HOLY;
- if(sc->data[SC_PROPERTYDARK])
+ if (sc->data[SC_PROPERTYDARK])
return ELE_DARK;
- if(sc->data[SC_PROPERTYTELEKINESIS] || sc->data[SC__INVISIBILITY])
+ if (sc->data[SC_PROPERTYTELEKINESIS] || sc->data[SC__INVISIBILITY])
return ELE_GHOST;
- if(sc->data[SC_TIDAL_WEAPON_OPTION] || sc->data[SC_TIDAL_WEAPON] )
+ if (sc->data[SC_TIDAL_WEAPON_OPTION] || sc->data[SC_TIDAL_WEAPON])
return ELE_WATER;
- if(sc->data[SC_PYROCLASTIC])
+ if (sc->data[SC_PYROCLASTIC])
return ELE_FIRE;
- return (unsigned char)cap_value(element,0,UCHAR_MAX);
+
+ return (unsigned char)cap_value(element, 0, UCHAR_MAX);
}
unsigned short status_calc_mode(struct block_list *bl, struct status_change *sc, int mode)
{
- if(!sc || !sc->count)
+ if (!sc || !sc->count)
return mode;
- if(sc->data[SC_MODECHANGE]) {
+ if (sc->data[SC_MODECHANGE]) {
if (sc->data[SC_MODECHANGE]->val2)
mode = sc->data[SC_MODECHANGE]->val2; //Set mode
if (sc->data[SC_MODECHANGE]->val3)
@@ -5841,7 +5913,7 @@ unsigned short status_calc_mode(struct block_list *bl, struct status_change *sc,
if (sc->data[SC_MODECHANGE]->val4)
mode&=~sc->data[SC_MODECHANGE]->val4; //Del mode
}
- return cap_value(mode,0,USHRT_MAX);
+ return cap_value(mode, 0, USHRT_MAX);
}
const char* status_get_name(struct block_list *bl) {
diff --git a/src/map/status.h b/src/map/status.h
index 800e3de9f..7dbef0923 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -17,10 +17,10 @@ struct mob_data;
struct npc_data;
struct pet_data;
-//Change the equation when the values are high enough to discard the
-//imprecision in exchange of overflow protection [Skotlex]
-//Also add 100% checks since those are the most used cases where we don't
-//want approximation errors.
+// Change the equation when the values are high enough to discard the
+// imprecision in exchange of overflow protection [Skotlex]
+// Also add 100% checks since those are the most used cases where we don't
+// want approximation errors.
#define APPLY_RATE(value, rate) ( \
(rate) == 100 ? \
(value) \
@@ -83,7 +83,7 @@ enum scstart_flag {
// Status changes listing. These code are for use by the server.
typedef enum sc_type {
SC_NONE = -1,
- //First we enumerate common status ailments which are often used around.
+ // First we enumerate common status ailments which are often used around.
SC_STONE = 0,
SC_COMMON_MIN = 0, // begin
SC_FREEZE,
@@ -95,14 +95,14 @@ typedef enum sc_type {
SC_CONFUSION,
SC_BLIND,
SC_BLOODING,
- SC_DPOISON, //10
+ SC_DPOISON, // 10
SC_FEAR,
SC_COLD,
SC_BURNING,
SC_DEEP_SLEEP,
SC_COMMON_MAX = 14, // end
- //Next up, we continue on 20, to leave enough room for additional "common" ailments in the future.
+ // Next up, we continue on 20, to leave enough room for additional "common" ailments in the future.
SC_PROVOKE = 20,
SC_ENDURE,
SC_TWOHANDQUICKEN,
@@ -113,7 +113,7 @@ typedef enum sc_type {
SC_POISONREACT,
SC_QUAGMIRE,
SC_ANGELUS,
- SC_BLESSING, //30
+ SC_BLESSING, // 30
SC_CRUCIS,
SC_INC_AGI,
SC_DEC_AGI,
@@ -123,7 +123,7 @@ typedef enum sc_type {
SC_ASPERSIO,
SC_BENEDICTIO,
SC_KYRIE,
- SC_MAGNIFICAT, //40
+ SC_MAGNIFICAT, // 40
SC_GLORIA,
SC_LEXAETERNA,
SC_ADRENALINE,
@@ -133,7 +133,7 @@ typedef enum sc_type {
SC_TRICKDEAD,
SC_SHOUT,
SC_ENERGYCOAT,
- SC_BROKENARMOR, //50 - NOTE: These two aren't used anywhere, and they have an icon...
+ SC_BROKENARMOR, // 50 - NOTE: These two aren't used anywhere, and they have an icon...
SC_BROKENWEAPON,
SC_ILLUSION,
SC_WEIGHTOVER50,
@@ -143,7 +143,7 @@ typedef enum sc_type {
SC_ATTHASTE_POTION3,
SC_ATTHASTE_INFINITY,
SC_MOVHASTE_HORSE,
- SC_MOVHASTE_INFINITY, //60
+ SC_MOVHASTE_INFINITY, // 60
SC_PLUSATTACKPOWER,
SC_PLUSMAGICPOWER,
SC_WEDDING,
@@ -153,7 +153,7 @@ typedef enum sc_type {
SC_BARRIER,
SC_NOEQUIPWEAPON,
SC_NOEQUIPSHIELD,
- SC_NOEQUIPARMOR, //70
+ SC_NOEQUIPARMOR, // 70
SC_NOEQUIPHELM,
SC_PROTECTWEAPON,
SC_PROTECTSHIELD,
@@ -163,7 +163,7 @@ typedef enum sc_type {
SC_REFLECTSHIELD,
SC_SPLASHER,
SC_PROVIDENCE,
- SC_DEFENDER, //80
+ SC_DEFENDER, // 80
SC_MAGICROD,
SC_SPELLBREAKER,
SC_AUTOSPELL,
@@ -173,7 +173,7 @@ typedef enum sc_type {
SC_AUTOCOUNTER,
SC_SIGHT,
SC_SAFETYWALL,
- SC_RUWACH, //90
+ SC_RUWACH, // 90
SC_EXTREMITYFIST,
SC_EXPLOSIONSPIRITS,
SC_COMBOATTACK,
@@ -183,7 +183,7 @@ typedef enum sc_type {
SC_PROPERTYWATER,
SC_PROPERTYWIND,
SC_PROPERTYGROUND,
- SC_VOLCANO, //100,
+ SC_VOLCANO, // 100,
SC_DELUGE,
SC_VIOLENTGALE,
SC_SUB_WEAPONPROPERTY,
@@ -193,7 +193,7 @@ typedef enum sc_type {
SC_BABY,
SC_AURABLADE,
SC_PARRYING,
- SC_LKCONCENTRATION, //110
+ SC_LKCONCENTRATION, // 110
SC_TENSIONRELAX,
SC_BERSERK,
SC_FURY,
@@ -203,7 +203,7 @@ typedef enum sc_type {
SC_GUILDAURA,
SC_MAGICPOWER,
SC_EDP,
- SC_TRUESIGHT, //120
+ SC_TRUESIGHT, // 120
SC_WINDWALK,
SC_MELTDOWN,
SC_CARTBOOST,
@@ -213,7 +213,7 @@ typedef enum sc_type {
SC_MARIONETTE,
SC_PROPERTYUNDEAD,
SC_JOINTBEAT,
- SC_MINDBREAKER, //130
+ SC_MINDBREAKER, // 130
SC_MEMORIZE,
SC_FOGWALL,
SC_SPIDERWEB,
@@ -223,7 +223,7 @@ typedef enum sc_type {
SC_ORCISH,
SC_STORMKICK_READY,
SC_DOWNKICK_READY,
- SC_TURNKICK_READY, //140
+ SC_TURNKICK_READY, // 140
SC_COUNTERKICK_READY,
SC_DODGE_READY,
SC_RUN,
@@ -233,7 +233,7 @@ typedef enum sc_type {
SC_KAIZEL,
SC_KAAHI,
SC_KAUPE,
- SC_ONEHANDQUICKEN, //150
+ SC_ONEHANDQUICKEN, // 150
SC_PRESERVE,
SC_GDSKILL_BATTLEORDER,
SC_GDSKILL_REGENERATION,
@@ -243,7 +243,7 @@ typedef enum sc_type {
SC_LONGING,
SC_HERMODE,
SC_TAROTCARD,
- SC_CR_SHRINK, //160
+ SC_CR_SHRINK, // 160
SC_WZ_SIGHTBLASTER,
SC_DC_WINKCHARM,
SC_RG_CCONFINE_M,
@@ -253,7 +253,7 @@ typedef enum sc_type {
SC_RICHMANKIM,
SC_ETERNALCHAOS,
SC_DRUMBATTLE,
- SC_NIBELUNGEN, //170
+ SC_NIBELUNGEN, // 170
SC_ROKISWEIL,
SC_INTOABYSS,
SC_SIEGFRIED,
@@ -263,17 +263,17 @@ typedef enum sc_type {
SC_APPLEIDUN,
SC_MODECHANGE,
SC_HUMMING,
- SC_DONTFORGETME, //180
+ SC_DONTFORGETME, // 180
SC_FORTUNE,
SC_SERVICEFORYOU,
- SC_STOP, //Prevents inflicted chars from walking. [Skotlex]
+ SC_STOP, // Prevents inflicted chars from walking. [Skotlex]
SC_STRUP,
SC_SOULLINK,
- SC_COMA, //Not a real SC_, it makes a char's HP/SP hit 1.
+ SC_COMA, // Not a real SC_, it makes a char's HP/SP hit 1.
SC_CLAIRVOYANCE,
SC_INCALLSTATUS,
SC_CHASEWALK2,
- SC_INCAGI, //190
+ SC_INCAGI, // 190
SC_INCVIT,
SC_INCINT,
SC_INCDEX,
@@ -283,7 +283,7 @@ typedef enum sc_type {
SC_INCFLEE,
SC_INCFLEERATE,
SC_INCMHPRATE,
- SC_INCMSPRATE, //200
+ SC_INCMSPRATE, // 200
SC_INCATKRATE,
SC_INCMATKRATE,
SC_INCDEFRATE,
@@ -293,17 +293,17 @@ typedef enum sc_type {
SC_FOOD_INT,
SC_FOOD_DEX,
SC_FOOD_LUK,
- SC_FOOD_BASICHIT, //210
+ SC_FOOD_BASICHIT, // 210
SC_FOOD_BASICAVOIDANCE,
SC_BATKFOOD,
SC_WATKFOOD,
SC_MATKFOOD,
- SC_SCRESIST, //Increases resistance to status changes.
+ SC_SCRESIST, // Increases resistance to status changes.
SC_XMAS, // Xmas Suit [Valaris]
- SC_WARM, //SG skills [Komurka]
+ SC_WARM, // SG skills [Komurka]
SC_SUN_COMFORT,
SC_MOON_COMFORT,
- SC_STAR_COMFORT, //220
+ SC_STAR_COMFORT, // 220
SC_FUSION,
SC_SKILLRATE_UP,
SC_SKE,
@@ -311,9 +311,9 @@ typedef enum sc_type {
SC_SWOO, // [marquis007]
SC_SKA, // [marquis007]
SC_EARTHSCROLL,
- SC_MIRACLE, //SG 'hidden' skill [Komurka]
+ SC_MIRACLE, // SG 'hidden' skill [Komurka]
SC_GS_MADNESSCANCEL,
- SC_GS_ADJUSTMENT, //230
+ SC_GS_ADJUSTMENT, // 230
SC_GS_ACCURACY,
SC_GS_GATLINGFEVER,
SC_NJ_TATAMIGAESHI,
@@ -323,7 +323,7 @@ typedef enum sc_type {
SC_NJ_SUITON,
SC_NJ_NEN,
SC_KNOWLEDGE,
- SC_SMA_READY, //240
+ SC_SMA_READY, // 240
SC_FLING,
SC_HLIF_AVOID,
SC_HLIF_CHANGE,
@@ -333,7 +333,7 @@ typedef enum sc_type {
SC_HAMI_DEFENCE,
SC_INCASPDRATE,
SC_PLUSAVOIDVALUE,
- SC_JAILED, //250
+ SC_JAILED, // 250
SC_ENCHANTARMS,
SC_MAGICALATTACK,
SC_STONESKIN,
@@ -343,7 +343,7 @@ typedef enum sc_type {
SC_SUMMER,
SC_CASH_PLUSEXP,
SC_CASH_RECEIVEITEM,
- SC_CASH_BOSS_ALARM, //260
+ SC_CASH_BOSS_ALARM, // 260
SC_CASH_DEATHPENALTY,
SC_CRITICALPERCENT,
//SC_INCDEF,
@@ -353,7 +353,7 @@ typedef enum sc_type {
//SC_HPREGEN,
SC_HEALPLUS = 268,
SC_PNEUMA,
- SC_AUTOTRADE, //270
+ SC_AUTOTRADE, // 270
SC_KSPROTECTED,
SC_ARMOR_RESIST,
SC_ATKER_BLOOD,
@@ -364,13 +364,13 @@ typedef enum sc_type {
SC_WALKSPEED = 278,
// Mercenary Only Bonus Effects
SC_MER_FLEE,
- SC_MER_ATK, //280
+ SC_MER_ATK, // 280
SC_MER_HP,
SC_MER_SP,
SC_MER_HIT,
SC_MER_QUICKEN,
SC_REBIRTH,
- //SC_SKILLCASTRATE, //286
+ //SC_SKILLCASTRATE, // 286
//SC_DEFRATIOATK,
//SC_HPDRAIN,
//SC_SKILLATKBONUS,
@@ -384,7 +384,7 @@ typedef enum sc_type {
SC_INVINCIBLEOFF,
SC_MANU_ATK,
SC_MANU_DEF,
- SC_SPL_ATK, //300
+ SC_SPL_ATK, // 300
SC_SPL_DEF,
SC_MANU_MATK,
SC_SPL_MATK,
@@ -394,14 +394,12 @@ typedef enum sc_type {
SC_FOOD_DEX_CASH,
SC_FOOD_INT_CASH,
SC_FOOD_LUK_CASH,
- /**
- * 3rd
- **/
+
+ /* 3rd Jobs */
//SC_FEAR,
SC_FROSTMISTY = 311,
- /**
- * Rune Knight
- **/
+
+ /* Rune Knight */
SC_ENCHANTBLADE,
SC_DEATHBOUND,
SC_MILLENNIUMSHIELD,
@@ -414,9 +412,8 @@ typedef enum sc_type {
SC_STORMBLAST,
SC_FIGHTINGSPIRIT,
SC_ABUNDANCE,
- /**
- * Arch Bishop
- **/
+
+ /* Arch Bishop */
SC_ADORAMUS,
SC_EPICLESIS,
SC_ORATIO,
@@ -426,9 +423,8 @@ typedef enum sc_type {
SC_EXPIATIO, // 330
SC_DUPLELIGHT,
SC_SECRAMENT,
- /**
- * Warlock
- **/
+
+ /* Warlock */
SC_WHITEIMPRISON,
SC_MARSHOFABYSS,
SC_RECOGNIZEDSPELL,
@@ -440,17 +436,15 @@ typedef enum sc_type {
SC_SUMMON5,
SC_READING_SB,
SC_FREEZINGSP,
- /**
- * Ranger
- **/
+
+ /* Ranger */
SC_FEARBREEZE,
SC_ELECTRICSHOCKER,
SC_WUGDASH,
SC_WUGBITE,
SC_CAMOUFLAGE,
- /**
- * Mechanic
- **/
+
+ /* Mechanic */
SC_ACCELERATION,
SC_HOVERING, // 350
SC_SHAPESHIFT,
@@ -463,9 +457,8 @@ typedef enum sc_type {
SC_STEALTHFIELD_MASTER,
SC_OVERHEAT,
SC_OVERHEAT_LIMITPOINT, // 360
- /**
- * Guillotine Cross
- **/
+
+ /* Guillotine Cross */
SC_VENOMIMPRESS,
SC_POISONINGWEAPON,
SC_WEAPONBLOCKING,
@@ -481,9 +474,8 @@ typedef enum sc_type {
SC_PYREXIA,
SC_OBLIVIONCURSE,
SC_LEECHESEND,
- /**
- * Royal Guard
- **/
+
+ /* Royal Guard */
SC_LG_REFLECTDAMAGE,
SC_FORCEOFVANGUARD,
SC_SHIELDSPELL_DEF,
@@ -495,18 +487,16 @@ typedef enum sc_type {
SC_BANDING_DEFENCE,
SC_EARTHDRIVE,
SC_INSPIRATION,
- /**
- * Sorcerer
- **/
+
+ /* Sorcerer */
SC_SPELLFIST,
//SC_COLD,
SC_STRIKING = 389,
SC_WARMER, // 390
SC_VACUUM_EXTREME,
SC_PROPERTYWALK,
- /**
- * Minstrel / Wanderer
- **/
+
+ /* Minstrel / Wanderer */
SC_SWING,
SC_SYMPHONY_LOVE,
SC_MOONLIT_SERENADE,
@@ -527,9 +517,8 @@ typedef enum sc_type {
SC_UNLIMITED_HUMMING_VOICE, // 410
SC_SITDOWN_FORCE,
SC_NETHERWORLD,
- /**
- * Sura
- **/
+
+ /* Sura */
SC_CRESCENTELBOW = 413,
SC_CURSEDCIRCLE_ATKER,
SC_CURSEDCIRCLE_TARGET,
@@ -538,9 +527,8 @@ typedef enum sc_type {
SC_GENTLETOUCH_ENERGYGAIN,
SC_GENTLETOUCH_CHANGE,
SC_GENTLETOUCH_REVITALIZE, // 420
- /**
- * Genetic
- **/
+
+ /* Genetic */
SC_GN_CARTBOOST,
SC_THORNS_TRAP,
SC_BLOOD_SUCKER,
@@ -566,9 +554,8 @@ typedef enum sc_type {
SC_EXTRACT_WHITE_POTION_Z,
SC_VITATA_500,
SC_EXTRACT_SALAMINE_JUICE,
- /**
- * Shadow Chaser
- **/
+
+ /* Shadow Chaser */
SC__REPRODUCE,
SC__AUTOSHADOWSPELL,
SC__SHADOWFORM,
@@ -584,9 +571,8 @@ typedef enum sc_type {
SC__STRIPACCESSARY,
SC__MANHOLE,
SC__BLOODYLUST, // 460
- /**
- * Elemental Spirits
- **/
+
+ /* Elemental Spirits */
SC_CIRCLE_OF_FIRE,
SC_CIRCLE_OF_FIRE_OPTION,
SC_FIRE_CLOAK,
@@ -634,20 +620,25 @@ typedef enum sc_type {
SC_TIDAL_WEAPON_OPTION,
SC_ROCK_CRUSHER,
SC_ROCK_CRUSHER_ATK,
+
/* Guild Aura */
SC_LEADERSHIP,
SC_GLORYWOUNDS,
SC_SOULCOLD, // 510
SC_HAWKEYES,
+
/* ... */
SC_ODINS_POWER,
+
/* Sorcerer .extra */
SC_FIRE_INSIGNIA,
SC_WATER_INSIGNIA,
SC_WIND_INSIGNIA,
SC_EARTH_INSIGNIA,
+
/* new pushcart */
SC_PUSH_CART,
+
/* Warlock Spell books */
SC_SPELLBOOK1,
SC_SPELLBOOK2,
@@ -660,13 +651,13 @@ typedef enum sc_type {
* To increase the maximum value just add another status type before SC_SPELLBOOK7 (ex. SC_SPELLBOOK8, SC_SPELLBOOK9 and so on)
**/
SC_SPELLBOOK7,
+
/* Max HP & SP */
SC_INCMHP,
SC_INCMSP,
SC_PARTYFLEE,
- /**
- * Kagerou & Oboro [malufett]
- **/
+
+ /* Kagerou & Oboro [malufett] */
SC_MEIKYOUSISUI,
SC_KO_JYUMONJIKIRI,
SC_KYOUGAKU, // 530
@@ -679,7 +670,7 @@ typedef enum sc_type {
SC_GENSOU,
SC_AKAITSUKI,
- //homon S
+ /* Homunculus S */
SC_STYLE_CHANGE,
SC_GOLDENE_FERSE, // 540
SC_ANGRIFFS_MODUS,
@@ -731,13 +722,13 @@ typedef enum sc_type {
SC_FALLENEMPIRE,
SC_FLASHCOMBO, // 580
- //Vellum Weapon reductions
+ /* Vellum Weapon reductions */
SC_DEFSET,
SC_MDEFSET,
SC_NO_SWITCH_EQUIP,
- // 2014 Halloween Event
+ /* 2014 Halloween Event */
SC_MTF_MHP,
SC_MTF_MSP,
SC_MTF_PUMPKIN,
@@ -745,8 +736,22 @@ typedef enum sc_type {
SC_LJOSALFAR,
SC_MERMAID_LONGING,
+ SC_TIME_ACCESSORY, // 590
+
+ /* Geffen Scrolls */
+ SC_SKELSCROLL,
+ SC_DISTRUCTIONSCROLL,
+ SC_ROYALSCROLL,
+ SC_IMMUNITYSCROLL,
+ SC_MYSTICSCROLL,
+ SC_BATTLESCROLL,
+ SC_ARMORSCROLL,
+ SC_FREYJASCROLL,
+ SC_SOULSCROLL,
+
+ SC_TARGET_ASPD, // 600
- SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
+ SC_MAX, // Automatically updated max, used in for's to check we are within bounds.
} sc_type;
/// Official status change ids, used to display status icons in the client.
@@ -1056,7 +1061,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,
@@ -1350,7 +1355,7 @@ enum si_type {
SI_ODINS_POWER = 583,
SI_STYLE_CHANGE = 584,
SI_SONIC_CLAW_POSTDELAY = 585,
- // ID's 586 - 595 Currently Unused
+ /** ID's 586 - 595 Currently Unused **/
SI_SILVERVEIN_RUSH_POSTDELAY = 596,
SI_MIDNIGHT_FRENZY_POSTDELAY = 597,
SI_GOLDENE_FERSE = 598,
@@ -1493,24 +1498,24 @@ enum si_type {
SI_2013_VALENTINE2 = 732,
SI_2013_VALENTINE3 = 733,
SI_ILLUSIONDOPING = 734,
- //SI_WIDEWEB = 735,
+ //SI_WIDEWEB = 735,
SI_CHILL = 736,
SI_BURNT = 737,
- //SI_PCCAFE_PLAY_TIME = 738,
- //SI_TWISTED_TIME = 739,
+ //SI_PCCAFE_PLAY_TIME = 738,
+ //SI_TWISTED_TIME = 739,
SI_FLASHCOMBO = 740,
-
- //SI_JITTER_BUFF1 = 741,
- //SI_JITTER_BUFF2 = 742,
- //SI_JITTER_BUFF3 = 743,
- //SI_JITTER_BUFF4 = 744,
- //SI_JITTER_BUFF5 = 745,
- //SI_JITTER_BUFF6 = 746,
- //SI_JITTER_BUFF7 = 747,
- //SI_JITTER_BUFF8 = 748,
- //SI_JITTER_BUFF9 = 749,
- //SI_JITTER_BUFF10 = 750,
- //SI_CUP_OF_BOZA = 751,
+ //SI_JITTER_BUFF1 = 741,
+ //SI_JITTER_BUFF2 = 742,
+ //SI_JITTER_BUFF3 = 743,
+ //SI_JITTER_BUFF4 = 744,
+ //SI_JITTER_BUFF5 = 745,
+ //SI_JITTER_BUFF6 = 746,
+ //SI_JITTER_BUFF7 = 747,
+ //SI_JITTER_BUFF8 = 748,
+ //SI_JITTER_BUFF9 = 749,
+
+ //SI_JITTER_BUFF10 = 750,
+ //SI_CUP_OF_BOZA = 751,
SI_B_TRAP = 752,
SI_E_CHAIN = 753,
SI_E_QD_SHOT_READY = 754,
@@ -1536,142 +1541,148 @@ enum si_type {
SI_PACKING_ENVELOPE9 = 774,
SI_PACKING_ENVELOPE10 = 775,
SI_GLASTHEIM_TRANS = 776,
- //SI_ZONGZI_POUCH_TRANS = 777,
+ //SI_ZONGZI_POUCH_TRANS = 777,
SI_HEAT_BARREL_AFTER = 778,
SI_DECORATION_OF_MUSIC = 779,
- //SI_OVERSEAEXPUP = 780,
- //SI_CLOWN_N_GYPSY_CARD = 781,
- //SI_OPEN_NPC_MARKET = 782,
- //SI_BEEF_RIB_STEW = 783,
- //SI_PORK_RIB_STEW = 784,
- //SI_CHUSEOK_MONDAY = 785,
- //SI_CHUSEOK_TUESDAY = 786,
- //SI_CHUSEOK_WEDNESDAY = 787,
- //SI_CHUSEOK_THURSDAY = 788,
- //SI_CHUSEOK_FRIDAY = 789,
- //SI_CHUSEOK_WEEKEND = 790,
- //SI_ALL_LIGHTGUARD = 791,
- //SI_ALL_LIGHTGUARD_COOL_TIME = 792,
- //SI_MTF_MHP = 793,
- //SI_MTF_MSP = 794,
- //SI_MTF_PUMPKIN = 795,
- //SI_MTF_HITFLEE = 796,
- //SI_MTF_CRIDAMAGE2 = 797,
- //SI_MTF_SPDRAIN = 798,
- //SI_ACUO_MINT_GUM = 799,
+ //SI_OVERSEAEXPUP = 780,
+ //SI_CLOWN_N_GYPSY_CARD = 781,
+ //SI_OPEN_NPC_MARKET = 782,
+ //SI_BEEF_RIB_STEW = 783,
+ //SI_PORK_RIB_STEW = 784,
+ //SI_CHUSEOK_MONDAY = 785,
+ //SI_CHUSEOK_TUESDAY = 786,
+ //SI_CHUSEOK_WEDNESDAY = 787,
+ //SI_CHUSEOK_THURSDAY = 788,
+ //SI_CHUSEOK_FRIDAY = 789,
+ //SI_CHUSEOK_WEEKEND = 790,
+ //SI_ALL_LIGHTGUARD = 791,
+ //SI_ALL_LIGHTGUARD_COOL_TIME = 792,
+ //SI_MTF_MHP = 793,
+ //SI_MTF_MSP = 794,
+ //SI_MTF_PUMPKIN = 795,
+ //SI_MTF_HITFLEE = 796,
+ //SI_MTF_CRIDAMAGE2 = 797,
+ //SI_MTF_SPDRAIN = 798,
+ //SI_ACUO_MINT_GUM = 799,
- //SI_S_HEALPOTION = 800,
- //SI_REUSE_LIMIT_S_HEAL_POTION = 801,
- //SI_PLAYTIME_STATISTICS = 802,
- //SI_GN_CHANGEMATERIAL_OPERATOR = 803,
- //SI_GN_MIX_COOKING_OPERATOR = 804,
- //SI_GN_MAKEBOMB_OPERATOR = 805,
- //SI_GN_S_PHARMACY_OPERATOR = 806,
- //SI_SO_EL_ANALYSIS_DISASSEMBLY_OPERATOR = 807,
- //SI_SO_EL_ANALYSIS_COMBINATION_OPERATOR = 808,
- //SI_NC_MAGICDECOY_OPERATOR = 809,
- //SI_GUILD_STORAGE = 810,
- //SI_GC_POISONINGWEAPON_OPERATOR = 811,
- //SI_WS_WEAPONREFINE_OPERATOR = 812,
- //SI_BS_REPAIRWEAPON_OPERATOR = 813,
- //SI_GET_MAILBOX = 814,
- //SI_JUMPINGCLAN = 815,
- //SI_JP_OTP = 816,
- //SI_HANDICAPTOLERANCE_LEVELGAP = 817,
- //SI_MTF_RANGEATK2 = 818,
- //SI_MTF_ASPD2 = 819,
- //SI_MTF_MATK2 = 820,
- //SI_QSCARABA = 825,
+ //SI_S_HEALPOTION = 800,
+ //SI_REUSE_LIMIT_S_HEAL_POTION = 801,
+ //SI_PLAYTIME_STATISTICS = 802,
+ //SI_GN_CHANGEMATERIAL_OPERATOR = 803,
+ //SI_GN_MIX_COOKING_OPERATOR = 804,
+ //SI_GN_MAKEBOMB_OPERATOR = 805,
+ //SI_GN_S_PHARMACY_OPERATOR = 806,
+ //SI_SO_EL_ANALYSIS_DISASSEMBLY_OPERATOR = 807,
+ //SI_SO_EL_ANALYSIS_COMBINATION_OPERATOR = 808,
+ //SI_NC_MAGICDECOY_OPERATOR = 809,
+ //SI_GUILD_STORAGE = 810,
+ //SI_GC_POISONINGWEAPON_OPERATOR = 811,
+ //SI_WS_WEAPONREFINE_OPERATOR = 812,
+ //SI_BS_REPAIRWEAPON_OPERATOR = 813,
+ //SI_GET_MAILBOX = 814,
+ //SI_JUMPINGCLAN = 815,
+ //SI_JP_OTP = 816,
+ //SI_HANDICAPTOLERANCE_LEVELGAP = 817,
+ //SI_MTF_RANGEATK2 = 818,
+ //SI_MTF_ASPD2 = 819,
+ //SI_MTF_MATK2 = 820,
+ /** ID's 821 - 824 Currently Unused **/
+ //SI_QSCARABA = 825,
SI_LJOSALFAR = 826,
- //SI_PAD_READER_KNIGHT = 827,
- //SI_PAD_READER_CRUSADER = 828,
- //SI_PAD_READER_BLACKSMITH = 829,
- //SI_PAD_READER_ALCHEMIST = 830,
- //SI_PAD_READER_ASSASSIN = 831,
- //SI_PAD_READER_ROGUE = 832,
- //SI_PAD_READER_WIZARD = 833,
- //SI_PAD_READER_SAGE = 834,
- //SI_PAD_READER_PRIEST = 835,
- //SI_PAD_READER_MONK = 836,
- //SI_PAD_READER_HUNTER = 837,
- //SI_PAD_READER_BARD = 838,
- //SI_PAD_READER_DANCER = 839,
- //SI_PAD_READER_TAEKWON = 840,
- //SI_PAD_READER_NINJA = 841,
- //SI_PAD_READER_GUNSLINGER = 842,
- //SI_PAD_READER_SUPERNOVICE = 843,
- //SI_ESSENCE_OF_TIME = 844,
- //SI_MTF_MARIONETTE = 860,
- //SI_MTF_LUDE = 861,
- //SI_MTF_CRUISER = 862,
+ //SI_PAD_READER_KNIGHT = 827,
+ //SI_PAD_READER_CRUSADER = 828,
+ //SI_PAD_READER_BLACKSMITH = 829,
+ //SI_PAD_READER_ALCHEMIST = 830,
+ //SI_PAD_READER_ASSASSIN = 831,
+ //SI_PAD_READER_ROGUE = 832,
+ //SI_PAD_READER_WIZARD = 833,
+ //SI_PAD_READER_SAGE = 834,
+ //SI_PAD_READER_PRIEST = 835,
+ //SI_PAD_READER_MONK = 836,
+ //SI_PAD_READER_HUNTER = 837,
+ //SI_PAD_READER_BARD = 838,
+ //SI_PAD_READER_DANCER = 839,
+ //SI_PAD_READER_TAEKWON = 840,
+ //SI_PAD_READER_NINJA = 841,
+ //SI_PAD_READER_GUNSLINGER = 842,
+ //SI_PAD_READER_SUPERNOVICE = 843,
+ //SI_ESSENCE_OF_TIME = 844,
+
+ /** ID's 845 - 859 Currently Unused **/
+ //SI_MTF_MARIONETTE = 860,
+ //SI_MTF_LUDE = 861,
+ //SI_MTF_CRUISER = 862,
SI_MERMAID_LONGING = 863,
- //SI_DRACULA_CARD = 865,
- //SI_LIMIT_POWER_BOOSTER = 867,
- //SI_TIME_ACCESSORY = 872,
- //SI_EP16_DEF = 873,
- //SI_NORMAL_ATKED_SP = 874,
- //SI_BODYSTATE_STONECURSE = 875,
- //SI_BODYSTATE_FREEZING = 876,
- //SI_BODYSTATE_STUN = 877,
- //SI_BODYSTATE_SLEEP = 878,
- //SI_BODYSTATE_UNDEAD = 879,
- //SI_BODYSTATE_STONECURSE_ING = 880,
- //SI_BODYSTATE_BURNNING = 881,
- //SI_BODYSTATE_IMPRISON = 882,
- //SI_HEALTHSTATE_POISON = 883,
- //SI_HEALTHSTATE_CURSE = 884,
- //SI_HEALTHSTATE_SILENCE = 885,
- //SI_HEALTHSTATE_CONFUSION = 886,
- //SI_HEALTHSTATE_BLIND = 887,
- //SI_HEALTHSTATE_ANGELUS = 888,
- //SI_HEALTHSTATE_BLOODING = 889,
- //SI_HEALTHSTATE_HEAVYPOISON = 890,
- //SI_HEALTHSTATE_FEAR = 891,
- //SI_CHERRY_BLOSSOM_CAKE = 892,
- //SI_SU_STOOP = 893,
- //SI_CATNIPPOWDER = 894,
- //SI_ATTACK_PROPERTY_NOTHING = 897,
- //SI_ATTACK_PROPERTY_WATER = 898,
- //SI_ATTACK_PROPERTY_GROUND = 899,
+ //SI_DRACULA_CARD = 865,
+ //SI_LIMIT_POWER_BOOSTER = 867,
+ /** ID's 868 - 871 Currently Unused **/
+ SI_TIME_ACCESSORY = 872,
+ //SI_EP16_DEF = 873,
+ //SI_NORMAL_ATKED_SP = 874,
+ //SI_BODYSTATE_STONECURSE = 875,
+ //SI_BODYSTATE_FREEZING = 876,
+ //SI_BODYSTATE_STUN = 877,
+ //SI_BODYSTATE_SLEEP = 878,
+ //SI_BODYSTATE_UNDEAD = 879,
+ //SI_BODYSTATE_STONECURSE_ING = 880,
+ //SI_BODYSTATE_BURNNING = 881,
+ //SI_BODYSTATE_IMPRISON = 882,
+ //SI_HEALTHSTATE_POISON = 883,
+ //SI_HEALTHSTATE_CURSE = 884,
+ //SI_HEALTHSTATE_SILENCE = 885,
+ //SI_HEALTHSTATE_CONFUSION = 886,
+ //SI_HEALTHSTATE_BLIND = 887,
+ //SI_HEALTHSTATE_ANGELUS = 888,
+ //SI_HEALTHSTATE_BLOODING = 889,
+ //SI_HEALTHSTATE_HEAVYPOISON = 890,
+ //SI_HEALTHSTATE_FEAR = 891,
+ //SI_CHERRY_BLOSSOM_CAKE = 892,
+ //SI_SU_STOOP = 893,
+ //SI_CATNIPPOWDER = 894,
+ /** ID 895 Currently Unused **/
+ //SI_SV_ROOTTWIST = 896,
+ //SI_ATTACK_PROPERTY_NOTHING = 897,
+ //SI_ATTACK_PROPERTY_WATER = 898,
+ //SI_ATTACK_PROPERTY_GROUND = 899,
- //SI_ATTACK_PROPERTY_FIRE = 900,
- //SI_ATTACK_PROPERTY_WIND = 901,
- //SI_ATTACK_PROPERTY_POISON = 902,
- //SI_ATTACK_PROPERTY_SAINT = 903,
- //SI_ATTACK_PROPERTY_DARKNESS = 904,
- //SI_ATTACK_PROPERTY_TELEKINESIS = 905,
- //SI_ATTACK_PROPERTY_UNDEAD = 906,
- //SI_RESIST_PROPERTY_NOTHING = 907,
- //SI_RESIST_PROPERTY_WATER = 908,
- //SI_RESIST_PROPERTY_GROUND = 909,
- //SI_RESIST_PROPERTY_FIRE = 910,
- //SI_RESIST_PROPERTY_WIND = 911,
- //SI_RESIST_PROPERTY_POISON = 912,
- //SI_RESIST_PROPERTY_SAINT = 913,
- //SI_RESIST_PROPERTY_DARKNESS = 914,
- //SI_RESIST_PROPERTY_TELEKINESIS = 915,
- //SI_RESIST_PROPERTY_UNDEAD = 916,
- //SI_PERIOD_RECEIVEITEM = 922,
- //SI_PERIOD_PLUSEXP = 923,
- //SI_PERIOD_PLUSJOBEXP = 924,
- //SI_RUNEHELM = 925,
- //SI_HELM_VERKANA = 926,
- //SI_HELM_RHYDO = 927,
- //SI_HELM_TURISUS = 928,
- //SI_HELM_HAGALAS = 929,
- //SI_HELM_ISIA = 930,
- //SI_HELM_ASIR = 931,
- //SI_HELM_URJ = 932,
- //SI_SV_ROOTTWIST = 896,
- //SI_BITESCAR = 917,
- //SI_ARCLOUSEDASH = 918,
- //SI_TUNAPARTY = 919,
- //SI_SHRIMP = 920,
- //SI_FRESHSHRIMP = 921,
- //SI_SUHIDE = 933,
- //SI_SPRITEMABLE = 937,
- //SI_DORAM_BUF_01 = 935,
- //SI_DORAM_BUF_02 = 936,
+ //SI_ATTACK_PROPERTY_FIRE = 900,
+ //SI_ATTACK_PROPERTY_WIND = 901,
+ //SI_ATTACK_PROPERTY_POISON = 902,
+ //SI_ATTACK_PROPERTY_SAINT = 903,
+ //SI_ATTACK_PROPERTY_DARKNESS = 904,
+ //SI_ATTACK_PROPERTY_TELEKINESIS = 905,
+ //SI_ATTACK_PROPERTY_UNDEAD = 906,
+ //SI_RESIST_PROPERTY_NOTHING = 907,
+ //SI_RESIST_PROPERTY_WATER = 908,
+ //SI_RESIST_PROPERTY_GROUND = 909,
+ //SI_RESIST_PROPERTY_FIRE = 910,
+ //SI_RESIST_PROPERTY_WIND = 911,
+ //SI_RESIST_PROPERTY_POISON = 912,
+ //SI_RESIST_PROPERTY_SAINT = 913,
+ //SI_RESIST_PROPERTY_DARKNESS = 914,
+ //SI_RESIST_PROPERTY_TELEKINESIS = 915,
+ //SI_RESIST_PROPERTY_UNDEAD = 916,
+ //SI_BITESCAR = 917,
+ //SI_ARCLOUSEDASH = 918,
+ //SI_TUNAPARTY = 919,
+ //SI_SHRIMP = 920,
+ //SI_FRESHSHRIMP = 921,
+ //SI_PERIOD_RECEIVEITEM = 922,
+ //SI_PERIOD_PLUSEXP = 923,
+ //SI_PERIOD_PLUSJOBEXP = 924,
+ //SI_RUNEHELM = 925,
+ //SI_HELM_VERKANA = 926,
+ //SI_HELM_RHYDO = 927,
+ //SI_HELM_TURISUS = 928,
+ //SI_HELM_HAGALAS = 929,
+ //SI_HELM_ISIA = 930,
+ //SI_HELM_ASIR = 931,
+ //SI_HELM_URJ = 932,
+ //SI_SUHIDE = 933,
+ /** ID 934 Currently Unused **/
+ //SI_DORAM_BUF_01 = 935,
+ //SI_DORAM_BUF_02 = 936,
+ //SI_SPRITEMABLE = 937,
SI_MAX,
};
@@ -1709,23 +1720,23 @@ enum e_mode
MD_MASK = 0xFFFF,
};
-//Status change option definitions (options are what makes status changes visible to chars
-//who were not on your field of sight when it happened)
+// Status change option definitions (options are what makes status changes visible to chars
+// who were not on your field of sight when it happened)
-//opt1: Non stackable status changes.
+// opt1: Non stackable status changes.
enum {
- OPT1_STONE = 1, //Petrified
+ OPT1_STONE = 1, // Petrified
OPT1_FREEZE,
OPT1_STUN,
OPT1_SLEEP,
- //Aegis uses OPT1 = 5 to identify undead enemies (which also grants them immunity to the other opt1 changes)
- OPT1_STONEWAIT=6, //Petrifying
+ // Aegis uses OPT1 = 5 to identify undead enemies (which also grants them immunity to the other opt1 changes)
+ OPT1_STONEWAIT = 6, // Petrifying
OPT1_BURNING,
OPT1_IMPRISON,
OPT1_CRYSTALIZE,
};
-//opt2: Stackable status changes.
+// opt2: Stackable status changes.
enum {
OPT2_POISON = 0x0001,
OPT2_CURSE = 0x0002,
@@ -1761,7 +1772,7 @@ enum {
OPT3_CONTRACT = 0x00020000,
};
-//Defines for the manner system [Skotlex]
+// Defines for the manner system [Skotlex]
enum manner_flags
{
MANNER_NOCHAT = 0x01,
@@ -1771,7 +1782,7 @@ enum manner_flags
MANNER_NOROOM = 0x10,
};
-//Define flags for the status_calc_bl function. [Skotlex]
+// Define flags for the status_calc_bl function. [Skotlex]
enum scb_flag
{
SCB_NONE = 0x00000000,
@@ -1811,7 +1822,7 @@ enum scb_flag
SCB_ALL = 0x3FFFFFFF
};
-//Regen related flags.
+// Regen related flags.
enum e_regen {
RGN_HP = 0x01,
RGN_SP = 0x02,
@@ -1825,16 +1836,16 @@ enum e_status_calc_opt {
SCO_FORCE = 0x2, /* only relevant to BL_PC types, ensures call bypasses the queue caused by delayed damage */
};
-//Define to determine who gets HP/SP consumed on doing skills/etc. [Skotlex]
+// Define to determine who gets HP/SP consumed on doing skills/etc. [Skotlex]
#define BL_CONSUME (BL_PC|BL_HOM|BL_MER|BL_ELEM)
-//Define to determine who has regen
+// Define to determine who has regen
#define BL_REGEN (BL_PC|BL_HOM|BL_MER|BL_ELEM)
-//Define to determine who will receive a clif_status_change packet for effects that require one to display correctly
+// Define to determine who will receive a clif_status_change packet for effects that require one to display correctly
#define BL_SCEFFECT (BL_PC|BL_HOM|BL_MER|BL_MOB|BL_ELEM)
-//Basic damage info of a weapon
-//Required because players have two of these, one in status_data
-//and another for their left hand weapon.
+// Basic damage info of a weapon
+// Required because players have two of these, one in status_data
+// and another for their left hand weapon.
typedef struct weapon_atk {
unsigned short atk, atk2;
unsigned short range;
@@ -1845,7 +1856,7 @@ typedef struct weapon_atk {
#endif
} weapon_atk;
-//For holding basic status (which can be modified by status changes)
+// For holding basic status (which can be modified by status changes)
struct status_data {
unsigned int
hp, sp, // see status_cpy before adding members before hp and sp
@@ -1867,103 +1878,103 @@ struct status_data {
/**
* defType is RENEWAL dependent and defined in src/map/config/data/const.h
**/
- defType def,mdef;
+ defType def, mdef;
unsigned char
def_ele, ele_lv,
size, race;
- struct weapon_atk rhw, lhw; //Right Hand/Left Hand Weapon.
+ struct weapon_atk rhw, lhw; // Right Hand/Left Hand Weapon.
#ifdef RENEWAL
int equip_atk;
#endif
};
-//Additional regen data that only players have.
+// Additional regen data that only players have.
struct regen_data_sub {
unsigned short
- hp,sp;
+ hp, sp;
- //tick accumulation before healing.
+ // tick accumulation before healing.
struct {
- unsigned int hp,sp;
+ unsigned int hp, sp;
} tick;
- //Regen rates (where every 1 means +100% regen)
+ // Regen rates (where every 1 means +100% regen)
struct {
- unsigned char hp,sp;
+ unsigned char hp, sp;
} rate;
};
struct regen_data {
- unsigned short flag; //Marks what stuff you may heal or not.
+ unsigned short flag; // Marks what stuff you may heal or not.
unsigned short
- hp,sp,shp,ssp;
+ hp, sp, shp, ssp;
- //tick accumulation before healing.
+ // tick accumulation before healing.
struct {
- unsigned int hp,sp,shp,ssp;
+ unsigned int hp, sp, shp, ssp;
} tick;
- //Regen rates (where every 1 means +100% regen)
+ // Regen rates (where every 1 means +100% regen)
struct {
unsigned char
- hp,sp,shp,ssp;
+ hp, sp, shp, ssp;
} rate;
struct {
- unsigned walk:1; //Can you regen even when walking?
- unsigned gc:1; //Tags when you should have double regen due to GVG castle
- unsigned overweight :2; //overweight state (1: 50%, 2: 90%)
- unsigned block :2; //Block regen flag (1: Hp, 2: Sp)
+ unsigned walk : 1; // Can you regen even when walking?
+ unsigned gc : 1; // Tags when you should have double regen due to GVG castle
+ unsigned overweight : 2; // overweight state (1: 50%, 2: 90%)
+ unsigned block : 2; // Block regen flag (1: Hp, 2: Sp)
} state;
- //skill-regen, sitting-skill-regen (since not all chars with regen need it)
+ // skill-regen, sitting-skill-regen (since not all chars with regen need it)
struct regen_data_sub *sregen, *ssregen;
};
struct sc_display_entry {
enum sc_type type;
- int val1,val2,val3;
+ int val1, val2, val3;
};
struct status_change_entry {
int timer;
- int val1,val2,val3,val4;
+ int val1, val2, val3, val4;
bool infinite_duration;
};
struct status_change {
- unsigned int option;// effect state (bitfield)
- unsigned int opt3;// skill state (bitfield)
- unsigned short opt1;// body state
- unsigned short opt2;// health state (bitfield)
+ unsigned int option; // effect state (bitfield)
+ unsigned int opt3; // skill state (bitfield)
+ unsigned short opt1; // body state
+ unsigned short opt2; // health state (bitfield)
unsigned char count;
- //TODO: See if it is possible to implement the following SC's without requiring extra parameters while the SC is inactive.
- unsigned char jb_flag; //Joint Beat type flag
- //int sg_id; //ID of the previous Storm gust that hit you
- short comet_x, comet_y; // Point where src casted Comet - required to calculate damage from this point
+ // TODO: See if it is possible to implement the following SC's without requiring extra parameters while the SC is inactive.
+ unsigned char jb_flag; // Joint Beat type flag
+ // int sg_id; // ID of the previous Storm gust that hit you
+ short comet_x, comet_y; // Point where src casted Comet - required to calculate damage from this point
/**
* The Storm Gust counter was dropped in renewal
**/
#ifndef RENEWAL
- unsigned char sg_counter; //Storm gust counter (previous hits from storm gust)
+ unsigned char sg_counter; // Storm gust counter (previous hits from storm gust)
#endif
- unsigned char bs_counter; // Blood Sucker counter
- unsigned char fv_counter; // Force of vanguard counter
+ unsigned char bs_counter; // Blood Sucker counter
+ unsigned char fv_counter; // Force of vanguard counter
struct status_change_entry *data[SC_MAX];
};
-//Define for standard HP damage attacks.
+// Define for standard HP damage attacks.
#define status_fix_damage(src, target, hp, walkdelay) (status->damage((src), (target), (hp), 0, (walkdelay), 0))
-//Define for standard HP/SP damage triggers.
+// Define for standard HP/SP damage triggers.
#define status_zap(bl, hp, sp) (status->damage(NULL, (bl), (hp), (sp), 0, 1))
-//Easier handling of status->percent_change
+// Easier handling of status->percent_change
#define status_percent_heal(bl, hp_rate, sp_rate) (status->percent_change(NULL, (bl), -(hp_rate), -(sp_rate), 0))
-#define status_percent_damage(src, target, hp_rate, sp_rate, kill) (status->percent_change((src), (target), (hp_rate), (sp_rate), (kill)?1:2))
-//Instant kill with no drops/exp/etc
+#define status_percent_damage(src, target, hp_rate, sp_rate, kill) (status->percent_change((src), (target), (hp_rate), (sp_rate), (kill) ? 1 : 2))
+// Instant kill with no drops/exp/etc
#define status_kill(bl) status_percent_damage(NULL, (bl), 100, 0, true)
#define status_get_range(bl) (status->get_status_data(bl)->rhw.range)
@@ -2010,10 +2021,10 @@ struct status_change {
#define status_get_homdex(bl) (st->dex + ((TBL_HOM*)bl)->homunculus.dex_value)
#define status_get_homluk(bl) (st->luk + ((TBL_HOM*)bl)->homunculus.luk_value)
-//Short version, receives rate in 1->100 range, and does not uses a flag setting.
-#define sc_start(src, bl, type, rate, val1, tick) (status->change_start((src),(bl),(type),100*(rate),(val1),0,0,0,(tick),SCFLAG_NONE))
-#define sc_start2(src, bl, type, rate, val1, val2, tick) (status->change_start((src),(bl),(type),100*(rate),(val1),(val2),0,0,(tick),SCFLAG_NONE))
-#define sc_start4(src, bl, type, rate, val1, val2, val3, val4, tick) (status->change_start((src),(bl),(type),100*(rate),(val1),(val2),(val3),(val4),(tick),SCFLAG_NONE))
+// Short version, receives rate in 1->100 range, and does not uses a flag setting.
+#define sc_start(src, bl, type, rate, val1, tick) (status->change_start((src), (bl), (type), 100 * (rate), (val1), 0, 0, 0, (tick), SCFLAG_NONE))
+#define sc_start2(src, bl, type, rate, val1, val2, tick) (status->change_start((src), (bl), (type), 100 * (rate), (val1), (val2), 0, 0, (tick), SCFLAG_NONE))
+#define sc_start4(src, bl, type, rate, val1, val2, val3, val4, tick) (status->change_start((src), (bl), (type), 100 * (rate), (val1), (val2), (val3), (val4), (tick), SCFLAG_NONE))
#define status_change_end(bl,type,tid) (status->change_end_((bl),(type),(tid),__FILE__,__LINE__))
@@ -2028,9 +2039,9 @@ struct status_change {
// bonus values and upgrade chances for refining equipment
struct s_refine_info {
- int chance[MAX_REFINE]; // success chance
- int bonus[MAX_REFINE]; // cumulative fixed bonus damage
- int randombonus_max[MAX_REFINE]; // cumulative maximum random bonus damage
+ int chance[MAX_REFINE]; // success chance
+ int bonus[MAX_REFINE]; // cumulative fixed bonus damage
+ int randombonus_max[MAX_REFINE]; // cumulative maximum random bonus damage
};
struct s_status_dbs {
@@ -2038,8 +2049,8 @@ BEGIN_ZEROED_BLOCK; /* Everything within this block will be memset to 0 when sta
int max_weight_base[CLASS_COUNT];
int HP_table[CLASS_COUNT][MAX_LEVEL + 1];
int SP_table[CLASS_COUNT][MAX_LEVEL + 1];
- int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE+1]; // +1 for RENEWAL_ASPD
- sc_type Skill2SCTable[MAX_SKILL]; // skill -> status
+ int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE + 1]; // +1 for RENEWAL_ASPD
+ sc_type Skill2SCTable[MAX_SKILL]; // skill -> status
int IconChangeTable[SC_MAX]; // status -> "icon" (icon is a bit of a misnomer, since there exist values with no icon associated)
unsigned int ChangeFlagTable[SC_MAX]; // status -> flags
int SkillChangeTable[SC_MAX]; // status -> skill
@@ -2048,7 +2059,7 @@ BEGIN_ZEROED_BLOCK; /* Everything within this block will be memset to 0 when sta
/* */
struct s_refine_info refine_info[REFINE_TYPE_MAX];
/* */
- int atkmods[3][MAX_WEAPON_TYPE];//ATK weapon modification for size (size_fix.txt)
+ int atkmods[3][MAX_WEAPON_TYPE]; // ATK weapon modification for size (size_fix.txt)
char job_bonus[CLASS_COUNT][MAX_LEVEL];
sc_conf_type sc_conf[SC_MAX];
END_ZEROED_BLOCK; /* End */
@@ -2067,7 +2078,7 @@ struct status_interface {
struct s_status_dbs *dbs;
- struct eri *data_ers; //For sc_data entries
+ struct eri *data_ers; // For sc_data entries
struct status_data dummy;
int64 natural_heal_prev_tick;
unsigned int natural_heal_diff_tick;
@@ -2083,10 +2094,10 @@ struct status_interface {
int (*type2relevant_bl_types) (int type);
int (*get_sc_type) (sc_type idx);
int (*damage) (struct block_list *src,struct block_list *target,int64 hp,int64 sp, int walkdelay, int flag);
- //Define for standard HP/SP skill-related cost triggers (mobs require no HP/SP to use skills)
+ // Define for standard HP/SP skill-related cost triggers (mobs require no HP/SP to use skills)
int (*charge) (struct block_list* bl, int64 hp, int64 sp);
int (*percent_change) (struct block_list *src,struct block_list *target,signed char hp_rate, signed char sp_rate, int flag);
- //Used to set the hp/sp of an object to an absolute value (can't kill)
+ // Used to set the hp/sp of an object to an absolute value (can't kill)
int (*set_hp) (struct block_list *bl, unsigned int hp, int flag);
int (*set_sp) (struct block_list *bl, unsigned int sp, int flag);
int (*heal) (struct block_list *bl,int64 hp,int64 sp, int flag);