summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/const.txt1
-rw-r--r--db/re/item_db.conf4
-rw-r--r--src/map/status.c8
-rw-r--r--src/map/status.h1
4 files changed, 14 insertions, 0 deletions
diff --git a/db/const.txt b/db/const.txt
index d27d68a78..e2cff732b 100644
--- a/db/const.txt
+++ b/db/const.txt
@@ -1342,6 +1342,7 @@ SC_STEAMPACK 631
SC_MOVHASTE_POTION 632
SC_MOVESLOW_POTION 633
SC_BUCHEDENOEL 634
+SC_PHI_DEMON 635
e_gasp 0
e_what 1
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 48560c134..00935594e 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -86572,6 +86572,10 @@ item_db: (
Type: 2
Buy: 20
Weight: 600
+ Script: <"
+ specialeffect2 EF_PROVIDENCE;
+ sc_start SC_PHI_DEMON, 1200000, 10;
+ ">
},
{
Id: 12776
diff --git a/src/map/status.c b/src/map/status.c
index 2e5734e90..33e664f3f 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -823,6 +823,7 @@ void initChangeTables(void) {
status->dbs->IconChangeTable[SC_FOOD_CRITICALSUCCESSVALUE] = SI_FOOD_CRITICALSUCCESSVALUE;
status->dbs->IconChangeTable[SC_MORA_BUFF] = SI_MORA_BUFF;
status->dbs->IconChangeTable[SC_BUCHEDENOEL] = SI_BUCHEDENOEL;
+ status->dbs->IconChangeTable[SC_PHI_DEMON] = SI_PHI_DEMON;
// Cash Items
status->dbs->IconChangeTable[SC_FOOD_STR_CASH] = SI_FOOD_STR_CASH;
@@ -1049,6 +1050,7 @@ void initChangeTables(void) {
status->dbs->ChangeFlagTable[SC_INT_SCROLL] |= SCB_INT;
status->dbs->ChangeFlagTable[SC_STEAMPACK] |= SCB_BATK | SCB_ASPD | SCB_ALL;
status->dbs->ChangeFlagTable[SC_BUCHEDENOEL] |= SCB_REGEN | SCB_HIT | SCB_CRI;
+ status->dbs->ChangeFlagTable[SC_PHI_DEMON] |= SCB_ALL;
// Cash Items
status->dbs->ChangeFlagTable[SC_FOOD_STR_CASH] |= SCB_STR;
@@ -3115,6 +3117,10 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) {
}
if (sc->data[SC_CUP_OF_BOZA])
sd->subele[ELE_FIRE] += sc->data[SC_CUP_OF_BOZA]->val2;
+ if (sc->data[SC_PHI_DEMON]) {
+ sd->right_weapon.addrace[RC_DEMON] += sc->data[SC_PHI_DEMON]->val1;
+ sd->left_weapon.addrace[RC_DEMON] += sc->data[SC_PHI_DEMON]->val1;
+ }
}
status_cpy(&sd->battle_status, bstatus);
@@ -3496,6 +3502,8 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
regen->rate.hp *= 2;
if (sc->data[SC_VITALITYACTIVATION])
regen->flag &=~RGN_SP;
+
+ // Recovery Items
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])
diff --git a/src/map/status.h b/src/map/status.h
index 43041e316..bc93abc1e 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -818,6 +818,7 @@ typedef enum sc_type {
SC_MOVHASTE_POTION,
SC_MOVESLOW_POTION,
SC_BUCHEDENOEL,
+ SC_PHI_DEMON,
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
} sc_type;