Browse Source

Adds SC_MOVEHASTE_INFINITY status
* Partial fix for #5766.
* Removes bSpeedRate,25 bonuses for several items which should be applied via a status change.
Thanks to @mrjnumber1!

aleos 4 years ago
parent
commit
0beb30ad1b
5 changed files with 90 additions and 27 deletions
  1. 71 25
      db/re/item_db_equip.yml
  2. 6 2
      db/re/item_db_etc.yml
  3. 1 0
      src/map/script_constants.hpp
  4. 10 0
      src/map/status.cpp
  5. 2 0
      src/map/status.hpp

+ 71 - 25
db/re/item_db_equip.yml

@@ -5693,6 +5693,9 @@ Body:
       bonus bStr,10;
       bonus2 bAddRace,RC_Demon,3;
       skill "AL_HEAL",3;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 1316
     AegisName: Adventure_Axe
     Name: Adventure Axe
@@ -6286,7 +6289,9 @@ Body:
     Refineable: true
     Script: |
       bonus bStr,10;
-      bonus bSpeedRate,25;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 1364
     AegisName: Great_Axe
     Name: Great Axe
@@ -6361,6 +6366,9 @@ Body:
       bonus bAtkEle,Ele_Holy;
       skill "AL_HEAL",3;
       bonus2 bAddRace,RC_Demon,3;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 1367
     AegisName: Slaughter
     Name: Slaughter
@@ -26367,8 +26375,10 @@ Body:
       bonus bMaxHPrate,20;
       bonus bMaxSPrate,20;
       bonus bSPrecovRate,25;
-      bonus bSpeedRate,25;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       bonus bInt,25;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 2411
     AegisName: Grave
     Name: Greaves
@@ -27452,7 +27462,9 @@ Body:
       bonus bMaxHPrate,20;
       bonus bMaxSPrate,20;
       bonus bSPrecovRate,15;
-      bonus bSpeedRate,25;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 2463
     AegisName: Feral_Boots
     Name: Feral Boots
@@ -27993,8 +28005,10 @@ Body:
       .@r = getrefine();
       bonus bMdef,.@r;
       if (.@r>=14) {
-         bonus bSpeedRate,25;
+         sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       }
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 2492
     AegisName: Bayani_Bangungot_Boots
     Name: Bayani Bangungot Boots of Nightmare
@@ -28011,8 +28025,10 @@ Body:
       .@r = getrefine();
       bonus bMdef,.@r;
       if (.@r>=12) {
-         bonus bSpeedRate,25;
+         sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       }
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 2493
     AegisName: Goibne's_Combat_Boots_
     Name: Goibne's Greaves
@@ -41216,10 +41232,11 @@ Body:
     Refineable: true
     View: 305
     Script: |
-      bonus bSpeedRate,25;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       bonus bDef,4;
       skill "TF_HIDING",1;
     UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
       sc_end SC_HIDING;
   - Id: 5274
     AegisName: Shiny_Wig
@@ -41234,10 +41251,11 @@ Body:
     Refineable: true
     View: 306
     Script: |
-      bonus bSpeedRate,25;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       bonus bDef,4;
       skill "TF_HIDING",1;
     UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
       sc_end SC_HIDING;
   - Id: 5275
     AegisName: Marvelous_Wig
@@ -41252,10 +41270,11 @@ Body:
     Refineable: true
     View: 307
     Script: |
-      bonus bSpeedRate,25;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       bonus bDef,4;
       skill "TF_HIDING",1;
     UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
       sc_end SC_HIDING;
   - Id: 5276
     AegisName: Fantastic_Wig
@@ -41270,10 +41289,11 @@ Body:
     Refineable: true
     View: 308
     Script: |
-      bonus bSpeedRate,25;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       bonus bDef,4;
       skill "TF_HIDING",1;
     UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
       sc_end SC_HIDING;
   - Id: 5277
     AegisName: Yellow_Bandana
@@ -47641,9 +47661,11 @@ Body:
       Head_Top: true
     View: 314
     Script: |
-      bonus bSpeedRate,25;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       bonus bAspdRate,10;
       bonus bVariableCastrate,-25;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 5629
     AegisName: F_Vacation_Hat
     Name: F Vacation Hat
@@ -47912,8 +47934,10 @@ Body:
     View: 308
     Script: |
       bonus bDef,4;
-      bonus bSpeedRate,25;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       skill "TF_HIDING",1;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 5646
     AegisName: F_Whisper_Mask
     Name: F Whisper Mask
@@ -71799,7 +71823,9 @@ Body:
       bonus bStr,2;
       bonus bVit,1;
       if (getrefine() > 7)
-         bonus bSpeedRate,25;
+         sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 18638
     AegisName: Citron_Hat
     Name: Citron Hat
@@ -79032,7 +79058,9 @@ Body:
       Head_Low: true
     EquipLevelMin: 30
     Script: |
