From c70bc3975174482d04d97baeb149a489971fb144 Mon Sep 17 00:00:00 2001 From: Atemo Date: Wed, 10 Apr 2024 14:01:12 +0200 Subject: [PATCH] Implemented SC_PERIOD_RECEIVEITEM_2ND and SC_PERIOD_PLUSEXP_2ND (#8197) --- db/re/item_db_usable.yml | 14 +++++++++++--- db/re/status.yml | 18 ++++++++++++++++++ src/map/mob.cpp | 2 ++ src/map/pc.cpp | 6 ++++++ src/map/script_constants.hpp | 2 ++ src/map/status.cpp | 6 ++++-- src/map/status.hpp | 2 ++ 7 files changed, 45 insertions(+), 5 deletions(-) diff --git a/db/re/item_db_usable.yml b/db/re/item_db_usable.yml index 1e97fe788d..eef5d0bed9 100644 --- a/db/re/item_db_usable.yml +++ b/db/re/item_db_usable.yml @@ -70737,7 +70737,8 @@ Body: NoMail: true NoAuction: true Script: | - /* TODO */ + sc_start SC_PERIOD_RECEIVEITEM_2ND,604800000,50; + sc_start SC_PERIOD_PLUSEXP_2ND,604800000,50; - Id: 100914 AegisName: EXP_Drop_Up_1Hours Name: Kafra Buff(1 Hour) @@ -70750,8 +70751,9 @@ Body: NoGuildStorage: true NoMail: true NoAuction: true -# Script: | -# /* TODO */ + Script: | + sc_start SC_PERIOD_RECEIVEITEM_2ND,86400000,50; + sc_start SC_PERIOD_PLUSEXP_2ND,86400000,50; - Id: 100917 AegisName: Hero_Weapon_Hammer_4 Name: Modified Hero's Weapon Refinement Hammer IV @@ -70859,6 +70861,9 @@ Body: NoGuildStorage: true NoMail: true NoAuction: true + Script: | + sc_start SC_PERIOD_RECEIVEITEM_2ND,86400000,50; + sc_start SC_PERIOD_PLUSEXP_2ND,86400000,50; - Id: 100950 AegisName: Evt_RagFes_Box Name: Ragfest Commemorative Box @@ -73313,6 +73318,9 @@ Body: NoGuildStorage: true NoMail: true NoAuction: true + Script: | + sc_start SC_PERIOD_RECEIVEITEM_2ND,604800000,50; + sc_start SC_PERIOD_PLUSEXP_2ND,604800000,50; - Id: 101240 AegisName: Season_Evt_Reward_1 Name: January Event's Reward Box diff --git a/db/re/status.yml b/db/re/status.yml index 578f4df3f5..572dba72fb 100644 --- a/db/re/status.yml +++ b/db/re/status.yml @@ -8897,3 +8897,21 @@ Body: NoBanishingBuster: true NoDispell: true NoClearance: true + - Status: Period_Receiveitem_2nd + Icon: EFST_PERIOD_RECEIVEITEM_2ND + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Period_Plusexp_2nd + Icon: EFST_PERIOD_PLUSEXP_2ND + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true diff --git a/src/map/mob.cpp b/src/map/mob.cpp index 0ba2edfdb6..0445908670 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -2492,6 +2492,8 @@ int mob_getdroprate(struct block_list *src, std::shared_ptr mob, int b if (sd->sc.getSCE(SC_ITEMBOOST)) drop_rate_bonus += sd->sc.getSCE(SC_ITEMBOOST)->val1; + if (sd->sc.getSCE(SC_PERIOD_RECEIVEITEM_2ND)) + drop_rate_bonus += sd->sc.getSCE(SC_PERIOD_RECEIVEITEM_2ND)->val1; int cap; diff --git a/src/map/pc.cpp b/src/map/pc.cpp index e11b97f986..0bf22d6a6a 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -8222,6 +8222,9 @@ static void pc_calcexp(map_session_data *sd, t_exp *base_exp, t_exp *job_exp, st bonus += (sd->sc.getSCE(SC_EXPBOOST)->val1 / battle_config.vip_bm_increase); } + if (sd->sc.getSCE(SC_PERIOD_PLUSEXP_2ND)) + bonus += sd->sc.getSCE(SC_PERIOD_PLUSEXP_2ND)->val1; + if (*base_exp) { t_exp exp = (t_exp)(*base_exp + ((double)*base_exp * ((bonus + vip_bonus_base) / 100.))); *base_exp = cap_value(exp, 1, MAX_EXP); @@ -8231,6 +8234,9 @@ static void pc_calcexp(map_session_data *sd, t_exp *base_exp, t_exp *job_exp, st if (sd->sc.getSCE(SC_JEXPBOOST)) bonus += sd->sc.getSCE(SC_JEXPBOOST)->val1; + if (sd->sc.getSCE(SC_PERIOD_PLUSEXP_2ND)) // Increase Jexp as well + bonus += sd->sc.getSCE(SC_PERIOD_PLUSEXP_2ND)->val1; + if (*job_exp) { t_exp exp = (t_exp)(*job_exp + ((double)*job_exp * ((bonus + vip_bonus_job) / 100.))); *job_exp = cap_value(exp, 1, MAX_EXP); diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 19cd867c22..c0999ec985 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -1910,6 +1910,8 @@ export_constant(SC_GRENADE_FRAGMENT_6); export_constant(SC_AUTO_FIRING_LAUNCHER); export_constant(SC_HIDDEN_CARD); + export_constant(SC_PERIOD_RECEIVEITEM_2ND); + export_constant(SC_PERIOD_PLUSEXP_2ND); #ifdef RENEWAL export_constant(SC_EXTREMITYFIST2); diff --git a/src/map/status.cpp b/src/map/status.cpp index f6f3b068a7..828395a574 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -11513,8 +11513,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_EXPBOOST: case SC_JEXPBOOST: case SC_JP_EVENT04: - if (val1 < 0) - val1 = 0; + case SC_PERIOD_RECEIVEITEM_2ND: + case SC_PERIOD_PLUSEXP_2ND: + if (val1 < 1) + return 0; break; case SC_INCFLEE2: case SC_INCCRI: diff --git a/src/map/status.hpp b/src/map/status.hpp index 16b7cc6381..d9c3fd7365 100644 --- a/src/map/status.hpp +++ b/src/map/status.hpp @@ -1304,6 +1304,8 @@ enum sc_type : int16 { SC_GRENADE_FRAGMENT_6, SC_AUTO_FIRING_LAUNCHER, SC_HIDDEN_CARD, + SC_PERIOD_RECEIVEITEM_2ND, + SC_PERIOD_PLUSEXP_2ND, #ifdef RENEWAL SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled