Pārlūkot izejas kodu

Implemented SC_PERIOD_RECEIVEITEM_2ND and SC_PERIOD_PLUSEXP_2ND (#8197)

Atemo 1 gadu atpakaļ
vecāks
revīzija
c70bc39751

+ 11 - 3
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

+ 18 - 0
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

+ 2 - 0
src/map/mob.cpp

@@ -2492,6 +2492,8 @@ int mob_getdroprate(struct block_list *src, std::shared_ptr<s_mob_db> 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;
 

+ 6 - 0
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);

+ 2 - 0
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);

+ 4 - 2
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:

+ 2 - 0
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