From 5c9d7a41a9c129088246e062d12f5da5a6d415b1 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Thu, 8 Mar 2018 00:41:52 +0100 Subject: [PATCH] Added support for the second summer costume (#2942) Fixed other costumes being able to be removed by Dispell Fixes #2788 Thanks to @admkakaroto --- db/re/item_db.txt | 1 + src/map/atcommand.cpp | 4 +++- src/map/script_constants.hpp | 1 + src/map/skill.cpp | 6 ++++++ src/map/status.cpp | 20 +++++++++++++++----- src/map/status.hpp | 1 + 6 files changed, 27 insertions(+), 6 deletions(-) diff --git a/db/re/item_db.txt b/db/re/item_db.txt index ed5bdd21f8..56d8ceccdb 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -11099,6 +11099,7 @@ 22812,Sealed_Dracula_Scroll,Sealed Dracula Scroll,2,10,,10,,,,0,0xFFFFFFFF,63,2,,,1,,,{ getitem callfunc("F_Rand",6228,6232,22813,19937,17314, 6635),1; },{},{} 22813,Bearer's_Shadow_Box,Bearer's Shadow Box,2,10,,10,,,,0,0xFFFFFFFF,63,2,,,1,,,{ getitem callfunc("F_Rand",24180,24181,24182,24183,24184,24185),1; },{},{} 22814,Cat_Hand_Ticket,Cat Hand Ticket,3,10,,0,,,,,,,,,,,,,{},{},{} +22822,Summer_Vacation_Costumes,Summer Vacation Costumes,2,,,100,,,,0,0xFFFFFFFF,63,2,,,1,,,{ sc_start SC_DRESSUP,600000,1; },{},{} 22823,Sealed_Sniper_Scroll,Sealed Sniper Scroll,2,10,,10,,,,,,,,,,,,,{ /*getitem callfunc("F_Rand",4491,6228,6232,24196, Hasty Shadow Armor, 19882, 17474, 6635),1;*/ },{},{} 22826,Enchant_Stone_Box4,Costume Enchantment Stone Box 4,2,10,,10,,,,,,,,,,,,,{},{},{} 22827,Shadow_Cube,Shadow Cube,2,10,,10,,,,,,,,,,,,,{/*No Info*/},{},{} diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index 7ca92673d5..ce3a2090cd 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -9731,6 +9731,7 @@ ACMD_FUNC(costume) { "Wedding", "Xmas", "Summer", + "Summer2" "Hanbok", "Oktoberfest", }; @@ -9738,6 +9739,7 @@ ACMD_FUNC(costume) { SC_WEDDING, SC_XMAS, SC_SUMMER, + SC_DRESSUP, SC_HANBOK, SC_OKTOBERFEST }; @@ -9779,7 +9781,7 @@ ACMD_FUNC(costume) { return -1; } - sc_start(&sd->bl, &sd->bl, (sc_type)name2id[k], 100, 0, -1); + sc_start(&sd->bl, &sd->bl, (sc_type)name2id[k], 100, name2id[k] == SC_DRESSUP ? 1 : 0, -1); return 0; } diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 051cd665b6..e96eaabcb9 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -1481,6 +1481,7 @@ export_constant(SC_DORAM_SVSP); export_constant(SC_FALLEN_ANGEL); export_constant(SC_CHEERUP); + export_constant(SC_DRESSUP); #ifdef RENEWAL export_constant(SC_EXTREMITYFIST2); #endif diff --git a/src/map/skill.cpp b/src/map/skill.cpp index a4625c8b87..b4f0e50889 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -1915,6 +1915,8 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case SC_CLAN_INFO: case SC_SWORDCLAN: case SC_ARCWANDCLAN: case SC_GOLDENMACECLAN: case SC_CROSSBOWCLAN: case SC_DAILYSENDMAILCNT: + case SC_WEDDING: case SC_XMAS: case SC_SUMMER: + case SC_DRESSUP: case SC_HANBOK: case SC_OKTOBERFEST: continue; case SC_WHISTLE: case SC_ASSNCROS: case SC_POEMBRAGI: case SC_APPLEIDUN: case SC_HUMMING: case SC_DONTFORGETME: @@ -7948,6 +7950,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SC_CROSSBOWCLAN: case SC_JUMPINGCLAN: case SC_DAILYSENDMAILCNT: + case SC_WEDDING: case SC_XMAS: case SC_SUMMER: + case SC_DRESSUP: case SC_HANBOK: case SC_OKTOBERFEST: continue; case SC_WHISTLE: case SC_ASSNCROS: @@ -9417,6 +9421,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SC_CLAN_INFO: case SC_SWORDCLAN: case SC_ARCWANDCLAN: case SC_GOLDENMACECLAN: case SC_CROSSBOWCLAN: case SC_DAILYSENDMAILCNT: + case SC_WEDDING: case SC_XMAS: case SC_SUMMER: + case SC_DRESSUP: case SC_HANBOK: case SC_OKTOBERFEST: continue; case SC_ASSUMPTIO: if( bl->type == BL_MOB ) diff --git a/src/map/status.cpp b/src/map/status.cpp index f18a14ddd0..af4c3afb00 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -1147,12 +1147,14 @@ void initChangeTables(void) // Geffen Magic Tournament Buffs StatusIconChangeTable[SC_GEFFEN_MAGIC1] = SI_GEFFEN_MAGIC1; - StatusIconChangeTable[SC_GEFFEN_MAGIC2] = SI_GEFFEN_MAGIC2; - StatusIconChangeTable[SC_GEFFEN_MAGIC3] = SI_GEFFEN_MAGIC3; + StatusIconChangeTable[SC_GEFFEN_MAGIC2] = SI_GEFFEN_MAGIC2; + StatusIconChangeTable[SC_GEFFEN_MAGIC3] = SI_GEFFEN_MAGIC3; // RODEX StatusIconChangeTable[SC_DAILYSENDMAILCNT] = SI_DAILYSENDMAILCNT; + StatusIconChangeTable[SC_DRESSUP] = SI_DRESS_UP; + /* Other SC which are not necessarily associated to skills */ StatusChangeFlagTable[SC_ASPDPOTION0] |= SCB_ASPD; StatusChangeFlagTable[SC_ASPDPOTION1] |= SCB_ASPD; @@ -1370,6 +1372,7 @@ void initChangeTables(void) // Clans StatusDisplayType[SC_CLAN_INFO] = BL_PC|BL_NPC; + StatusDisplayType[SC_DRESSUP] = BL_PC; /* StatusChangeState (SCS_) NOMOVE */ StatusChangeStateTable[SC_ANKLE] |= SCS_NOMOVE; @@ -8808,6 +8811,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_SUMMER: case SC_HANBOK: case SC_OKTOBERFEST: + case SC_DRESSUP: if (!vd) return 0; break; @@ -11082,6 +11086,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_SUMMER: case SC_HANBOK: case SC_OKTOBERFEST: + case SC_DRESSUP: if( !vd ) break; clif_changelook(bl,LOOK_BASE,vd->class_); @@ -11141,6 +11146,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_GOLDENMACECLAN: case SC_CROSSBOWCLAN: case SC_JUMPINGCLAN: + case SC_DRESSUP: val_flag |= 1; break; // Start |1|2 val_flag setting @@ -11286,6 +11292,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_SUMMER: case SC_HANBOK: case SC_OKTOBERFEST: + case SC_DRESSUP: case SC_SUHIDE: unit_stop_attack(bl); break; @@ -11449,6 +11456,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty opt_flag |= 0x4; break; case SC_SUMMER: + case SC_DRESSUP: sc->option |= OPTION_SUMMER; opt_flag |= 0x4; break; @@ -11684,6 +11692,7 @@ int status_change_clear(struct block_list* bl, int type) case SC_SUMMER: case SC_HANBOK: case SC_OKTOBERFEST: + case SC_DRESSUP: case SC_NOCHAT: case SC_FUSION: case SC_EARTHSCROLL: @@ -11757,9 +11766,9 @@ int status_change_clear(struct block_list* bl, int type) case SC_SPRITEMABLE: case SC_DORAM_BUF_01: case SC_DORAM_BUF_02: - case SC_GEFFEN_MAGIC1: - case SC_GEFFEN_MAGIC2: - case SC_GEFFEN_MAGIC3: + case SC_GEFFEN_MAGIC1: + case SC_GEFFEN_MAGIC2: + case SC_GEFFEN_MAGIC3: // Costumes case SC_MOONSTAR: case SC_SUPER_STAR: @@ -12457,6 +12466,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const opt_flag |= 0x4; break; case SC_SUMMER: + case SC_DRESSUP: sc->option &= ~OPTION_SUMMER; opt_flag |= 0x4; break; diff --git a/src/map/status.hpp b/src/map/status.hpp index 8cb3dfda5b..65209b4d13 100644 --- a/src/map/status.hpp +++ b/src/map/status.hpp @@ -839,6 +839,7 @@ enum sc_type : int16 { SC_FALLEN_ANGEL, SC_CHEERUP, + SC_DRESSUP, #ifdef RENEWAL SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled