diff options
-rw-r--r-- | db/constants.conf | 7 | ||||
-rw-r--r-- | db/pre-re/item_db.conf | 164 | ||||
-rw-r--r-- | db/re/item_db.conf | 122 | ||||
-rw-r--r-- | db/sc_config.conf | 54 | ||||
-rw-r--r-- | src/map/pc.c | 4 | ||||
-rw-r--r-- | src/map/skill.c | 6 | ||||
-rw-r--r-- | src/map/status.c | 39 | ||||
-rw-r--r-- | src/map/status.h | 7 |
8 files changed, 398 insertions, 5 deletions
diff --git a/db/constants.conf b/db/constants.conf index 6f87b2d51..9b11a43e9 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -1417,6 +1417,13 @@ constants_db: { SC_RESIST_PROPERTY_WIND: 667 SC_CLIENT_ONLY_EQUIP_ARROW: 668 SC_MADOGEAR: 669 + SC_POPECOOKIE: 670 + SC_VITALIZE_POTION: 671 + SC_SKF_MATK: 672 + SC_SKF_ATK: 673 + SC_SKF_ASPD: 674 + SC_SKF_CAST: 675 + SC_ALMIGHTY: 676 comment__: "Emotes" e_gasp: 0 diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf index fa204f04b..74aeaa460 100644 --- a/db/pre-re/item_db.conf +++ b/db/pre-re/item_db.conf @@ -70971,6 +70971,18 @@ item_db: ( Buy: 10 Weight: 10 BuyingStore: true + Trade: { + nodrop: true + notrade: true + nocart: true + nomail: true + noauction: true + nogstorage: true + } + Script: <" + specialeffect(EF_STEAL, AREA, playerattached()); + sc_start4(SC_POPECOOKIE, 1200000, 3, 3, 3, 0); + "> }, { Id: 12380 @@ -71380,7 +71392,7 @@ item_db: ( { Id: 12404 AegisName: "Acti_Potion" - Name: "Acti Potion" + Name: "Activation Potion" Type: "IT_USABLE" Buy: 20 Weight: 10 @@ -71393,6 +71405,10 @@ item_db: ( nomail: true noauction: true } + Script: <" + specialeffect(EF_STEAL, AREA, playerattached()); + sc_start4(SC_VITALIZE_POTION, 120000, 2, 2, 10, 0); + "> }, { Id: 12405 @@ -73162,6 +73178,90 @@ item_db: ( OnRentalEndScript: <" sc_end(SC_ALL_RIDING); "> }, { + Id: 12666 + AegisName: "Thai_Perfume_MATK" + Name: "Thai Perfume(MATK)" + Type: "IT_USABLE" + Buy: 20 + Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" + specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); + sc_start(SC_SKF_MATK, 600000, 24); + "> +}, +{ + Id: 12667 + AegisName: "Thai_Perfume_ATK" + Name: "Thai Perfume(ATK)" + Type: "IT_USABLE" + Buy: 20 + Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" + specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); + sc_start(SC_SKF_ATK, 600000, 24); + "> +}, +{ + Id: 12668 + AegisName: "Thai_Perfume_ASPD" + Name: "Thai Perfume(ASPD)" + Type: "IT_USABLE" + Buy: 20 + Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" + specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); + sc_start(SC_SKF_ASPD, 600000, 3); + "> +}, +{ + Id: 12669 + AegisName: "Thai_Perfume_CAST" + Name: "Thai Perfume(CAST)" + Type: "IT_USABLE" + Buy: 20 + Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" + specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); + sc_start(SC_SKF_CAST, 600000, 5); + "> +}, +{ Id: 12701 AegisName: "Old_Blue_Box_F" Name: "Old Blue Box" @@ -74233,6 +74333,33 @@ item_db: ( "> }, { + Id: 12883 + AegisName: "Almighty" + Name: "Almighty" + Type: "IT_USABLE" + Buy: 20 + Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" + specialeffect(EF_BASH3D, AREA, playerattached()); + sc_start(SC_FOOD_STR_CASH, 1800000, 10); + sc_start(SC_FOOD_VIT_CASH, 1800000, 10); + sc_start(SC_FOOD_AGI_CASH, 1800000, 10); + sc_start(SC_FOOD_INT_CASH, 1800000, 10); + sc_start(SC_FOOD_DEX_CASH, 1800000, 10); + sc_start(SC_FOOD_LUK_CASH, 1800000, 10); + sc_start2(SC_ALMIGHTY, 1800000, 30, 30); + "> +}, +{ Id: 12900 AegisName: "Battle_Manual_Box" Name: "Battle Manual Box" @@ -93997,6 +94124,24 @@ item_db: ( }, */ { + Id: 16254 + AegisName: "Energizing_Potion_Box" + Name: "Activation Potion Box" + Type: "IT_CASH" + Buy: 20 + Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" getitem(Acti_Potion, 5); "> +}, +{ Id: 16257 AegisName: "Buddah_Scroll" Name: "Buddah Scroll" @@ -94465,6 +94610,23 @@ item_db: ( Script: <" getitem(Clothing_Dye_Coupon2, 1); "> }, { + Id: 17224 + AegisName: "Almighty_Box" + Name: "Almighty Box" + Type: "IT_CASH" + Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" getitem(Almighty, 10); "> +}, +{ Id: 17336 AegisName: "Jeremy_Beauty_Coupon_Box" Name: "Jeremy's Beauty Coupon Box" diff --git a/db/re/item_db.conf b/db/re/item_db.conf index dbe3531b0..cf2bd7da2 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -90584,6 +90584,18 @@ item_db: ( Buy: 10 Weight: 10 BuyingStore: true + Trade: { + nodrop: true + notrade: true + nocart: true + nomail: true + noauction: true + nogstorage: true + } + Script: <" + specialeffect(EF_STEAL, AREA, playerattached()); + sc_start4(SC_POPECOOKIE, 1200000, 3, 3, 3, 0); + "> }, { Id: 12380 @@ -91001,6 +91013,10 @@ item_db: ( nomail: true noauction: true } + Script: <" + specialeffect(EF_STEAL, AREA, playerattached()); + sc_start4(SC_VITALIZE_POTION, 120000, 2, 2, 10, 0); + "> }, { Id: 12405 @@ -94088,33 +94104,85 @@ item_db: ( Id: 12666 AegisName: "Thai_Perfume_MATK" Name: "Thai Perfume(MATK)" - Type: "IT_DELAYCONSUME" + Type: "IT_USABLE" Buy: 20 Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" + specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); + sc_start(SC_SKF_MATK, 600000, 24); + "> }, { Id: 12667 AegisName: "Thai_Perfume_ATK" Name: "Thai Perfume(ATK)" - Type: "IT_DELAYCONSUME" + Type: "IT_USABLE" Buy: 20 Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" + specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); + sc_start(SC_SKF_ATK, 600000, 24); + "> }, { Id: 12668 AegisName: "Thai_Perfume_ASPD" Name: "Thai Perfume(ASPD)" - Type: "IT_DELAYCONSUME" + Type: "IT_USABLE" Buy: 20 Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" + specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); + sc_start(SC_SKF_ASPD, 600000, 3); + "> }, { Id: 12669 AegisName: "Thai_Perfume_CAST" Name: "Thai Perfume(CAST)" - Type: "IT_DELAYCONSUME" + Type: "IT_USABLE" Buy: 20 Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" + specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); + sc_start(SC_SKF_CAST, 600000, 5); + "> }, { Id: 12670 @@ -96029,6 +96097,33 @@ item_db: ( Script: <" autobonus "{ heal -3000,0; bonus2 bResEff,Eff_Blind,10000; }",10,0,0,SI_GVG_BLIND; "> }, { + Id: 12883 + AegisName: "Almighty" + Name: "Almighty" + Type: "IT_USABLE" + Buy: 20 + Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" + specialeffect(EF_BASH3D, AREA, playerattached()); + sc_start(SC_FOOD_STR_CASH, 1800000, 10); + sc_start(SC_FOOD_VIT_CASH, 1800000, 10); + sc_start(SC_FOOD_AGI_CASH, 1800000, 10); + sc_start(SC_FOOD_INT_CASH, 1800000, 10); + sc_start(SC_FOOD_DEX_CASH, 1800000, 10); + sc_start(SC_FOOD_LUK_CASH, 1800000, 10); + sc_start2(SC_ALMIGHTY, 1800000, 30, 30); + "> +}, +{ Id: 12884 AegisName: "C_Center_Potion" Name: "Infinite Concentration Potion" @@ -127064,6 +127159,7 @@ item_db: ( Name: "Activation Potion Box" Type: "IT_CASH" Buy: 20 + Weight: 10 Trade: { nodrop: true notrade: true @@ -127073,6 +127169,7 @@ item_db: ( nomail: true noauction: true } + Script: <" getitem(Acti_Potion, 5); "> }, { Id: 16257 @@ -130581,6 +130678,23 @@ item_db: ( Script: <" packageitem(); "> }, { + Id: 17224 + AegisName: "Almighty_Box" + Name: "Almighty Box" + Type: "IT_CASH" + Weight: 10 + Trade: { + nodrop: true + notrade: true + noselltonpc: true + nocart: true + nogstorage: true + nomail: true + noauction: true + } + Script: <" getitem(Almighty, 10); "> +}, +{ Id: 17226 AegisName: "C_Center_Potion_Box" Name: "Infinite Concentration Potion Box" diff --git a/db/sc_config.conf b/db/sc_config.conf index 2520fc595..11f8579e5 100644 --- a/db/sc_config.conf +++ b/db/sc_config.conf @@ -3675,3 +3675,57 @@ SC_MADOGEAR: { } Icon: "SI_MADOGEAR" } +SC_POPECOOKIE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } + Icon: "SI_POPECOOKIE" +} +SC_VITALIZE_POTION: { + Flags: { + NoDispelReset: true + } + Icon: "SI_VITALIZE_POTION" +} +SC_SKF_MATK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } + Icon: "SI_SKF_MATK" +} +SC_SKF_ATK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } + Icon: "SI_SKF_ATK" +} +SC_SKF_ASPD: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } + Icon: "SI_SKF_ASPD" +} +SC_SKF_CAST: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } + Icon: "SI_SKF_CAST" +} +SC_ALMIGHTY: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + } + Icon: "SI_ALMIGHTY" +} diff --git a/src/map/pc.c b/src/map/pc.c index c604e16dc..da53b2606 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -8809,6 +8809,10 @@ static int pc_itemheal(struct map_session_data *sd, int itemid, int hp, int sp) // 2014 Halloween Event : Pumpkin Bonus if ( sd->sc.data[SC_MTF_PUMPKIN] && itemid == ITEMID_PUMPKIN ) hp += (int)(hp * sd->sc.data[SC_MTF_PUMPKIN]->val1/100); + + // Activation Potion + if (sd->sc.data[SC_VITALIZE_POTION] != NULL) + hp += hp * sd->sc.data[SC_VITALIZE_POTION]->val3 / 100; } if(sp) { bonus = 100 + (sd->battle_status.int_<<1) diff --git a/src/map/skill.c b/src/map/skill.c index a1a22f74f..39f0bcfe1 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -935,6 +935,8 @@ static int skill_calc_heal(struct block_list *src, struct block_list *target, ui hp -= hp * 20/100; if(sc->data[SC_HEALPLUS] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN) hp += hp * sc->data[SC_HEALPLUS]->val1/100; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish] + if (sc->data[SC_VITALIZE_POTION] != NULL && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN) + hp += hp * sc->data[SC_VITALIZE_POTION]->val3 / 100; if(sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 2) hp += hp / 10; if (sc->data[SC_VITALITYACTIVATION]) @@ -15742,6 +15744,8 @@ static int skill_castfix_sc(struct block_list *bl, int time) } if (sc->data[SC_POEMBRAGI]) time -= time * sc->data[SC_POEMBRAGI]->val2 / 100; + if (sc->data[SC_SKF_CAST] != NULL) + time -= time * sc->data[SC_SKF_CAST]->val1 / 100; if (sc->data[SC_IZAYOI]) time -= time * 50 / 100; } @@ -15843,6 +15847,8 @@ static int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id, } if (sc->data[SC_MYSTICSCROLL]) VARCAST_REDUCTION(sc->data[SC_MYSTICSCROLL]->val1); + if (sc->data[SC_SKF_CAST] != NULL) + VARCAST_REDUCTION(sc->data[SC_SKF_CAST]->val1); // Fixed cast reduction bonuses if( sc->data[SC__LAZINESS] ) diff --git a/src/map/status.c b/src/map/status.c index 4d798b606..3b7658769 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -884,6 +884,13 @@ static void initChangeTables(void) status->dbs->ChangeFlagTable[SC_PHI_DEMON] |= SCB_ALL; status->dbs->ChangeFlagTable[SC_MAGIC_CANDY] |= SCB_MATK | SCB_ALL; status->dbs->ChangeFlagTable[SC_MYSTICPOWDER] |= SCB_FLEE | SCB_LUK; + status->dbs->ChangeFlagTable[SC_POPECOOKIE] |= SCB_BASE | SCB_BATK | SCB_MATK; + status->dbs->ChangeFlagTable[SC_VITALIZE_POTION] |= SCB_BATK | SCB_MATK; + status->dbs->ChangeFlagTable[SC_SKF_MATK] |= SCB_MATK; + status->dbs->ChangeFlagTable[SC_SKF_ATK] |= SCB_BATK; + status->dbs->ChangeFlagTable[SC_SKF_ASPD] |= SCB_ASPD; + status->dbs->ChangeFlagTable[SC_SKF_CAST] |= SCB_NONE; + status->dbs->ChangeFlagTable[SC_ALMIGHTY] |= SCB_BATK | SCB_MATK; // Cash Items status->dbs->ChangeFlagTable[SC_FOOD_STR_CASH] |= SCB_STR; @@ -3038,6 +3045,18 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o sd->subele[ELE_EARTH] += i; sd->subele[ELE_FIRE] -= i; } + if (sc->data[SC_POPECOOKIE] != NULL) { + i = sc->data[SC_POPECOOKIE]->val3; + sd->subele[ELE_WATER] += i; + sd->subele[ELE_EARTH] += i; + sd->subele[ELE_FIRE] += i; + sd->subele[ELE_WIND] += i; + sd->subele[ELE_POISON] += i; + sd->subele[ELE_HOLY] += i; + sd->subele[ELE_DARK] += i; + sd->subele[ELE_GHOST] += i; + sd->subele[ELE_UNDEAD] += i; + } if (sc->data[SC_MTF_MLEATKED]) sd->subele[ELE_NEUTRAL] += sc->data[SC_MTF_MLEATKED]->val1; if (sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3) @@ -4801,6 +4820,10 @@ static int status_calc_batk(struct block_list *bl, struct status_change *sc, int /* some statuses that are hidden in the status window */ if(sc->data[SC_PLUSATTACKPOWER]) batk += sc->data[SC_PLUSATTACKPOWER]->val1; + if (sc->data[SC_POPECOOKIE] != NULL) + batk += batk * sc->data[SC_POPECOOKIE]->val1 / 100; + if (sc->data[SC_VITALIZE_POTION] != NULL) + batk += batk * sc->data[SC_VITALIZE_POTION]->val1 / 100; return cap_value(batk, battle_config.batk_min, battle_config.batk_max); } #ifndef RENEWAL @@ -4880,6 +4903,10 @@ static int status_calc_batk(struct block_list *bl, struct status_change *sc, int batk += batk * sc->data[SC_2011RWC]->val2 / 100; if (sc->data[SC_STEAMPACK]) batk += sc->data[SC_STEAMPACK]->val1; + if (sc->data[SC_SKF_ATK] != NULL) + batk += sc->data[SC_SKF_ATK]->val1; + if (sc->data[SC_ALMIGHTY] != NULL) + batk += sc->data[SC_ALMIGHTY]->val1; if (sc->data[SC_SHRIMP]) batk += batk * sc->data[SC_SHRIMP]->val2 / 100; @@ -5020,6 +5047,10 @@ static int status_calc_matk(struct block_list *bl, struct status_change *sc, int /* some statuses that are hidden in the status window */ if (sc->data[SC_MINDBREAKER]) matk += matk * sc->data[SC_MINDBREAKER]->val2 / 100; + if (sc->data[SC_POPECOOKIE] != NULL) + matk += matk * sc->data[SC_POPECOOKIE]->val2 / 100; + if (sc->data[SC_VITALIZE_POTION] != NULL) + matk += matk * sc->data[SC_VITALIZE_POTION]->val2 / 100; return cap_value(matk, battle_config.matk_min, battle_config.matk_max); } @@ -5077,6 +5108,10 @@ static int status_calc_matk(struct block_list *bl, struct status_change *sc, int matk += matk * sc->data[SC_2011RWC]->val2 / 100; if (sc->data[SC_MAGIC_CANDY]) matk += sc->data[SC_MAGIC_CANDY]->val1; + if (sc->data[SC_SKF_MATK] != NULL) + matk += sc->data[SC_SKF_MATK]->val1; + if (sc->data[SC_ALMIGHTY] != NULL) + matk += sc->data[SC_ALMIGHTY]->val2; return cap_value(matk, battle_config.matk_min, battle_config.matk_max); } @@ -5901,6 +5936,8 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s bonus += sc->data[SC_BATTLESCROLL]->val1; if (sc->data[SC_STEAMPACK]) bonus += sc->data[SC_STEAMPACK]->val2; + if (sc->data[SC_SKF_ASPD] != NULL) + bonus += sc->data[SC_SKF_ASPD]->val1; } return (bonus + pots); @@ -6068,6 +6105,8 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change * aspd_rate += sc->data[SC_BATTLESCROLL]->val1 * 10; if (sc->data[SC_STEAMPACK]) aspd_rate += sc->data[SC_STEAMPACK]->val2 * 10; + if (sc->data[SC_SKF_ASPD] != NULL) + aspd_rate -= sc->data[SC_SKF_ASPD]->val1 * 10; return (short)cap_value(aspd_rate,0,SHRT_MAX); } diff --git a/src/map/status.h b/src/map/status.h index ada18bc0a..d5cb3da75 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -854,6 +854,13 @@ typedef enum sc_type { SC_RESIST_PROPERTY_WIND, SC_CLIENT_ONLY_EQUIP_ARROW, SC_MADOGEAR, + SC_POPECOOKIE, + SC_VITALIZE_POTION, + SC_SKF_MATK, + SC_SKF_ATK, + SC_SKF_ASPD, + SC_SKF_CAST, + SC_ALMIGHTY, #ifndef SC_MAX SC_MAX, //Automatically updated max, used in for's to check we are within bounds. #endif |