diff --git a/db/re/item_db_equip.yml b/db/re/item_db_equip.yml index c3a6224a90..3e1aa6aba6 100644 --- a/db/re/item_db_equip.yml +++ b/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 diff --git a/db/re/item_db_etc.yml b/db/re/item_db_etc.yml index 1216108ecf..3c5032b0fa 100644 --- a/db/re/item_db_etc.yml +++ b/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 diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 590f5f5782..ca3b417ca4 100644 --- a/src/map/script_constants.hpp +++ b/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 diff --git a/src/map/status.cpp b/src/map/status.cpp index 7f34b84207..83a648457a 100644 --- a/src/map/status.cpp +++ b/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: diff --git a/src/map/status.hpp b/src/map/status.hpp index 3ba6fd1496..6e9db2c89f 100644 --- a/src/map/status.hpp +++ b/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