-      autobonus "{ bonus bSpeedRate,25; }",50,5000,BF_NORMAL,"{ showscript \"Smokie-formation!\"; active_transform 1056,5000; /*SMOKIE*/ }";
+      autobonus "{ sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25; }",50,5000,BF_NORMAL,"{ showscript \"Smokie-formation!\"; active_transform 1056,5000; /*SMOKIE*/ }";
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 19239
     AegisName: PoringTownCarrot
     Name: Poring Village Carrot
@@ -79044,7 +79072,9 @@ Body:
       Head_Low: true
     EquipLevelMin: 30
     Script: |
-      autobonus "{ bonus bSpeedRate,25; }",50,5000,BF_NORMAL,"{ showscript \"Lunatic-formation!\"; active_transform 1063,5000; /*LUNATIC*/ }";
+      autobonus "{ sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25; }",50,5000,BF_NORMAL,"{ showscript \"Lunatic-formation!\"; active_transform 1063,5000; /*LUNATIC*/ }";
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 19240
     AegisName: Toy_Syringe_K
     Name: Toy Syringe
@@ -84683,7 +84713,8 @@ Body:
     EquipLevelMin: 1
     View: 717
     Script: |
-      bonus bVariableCastrate,-10;
+      if (gettime(DT_MONTH) == OCTOBER)
+        bonus bVariableCastrate,-10;
   - Id: 19910
     AegisName: C_Halloween_Hat
     Name: Costume Halloween Hat
@@ -84734,7 +84765,10 @@ Body:
     EquipLevelMin: 1
     View: 691
     Script: |
-      bonus bSpeedRate,25;
+      if (gettime(DT_MONTH) == OCTOBER)
+        sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 19918
     AegisName: C_Lude_Mask
     Name: Costume Lude Mask
@@ -84745,7 +84779,8 @@ Body:
     EquipLevelMin: 1
     View: 802
     Script: |
-      bonus bAddItemHealRate,20;
+      if (gettime(DT_MONTH) == OCTOBER)
+        bonus bAddItemHealRate,20;
   - Id: 19919
     AegisName: C_Cube_Mask_
     Name: Costume Quve Mask
@@ -84756,7 +84791,8 @@ Body:
     EquipLevelMin: 1
     View: 472
     Script: |
-      bonus bAspdRate,10;
+      if (gettime(DT_MONTH) == OCTOBER)
+        bonus bAspdRate,10;
   - Id: 19920
     AegisName: C_Adv_Whisper_Mask
     Name: Costume Evolved Whisper Mask
@@ -84768,7 +84804,8 @@ Body:
     EquipLevelMin: 1
     View: 458
     Script: |
-      bonus bFlee,20;
+      if (gettime(DT_MONTH) == OCTOBER)
+        bonus bFlee,20;
   - Id: 19922
     AegisName: C_Noah_Hat
     Name: Costume Noah's Hat
@@ -85114,8 +85151,12 @@ Body:
     EquipLevelMin: 1
     View: 1144
     Script: |
-      bonus bAspdRate,10;
-      bonus bSpeedRate,25;
+      if (gettime(DT_MONTH) == DECEMBER) {
+        bonus bAspdRate,10;
+        sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
+      }
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 19977
     AegisName: C_Golden_Exclamation
     Name: Costume Golden Exclamation Mark
@@ -92480,6 +92521,7 @@ Body:
       bonus bMaxHPrate,3;
       bonus bMaxSPrate,3;
       bonus2 bSubRace,RC_Player_Human,5;
+      bonus2 bSubRace,RC_Player_Doram,5;
       if (.@r>=7) {
          bonus bMaxHPrate,7;
          bonus bMaxSPrate,7;
@@ -92488,7 +92530,7 @@ Body:
          bonus bLongHPGainValue,5;
       }
       if (.@r>=8)
-         bonus bSpeedRate,40;
+         sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       if (.@r>=9) {
          bonus bMaxHPrate,10;
          bonus bMaxSPrate,10;
@@ -92498,6 +92540,8 @@ Body:
       }
       if (.@r>=10)
          skill "AS_CLOAKING",3;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 20953
     AegisName: H_AD_Hood
     Name: High Adventurer Hood
@@ -95701,13 +95745,15 @@ Body:
       .@r = getrefine();
       .@bonus = 5;
       if (.@r >=7) {
-         .@bonus += 5;
+        .@bonus += 5;
       }
       if (.@r >=9) {
-         .@bonus += 5;
+        .@bonus += 5;
+        sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
       }
       bonus bMaxSPrate,.@bonus;
-      bonus bSpeedRate,25;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 22133
     AegisName: Shoes_IL
     Name: Illusion Shoes

+ 6 - 2
db/re/item_db_etc.yml

@@ -4400,7 +4400,9 @@ Body:
       BuyingStore: true
       DropEffect: CLIENT
     Script: |
-      bonus bSpeedRate,25;
+      sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25;
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 4132
     AegisName: Mistress_Card
     Name: Mistress Card
@@ -11018,7 +11020,9 @@ Body:
       BuyingStore: true
       DropEffect: CLIENT
     Script: |
-      autobonus "{ bonus bAgi,44; heal 0,-40; }",500,3000,0,"{ sc_start SC_SPEEDUP1,3000,50; }";
+      autobonus "{ bonus bAgi,44; sc_start SC_MOVEHAST_INFINITY,INFINITE_TICK,25; heal 0,-40; }",500,3000,0,"{ specialeffect2 EF_POTION_BERSERK; showscript \"I got the signal!!!!\"; }";
+    UnEquipScript: |
+      sc_end SC_MOVEHAST_INFINITY;
   - Id: 4582
     AegisName: Bungisngis_Card
     Name: Bungisngis Card

+ 1 - 0
src/map/script_constants.hpp

@@ -1612,6 +1612,7 @@
 	export_constant(SC_EMERGENCY_MOVE);
 	export_constant(SC_MADOGEAR);
 	export_constant(SC_NPC_HALLUCINATIONWALK);
+	export_constant(SC_MOVEHASTE_INFINITY);
 #ifdef RENEWAL
 	export_constant(SC_EXTREMITYFIST2);
 #endif

+ 10 - 0
src/map/status.cpp

@@ -1412,6 +1412,8 @@ void initChangeTables(void)
 	StatusIconChangeTable[SC_MADOGEAR] = EFST_RIDING;
 #endif
 
+	StatusIconChangeTable[SC_MOVEHASTE_INFINITY] = EFST_MOVHASTE_INFINITY;
+
 	/* Other SC which are not necessarily associated to skills */
 	StatusChangeFlagTable[SC_ASPDPOTION0] |= SCB_ASPD;
 	StatusChangeFlagTable[SC_ASPDPOTION1] |= SCB_ASPD;
@@ -1600,6 +1602,8 @@ void initChangeTables(void)
 
 	StatusChangeFlagTable[SC_MADOGEAR] |= SCB_SPEED;
 
+	StatusChangeFlagTable[SC_MOVEHASTE_INFINITY] |= SCB_SPEED;
+
 	/* StatusDisplayType Table [Ind] */
 	StatusDisplayType[SC_ALL_RIDING]	  = BL_PC;
 	StatusDisplayType[SC_PUSH_CART]		  = BL_PC;
@@ -7447,6 +7451,8 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
 			val = max(val, 25); // !TODO: Confirm bonus movement speed
 		if (sc->data[SC_EMERGENCY_MOVE])
 			val = max(val, sc->data[SC_EMERGENCY_MOVE]->val2);
+		if (sc->data[SC_MOVEHASTE_INFINITY])
+			val = max(val, sc->data[SC_MOVEHASTE_INFINITY]->val1);
 
 		// !FIXME: official items use a single bonus for this [ultramage]
 		if( sc->data[SC_SPEEDUP0] ) // Temporary item-based speedup
@@ -10224,6 +10230,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_SPRITEMABLE:
 		case SC_CLAN_INFO:
 		case SC_DAILYSENDMAILCNT:
+		case SC_MOVEHASTE_INFINITY:
 			tick = INFINITE_TICK;
 			break;
 
@@ -12899,6 +12906,7 @@ int status_change_clear(struct block_list* bl, int type)
 			case SC_REUSE_LIMIT_LUXANIMA:
 			case SC_SOULENERGY:
 			case SC_MADOGEAR:
+			case SC_MOVEHASTE_INFINITY:
 			// Costumes
 			case SC_MOONSTAR:
 			case SC_SUPER_STAR:
@@ -12936,6 +12944,7 @@ int status_change_clear(struct block_list* bl, int type)
 			case SC_ENTRY_QUEUE_APPLY_DELAY:
 			case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT:
 			case SC_MADOGEAR:
+			case SC_MOVEHASTE_INFINITY:
 			// Costumes
 			case SC_MOONSTAR:
 			case SC_SUPER_STAR:
@@ -15074,6 +15083,7 @@ void status_change_clear_buffs(struct block_list* bl, uint8 type)
 			case SC_EP16_2_BUFF_SS:
 			case SC_EP16_2_BUFF_SC:
 			case SC_EP16_2_BUFF_AC:
+			case SC_MOVEHASTE_INFINITY:
 			// Clans
 			case SC_CLAN_INFO:
 			case SC_SWORDCLAN:

+ 2 - 0
src/map/status.hpp

@@ -944,6 +944,8 @@ enum sc_type : int16 {
 
 	SC_NPC_HALLUCINATIONWALK,
 
+	SC_MOVEHASTE_INFINITY,
+
 #ifdef RENEWAL
 	SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
 #endif