diff options
63 files changed, 5172 insertions, 888 deletions
diff --git a/.travis.yml b/.travis.yml index a02f65eeb..43c8e4997 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,7 @@ matrix: - compiler: false include: - compiler: gcc - env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20190821 --enable-packetver-re --enable-buildbot" HPM="1" + env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot" HPM="1" addons: apt: sources: @@ -52,7 +52,7 @@ matrix: - libxml-sax-perl - libxml-parser-perl - compiler: clang - env: CONFIGURE_FLAGS="--enable-debug CC=clang-5.0 --enable-Werror --enable-packetver=20190821 --enable-packetver-re --enable-buildbot" + env: CONFIGURE_FLAGS="--enable-debug CC=clang-5.0 --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot" addons: apt: sources: @@ -72,7 +72,7 @@ matrix: - gdb - clang-5.0 - compiler: clang - env: CONFIGURE_FLAGS="--enable-debug CC=clang-4.0 --enable-Werror --enable-packetver=20190821 --enable-packetver-re --enable-buildbot" + env: CONFIGURE_FLAGS="--enable-debug CC=clang-4.0 --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot" addons: apt: sources: @@ -106,11 +106,11 @@ matrix: - compiler: clang env: CONFIGURE_FLAGS="--enable-debug --disable-renewal --enable-Werror --enable-buildbot" - compiler: gcc - env: CONFIGURE_FLAGS="--enable-debug --enable-Werror --enable-packetver=20190821 --enable-packetver-re --enable-buildbot" + env: CONFIGURE_FLAGS="--enable-debug --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot" - compiler: gcc env: CONFIGURE_FLAGS="--enable-debug --disable-renewal --enable-Werror --enable-buildbot" - compiler: gcc - env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-5 --disable-manager --enable-Werror --enable-packetver=20190821 --enable-packetver-re --enable-buildbot" + env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-5 --disable-manager --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot" addons: apt: sources: @@ -128,7 +128,7 @@ matrix: - gdb - gcc-5 - compiler: gcc - env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20190821 --enable-packetver-re --enable-buildbot" + env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot" addons: apt: sources: @@ -146,7 +146,7 @@ matrix: - gdb - gcc-6 - compiler: gcc - env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug CC=gcc-7 --disable-manager --enable-Werror --enable-packetver=20190821 --enable-packetver-re --enable-buildbot" + env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug CC=gcc-7 --disable-manager --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot" addons: apt: sources: @@ -164,7 +164,7 @@ matrix: - gdb - gcc-7 - compiler: gcc - env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-8 --disable-manager --enable-Werror --enable-packetver=20190821 --enable-packetver-re --enable-buildbot" + env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-8 --disable-manager --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot" addons: apt: sources: diff --git a/conf/messages.conf b/conf/messages.conf index bff4829c8..f616335fa 100644 --- a/conf/messages.conf +++ b/conf/messages.conf @@ -442,8 +442,9 @@ 432: change the sex of 433: This character has been banned until 434: Char-server has been asked to %s the character '%.*s'. -//435-449 FREE +//435-448 FREE // Homunculus messages +449: Homunculus Experience Gained Base:%u (%.2f%%) 450: You already have a homunculus // Return pet to egg message @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac cdc66ce0e. +# From configure.ac 20c3ecff9. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # diff --git a/db/castle_db.conf b/db/castle_db.conf index 907754954..c50d04c48 100644 --- a/db/castle_db.conf +++ b/db/castle_db.conf @@ -39,231 +39,433 @@ castle_db: ( CastleName: (string) Name of the castle (used by scripts and guardian name tags) OnGuildBreakEventName: (string) NPC unique name to invoke ::OnGuildBreak on, when a occupied castle is abandoned during guild break. + // ================ Optional fields =============================== + SiegeType: (string, default to SIEGE_TYPE_FE) define siege type + EnableClientWarp: (bool, default to false) enable or disable client teleport features + ClientWarp: { + Position: (int, int) x, y position of warp request + ZenyCost: (int) The zeny cost of warp + ZenyCostSiegeTime: (int) The zeny cost of warp durring woe + } }, **************************************************************************/ //================ +// Prontera +//================ +{ + CastleID: 1 + MapName: "prtg_cas01" + CastleName: "Kriemhild" // kRO : Creamhilt + OnGuildBreakEventName: "Agit#prtg_cas01" + EnableClientWarp: true + ClientWarp: { + Position: (107, 180) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } +}, +{ + CastleID: 2 + MapName: "prtg_cas02" + CastleName: "Swanhild" // kRO : Sbanhealt + OnGuildBreakEventName: "Agit#prtg_cas02" + EnableClientWarp: true + ClientWarp: { + Position: (94, 56) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } +}, +{ + CastleID: 3 + MapName: "prtg_cas03" + CastleName: "Fadhgridh" // kRO : Lazrigees + OnGuildBreakEventName: "Agit#prtg_cas03" + EnableClientWarp: true + ClientWarp: { + Position: (46, 97) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } +}, +{ + CastleID: 4 + MapName: "prtg_cas04" + CastleName: "Skoegul" // kRO : Squagul + OnGuildBreakEventName: "Agit#prtg_cas04" + EnableClientWarp: true + ClientWarp: { + Position: (260, 262) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } +}, +{ + CastleID: 5 + MapName: "prtg_cas05" + CastleName: "Gondul" // kRO : Guindull + OnGuildBreakEventName: "Agit#prtg_cas05" + EnableClientWarp: true + ClientWarp: { + Position: (26, 38) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } +}, +//================ // Al De Baran //================ { - CastleID: 0 + CastleID: 6 MapName: "aldeg_cas01" CastleName: "Neuschwanstein" // kRO : Noisyubantian OnGuildBreakEventName: "Agit#aldeg_cas01" + EnableClientWarp: true + ClientWarp: { + Position: (212, 175) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 1 + CastleID: 7 MapName: "aldeg_cas02" CastleName: "Hohenschwangau" // kRO : Hohensyubangawoo OnGuildBreakEventName: "Agit#aldeg_cas02" + EnableClientWarp: true + ClientWarp: { + Position: (82, 71) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 2 + CastleID: 8 MapName: "aldeg_cas03" CastleName: "Nuernberg" // kRO : Nyirenverk OnGuildBreakEventName: "Agit#aldeg_cas03" + EnableClientWarp: true + ClientWarp: { + Position: (109, 112) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 3 + CastleID: 9 MapName: "aldeg_cas04" CastleName: "Wuerzburg" // kRO : Byirtsburi OnGuildBreakEventName: "Agit#aldeg_cas04" + EnableClientWarp: true + ClientWarp: { + Position: (60, 116) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 4 + CastleID: 10 MapName: "aldeg_cas05" CastleName: "Rothenburg" // kRO : Rotenburk OnGuildBreakEventName: "Agit#aldeg_cas05" + EnableClientWarp: true + ClientWarp: { + Position: (61, 185) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, //================ // Geffen //================ { - CastleID: 5 + CastleID: 11 MapName: "gefg_cas01" CastleName: "Repherion" // kRO : Reprion OnGuildBreakEventName: "Agit#gefg_cas01" + EnableClientWarp: true + ClientWarp: { + Position: (40, 43) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 6 + CastleID: 12 MapName: "gefg_cas02" CastleName: "Eeyolbriggar" // kRO : Yolbriger OnGuildBreakEventName: "Agit#gefg_cas02" + EnableClientWarp: true + ClientWarp: { + Position: (22, 66) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 7 + CastleID: 13 MapName: "gefg_cas03" CastleName: "Yesnelph" // kRO : Isinlife OnGuildBreakEventName: "Agit#gefg_cas03" + EnableClientWarp: true + ClientWarp: { + Position: (112, 23) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 8 + CastleID: 14 MapName: "gefg_cas04" CastleName: "Bergel" // kRO : Berigel OnGuildBreakEventName: "Agit#gefg_cas04" + EnableClientWarp: true + ClientWarp: { + Position: (58, 46) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 9 + CastleID: 15 MapName: "gefg_cas05" CastleName: "Mersetzdeitz" // kRO : Melsedetsu OnGuildBreakEventName: "Agit#gefg_cas05" + EnableClientWarp: true + ClientWarp: { + Position: (66, 48) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, //================ // Payon //================ { - CastleID: 10 + CastleID: 16 MapName: "payg_cas01" CastleName: "Bright Arbor" // kRO : Mingting OnGuildBreakEventName: "Agit#payg_cas01" + EnableClientWarp: true + ClientWarp: { + Position: (115, 57) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 11 + CastleID: 17 MapName: "payg_cas02" CastleName: "Scarlet Palace" // kRO : Tiantan OnGuildBreakEventName: "Agit#payg_cas02" + EnableClientWarp: true + ClientWarp: { + Position: (26, 265) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 12 + CastleID: 18 MapName: "payg_cas03" CastleName: "Holy Shadow" // kRO : Fuying OnGuildBreakEventName: "Agit#payg_cas03" + EnableClientWarp: true + ClientWarp: { + Position: (43, 264) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 13 + CastleID: 19 MapName: "payg_cas04" CastleName: "Sacred Altar" // kRO : Honglou OnGuildBreakEventName: "Agit#payg_cas04" + EnableClientWarp: true + ClientWarp: { + Position: (36, 272) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 14 + CastleID: 20 MapName: "payg_cas05" CastleName: "Bamboo Grove Hill" // kRO : Zhulinxian OnGuildBreakEventName: "Agit#payg_cas05" + EnableClientWarp: true + ClientWarp: { + Position: (274, 246) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, //================ -// Prontera +// Rachel //================ { - CastleID: 15 - MapName: "prtg_cas01" - CastleName: "Kriemhild" // kRO : Creamhilt - OnGuildBreakEventName: "Agit#prtg_cas01" -}, -{ - CastleID: 16 - MapName: "prtg_cas02" - CastleName: "Swanhild" // kRO : Sbanhealt - OnGuildBreakEventName: "Agit#prtg_cas02" -}, -{ - CastleID: 17 - MapName: "prtg_cas03" - CastleName: "Fadhgridh" // kRO : Lazrigees - OnGuildBreakEventName: "Agit#prtg_cas03" -}, -{ - CastleID: 18 - MapName: "prtg_cas04" - CastleName: "Skoegul" // kRO : Squagul - OnGuildBreakEventName: "Agit#prtg_cas04" -}, -{ - CastleID: 19 - MapName: "prtg_cas05" - CastleName: "Gondul" // kRO : Guindull - OnGuildBreakEventName: "Agit#prtg_cas05" + CastleID: 21 + MapName: "arug_cas01" + CastleName: "Mardol" // kRO : Mardol + OnGuildBreakEventName: "Manager#arug_cas01" + SiegeType: "SIEGE_TYPE_SE" + EnableClientWarp: true + ClientWarp: { + Position: (77, 371) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, -//================ -// Novice Guilds -//================ { - CastleID: 20 - MapName: "nguild_alde" - CastleName: "Earth" - OnGuildBreakEventName: "Agit_N01" + CastleID: 22 + MapName: "arug_cas02" + CastleName: "Cyr" // kRO : Cyr + OnGuildBreakEventName: "Manager#arug_cas02" + SiegeType: "SIEGE_TYPE_SE" + EnableClientWarp: true + ClientWarp: { + Position: (301, 332) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 21 - MapName: "nguild_gef" - CastleName: "Air" - OnGuildBreakEventName: "Agit_N02" + CastleID: 23 + MapName: "arug_cas03" + CastleName: "Horn" // kRO : Horn + OnGuildBreakEventName: "Manager#arug_cas03" + SiegeType: "SIEGE_TYPE_SE" + EnableClientWarp: true + ClientWarp: { + Position: (322, 91) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 22 - MapName: "nguild_pay" - CastleName: "Water" - OnGuildBreakEventName: "Agit_N03" + CastleID: 24 + MapName: "arug_cas04" + CastleName: "Gefn" // kRO : Gefn + OnGuildBreakEventName: "Manager#arug_cas04" + SiegeType: "SIEGE_TYPE_SE" + EnableClientWarp: true + ClientWarp: { + Position: (322, 91) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 23 - MapName: "nguild_prt" - CastleName: "Fire" - OnGuildBreakEventName: "Agit_N04" + CastleID: 25 + MapName: "arug_cas05" + CastleName: "Bandis" // kRO : Bandis + OnGuildBreakEventName: "Manager#arug_cas05" + SiegeType: "SIEGE_TYPE_SE" + EnableClientWarp: true + ClientWarp: { + Position: (322, 91) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, //================ // Yuno //================ { - CastleID: 24 + CastleID: 26 MapName: "schg_cas01" CastleName: "Himinn" // kRO : Himinn OnGuildBreakEventName: "Manager#schg_cas01" + SiegeType: "SIEGE_TYPE_SE" + EnableClientWarp: true + ClientWarp: { + Position: (233, 300) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 25 + CastleID: 27 MapName: "schg_cas02" CastleName: "Andlangr" // kRO : Andlangr OnGuildBreakEventName: "Manager#schg_cas02" + SiegeType: "SIEGE_TYPE_SE" + EnableClientWarp: true + ClientWarp: { + Position: (101, 372) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 26 + CastleID: 28 MapName: "schg_cas03" CastleName: "Viblainn" // kRO : Viblainn OnGuildBreakEventName: "Manager#schg_cas03" + SiegeType: "SIEGE_TYPE_SE" + EnableClientWarp: true + ClientWarp: { + Position: (81, 94) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 27 + CastleID: 29 MapName: "schg_cas04" CastleName: "Hljod" // kRO : Hljod OnGuildBreakEventName: "Manager#schg_cas04" + SiegeType: "SIEGE_TYPE_SE" + EnableClientWarp: true + ClientWarp: { + Position: (233, 300) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, { - CastleID: 28 + CastleID: 30 MapName: "schg_cas05" CastleName: "Skidbladnir" // kRO : Skidbladnir OnGuildBreakEventName: "Manager#schg_cas05" + SiegeType: "SIEGE_TYPE_SE" + EnableClientWarp: true + ClientWarp: { + Position: (233, 300) + ZenyCost: 100 + ZenyCostSiegeTime: 100000 + } }, //================ -// Rachel +// Novice Guilds //================ { - CastleID: 29 - MapName: "arug_cas01" - CastleName: "Mardol" // kRO : Mardol - OnGuildBreakEventName: "Manager#arug_cas01" -}, -{ - CastleID: 30 - MapName: "arug_cas02" - CastleName: "Cyr" // kRO : Cyr - OnGuildBreakEventName: "Manager#arug_cas02" -}, -{ CastleID: 31 - MapName: "arug_cas03" - CastleName: "Horn" // kRO : Horn - OnGuildBreakEventName: "Manager#arug_cas03" + MapName: "nguild_prt" + CastleName: "Fire" + OnGuildBreakEventName: "Agit_N04" + SiegeType: "SIEGE_TYPE_TE" }, { CastleID: 32 - MapName: "arug_cas04" - CastleName: "Gefn" // kRO : Gefn - OnGuildBreakEventName: "Manager#arug_cas04" + MapName: "nguild_alde" + CastleName: "Earth" + OnGuildBreakEventName: "Agit_N01" + SiegeType: "SIEGE_TYPE_TE" }, { CastleID: 33 - MapName: "arug_cas05" - CastleName: "Bandis" // kRO : Bandis - OnGuildBreakEventName: "Manager#arug_cas05" + MapName: "nguild_gef" + CastleName: "Air" + OnGuildBreakEventName: "Agit_N02" + SiegeType: "SIEGE_TYPE_TE" +}, +{ + CastleID: 34 + MapName: "nguild_pay" + CastleName: "Water" + OnGuildBreakEventName: "Agit_N03" + SiegeType: "SIEGE_TYPE_TE" }, ) diff --git a/db/item_db2.conf b/db/item_db2.conf index 8a2d8e429..ed673c5ea 100644 --- a/db/item_db2.conf +++ b/db/item_db2.conf @@ -117,6 +117,8 @@ item_db: ( "> OnEquipScript: <" OnEquip Script (can also be multi-line) "> OnUnequipScript: <" OnUnequip Script (can also be multi-line) "> + OnRentalStartScript: <" On item renting script, gets called after item is created in inventory (can also be multi-line) "> + OnRentalEndScript: <" On item rent end/expire script, gets called after item is removed from inventory (can also be multi-line) "> // ================ Optional fields (item_db2 only) =============== Inherit: true/false (boolean, if true, inherit the values that weren't specified, from item_db.conf, diff --git a/db/pre-re/item_chain.conf b/db/pre-re/item_chain.conf index a2e4efff4..cdc92d92c 100644 --- a/db/pre-re/item_chain.conf +++ b/db/pre-re/item_chain.conf @@ -59,6 +59,12 @@ ITMCHAIN_ORE: { Emperium: 5 } +ITMCHAIN_SIEGFRIED: { + Token_Of_Siegfried: 1 + F_Token_Of_Siegfried: 1 + E_Token_Of_Siegfried: 1 +} + ITMCHAIN_GEM: { Dark_Red_Jewel: 80 Violet_Jewel: 30 diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf index c860e0239..ba9de0dd4 100644 --- a/db/pre-re/item_db.conf +++ b/db/pre-re/item_db.conf @@ -121,6 +121,8 @@ item_db: ( "> OnEquipScript: <" OnEquip Script (can also be multi-line) "> OnUnequipScript: <" OnUnequip Script (can also be multi-line) "> + OnRentalStartScript: <" On item renting script, gets called after item is created in inventory (can also be multi-line) "> + OnRentalEndScript: <" On item rent end/expire script, gets called after item is removed from inventory (can also be multi-line) "> }, **************************************************************************/ @@ -69570,7 +69572,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 1; "> + Script: <" setfont(1); "> + OnRentalEndScript: <" + if (getfont() == 1) + setfont(0); + "> }, { Id: 12288 @@ -69587,7 +69593,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 2; "> + Script: <" setfont(2); "> + OnRentalEndScript: <" + if (getfont() == 2) + setfont(0); + "> }, { Id: 12289 @@ -69604,7 +69614,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 3; "> + Script: <" setfont(3); "> + OnRentalEndScript: <" + if (getfont() == 3) + setfont(0); + "> }, { Id: 12290 @@ -69856,7 +69870,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 4; "> + Script: <" setfont(4); "> + OnRentalEndScript: <" + if (getfont() == 4) + setfont(0); + "> }, { Id: 12305 @@ -69873,7 +69891,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 5; "> + Script: <" setfont(5); "> + OnRentalEndScript: <" + if (getfont() == 5) + setfont(0); + "> }, { Id: 12306 @@ -69890,7 +69912,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 6; "> + Script: <" setfont(6); "> + OnRentalEndScript: <" + if (getfont() == 6) + setfont(0); + "> }, { Id: 12307 @@ -69907,7 +69933,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 7; "> + Script: <" setfont(7); "> + OnRentalEndScript: <" + if (getfont() == 7) + setfont(0); + "> }, { Id: 12308 @@ -69924,7 +69954,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 8; "> + Script: <" setfont(8); "> + OnRentalEndScript: <" + if (getfont() == 8) + setfont(0); + "> }, { Id: 12309 @@ -69941,7 +69975,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 9; "> + Script: <" setfont(9); "> + OnRentalEndScript: <" + if (getfont() == 9) + setfont(0); + "> }, { Id: 12310 @@ -73051,6 +73089,7 @@ item_db: ( noauction: true } Script: <" setcashmount(); "> + OnRentalEndScript: <" sc_end(SC_ALL_RIDING); "> }, { Id: 12701 diff --git a/db/re/item_chain.conf b/db/re/item_chain.conf index a2e4efff4..cdc92d92c 100644 --- a/db/re/item_chain.conf +++ b/db/re/item_chain.conf @@ -59,6 +59,12 @@ ITMCHAIN_ORE: { Emperium: 5 } +ITMCHAIN_SIEGFRIED: { + Token_Of_Siegfried: 1 + F_Token_Of_Siegfried: 1 + E_Token_Of_Siegfried: 1 +} + ITMCHAIN_GEM: { Dark_Red_Jewel: 80 Violet_Jewel: 30 diff --git a/db/re/item_db.conf b/db/re/item_db.conf index 794746784..f9997cb53 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -121,6 +121,8 @@ item_db: ( "> OnEquipScript: <" OnEquip Script (can also be multi-line) "> OnUnequipScript: <" OnUnequip Script (can also be multi-line) "> + OnRentalStartScript: <" On item renting script, gets called after item is created in inventory (can also be multi-line) "> + OnRentalEndScript: <" On item rent end/expire script, gets called after item is removed from inventory (can also be multi-line) "> }, **************************************************************************/ @@ -89226,7 +89228,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 1; "> + Script: <" setfont(1); "> + OnRentalEndScript: <" + if (getfont() == 1) + setfont(0); + "> }, { Id: 12288 @@ -89243,7 +89249,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 2; "> + Script: <" setfont(2); "> + OnRentalEndScript: <" + if (getfont() == 2) + setfont(0); + "> }, { Id: 12289 @@ -89260,7 +89270,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 3; "> + Script: <" setfont(3); "> + OnRentalEndScript: <" + if (getfont() == 3) + setfont(0); + "> }, { Id: 12290 @@ -89512,7 +89526,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 4; "> + Script: <" setfont(4); "> + OnRentalEndScript: <" + if (getfont() == 4) + setfont(0); + "> }, { Id: 12305 @@ -89529,7 +89547,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 5; "> + Script: <" setfont(5); "> + OnRentalEndScript: <" + if (getfont() == 5) + setfont(0); + "> }, { Id: 12306 @@ -89546,7 +89568,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 6; "> + Script: <" setfont(6); "> + OnRentalEndScript: <" + if (getfont() == 6) + setfont(0); + "> }, { Id: 12307 @@ -89563,7 +89589,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 7; "> + Script: <" setfont(7); "> + OnRentalEndScript: <" + if (getfont() == 7) + setfont(0); + "> }, { Id: 12308 @@ -89580,7 +89610,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 8; "> + Script: <" setfont(8); "> + OnRentalEndScript: <" + if (getfont() == 8) + setfont(0); + "> }, { Id: 12309 @@ -89597,7 +89631,11 @@ item_db: ( nomail: true noauction: true } - Script: <" setfont 9; "> + Script: <" setfont(9); "> + OnRentalEndScript: <" + if (getfont() == 9) + setfont(0); + "> }, { Id: 12310 @@ -93349,6 +93387,7 @@ item_db: ( noauction: true } Script: <" setcashmount(); "> + OnRentalEndScript: <" sc_end(SC_ALL_RIDING); "> }, { Id: 12623 diff --git a/db/sc_config.conf b/db/sc_config.conf new file mode 100644 index 000000000..12b0e2293 --- /dev/null +++ b/db/sc_config.conf @@ -0,0 +1,2811 @@ +//================= Hercules Database ===================================== +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2019 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//================= Description =========================================== +// Configurations file for status effects +//========================================================================= + +/************************************************************************** + ************* Entry structure ******************************************** + ************************************************************************** +SC_TYPE: { + // ================ Optional fields =============================== + Visible: (bool) SC can be visible for all players + Flags: { + NoDeathReset: (bool) SC cannot be removed by death. + NoSave: (bool) SC cannot be saved. + NoDispelReset: (bool) SC cannot be reset by dispell. + NoClearanceReset: (bool) SC cannot be reset by clearance. + Buff: (bool) SC considered as buff and be removed by Hermode and etc. + Debuff: (bool) SC considered as debuff and be removed by Gospel and etc. + NoMadoReset: (bool) SC cannot be reset when MADO Gear is taken off. + NoAllReset: (bool) SC cannot be reset by 'sc_end SC_ALL' and status change clear. + } +} +**************************************************************************/ +SC_PROVOKE: { + Flags: { + Debuff: true + } +} +SC_ENDURE: { + Flags: { + NoDeathReset: true + NoDispelReset: true + Buff: true + } +} +SC_HIDING: { + Flags: { + NoDispelReset: true + } +} +SC_CLOAKING: { + Flags: { + NoSave: true + NoDispelReset: true + } +} +SC_TWOHANDQUICKEN: { + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_CONCENTRATION: { + Flags: { + Buff: true + } +} +SC_ENCHANTPOISON: { + Flags: { + Buff: true + } +} +SC_POISONREACT: { + Flags: { + Buff: true + } +} +SC_QUAGMIRE: { + Flags: { + NoSave: true + NoClearanceReset: true + Debuff: true + } +} +SC_ANGELUS: { + Flags: { + Buff: true + } +} +SC_BLESSING: { + Flags: { + Buff: true + NoMadoReset: true + } +} +SC_INC_AGI: { + Flags: { + Buff: true + NoMadoReset: true + } +} +SC_DEC_AGI: { + Flags: { + NoSave: true + Debuff: true + } +} +SC_SLOWPOISON: { + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_IMPOSITIO: { + Flags: { + Buff: true + } +} +SC_SUFFRAGIUM: { + Flags: { + Buff: true + } +} +SC_ASPERSIO: { + Flags: { + Buff: true + NoMadoReset: true + } +} +SC_BENEDICTIO: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_KYRIE: { + Flags: { + Buff: true + } +} +SC_MAGNIFICAT: { + Flags: { + NoSave: true + Buff: true + } +} +SC_GLORIA: { + Flags: { + Buff: true + } +} +SC_LEXAETERNA: { + Flags: { + NoSave: true + Buff: true + } +} +SC_ADRENALINE: { + Flags: { + Buff: true + } +} +SC_WEAPONPERFECT: { + Flags: { + Buff: true + } +} +SC_OVERTHRUST: { + Flags: { + Buff: true + } +} +SC_MAXIMIZEPOWER: { + Flags: { + Buff: true + } +} +SC_TRICKDEAD: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_SHOUT: { + Flags: { + Buff: true + } +} +SC_ENERGYCOAT: { + Flags: { + Buff: true + } +} +SC_ATTHASTE_POTION1: { + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_ATTHASTE_POTION2: { + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_ATTHASTE_POTION3: { + Flags: { + Buff: true + } +} +SC_MOVHASTE_POTION: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_BARRIER: { + Flags: { + Buff: true + } +} +SC_NOEQUIPWEAPON: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_NOEQUIPSHIELD: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_NOEQUIPARMOR: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_NOEQUIPHELM: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PROTECTWEAPON: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PROTECTSHIELD: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PROTECTARMOR: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PROTECTHELM: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_AUTOGUARD: { + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_REFLECTSHIELD: { + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_DEVOTION: { + Flags: { + NoSave: true + Buff: true + } +} +SC_PROVIDENCE: { + Flags: { + NoSave: true + Buff: true + } +} +SC_DEFENDER: { + Flags: { + Buff: true + } +} +SC_MAGICROD: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_AUTOSPELL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + Buff: true + } +} +SC_SPEARQUICKEN: { + Flags: { + Buff: true + } +} +SC_BLADESTOP: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_EXPLOSIONSPIRITS: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_STEELBODY: { + Flags: { + NoSave: true + Buff: true + } +} +SC_PROPERTYFIRE: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PROPERTYWATER: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PROPERTYWIND: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PROPERTYGROUND: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_STOP: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_PROPERTYUNDEAD: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_AURABLADE: { + Flags: { + NoSave: true + Buff: true + } +} +SC_PARRYING: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_LKCONCENTRATION: { + Flags: { + NoSave: true + Buff: true + } +} +SC_TENSIONRELAX: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_BERSERK: { + Flags: { + NoSave: true + Buff: true + } +} +SC_SACRIFICE: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_GOSPEL: { + Flags: { + NoSave: true + Debuff: true + } +} +SC_SAFETYWALL: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PNEUMA: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ASSUMPTIO: { + Flags: { + Buff: true + } +} +SC_BASILICA: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_VOLCANO: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_DELUGE: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_VIOLENTGALE: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_MAGICPOWER: { + Flags: { + NoSave: true + Buff: true + } +} +SC_EDP: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + Buff: true + } +} +SC_TRUESIGHT: { + Flags: { + NoSave: true + Buff: true + } +} +SC_WINDWALK: { + Flags: { + NoSave: true + Buff: true + } +} +SC_MELTDOWN: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + Buff: true + } +} +SC_CARTBOOST: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + Buff: true + } +} +SC_BLOODING: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_JOINTBEAT: { + Flags: { + NoSave: true + NoClearanceReset: true + Debuff: true + } +} +SC_MINDBREAKER: { + Flags: { + NoSave: true + Buff: true + } +} +SC_MEMORIZE: { + Flags: { + NoSave: true + Buff: true + } +} +SC_FOGWALL: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_SPIDERWEB: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Debuff: true + } +} +SC_SUB_WEAPONPROPERTY: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + Buff: true + } +} +SC_RUN: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_STRUP: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_PROPERTYDARK: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_ADRENALINE2: { + Flags: { + NoSave: true + Buff: true + } +} +SC_PROPERTYTELEKINESIS: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_SOULLINK: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_PLUSATTACKPOWER: { + Flags: { + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_PLUSMAGICPOWER: { + Flags: { + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_KAITE: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_KAAHI: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_KAUPE: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_ONEHANDQUICKEN: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_PRESERVE: { + Flags: { + NoSave: true + Buff: true + } +} +SC_CHASEWALK: { + Flags: { + NoDispelReset: true + } +} +SC_CHASEWALK2: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_MOVESLOW_POTION: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_DOUBLECASTING: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_GRAVITATION: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_OVERTHRUSTMAX: { + Flags: { + NoSave: true + Buff: true + } +} +SC_TAROTCARD: { + Flags: { + NoSave: true + NoClearanceReset: true + Debuff: true + } +} +SC_CR_SHRINK: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + Buff: true + } +} +SC_WZ_SIGHTBLASTER: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + Buff: true + } +} +SC_RG_CCONFINE_M: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_RG_CCONFINE_S: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_NJ_UTSUSEMI: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_NJ_BUNSINJYUTSU: { + Flags: { + NoSave: true + NoClearanceReset: true + Buff: true + } +} +SC_NJ_SUITON: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Debuff: true + } +} +SC_FOOD_STR: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_AGI: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_VIT: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_DEX: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_INT: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_LUK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_BASICAVOIDANCE: { + Flags: { + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_BASICHIT: { + Flags: { + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_CRITICALSUCCESSVALUE: { + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_CASH_PLUSEXP: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_CASH_DEATHPENALTY: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_CASH_RECEIVEITEM: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_CASH_BOSS_ALARM: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_STR_CASH: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_AGI_CASH: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_VIT_CASH: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_DEX_CASH: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_INT_CASH: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_FOOD_LUK_CASH: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_SAVAGE_STEAK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_COCKTAIL_WARG_BLOOD: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_MINOR_BBQ: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_SIROMA_ICE_TEA: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_DROCERA_HERB_STEAMED: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_PUTTI_TAILS_NOODLES: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_MELON_BOMB: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_BANANA_BOMB_SITDOWN_POSTDELAY: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_BANANA_BOMB: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_PROMOTE_HEALTH_RESERCH: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_ENERGY_DRINK_RESERCH: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_EXTRACT_WHITE_POTION_Z: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_VITATA_500: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_EXTRACT_SALAMINE_JUICE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_BOOST500: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_FULL_SWING_K: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_MANA_PLUS: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_MUSTLE_M: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_LIFE_FORCE_F: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_MER_FLEE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_MER_ATK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_MER_HP: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_MER_SP: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_MER_HIT: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_SLOWCAST: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_CRITICALWOUND: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + Buff: true + } +} +SC_MOVHASTE_HORSE: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PROTECT_DEF: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PROTECT_MDEF: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_HEALPLUS: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_S_LIFEPOTION: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_L_LIFEPOTION: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_CRITICALPERCENT: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_PLUSAVOIDVALUE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_ATKER_ASPD: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_TARGET_ASPD: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_ATKER_MOVESPEED: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ATKER_BLOOD: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_TARGET_BLOOD: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ARMOR_PROPERTY: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_HELLPOWER: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_STEAMPACK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Debuff: true + NoMadoReset: true + } +} +SC_CASH_PLUSONLYJOBEXP: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_PARTYFLEE: { + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_ANGEL_PROTECT: { + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_ENCHANTBLADE: { + Flags: { + Buff: true + } +} +SC_DEATHBOUND: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_REFRESH: { + Flags: { + NoSave: true + NoDispelReset: true + Buff: true + } +} +SC_GIANTGROWTH: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_STONEHARDSKIN: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + Buff: true + } +} +SC_VITALITYACTIVATION: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_FIGHTINGSPIRIT: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_ABUNDANCE: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_EPICLESIS: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ORATIO: { + Visible: true + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_LAUDAAGNUS: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_LAUDARAMUS: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_CLOAKINGEXCEED: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_HALLUCINATIONWALK: { + Visible: true + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_HALLUCINATIONWALK_POSTDELAY: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_RENOVATIO: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_WEAPONBLOCKING: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ROLLINGCUTTER: { + Visible: true + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_EXPIATIO: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_POISONINGWEAPON: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_TOXIN: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_PARALYSE: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_VENOMBLEED: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_MAGICMUSHROOM: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_DEATHHURT: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_PYREXIA: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_OBLIVIONCURSE: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_LEECHESEND: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_DUPLELIGHT: { + Visible: true + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_FEARBREEZE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ELECTRICSHOCKER: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_MARSHOFABYSS: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_RECOGNIZEDSPELL: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_WUGDASH: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_WUGBITE: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_CAMOUFLAGE: { + Visible: true + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ACCELERATION: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_HOVERING: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_SUMMON1: { + Visible: true + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_SUMMON2: { + Visible: true + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_SUMMON3: { + Visible: true + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_SUMMON4: { + Visible: true + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_SUMMON5: { + Visible: true + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC_MVPCARD_TAOGUNKA: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + Debuff: true + } +} +SC_MVPCARD_MISTRESS: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + Debuff: true + } +} +SC_MVPCARD_ORCHERO: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + Debuff: true + } +} +SC_MVPCARD_ORCLORD: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + Debuff: true + } +} +SC_OVERHEAT_LIMITPOINT: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_OVERHEAT: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_SHAPESHIFT: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_INFRAREDSCAN: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_MAGNETICFIELD: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_NEUTRALBARRIER: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_NEUTRALBARRIER_MASTER: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_STEALTHFIELD_MASTER: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_MANU_ATK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_MANU_DEF: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_SPL_ATK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_SPL_DEF: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC__REPRODUCE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_MANU_MATK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_SPL_MATK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_STR_SCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + Debuff: true + } +} +SC_INT_SCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + Debuff: true + } +} +SC_FORCEOFVANGUARD: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_BUCHEDENOEL: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + Debuff: true + } +} +SC__AUTOSHADOWSPELL: { + Flags: { + Buff: true + } +} +SC__SHADOWFORM: { + Visible: true + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_RAID: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_SHIELDSPELL_DEF: { + Flags: { + Buff: true + } +} +SC_SHIELDSPELL_MDEF: { + Flags: { + Buff: true + } +} +SC_SHIELDSPELL_REF: { + Flags: { + Buff: true + } +} +SC__BODYPAINT: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_EXEEDBREAK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ADORAMUS: { + Flags: { + Buff: true + } +} +SC_PRESTIGE: { + Flags: { + Buff: true + } +} +SC__INVISIBILITY: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC__DEADLYINFECT: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_BANDING: { + Visible: true + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_BANDING_DEFENCE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_EARTHDRIVE: { + Flags: { + NoDispelReset: true + Buff: true + } +} +SC_INSPIRATION: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC__ENERVATION: { + Flags: { + Buff: true + } +} +SC__GROOMY: { + Flags: { + Buff: true + } +} +SC_RAISINGDRAGON: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC__IGNORANCE: { + Flags: { + Buff: true + } +} +SC__LAZINESS: { + Flags: { + Buff: true + } +} +SC_LIGHTNINGWALK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ACARAJE: { + Flags: { + NoClearanceReset: true + Buff: true + } +} +SC__UNLUCKY: { + Flags: { + Buff: true + } +} +SC_CURSEDCIRCLE_ATKER: { + Visible: true + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_CURSEDCIRCLE_TARGET: { + Visible: true + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC__WEAKNESS: { + Flags: { + Buff: true + } +} +SC_CRESCENTELBOW: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC__STRIPACCESSARY: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC__MANHOLE: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC__BLOODYLUST: { + Flags: { + Debuff: true + } +} +SC_SWING: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_SYMPHONY_LOVE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_PROPERTYWALK: { + Flags: { + NoSave: true + Buff: true + } +} +SC_SPELLFIST: { + Flags: { + Buff: true + } +} +SC_NETHERWORLD: { + Flags: { + Buff: true + } +} +SC_SIREN: { + Flags: { + Buff: true + } +} +SC_DEEP_SLEEP: { + Visible: true + Flags: { + NoSave: true + Debuff: true + } +} +SC_SIRCLEOFNATURE: { + Flags: { + Buff: true + } +} +SC_GLOOMYDAY: { + Flags: { + Buff: true + } +} +SC_GLOOMYDAY_SK: { + Flags: { + Buff: true + } +} +SC_SONG_OF_MANA: { + Flags: { + Buff: true + } +} +SC_DANCE_WITH_WUG: { + Flags: { + Buff: true + } +} +SC_RUSH_WINDMILL: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ECHOSONG: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_HARMONIZE: { + Flags: { + Buff: true + } +} +SC_MOONLIT_SERENADE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_SATURDAY_NIGHT_FEVER: { + Flags: { + Buff: true + } +} +SC_SITDOWN_FORCE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_ANALYZE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_LERADS_DEW: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_MELODYOFSINK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_BEYOND_OF_WARCRY: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_UNLIMITED_HUMMING_VOICE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + } +} +SC_WARMER: { + Flags: { + NoSave: true + } +} +SC_VENOMIMPRESS: { + Visible: true + Flags: { + NoDispelReset: true + } +} +SC_FROSTMISTY: { + Visible: true + Flags: { + Debuff: true + } +} +SC_STOMACHACHE: { + Flags: { + Debuff: true + } +} +SC_MYSTERIOUS_POWDER: { + Flags: { + Debuff: true + } +} +SC_WATER_BARRIER: { + Flags: { + NoSave: true + } +} +SC_ZEPHYR: { + Flags: { + NoSave: true + } +} +SC_POWER_OF_GAIA: { + Flags: { + NoSave: true + } +} +SC_FIRE_INSIGNIA: { + Flags: { + NoSave: true + } +} +SC_WATER_INSIGNIA: { + Flags: { + NoSave: true + } +} +SC_WIND_INSIGNIA: { + Flags: { + NoSave: true + } +} +SC_EARTH_INSIGNIA: { + Flags: { + NoSave: true + } +} +SC_MORA_BUFF: { + Flags: { + NoSave: true + } +} +SC_NEEDLE_OF_PARALYZE: { + Flags: { + NoDeathReset: true + } +} +SC_PAIN_KILLER: { + Flags: { + NoDeathReset: true + } +} +SC_G_LIFEPOTION: { + Flags: { + NoDispelReset: true + NoMadoReset: true + } +} +SC_LIGHT_OF_REGENE: { + Flags: { + NoDeathReset: true + } +} +SC_MAGIC_CANDY: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + Buff: true + NoMadoReset: true + } +} +SC_MONSTER_TRANSFORM: { + Visible: true + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_MTF_ASPD: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_MTF_RANGEATK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_MTF_MATK: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_MTF_MLEATKED: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_MTF_CRIDAMAGE: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_FULL_THROTTLE: { + Flags: { + NoSave: true + Buff: true + } +} +SC_REBOUND: { + Flags: { + NoSave: true + Buff: true + } +} +SC_TELEKINESIS_INTENSE: { + Flags: { + NoSave: true + Buff: true + } +} +SC_SKELSCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoMadoReset: true + } +} +SC_DISTRUCTIONSCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoMadoReset: true + } +} +SC_ROYALSCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoMadoReset: true + } +} +SC_IMMUNITYSCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoMadoReset: true + } +} +SC_MYSTICSCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoMadoReset: true + } +} +SC_BATTLESCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoMadoReset: true + } +} +SC_ARMORSCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoMadoReset: true + } +} +SC_FREYJASCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoMadoReset: true + } +} +SC_SOULSCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoMadoReset: true + } +} +SC_QUEST_BUFF1: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + } +} +SC_QUEST_BUFF2: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + } +} +SC_QUEST_BUFF3: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + } +} +SC_GEFFEN_MAGIC1: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + } +} +SC_GEFFEN_MAGIC2: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + } +} +SC_GEFFEN_MAGIC3: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + } +} +SC_OVERLAPEXPUP: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_M_LIFEPOTION: { + Flags: { + NoDispelReset: true + NoMadoReset: true + } +} +SC_LEADERSHIP: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_GLORYWOUNDS: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_SOULCOLD: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_HAWKEYES: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_GDSKILL_REGENERATION: { + Flags: { + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_ORCISH: { + Flags: { + NoSave: true + } +} +SC_WEIGHTOVER50: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_WEIGHTOVER90: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_WEDDING: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_XMAS: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_SUMMER: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_NOCHAT: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_FUSION: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_EARTHSCROLL: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_STORMKICK_READY: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_DOWNKICK_READY: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_COUNTERKICK_READY: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_TURNKICK_READY: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_DODGE_READY: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_JAILED: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_AUTOTRADE: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_DANCING: { + Flags: { + NoDispelReset: true + NoClearanceReset: true + } +} +SC_WHISTLE: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_ASSNCROS: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_POEMBRAGI: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_APPLEIDUN: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_HUMMING: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_DONTFORGETME: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_FORTUNE: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_SERVICEFORYOU: { + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_INCHIT: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + } +} +SC_PUSH_CART: { + Visible: true + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_COLD: { + Visible: true + Flags: { + } +} +SC_BLOOD_SUCKER: { + Visible: true + Flags: { + } +} +SC_MOONSTAR: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_SUPER_STAR: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_STRANGELIGHTS: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_DECORATION_OF_MUSIC: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_LJOSALFAR: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_MERMAID_LONGING: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_HAT_EFFECT: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_FLOWERSMOKE: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_FSTONE: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_HAPPINESS_STAR: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_MAPLE_FALLS: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_TIME_ACCESSORY: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_MAGICAL_FEATHER: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_BLOSSOM_FLUTTERING: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_SPRITEMABLE: { + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_BITESCAR: { + Flags: { + NoDispelReset: true + } +} +SC_CLAN_INFO: { + Visible: true + Flags: { + NoDeathReset: true + NoSave: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} +SC_ALL_RIDING: { + Visible: true + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoAllReset: true + } +} +SC_DAILYSENDMAILCNT: { + Visible: true + Flags: { + NoDeathReset: true + NoDispelReset: true + NoClearanceReset: true + NoMadoReset: true + NoAllReset: true + } +} diff --git a/db/sc_config.txt b/db/sc_config.txt deleted file mode 100644 index 2648f7bae..000000000 --- a/db/sc_config.txt +++ /dev/null @@ -1,505 +0,0 @@ -// Status Change configuration database -// -// Structure of Database: -// SC_NAME, flag -// -// flag 1 - SC cannot be removed by death. -// 2 - SC cannot be saved. -// 4 - SC cannot be reset by dispell. -// 8 - SC cannot be reset by clearance. -// 16 - SC considered as buff and be removed by Hermode and etc. -// 32 - SC considered as debuff and be removed by Gospel and etc. -// 64 - SC cannot be reset when MADO Gear is taken off. -// 128 - SC cannot be reset by 'sc_end SC_ALL' and status change clear. -// 256 - SC can be visible for all players -// Example: -// SC_ENDURE, 21 //SC_ENDURE: cannot be removed by death and dispell and cosidered as buff. (16 + 4 + 1 = 21) - -SC_PROVOKE, 32 -SC_ENDURE, 21 -SC_HIDING, 4 -SC_CLOAKING, 6 -SC_TWOHANDQUICKEN, 24 -SC_CONCENTRATION, 16 -SC_ENCHANTPOISON, 16 -SC_POISONREACT, 16 -SC_QUAGMIRE, 42 -SC_ANGELUS, 16 -SC_BLESSING, 80 -SC_INC_AGI, 80 -SC_DEC_AGI, 34 -SC_SLOWPOISON, 24 -SC_IMPOSITIO, 16 -SC_SUFFRAGIUM, 16 -SC_ASPERSIO, 80 -SC_BENEDICTIO, 26 -SC_KYRIE, 16 -SC_MAGNIFICAT, 18 -SC_GLORIA, 16 -SC_LEXAETERNA, 18 -SC_ADRENALINE, 16 -SC_WEAPONPERFECT, 16 -SC_OVERTHRUST, 16 -SC_MAXIMIZEPOWER, 16 -SC_TRICKDEAD, 26 -SC_SHOUT, 16 -SC_ENERGYCOAT, 16 -SC_ATTHASTE_POTION1, 24 -SC_ATTHASTE_POTION2, 24 -SC_ATTHASTE_POTION3, 16 -SC_MOVHASTE_POTION, 26 -//SC_POSTDELAY, 29 -SC_BARRIER, 16 -SC_NOEQUIPWEAPON, 30 -SC_NOEQUIPSHIELD, 30 -SC_NOEQUIPARMOR, 30 -SC_NOEQUIPHELM, 30 -SC_PROTECTWEAPON, 28 -SC_PROTECTSHIELD, 28 -SC_PROTECTARMOR, 28 -SC_PROTECTHELM, 28 -SC_AUTOGUARD, 24 -SC_REFLECTSHIELD, 24 -SC_DEVOTION, 18 -SC_PROVIDENCE, 18 -SC_DEFENDER, 16 -SC_MAGICROD, 26 -//SC_WEAPONPROPERTY, 24 -SC_AUTOSPELL, 21 -//SC_SPECIALZONE, 26 -//SC_MASK, 26 -SC_SPEARQUICKEN, 16 -SC_BLADESTOP, 26 -SC_EXPLOSIONSPIRITS, 26 -SC_STEELBODY, 18 -SC_PROPERTYFIRE, 29 -SC_PROPERTYWATER, 29 -SC_PROPERTYWIND, 29 -SC_PROPERTYGROUND, 29 -SC_STOP, 26 -SC_PROPERTYUNDEAD, 26 -//SC_STATUSONE, 26 -SC_AURABLADE, 18 -SC_PARRYING, 26 -SC_LKCONCENTRATION, 18 -SC_TENSIONRELAX, 26 -SC_BERSERK, 18 -SC_SACRIFICE, 26 -SC_GOSPEL, 34 -SC_SAFETYWALL, 28 -SC_PNEUMA, 28 -SC_ASSUMPTIO, 16 -SC_BASILICA, 26 -//SC_GROUNDMAGIC, 26 // is divided to SC_VOLCANO, 0xSC_DELUGE, 0xSC_VIOLENTGALE -SC_VOLCANO, 26 -SC_DELUGE, 26 -SC_VIOLENTGALE, 26 -SC_MAGICPOWER, 18 -SC_EDP, 23 -SC_TRUESIGHT, 18 -SC_WINDWALK, 18 -SC_MELTDOWN, 23 -SC_CARTBOOST, 23 -SC_BLOODING, 26 -SC_JOINTBEAT, 42 -SC_MINDBREAKER, 18 -SC_MEMORIZE, 18 -SC_FOGWALL, 26 -SC_SPIDERWEB, 47 -SC_SUB_WEAPONPROPERTY, 23 -SC_RUN, 26 -SC_STRUP, 26 -SC_PROPERTYDARK, 26 -SC_ADRENALINE2, 18 -SC_PROPERTYTELEKINESIS, 26 -SC_SOULLINK, 26 -SC_PLUSATTACKPOWER, 88 -SC_PLUSMAGICPOWER, 88 -SC_KAITE, 26 -SC_KAAHI, 26 -SC_KAUPE, 26 -SC_ONEHANDQUICKEN, 26 -//SC_GDSKILL_POSTDELAY, 29 -SC_PRESERVE, 18 -SC_CHASEWALK, 4 -SC_CHASEWALK2, 26 -SC_MOVESLOW_POTION, 26 -SC_DOUBLECASTING, 26 -SC_GRAVITATION, 26 -SC_OVERTHRUSTMAX, 18 -SC_TAROTCARD, 42 -SC_CR_SHRINK, 23 -SC_WZ_SIGHTBLASTER, 23 -SC_RG_CCONFINE_M, 31 -SC_RG_CCONFINE_S, 31 -SC_NJ_UTSUSEMI, 26 -SC_NJ_BUNSINJYUTSU, 26 -SC_NJ_SUITON, 47 -//SC_MENTAL, 26 -//SC_EXPMEMORY, 26 -//SC_PERFORMANCE, 26 -//SC_GAIN, 26 -//SC_DRIFT, 26 -//SC_WALLSHIFT, 26 -//SC_REINCARNATION, 26 -//SC_DENERGY, 26 -//SC_DAURA, 26 -//SC_DFREEZER, 26 -//SC_DPUNISH, 26 -//SC_DBARRIER, 26 -//SC_DWARNING, 26 -//SC_MOUSEWHEEL, 30 -//SC_DACCEL, 26 -//SC_DBLOCK, 26 -SC_FOOD_STR, 92 -SC_FOOD_AGI, 92 -SC_FOOD_VIT, 92 -SC_FOOD_DEX, 92 -SC_FOOD_INT, 92 -SC_FOOD_LUK, 92 -SC_FOOD_BASICAVOIDANCE, 88 -SC_FOOD_BASICHIT, 88 -SC_FOOD_CRITICALSUCCESSVALUE, 24 -SC_CASH_PLUSEXP, 93 -SC_CASH_DEATHPENALTY, 93 -SC_CASH_RECEIVEITEM, 93 -SC_CASH_BOSS_ALARM, 94 -//SC_DA_ENERGY, 26 -//SC_DA_FIRSTSLOT, 26 -//SC_DA_HEADDEF, 26 -//SC_DA_SPACE, 30 -//SC_DA_ITEMREBUILD, 30 -//SC_DA_ILLUSION, 26 -//SC_DA_EARPLUG, 30 -//SC_DA_CONTRACT, 29 -//SC_DA_BLACK, 30 -//SC_DA_MAGICCART, 26 -//SC_CRYSTAL, 30 -//SC_DA_REBUILD, 29 -//SC_DA_EDARKNESS, 26 -//SC_DA_EGUARDIAN, 26 -//SC_DA_TIMEOUT, 26 -SC_FOOD_STR_CASH, 93 -SC_FOOD_AGI_CASH, 93 -SC_FOOD_VIT_CASH, 93 -SC_FOOD_DEX_CASH, 93 -SC_FOOD_INT_CASH, 93 -SC_FOOD_LUK_CASH, 93 -SC_SAVAGE_STEAK, 76 -SC_COCKTAIL_WARG_BLOOD, 76 -SC_MINOR_BBQ, 76 -SC_SIROMA_ICE_TEA, 76 -SC_DROCERA_HERB_STEAMED, 76 -SC_PUTTI_TAILS_NOODLES, 76 -SC_MELON_BOMB, 12 -SC_BANANA_BOMB_SITDOWN_POSTDELAY, 12 -SC_BANANA_BOMB, 12 -SC_PROMOTE_HEALTH_RESERCH, 12 -SC_ENERGY_DRINK_RESERCH, 12 -SC_EXTRACT_WHITE_POTION_Z, 12 -SC_VITATA_500, 12 -SC_EXTRACT_SALAMINE_JUICE, 12 -SC_BOOST500, 12 -SC_FULL_SWING_K, 12 -SC_MANA_PLUS, 12 -SC_MUSTLE_M, 12 -SC_LIFE_FORCE_F, 12 -SC_MER_FLEE, 28 -SC_MER_ATK, 28 -SC_MER_HP, 28 -SC_MER_SP, 28 -SC_MER_HIT, 28 -SC_SLOWCAST, 31 -SC_CRITICALWOUND, 23 -SC_MOVHASTE_HORSE, 31 -SC_PROTECT_DEF, 28 -SC_PROTECT_MDEF, 28 -SC_HEALPLUS, 92 -SC_S_LIFEPOTION, 92 -SC_L_LIFEPOTION, 92 -SC_CRITICALPERCENT, 92 -SC_PLUSAVOIDVALUE, 92 -SC_ATKER_ASPD, 28 -SC_TARGET_ASPD, 92 -SC_ATKER_MOVESPEED, 28 -SC_ATKER_BLOOD, 28 -SC_TARGET_BLOOD, 30 -SC_ARMOR_PROPERTY, 29 -//SC_REUSE_LIMIT_A, 29 -SC_HELLPOWER, 29 -SC_STEAMPACK, 108 -//SC_REUSE_LIMIT_B, 29 -//SC_REUSE_LIMIT_C, 29 -//SC_REUSE_LIMIT_D, 29 -//SC_REUSE_LIMIT_E, 29 -//SC_REUSE_LIMIT_F, 29 -SC_CASH_PLUSONLYJOBEXP, 93 -SC_PARTYFLEE, 24 -SC_ANGEL_PROTECT, 24 -//SC_ENDURE_MDEF, 21 -SC_ENCHANTBLADE, 16 -SC_DEATHBOUND, 30 -SC_REFRESH, 22 -SC_GIANTGROWTH, 20 -SC_STONEHARDSKIN, 23 -SC_VITALITYACTIVATION, 20 -SC_FIGHTINGSPIRIT, 20 -SC_ABUNDANCE, 20 -//SC_REUSE_MILLENNIUMSHIELD, 29 -//SC_REUSE_CRUSHSTRIKE, 29 -//SC_REUSE_REFRESH, 29 -//SC_REUSE_STORMBLAST, 29 -SC_EPICLESIS, 29 -SC_ORATIO, 276 -SC_LAUDAAGNUS, 20 -SC_LAUDARAMUS, 20 -SC_CLOAKINGEXCEED, 30 -SC_HALLUCINATIONWALK, 284 -SC_HALLUCINATIONWALK_POSTDELAY, 31 -SC_RENOVATIO, 20 -SC_WEAPONBLOCKING, 28 -//SC_WEAPONBLOCKING_POSTDELAY, 31 -SC_ROLLINGCUTTER, 286 -SC_EXPIATIO, 20 -SC_POISONINGWEAPON, 28 -SC_TOXIN, 20 -SC_PARALYSE, 20 -SC_VENOMBLEED, 20 -SC_MAGICMUSHROOM, 20 -SC_DEATHHURT, 20 -SC_PYREXIA, 20 -SC_OBLIVIONCURSE, 20 -SC_LEECHESEND, 20 -SC_DUPLELIGHT, 276 -SC_FEARBREEZE, 28 -SC_ELECTRICSHOCKER, 30 -SC_MARSHOFABYSS, 20 -SC_RECOGNIZEDSPELL, 20 -//SC_WUGRIDER, 29 -SC_WUGDASH, 30 -SC_WUGBITE, 30 -SC_CAMOUFLAGE, 286 -SC_ACCELERATION, 28 -SC_HOVERING, 28 -SC_SUMMON1, 280 -SC_SUMMON2, 280 -SC_SUMMON3, 280 -SC_SUMMON4, 280 -SC_SUMMON5, 280 -SC_MVPCARD_TAOGUNKA, 60 -SC_MVPCARD_MISTRESS, 60 -SC_MVPCARD_ORCHERO, 60 -SC_MVPCARD_ORCLORD, 60 -SC_OVERHEAT_LIMITPOINT, 28 -SC_OVERHEAT, 28 -SC_SHAPESHIFT, 28 -SC_INFRAREDSCAN, 28 -SC_MAGNETICFIELD, 30 -SC_NEUTRALBARRIER, 30 -SC_NEUTRALBARRIER_MASTER, 30 -SC_STEALTHFIELD_MASTER, 30 -SC_MANU_ATK, 28 -SC_MANU_DEF, 28 -SC_SPL_ATK, 28 -SC_SPL_DEF, 28 -SC__REPRODUCE, 28 -SC_MANU_MATK, 28 -SC_SPL_MATK, 28 -SC_STR_SCROLL, 61 -SC_INT_SCROLL, 61 -SC_FORCEOFVANGUARD, 28 -SC_BUCHEDENOEL, 60 -SC__AUTOSHADOWSPELL, 16 -SC__SHADOWFORM, 286 -SC_RAID, 28 -SC_SHIELDSPELL_DEF, 16 -SC_SHIELDSPELL_MDEF, 16 -SC_SHIELDSPELL_REF, 16 -SC__BODYPAINT, 20 -SC_EXEEDBREAK, 28 -SC_ADORAMUS, 16 -SC_PRESTIGE, 16 -SC__INVISIBILITY, 30 -SC__DEADLYINFECT, 20 -SC_BANDING, 284 -SC_BANDING_DEFENCE, 28 -SC_EARTHDRIVE, 20 -SC_INSPIRATION, 28 -SC__ENERVATION, 16 -SC__GROOMY, 16 -SC_RAISINGDRAGON, 30 -SC__IGNORANCE, 16 -SC__LAZINESS, 16 -SC_LIGHTNINGWALK, 28 -SC_ACARAJE, 24 -SC__UNLUCKY, 16 -SC_CURSEDCIRCLE_ATKER, 284 -SC_CURSEDCIRCLE_TARGET, 284 -SC__WEAKNESS, 16 -SC_CRESCENTELBOW, 28 -//SC_NOEQUIPACCESSARY, 30 -SC__STRIPACCESSARY, 28 -SC__MANHOLE, 94 -//SC_POPECOOKIE, 28 -SC__BLOODYLUST, 32 -SC_SWING, 28 -SC_SYMPHONY_LOVE, 28 -SC_PROPERTYWALK, 18 -SC_SPELLFIST, 16 -SC_NETHERWORLD, 16 -SC_SIREN, 16 -SC_DEEP_SLEEP, 290 -SC_SIRCLEOFNATURE, 16 -SC_GLOOMYDAY, 16 -SC_GLOOMYDAY_SK, 16 -SC_SONG_OF_MANA, 16 -SC_DANCE_WITH_WUG, 16 -SC_RUSH_WINDMILL, 28 -SC_ECHOSONG, 28 -SC_HARMONIZE, 16 -SC_MOONLIT_SERENADE, 28 -SC_SATURDAY_NIGHT_FEVER, 16 -SC_SITDOWN_FORCE, 28 -SC_ANALYZE, 28 -SC_LERADS_DEW, 28 -SC_MELODYOFSINK, 28 -SC_BEYOND_OF_WARCRY, 28 -SC_UNLIMITED_HUMMING_VOICE, 28 -SC_WARMER, 2 -SC_VENOMIMPRESS, 260 -SC_FROSTMISTY, 288 -//SC_ASSUMPTIO2, 16 -//SC_GN_TRAINING_SWORD, 31 -//SC_GN_REMODELING_CART, 31 -SC_STOMACHACHE, 32 -SC_MYSTERIOUS_POWDER, 32 -//SC_ELEMENTAL_AGGRESSIVE, 2 -//SC_ELEMENTAL_WAIT, 2 -//SC_ELEMENTAL_PASSIVE, 2 -//SC_ELEMENTAL_DEFENSIVE, 2 -SC_WATER_BARRIER, 2 -SC_ZEPHYR, 2 -SC_POWER_OF_GAIA, 2 -SC_FIRE_INSIGNIA, 2 -SC_WATER_INSIGNIA, 2 -SC_WIND_INSIGNIA, 2 -SC_EARTH_INSIGNIA, 2 -SC_MORA_BUFF, 2 -//SC_REUSE_LIMIT_G, 29 -//SC_REUSE_LIMIT_H, 29 -SC_NEEDLE_OF_PARALYZE, 1 -SC_PAIN_KILLER, 1 -SC_G_LIFEPOTION, 68 -//SC_VITALIZE_POTION, 4 -SC_LIGHT_OF_REGENE, 1 -//SC_SONIC_CLAW_POSTDELAY, 2 -//SC_SILVERVEIN_RUSH_POSTDELAY, 2 -//SC_MIDNIGHT_FRENZY_POSTDELAY, 2 -//SC_TINDER_BREAKER, 2 -//SC_TINDER_BREAKER_POSTDELAY, 2 -//SC_CBC, 2 -//SC_CBC_POSTDELAY, 2 -//SC_EQC, 2 -SC_MAGIC_CANDY, 92 -//SC_ALL_RIDING_REUSE_LIMIT, 1 -//SC_HANDICAPSTATE_DEEP_SLEEP, 80 -SC_MONSTER_TRANSFORM, 268 -SC_MTF_ASPD, 12 -SC_MTF_RANGEATK, 12 -SC_MTF_MATK, 12 -SC_MTF_MLEATKED,12 -SC_MTF_CRIDAMAGE, 12 -SC_FULL_THROTTLE, 18 -SC_REBOUND, 18 -SC_TELEKINESIS_INTENSE, 18 - -// Geffen Scrolls -SC_SKELSCROLL, 69 -SC_DISTRUCTIONSCROLL, 69 -SC_ROYALSCROLL, 69 -SC_IMMUNITYSCROLL, 69 -SC_MYSTICSCROLL, 69 -SC_BATTLESCROLL, 69 -SC_ARMORSCROLL, 69 -SC_FREYJASCROLL, 69 -SC_SOULSCROLL, 69 - -// Eden Crystal Synthesis -SC_QUEST_BUFF1, 13 -SC_QUEST_BUFF2, 13 -SC_QUEST_BUFF3, 13 - -// Geffen Magic Tournament -SC_GEFFEN_MAGIC1, 14 -SC_GEFFEN_MAGIC2, 14 -SC_GEFFEN_MAGIC3, 14 - -SC_OVERLAPEXPUP, 12 -SC_M_LIFEPOTION, 68 - -// Guild Auras should not be saved -SC_LEADERSHIP,78 -SC_GLORYWOUNDS,78 -SC_SOULCOLD,78 -SC_HAWKEYES,78 -SC_GDSKILL_REGENERATION,78 - -SC_ORCISH, 2 - -// Unremovable -SC_WEIGHTOVER50, 207 -SC_WEIGHTOVER90, 207 -SC_WEDDING, 77 -SC_XMAS, 77 -SC_SUMMER, 77 -SC_NOCHAT, 205 -SC_FUSION, 77 -SC_EARTHSCROLL, 77 -SC_STORMKICK_READY, 77 -SC_DOWNKICK_READY, 77 -SC_COUNTERKICK_READY, 77 -SC_TURNKICK_READY, 77 -SC_DODGE_READY, 77 -SC_JAILED, 205 -SC_AUTOTRADE, 77 -SC_DANCING, 12 -SC_WHISTLE, 79 -SC_ASSNCROS, 79 -SC_POEMBRAGI, 79 -SC_APPLEIDUN, 79 -SC_HUMMING, 79 -SC_DONTFORGETME, 79 -SC_FORTUNE, 79 -SC_SERVICEFORYOU, 79 -SC_INCHIT, 77 -SC_PUSH_CART, 461 -SC_COLD, 256 -SC_BLOOD_SUCKER, 256 - -// Costumes -SC_MOONSTAR, 463 -SC_SUPER_STAR, 463 -SC_STRANGELIGHTS, 463 -SC_DECORATION_OF_MUSIC, 463 -SC_LJOSALFAR, 463 -SC_MERMAID_LONGING, 463 -SC_HAT_EFFECT, 463 -SC_FLOWERSMOKE, 463 -SC_FSTONE, 463 -SC_HAPPINESS_STAR, 463 -SC_MAPLE_FALLS, 463 -SC_TIME_ACCESSORY, 463 -SC_MAGICAL_FEATHER, 463 -SC_BLOSSOM_FLUTTERING, 463 - -// Summoner -SC_SPRITEMABLE, 205 -SC_BITESCAR, 4 - -// Clan System -SC_CLAN_INFO, 463 - -// Cant Clear -SC_ALL_RIDING, 397 - -SC_DAILYSENDMAILCNT, 461 diff --git a/doc/atcommands.txt b/doc/atcommands.txt index 139295973..0b4dce579 100644 --- a/doc/atcommands.txt +++ b/doc/atcommands.txt @@ -1059,6 +1059,12 @@ Changes the gender attached to the player's account. --------------------------------------- +@changecharsex + +Changes the gender attached to the player's character. + +--------------------------------------- + @marry <player 1> <player 2> @divorce <player> diff --git a/doc/constants.md b/doc/constants.md index 4bb663365..d57dadcc6 100644 --- a/doc/constants.md +++ b/doc/constants.md @@ -4552,6 +4552,12 @@ - `GUILD_ONLINE_VENDOR`: 1 - `GUILD_ONLINE_NO_VENDOR`: 2 +### Siege Types + +- `SIEGE_TYPE_FE`: 0 +- `SIEGE_TYPE_SE`: 1 +- `SIEGE_TYPE_TE`: 2 + ### Renewal - `RENEWAL`: 1 diff --git a/doc/script_commands.txt b/doc/script_commands.txt index d14393a8a..e6bd32ca6 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -2208,11 +2208,11 @@ Multiple statements can be grouped with { }, curly braces, just like with the 'if' statement. Example 1: - while (switch(select("Yes", "No") == 2)) + while (select("Yes", "No") == 2) mes("You picked no."); Example 2: multiple statements - while (switch(select("Yes", "No") == 2 )) { + while (select("Yes", "No") == 2) { mes("Why did you pick no?"); mes("You should pick yes instead!"); } @@ -9172,6 +9172,12 @@ currently used font is used, default interface font is used again. --------------------------------------- +*getfont() + +This command return the player's current font. +if no player is attached it would always return a 0, which is also the default font. + +---------------------------------------' *showdigit(<value>{, <type>}) Displays given numeric 'value' in large digital clock font on top of the diff --git a/npc/battleground/kvm/kvm_item_pay.txt b/npc/battleground/kvm/kvm_item_pay.txt index f9dac0766..e6ef623b5 100644 --- a/npc/battleground/kvm/kvm_item_pay.txt +++ b/npc/battleground/kvm/kvm_item_pay.txt @@ -37,15 +37,15 @@ //========================================================================= bat_room,151,144,3 script KVM Logistic Officer#a 4_M_JOB_KNIGHT2,{ - if (countitem(War_Badge)) { - .@pointstoadd = countitem(War_Badge); - delitem 7773,.@pointstoadd; + if (countitem(KVM_Badge)) { + .@pointstoadd = countitem(KVM_Badge); + delitem KVM_Badge,.@pointstoadd; kvm_point += .@pointstoadd; mes("[Logistics]"); - mesf("Are those %ss I see?", getitemname(7773)); + mesf("Are those %ss I see?", getitemname(KVM_Badge)); mes("We no longer accept that currency,\r" "but I can exchange those for you."); - mesf("So you have %d %ss?", .@pointstoadd, getitemname(7773)); + mesf("So you have %d %ss?", .@pointstoadd, getitemname(KVM_Badge)); mesf("Alright, all set, you now have ^580080%d^000000 KVM Points.", kvm_point); next; } diff --git a/npc/custom/battleground/bg_kvm01.txt b/npc/custom/battleground/bg_kvm01.txt index a66e202e3..bb3ba3e06 100644 --- a/npc/custom/battleground/bg_kvm01.txt +++ b/npc/custom/battleground/bg_kvm01.txt @@ -329,7 +329,7 @@ bat_c01,51,130,5 script Guillaume Vintenar::VintenarKvM01a 4_M_KY_HEAD,{ } setquest 6025; - getitem 7773, .@reward; + getitem KVM_Badge, .@reward; bg_leave; warp "bat_room",155,150; end; @@ -365,7 +365,7 @@ bat_c01,148,53,1 script Croix Vintenar::VintenarKvM01b 4_M_CRU_HEAD,{ } setquest 6025; - getitem 7773, .@reward; + getitem KVM_Badge, .@reward; bg_leave; warp "bat_room",155,150; end; diff --git a/npc/custom/battleground/bg_kvm02.txt b/npc/custom/battleground/bg_kvm02.txt index f1637069a..a6cadb3af 100644 --- a/npc/custom/battleground/bg_kvm02.txt +++ b/npc/custom/battleground/bg_kvm02.txt @@ -329,7 +329,7 @@ bat_c02,51,130,5 script Guillaume Vintenar::VintenarKvM02a 4_M_KY_HEAD,{ } setquest 6025; - getitem 7773, .@reward; + getitem KVM_Badge, .@reward; bg_leave; warp "bat_room",155,150; end; @@ -365,7 +365,7 @@ bat_c02,148,53,1 script Croix Vintenar::VintenarKvM02b 4_M_CRU_HEAD,{ } setquest 6025; - getitem 7773, .@reward; + getitem KVM_Badge, .@reward; bg_leave; warp "bat_room",155,150; end; diff --git a/npc/custom/battleground/bg_kvm03.txt b/npc/custom/battleground/bg_kvm03.txt index 612047dcb..8f255c90f 100644 --- a/npc/custom/battleground/bg_kvm03.txt +++ b/npc/custom/battleground/bg_kvm03.txt @@ -329,7 +329,7 @@ bat_c03,51,130,5 script Guillaume Vintenar::VintenarKvM03a 4_M_KY_HEAD,{ } setquest 6025; - getitem 7773, .@reward; + getitem KVM_Badge, .@reward; bg_leave; warp "bat_room",155,150; end; @@ -365,7 +365,7 @@ bat_c03,148,53,1 script Croix Vintenar::VintenarKvM03b 4_M_CRU_HEAD,{ } setquest 6025; - getitem 7773, .@reward; + getitem KVM_Badge, .@reward; bg_leave; warp "bat_room",155,150; end; diff --git a/sql-files/item_db.sql b/sql-files/item_db.sql index 3ebd77ed3..10475f05d 100644 --- a/sql-files/item_db.sql +++ b/sql-files/item_db.sql @@ -4647,9 +4647,9 @@ REPLACE INTO `item_db` VALUES ('12283','Internet_Cafe2','Internet Cafe2','2','0' REPLACE INTO `item_db` VALUES ('12284','Internet_Cafe3','Internet Cafe3','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_INT, 5400000, 8; sc_start SC_FOOD_VIT, 5400000, 4; sc_start SC_FOOD_DEX, 5400000, 6; sc_start SC_PLUSMAGICPOWER, 5400000, 40;','',''); REPLACE INTO `item_db` VALUES ('12285','Internet_Cafe4','Internet Cafe4','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_DEX, 5400000, 8; sc_start SC_FOOD_LUK, 5400000, 4; sc_start SC_FOOD_AGI, 5400000, 6; sc_start SC_PLUSATTACKPOWER, 5400000, 24; sc_start SC_PLUSMAGICPOWER, 5400000, 24;','',''); REPLACE INTO `item_db` VALUES ('12286','Masquerade_Ball_Box2','Masquerade Ball Box2','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getrandgroupitem 12286,1;','',''); -REPLACE INTO `item_db` VALUES ('12287','Love_Angel','Love Angel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 1;','',''); -REPLACE INTO `item_db` VALUES ('12288','Squirrel','Squirrel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 2;','',''); -REPLACE INTO `item_db` VALUES ('12289','Gogo','Gogo Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 3;','',''); +REPLACE INTO `item_db` VALUES ('12287','Love_Angel','Love Angel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(1);','',''); +REPLACE INTO `item_db` VALUES ('12288','Squirrel','Squirrel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(2);','',''); +REPLACE INTO `item_db` VALUES ('12289','Gogo','Gogo Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(3);','',''); REPLACE INTO `item_db` VALUES ('12290','Mysterious_Can','Mysterious Can Magic Powder','2','0','10','5','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'1',NULL,'0',NULL,'0','percentheal 5,0; skilleffect AL_BLESSING,0; sc_start SC_BLESSING,120000,5;','',''); REPLACE INTO `item_db` VALUES ('12291','Mysterious_PET_Bottle','Mysterious PET Bottle','2','0','10','5','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'1',NULL,'0',NULL,'0','percentheal 5,0; skilleffect AL_INCAGI,0; sc_start SC_INC_AGI,120000,5;','',''); REPLACE INTO `item_db` VALUES ('12292','Unripe_Fruit','Unripe Fruit','0','0','500','250','200','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','percentheal 20,0;','',''); @@ -4664,12 +4664,12 @@ REPLACE INTO `item_db` VALUES ('12300','Wild_Rose_Scroll','Wild Rose Contract',' REPLACE INTO `item_db` VALUES ('12301','Doppelganger_Scroll','Doppelganger Contract','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_DOPPELGANGER, 1800000;','',''); REPLACE INTO `item_db` VALUES ('12302','Ygnizem_Scroll','Egnigem Cenia Contract','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_YGNIZEM, 1800000;','',''); REPLACE INTO `item_db` VALUES ('12303','Water_Of_Blessing','Blessing Of Water','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','','',''); -REPLACE INTO `item_db` VALUES ('12304','Picture_Diary','Diary Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 4;','',''); -REPLACE INTO `item_db` VALUES ('12305','Mini_Heart','Mini Heart Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 5;','',''); -REPLACE INTO `item_db` VALUES ('12306','Newcomer','Freshman Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 6;','',''); -REPLACE INTO `item_db` VALUES ('12307','Kid','Kid Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 7;','',''); -REPLACE INTO `item_db` VALUES ('12308','Magic_Castle','Magic Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 8;','',''); -REPLACE INTO `item_db` VALUES ('12309','Bulging_Head','JJangu Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 9;','',''); +REPLACE INTO `item_db` VALUES ('12304','Picture_Diary','Diary Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(4);','',''); +REPLACE INTO `item_db` VALUES ('12305','Mini_Heart','Mini Heart Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(5);','',''); +REPLACE INTO `item_db` VALUES ('12306','Newcomer','Freshman Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(6);','',''); +REPLACE INTO `item_db` VALUES ('12307','Kid','Kid Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(7);','',''); +REPLACE INTO `item_db` VALUES ('12308','Magic_Castle','Magic Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(8);','',''); +REPLACE INTO `item_db` VALUES ('12309','Bulging_Head','JJangu Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(9);','',''); REPLACE INTO `item_db` VALUES ('12310','Spray_Of_Flowers','Spray Of Flowers','2','0','0','0','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','467',NULL,'1',NULL,'0',NULL,'0','sc_start SC_FOOD_BASICAVOIDANCE,600000,10;','',''); REPLACE INTO `item_db` VALUES ('12311','Large_Spray_Of_Flowers','Huge Spray Of Flowers','11','0','0','0','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','467',NULL,'1',NULL,'0',NULL,'0','itemskill ALL_PARTYFLEE,1;','',''); REPLACE INTO `item_db` VALUES ('12312','Thick_Manual50','Thick Battle Manual','2','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_CASH_PLUSEXP,3600000,50;','',''); diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql index bba22d6df..8a1388f15 100644 --- a/sql-files/item_db_re.sql +++ b/sql-files/item_db_re.sql @@ -6116,9 +6116,9 @@ REPLACE INTO `item_db` VALUES ('12283','Internet_Cafe2','Internet Cafe2','2','0' REPLACE INTO `item_db` VALUES ('12284','Internet_Cafe3','Internet Cafe3','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_INT, 5400000, 8; sc_start SC_FOOD_VIT, 5400000, 4; sc_start SC_FOOD_DEX, 5400000, 6; sc_start SC_PLUSMAGICPOWER, 5400000, 40;','',''); REPLACE INTO `item_db` VALUES ('12285','Internet_Cafe4','Internet Cafe4','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_DEX, 5400000, 8; sc_start SC_FOOD_LUK, 5400000, 4; sc_start SC_FOOD_AGI, 5400000, 6; sc_start SC_PLUSATTACKPOWER, 5400000, 24; sc_start SC_PLUSMAGICPOWER, 5400000, 24;','',''); REPLACE INTO `item_db` VALUES ('12286','Masquerade_Ball_Box2','Masquerade Ball Box2','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getrandgroupitem 12286,1;','',''); -REPLACE INTO `item_db` VALUES ('12287','Love_Angel','Love Angel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 1;','',''); -REPLACE INTO `item_db` VALUES ('12288','Squirrel','Squirrel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 2;','',''); -REPLACE INTO `item_db` VALUES ('12289','Gogo','Gogo Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 3;','',''); +REPLACE INTO `item_db` VALUES ('12287','Love_Angel','Love Angel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(1);','',''); +REPLACE INTO `item_db` VALUES ('12288','Squirrel','Squirrel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(2);','',''); +REPLACE INTO `item_db` VALUES ('12289','Gogo','Gogo Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(3);','',''); REPLACE INTO `item_db` VALUES ('12290','Mysterious_Can','Mysterious Can Magic Powder','2','0','10','5','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'1',NULL,'0',NULL,'0','percentheal 5,0; skilleffect AL_BLESSING,0; sc_start SC_BLESSING,120000,5;','',''); REPLACE INTO `item_db` VALUES ('12291','Mysterious_PET_Bottle','Mysterious PET Bottle','2','0','10','5','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'1',NULL,'0',NULL,'0','percentheal 5,0; skilleffect AL_INCAGI,0; sc_start SC_INC_AGI,120000,5;','',''); REPLACE INTO `item_db` VALUES ('12292','Unripe_Fruit','Unripe Yggdrasilberry','0','0','500','250','200','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','percentheal 20,0;','',''); @@ -6133,12 +6133,12 @@ REPLACE INTO `item_db` VALUES ('12300','Wild_Rose_Scroll','Wild Rose Contract',' REPLACE INTO `item_db` VALUES ('12301','Doppelganger_Scroll','Doppelganger Contract','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_DOPPELGANGER, 1800000;','',''); REPLACE INTO `item_db` VALUES ('12302','Ygnizem_Scroll','Egnigem Cenia Contract','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_YGNIZEM, 1800000;','',''); REPLACE INTO `item_db` VALUES ('12303','Water_Of_Blessing','Blessing Of Water','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','','',''); -REPLACE INTO `item_db` VALUES ('12304','Picture_Diary','Diary Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 4;','',''); -REPLACE INTO `item_db` VALUES ('12305','Mini_Heart','Mini Heart Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 5;','',''); -REPLACE INTO `item_db` VALUES ('12306','Newcomer','Freshman Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 6;','',''); -REPLACE INTO `item_db` VALUES ('12307','Kid','Kid Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 7;','',''); -REPLACE INTO `item_db` VALUES ('12308','Magic_Castle','Magic Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 8;','',''); -REPLACE INTO `item_db` VALUES ('12309','Bulging_Head','JJangu Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 9;','',''); +REPLACE INTO `item_db` VALUES ('12304','Picture_Diary','Diary Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(4);','',''); +REPLACE INTO `item_db` VALUES ('12305','Mini_Heart','Mini Heart Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(5);','',''); +REPLACE INTO `item_db` VALUES ('12306','Newcomer','Freshman Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(6);','',''); +REPLACE INTO `item_db` VALUES ('12307','Kid','Kid Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(7);','',''); +REPLACE INTO `item_db` VALUES ('12308','Magic_Castle','Magic Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(8);','',''); +REPLACE INTO `item_db` VALUES ('12309','Bulging_Head','JJangu Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(9);','',''); REPLACE INTO `item_db` VALUES ('12310','Spray_Of_Flowers','Spray Of Flowers','2','0','0','0','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','467',NULL,'1',NULL,'0',NULL,'0','sc_start SC_FOOD_BASICAVOIDANCE,600000,10;','',''); REPLACE INTO `item_db` VALUES ('12311','Large_Spray_Of_Flowers','Huge Spray Of Flowers','11','0','0','0','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','467',NULL,'1',NULL,'0',NULL,'0','itemskill ALL_PARTYFLEE,1;','',''); REPLACE INTO `item_db` VALUES ('12312','Thick_Manual50','Thick Battle Manual','2','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_CASH_PLUSEXP,3600000,50;','',''); diff --git a/sql-files/main.sql b/sql-files/main.sql index e364ec778..27839afa3 100644 --- a/sql-files/main.sql +++ b/sql-files/main.sql @@ -930,6 +930,7 @@ INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1546059075); -- 2018-12-2 INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1554760320); -- 2019-04-08--21-52.sql INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1556147483); -- 2019-04-25--02-12.sql INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1557414445); -- 2019-05-09--18-07.sql +INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1565293394); -- 2019-08-08--19-43.sql -- -- Table structure for table `storage` diff --git a/sql-files/upgrades/2019-08-08--19-43.sql b/sql-files/upgrades/2019-08-08--19-43.sql new file mode 100644 index 000000000..35faf4ace --- /dev/null +++ b/sql-files/upgrades/2019-08-08--19-43.sql @@ -0,0 +1,95 @@ +#1565293394 + +-- This file is part of Hercules. +-- http://herc.ws - http://github.com/HerculesWS/Hercules +-- +-- Copyright (C) 2019 Hercules Dev Team +-- +-- Hercules is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +ALTER TABLE `guild_castle` DROP PRIMARY KEY; +ALTER TABLE `guild_castle` ADD COLUMN `castle_name` VARCHAR(24) AFTER `castle_id`; +UPDATE `guild_castle` SET `castle_name` = 'aldeg_cas01' WHERE castle_id = 0; +UPDATE `guild_castle` SET `castle_name` = 'aldeg_cas02' WHERE castle_id = 1; +UPDATE `guild_castle` SET `castle_name` = 'aldeg_cas03' WHERE castle_id = 2; +UPDATE `guild_castle` SET `castle_name` = 'aldeg_cas04' WHERE castle_id = 3; +UPDATE `guild_castle` SET `castle_name` = 'aldeg_cas05' WHERE castle_id = 4; +UPDATE `guild_castle` SET `castle_name` = 'gefg_cas01' WHERE castle_id = 5; +UPDATE `guild_castle` SET `castle_name` = 'gefg_cas02' WHERE castle_id = 6; +UPDATE `guild_castle` SET `castle_name` = 'gefg_cas03' WHERE castle_id = 7; +UPDATE `guild_castle` SET `castle_name` = 'gefg_cas04' WHERE castle_id = 8; +UPDATE `guild_castle` SET `castle_name` = 'gefg_cas05' WHERE castle_id = 9; +UPDATE `guild_castle` SET `castle_name` = 'payg_cas01' WHERE castle_id = 10; +UPDATE `guild_castle` SET `castle_name` = 'payg_cas02' WHERE castle_id = 11; +UPDATE `guild_castle` SET `castle_name` = 'payg_cas03' WHERE castle_id = 12; +UPDATE `guild_castle` SET `castle_name` = 'payg_cas04' WHERE castle_id = 13; +UPDATE `guild_castle` SET `castle_name` = 'payg_cas05' WHERE castle_id = 14; +UPDATE `guild_castle` SET `castle_name` = 'prtg_cas01' WHERE castle_id = 15; +UPDATE `guild_castle` SET `castle_name` = 'prtg_cas02' WHERE castle_id = 16; +UPDATE `guild_castle` SET `castle_name` = 'prtg_cas03' WHERE castle_id = 17; +UPDATE `guild_castle` SET `castle_name` = 'prtg_cas04' WHERE castle_id = 18; +UPDATE `guild_castle` SET `castle_name` = 'prtg_cas05' WHERE castle_id = 19; +UPDATE `guild_castle` SET `castle_name` = 'nguild_alde' WHERE castle_id = 20; +UPDATE `guild_castle` SET `castle_name` = 'nguild_gef' WHERE castle_id = 21; +UPDATE `guild_castle` SET `castle_name` = 'nguild_pay' WHERE castle_id = 22; +UPDATE `guild_castle` SET `castle_name` = 'nguild_prt' WHERE castle_id = 23; +UPDATE `guild_castle` SET `castle_name` = 'schg_cas01' WHERE castle_id = 24; +UPDATE `guild_castle` SET `castle_name` = 'schg_cas02' WHERE castle_id = 25; +UPDATE `guild_castle` SET `castle_name` = 'schg_cas03' WHERE castle_id = 26; +UPDATE `guild_castle` SET `castle_name` = 'schg_cas04' WHERE castle_id = 27; +UPDATE `guild_castle` SET `castle_name` = 'schg_cas05' WHERE castle_id = 28; +UPDATE `guild_castle` SET `castle_name` = 'arug_cas01' WHERE castle_id = 29; +UPDATE `guild_castle` SET `castle_name` = 'arug_cas02' WHERE castle_id = 30; +UPDATE `guild_castle` SET `castle_name` = 'arug_cas03' WHERE castle_id = 31; +UPDATE `guild_castle` SET `castle_name` = 'arug_cas04' WHERE castle_id = 32; +UPDATE `guild_castle` SET `castle_name` = 'arug_cas05' WHERE castle_id = 33; + +-- Change the castle ids +UPDATE `guild_castle` SET `castle_id` = 1 WHERE castle_name = 'prtg_cas01'; +UPDATE `guild_castle` SET `castle_id` = 2 WHERE castle_name = 'prtg_cas02'; +UPDATE `guild_castle` SET `castle_id` = 3 WHERE castle_name = 'prtg_cas03'; +UPDATE `guild_castle` SET `castle_id` = 4 WHERE castle_name = 'prtg_cas04'; +UPDATE `guild_castle` SET `castle_id` = 5 WHERE castle_name = 'prtg_cas05'; +UPDATE `guild_castle` SET `castle_id` = 6 WHERE castle_name = 'aldeg_cas01'; +UPDATE `guild_castle` SET `castle_id` = 7 WHERE castle_name = 'aldeg_cas02'; +UPDATE `guild_castle` SET `castle_id` = 8 WHERE castle_name = 'aldeg_cas03'; +UPDATE `guild_castle` SET `castle_id` = 9 WHERE castle_name = 'aldeg_cas04'; +UPDATE `guild_castle` SET `castle_id` = 10 WHERE castle_name = 'aldeg_cas05'; +UPDATE `guild_castle` SET `castle_id` = 11 WHERE castle_name = 'gefg_cas01'; +UPDATE `guild_castle` SET `castle_id` = 12 WHERE castle_name = 'gefg_cas02'; +UPDATE `guild_castle` SET `castle_id` = 13 WHERE castle_name = 'gefg_cas03'; +UPDATE `guild_castle` SET `castle_id` = 14 WHERE castle_name = 'gefg_cas04'; +UPDATE `guild_castle` SET `castle_id` = 15 WHERE castle_name = 'gefg_cas05'; +UPDATE `guild_castle` SET `castle_id` = 16 WHERE castle_name = 'payg_cas01'; +UPDATE `guild_castle` SET `castle_id` = 17 WHERE castle_name = 'payg_cas02'; +UPDATE `guild_castle` SET `castle_id` = 18 WHERE castle_name = 'payg_cas03'; +UPDATE `guild_castle` SET `castle_id` = 19 WHERE castle_name = 'payg_cas04'; +UPDATE `guild_castle` SET `castle_id` = 20 WHERE castle_name = 'payg_cas05'; +UPDATE `guild_castle` SET `castle_id` = 21 WHERE castle_name = 'arug_cas01'; +UPDATE `guild_castle` SET `castle_id` = 22 WHERE castle_name = 'arug_cas02'; +UPDATE `guild_castle` SET `castle_id` = 23 WHERE castle_name = 'arug_cas03'; +UPDATE `guild_castle` SET `castle_id` = 24 WHERE castle_name = 'arug_cas04'; +UPDATE `guild_castle` SET `castle_id` = 25 WHERE castle_name = 'arug_cas05'; +UPDATE `guild_castle` SET `castle_id` = 26 WHERE castle_name = 'schg_cas01'; +UPDATE `guild_castle` SET `castle_id` = 27 WHERE castle_name = 'schg_cas02'; +UPDATE `guild_castle` SET `castle_id` = 29 WHERE castle_name = 'schg_cas04'; +UPDATE `guild_castle` SET `castle_id` = 28 WHERE castle_name = 'schg_cas03'; +UPDATE `guild_castle` SET `castle_id` = 30 WHERE castle_name = 'schg_cas05'; +UPDATE `guild_castle` SET `castle_id` = 31 WHERE castle_name = 'nguild_prt'; +UPDATE `guild_castle` SET `castle_id` = 32 WHERE castle_name = 'nguild_alde'; +UPDATE `guild_castle` SET `castle_id` = 33 WHERE castle_name = 'nguild_gef'; +UPDATE `guild_castle` SET `castle_id` = 34 WHERE castle_name = 'nguild_pay'; +ALTER TABLE `guild_castle` ADD PRIMARY KEY (`castle_id`); +ALTER TABLE `guild_castle` DROP COLUMN `castle_name`; +INSERT INTO `sql_updates` (`timestamp`) VALUES (1565293394); diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt index 3025a728c..85bd2a245 100644 --- a/sql-files/upgrades/index.txt +++ b/sql-files/upgrades/index.txt @@ -55,3 +55,4 @@ 2019-04-08--21-52.sql 2019-04-25--02-12.sql 2019-05-09--18-07.sql +2019-08-08--19-43.sql diff --git a/src/common/HPMDataCheck.h b/src/common/HPMDataCheck.h index 96fea8fe0..fd34a1d82 100644 --- a/src/common/HPMDataCheck.h +++ b/src/common/HPMDataCheck.h @@ -665,6 +665,8 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = { { "PACKET_ZC_ACK_LEAVE_GUILD1", sizeof(struct PACKET_ZC_ACK_LEAVE_GUILD1), SERVER_TYPE_MAP }, { "PACKET_ZC_ACK_LEAVE_GUILD2", sizeof(struct PACKET_ZC_ACK_LEAVE_GUILD2), SERVER_TYPE_MAP }, { "PACKET_ZC_ACK_OPEN_WRITE_MAIL", sizeof(struct PACKET_ZC_ACK_OPEN_WRITE_MAIL), SERVER_TYPE_MAP }, + { "PACKET_ZC_ACK_RANKING_name", sizeof(struct PACKET_ZC_ACK_RANKING_name), SERVER_TYPE_MAP }, + { "PACKET_ZC_ACK_RANKING_points", sizeof(struct PACKET_ZC_ACK_RANKING_points), SERVER_TYPE_MAP }, { "PACKET_ZC_ACK_RANKING_sub", sizeof(struct PACKET_ZC_ACK_RANKING_sub), SERVER_TYPE_MAP }, { "PACKET_ZC_ACK_REMOVE_ITEM_MAIL", sizeof(struct PACKET_ZC_ACK_REMOVE_ITEM_MAIL), SERVER_TYPE_MAP }, { "PACKET_ZC_ACK_REQMAKINGITEM", sizeof(struct PACKET_ZC_ACK_REQMAKINGITEM), SERVER_TYPE_MAP }, @@ -741,6 +743,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = { { "PACKET_ZC_SPRITE_CHANGE", sizeof(struct PACKET_ZC_SPRITE_CHANGE), SERVER_TYPE_MAP }, { "PACKET_ZC_STATUS_CHANGE_ACK", sizeof(struct PACKET_ZC_STATUS_CHANGE_ACK), SERVER_TYPE_MAP }, { "PACKET_ZC_STYLE_CHANGE_RES", sizeof(struct PACKET_ZC_STYLE_CHANGE_RES), SERVER_TYPE_MAP }, + { "PACKET_ZC_TALKBOX_CHATCONTENTS", sizeof(struct PACKET_ZC_TALKBOX_CHATCONTENTS), SERVER_TYPE_MAP }, { "PACKET_ZC_UI_ACTION", sizeof(struct PACKET_ZC_UI_ACTION), SERVER_TYPE_MAP }, { "PACKET_ZC_UPDATE_ITEM_FROM_BUYING_STORE", sizeof(struct PACKET_ZC_UPDATE_ITEM_FROM_BUYING_STORE), SERVER_TYPE_MAP }, { "PACKET_ZC_USE_ITEM_ACK", sizeof(struct PACKET_ZC_USE_ITEM_ACK), SERVER_TYPE_MAP }, diff --git a/src/common/mmo.h b/src/common/mmo.h index 1fa6fadc8..66736bff0 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -907,6 +907,14 @@ struct guild_castle { int mapindex; char castle_name[NAME_LENGTH]; char castle_event[NAME_LENGTH]; + int siege_type; + bool enable_client_warp; + struct { + int x; + int y; + int zeny; + int zeny_siege; + } client_warp; int guild_id; int economy; int defense; diff --git a/src/common/packets/packets2019_len_main.h b/src/common/packets/packets2019_len_main.h index 949aae804..424abe14f 100644 --- a/src/common/packets/packets2019_len_main.h +++ b/src/common/packets/packets2019_len_main.h @@ -103,7 +103,11 @@ packetLen(0x007c, 44) // ZC_NOTIFY_STANDENTRY_NPC packetLen(0x007d, 2) // CZ_NOTIFY_ACTORINIT // Packet: 0x007e +#if PACKETVER >= 20190904 +packetLen(0x007e, 46) // CZ_REQUEST_TIME +#elif PACKETVER >= 20190109 packetLen(0x007e, 105) // CZ_REQUEST_TIME +#endif // Packet: 0x007f packetLen(0x007f, 6) // ZC_NOTIFY_TIME @@ -916,7 +920,11 @@ packetLen(0x018f, 8) // ZC_ACK_REQMAKINGITEM packetLen(0x0190, 23) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // Packet: 0x0191 +#if PACKETVER >= 20190904 +packetLen(0x0191, 27) // ZC_TALKBOX_CHATCONTENTS +#elif PACKETVER >= 20190109 packetLen(0x0191, 86) // ZC_TALKBOX_CHATCONTENTS +#endif // Packet: 0x0192 packetLen(0x0192, 24) // ZC_UPDATE_MAPINFO @@ -1966,7 +1974,11 @@ packetLen(0x0365, 8) // CZ_MOVE_ITEM_FROM_STORE_TO_BODY2 packetLen(0x0366, 10) // CZ_USE_SKILL_TOGROUND2 // Packet: 0x0367 +#if PACKETVER >= 20190904 +packetLen(0x0367, 31) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2 +#elif PACKETVER >= 20190109 packetLen(0x0367, 90) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2 +#endif // Packet: 0x0368 packetLen(0x0368, 6) // CZ_REQNAME2 @@ -4710,5 +4722,45 @@ packetLen(0x0b54, 8) packetLen(0x0b55, -1) #endif +// Packet: 0x0b56 +#if PACKETVER >= 20190904 +packetLen(0x0b56, -1) +#endif + +// Packet: 0x0b57 +#if PACKETVER >= 20190904 +packetLen(0x0b57, -1) +#endif + +// Packet: 0x0b58 +#if PACKETVER >= 20190904 +packetLen(0x0b58, 2) +#endif + +// Packet: 0x0b59 +#if PACKETVER >= 20190918 +packetLen(0x0b59, 2) +#endif + +// Packet: 0x0b5a +#if PACKETVER >= 20190918 +packetLen(0x0b5a, 4) +#endif + +// Packet: 0x0b5b +#if PACKETVER >= 20190918 +packetLen(0x0b5b, -1) +#endif + +// Packet: 0x0b5c +#if PACKETVER >= 20190918 +packetLen(0x0b5c, 10) +#endif + +// Packet: 0x0b5d +#if PACKETVER >= 20190918 +packetLen(0x0b5d, 2) +#endif + #endif /* COMMON_PACKETS2019_LEN_MAIN_H */ diff --git a/src/common/packets/packets2019_len_re.h b/src/common/packets/packets2019_len_re.h index c31a10191..32c14775d 100644 --- a/src/common/packets/packets2019_len_re.h +++ b/src/common/packets/packets2019_len_re.h @@ -103,7 +103,11 @@ packetLen(0x007c, 44) // ZC_NOTIFY_STANDENTRY_NPC packetLen(0x007d, 2) // CZ_NOTIFY_ACTORINIT // Packet: 0x007e +#if PACKETVER >= 20190904 +packetLen(0x007e, 46) // CZ_REQUEST_TIME +#elif PACKETVER >= 20190109 packetLen(0x007e, 105) // CZ_REQUEST_TIME +#endif // Packet: 0x007f packetLen(0x007f, 6) // ZC_NOTIFY_TIME @@ -916,7 +920,11 @@ packetLen(0x018f, 8) // ZC_ACK_REQMAKINGITEM packetLen(0x0190, 23) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // Packet: 0x0191 +#if PACKETVER >= 20190904 +packetLen(0x0191, 27) // ZC_TALKBOX_CHATCONTENTS +#elif PACKETVER >= 20190109 packetLen(0x0191, 86) // ZC_TALKBOX_CHATCONTENTS +#endif // Packet: 0x0192 packetLen(0x0192, 24) // ZC_UPDATE_MAPINFO @@ -1972,7 +1980,11 @@ packetLen(0x0365, 8) // CZ_MOVE_ITEM_FROM_STORE_TO_BODY2 packetLen(0x0366, 10) // CZ_USE_SKILL_TOGROUND2 // Packet: 0x0367 +#if PACKETVER >= 20190904 +packetLen(0x0367, 31) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2 +#elif PACKETVER >= 20190109 packetLen(0x0367, 90) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2 +#endif // Packet: 0x0368 packetLen(0x0368, 6) // CZ_REQNAME2 @@ -4722,5 +4734,45 @@ packetLen(0x0b54, 8) packetLen(0x0b55, -1) #endif +// Packet: 0x0b56 +#if PACKETVER >= 20190904 +packetLen(0x0b56, -1) +#endif + +// Packet: 0x0b57 +#if PACKETVER >= 20190904 +packetLen(0x0b57, -1) +#endif + +// Packet: 0x0b58 +#if PACKETVER >= 20190904 +packetLen(0x0b58, 2) +#endif + +// Packet: 0x0b59 +#if PACKETVER >= 20190918 +packetLen(0x0b59, 2) +#endif + +// Packet: 0x0b5a +#if PACKETVER >= 20190918 +packetLen(0x0b5a, 4) +#endif + +// Packet: 0x0b5b +#if PACKETVER >= 20190918 +packetLen(0x0b5b, -1) +#endif + +// Packet: 0x0b5c +#if PACKETVER >= 20190918 +packetLen(0x0b5c, 10) +#endif + +// Packet: 0x0b5d +#if PACKETVER >= 20190918 +packetLen(0x0b5d, 2) +#endif + #endif /* COMMON_PACKETS2019_LEN_RE_H */ diff --git a/src/common/packets/packets2019_len_zero.h b/src/common/packets/packets2019_len_zero.h index abe81796c..9cdc9db05 100644 --- a/src/common/packets/packets2019_len_zero.h +++ b/src/common/packets/packets2019_len_zero.h @@ -103,7 +103,11 @@ packetLen(0x007c, 44) // ZC_NOTIFY_STANDENTRY_NPC packetLen(0x007d, 2) // CZ_NOTIFY_ACTORINIT // Packet: 0x007e +#if PACKETVER >= 20190828 +packetLen(0x007e, 46) // CZ_REQUEST_TIME +#elif PACKETVER >= 20190116 packetLen(0x007e, 105) // CZ_REQUEST_TIME +#endif // Packet: 0x007f packetLen(0x007f, 6) // ZC_NOTIFY_TIME @@ -916,7 +920,11 @@ packetLen(0x018f, 8) // ZC_ACK_REQMAKINGITEM packetLen(0x0190, 23) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // Packet: 0x0191 +#if PACKETVER >= 20190828 +packetLen(0x0191, 27) // ZC_TALKBOX_CHATCONTENTS +#elif PACKETVER >= 20190116 packetLen(0x0191, 86) // ZC_TALKBOX_CHATCONTENTS +#endif // Packet: 0x0192 packetLen(0x0192, 24) // ZC_UPDATE_MAPINFO @@ -1966,7 +1974,11 @@ packetLen(0x0365, 8) // CZ_MOVE_ITEM_FROM_STORE_TO_BODY2 packetLen(0x0366, 10) // CZ_USE_SKILL_TOGROUND2 // Packet: 0x0367 +#if PACKETVER >= 20190828 +packetLen(0x0367, 31) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2 +#elif PACKETVER >= 20190116 packetLen(0x0367, 90) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2 +#endif // Packet: 0x0368 packetLen(0x0368, 6) // CZ_REQNAME2 @@ -4697,5 +4709,50 @@ packetLen(0x0b53, 52) packetLen(0x0b54, 8) #endif +// Packet: 0x0b55 +#if PACKETVER >= 20190828 +packetLen(0x0b55, -1) +#endif + +// Packet: 0x0b56 +#if PACKETVER >= 20190828 +packetLen(0x0b56, -1) +#endif + +// Packet: 0x0b57 +#if PACKETVER >= 20190828 +packetLen(0x0b57, -1) +#endif + +// Packet: 0x0b58 +#if PACKETVER >= 20190828 +packetLen(0x0b58, 2) +#endif + +// Packet: 0x0b59 +#if PACKETVER >= 20190918 +packetLen(0x0b59, 2) +#endif + +// Packet: 0x0b5a +#if PACKETVER >= 20190918 +packetLen(0x0b5a, 4) +#endif + +// Packet: 0x0b5b +#if PACKETVER >= 20190918 +packetLen(0x0b5b, -1) +#endif + +// Packet: 0x0b5c +#if PACKETVER >= 20190918 +packetLen(0x0b5c, 10) +#endif + +// Packet: 0x0b5d +#if PACKETVER >= 20190918 +packetLen(0x0b5d, 2) +#endif + #endif /* COMMON_PACKETS2019_LEN_ZERO_H */ diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 22969606d..b472694c4 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -6750,6 +6750,18 @@ ACMD(changesex) return true; } +ACMD(changecharsex) +{ + int i; + + pc->resetskill(sd, PCRESETSKILL_CHSEX); + // to avoid any problem with equipment and invalid sex, equipment is unequipped. + for (i=0; i<EQI_MAX; i++) + if (sd->equip_index[i] >= 0) pc->unequipitem(sd, sd->equip_index[i], PCUNEQUIPITEM_RECALC|PCUNEQUIPITEM_FORCE); + chrif->changesex(sd, false); + return true; +} + /*================================================ * @mute - Mutes a player for a set amount of time *------------------------------------------------*/ @@ -10115,6 +10127,7 @@ static void atcommand_basecommands(void) ACMD_DEF(clearweather), ACMD_DEF(uptime), ACMD_DEF(changesex), + ACMD_DEF(changecharsex), ACMD_DEF(mute), ACMD_DEF(refresh), ACMD_DEF(refreshall), diff --git a/src/map/battle.h b/src/map/battle.h index 779e360bf..4400d37d1 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -103,8 +103,8 @@ enum e_battle_check_target { //New definitions [Skotlex] enum battle_dmg_type { BDT_NORMAL = 0, // Normal attack //BDT_PICKUP = 1, // Pick up item - //BDT_SITDOWN = 2, // Sit down - //BDT_STANDUP = 3, // Stand up + BDT_SITDOWN = 2, // Sit down + BDT_STANDUP = 3, // Stand up BDT_ENDURE = 4, // Damage (endure) BDT_SPLASH = 5, // Splash BDT_SKILL = 6, // Skill diff --git a/src/map/clif.c b/src/map/clif.c index 1c245ed43..33c003321 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -4789,9 +4789,9 @@ static void clif_getareachar_unit(struct map_session_data *sd, struct block_list //Modifies the type of damage according to status changes [Skotlex] //Aegis data specifies that: 4 endure against single hit sources, 9 against multi-hit. -static inline int clif_calc_delay(int type, int div, int damage, int delay) +static inline enum battle_dmg_type clif_calc_delay(enum battle_dmg_type type, int div, int damage, int delay) { - return ( delay == 0 && damage > 0 ) ? ( div > 1 ? 9 : 4 ) : type; + return ( delay == 0 && damage > 0 ) ? ( div > 1 ? BDT_MULTIENDURE : BDT_ENDURE ) : type; } /*========================================== @@ -4822,7 +4822,7 @@ static int clif_calc_walkdelay(struct block_list *bl, int delay, int type, int d /// 08c8 <src ID>.L <dst ID>.L <server tick>.L <src speed>.L <dst speed>.L <damage>.L <IsSPDamage>.B <div>.W <type>.B <damage2>.L (ZC_NOTIFY_ACT2) /// type: @see enum battle_dmg_type /// for BDT_NORMAL: [ damage: total damage, div: amount of hits, damage2: assassin dual-wield damage ] -static int clif_damage(struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type, int64 in_damage2) +static int clif_damage(struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type, int64 in_damage2) { struct packet_damage p; struct status_change *sc; @@ -5268,7 +5268,7 @@ static void clif_playerSkillToPacket(struct map_session_data *sd, struct SKILLDA skillData->sp = 0; skillData->range2 = 0; } -#if PACKETVER_RE_NUM >= 20190807 || PACKETVER_ZERO_NUM >= 20190814 +#if PACKETVER_RE_NUM >= 20190807 if (newSkill) skillData->level2 = 0; else @@ -5419,7 +5419,7 @@ static void clif_skillinfo(struct map_session_data *sd, int skill_id, int inf) p->sp = 0; p->range2 = 0; } -#if PACKETVER_RE_NUM >= 20190807 || PACKETVER_ZERO_NUM >= 20190814 +#if PACKETVER_RE_NUM >= 20190807 p->level2 = skill_lv; #endif if (sd->status.skill[idx].flag == SKILL_FLAG_PERMANENT) @@ -5573,7 +5573,7 @@ static void clif_skill_cooldown(struct map_session_data *sd, uint16 skill_id, un /// Skill attack effect and damage. /// 0114 <skill id>.W <src id>.L <dst id>.L <tick>.L <src delay>.L <dst delay>.L <damage>.W <level>.W <div>.W <type>.B (ZC_NOTIFY_SKILL) /// 01de <skill id>.W <src id>.L <dst id>.L <tick>.L <src delay>.L <dst delay>.L <damage>.L <level>.W <div>.W <type>.B (ZC_NOTIFY_SKILL2) -static int clif_skill_damage(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 in_damage, int div, uint16 skill_id, uint16 skill_lv, int type) +static int clif_skill_damage(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 in_damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type) { unsigned char buf[64]; struct status_change *sc; @@ -5675,7 +5675,7 @@ static int clif_skill_damage(struct block_list *src, struct block_list *dst, int /// Ground skill attack effect and damage (ZC_NOTIFY_SKILL_POSITION). /// 0115 <skill id>.W <src id>.L <dst id>.L <tick>.L <src delay>.L <dst delay>.L <x>.W <y>.W <damage>.W <level>.W <div>.W <type>.B #if 0 -static int clif_skill_damage2(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int damage, int div, uint16 skill_id, uint16 skill_lv, int type) +static int clif_skill_damage2(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type) { unsigned char buf[64]; struct status_change *sc; @@ -8106,6 +8106,54 @@ static void clif_guild_allianceinfo(struct map_session_data *sd) WFIFOSET(fd,WFIFOW(fd,2)); } +static void clif_guild_castlelist(struct map_session_data *sd) +{ +#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814 + nullpo_retv(sd); + + struct guild *g = sd->guild; + if (g == NULL) + return; + + int castle_count = guild->checkcastles(g); + if (castle_count > 0) { + int len = sizeof(struct PACKET_ZC_GUILD_CASTLE_LIST) + castle_count; + struct PACKET_ZC_GUILD_CASTLE_LIST *p = aMalloc(len); + p->packetType = HEADER_ZC_GUILD_CASTLE_LIST; + p->packetLength = len; + + int i = 0; + struct DBIterator *iter = db_iterator(guild->castle_db); + for (struct guild_castle *gc = dbi_first(iter); dbi_exists(iter); gc = dbi_next(iter)) { + if (gc->guild_id == g->guild_id) { + p->castle_list[i] = gc->castle_id; + ++i; + } + } + dbi_destroy(iter); + + clif->send(p, len, &sd->bl, SELF); + aFree(p); + } +#endif +} + +static void clif_guild_castleinfo(struct map_session_data *sd, struct guild_castle *gc) +{ +#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814 + + nullpo_retv(sd); + nullpo_retv(gc); + + struct PACKET_ZC_CASTLE_INFO p = { 0 }; + p.packetType = HEADER_ZC_CASTLE_INFO; + p.castle_id = gc->castle_id; + p.economy = gc->economy; + p.defense = gc->defense; + clif->send(&p, sizeof(p), &sd->bl, SELF); +#endif +} + /// Guild member manager information (ZC_MEMBERMGR_INFO). /// 0154 <packet len>.W { <account>.L <char id>.L <hair style>.W <hair color>.W <gender>.W <class>.W <level>.W <contrib exp>.L <state>.L <position>.L <memo>.50B <name>.24B }* /// state: @@ -8689,14 +8737,14 @@ static void clif_emotion(struct block_list *bl, int type) /// 0191 <id>.L <contents>.80B static void clif_talkiebox(struct block_list *bl, const char *talkie) { - unsigned char buf[MESSAGE_SIZE+6]; nullpo_retv(bl); nullpo_retv(talkie); + struct PACKET_ZC_TALKBOX_CHATCONTENTS p; - WBUFW(buf,0) = 0x191; - WBUFL(buf,2) = bl->id; - safestrncpy(WBUFP(buf,6),talkie,MESSAGE_SIZE); - clif->send(buf,packet_len(0x191),bl,AREA); + p.PacketType = HEADER_ZC_TALKBOX_CHATCONTENTS; + p.aid = bl->id; + safestrncpy(&p.message[0], talkie, TALKBOX_MESSAGE_SIZE); + clif->send(&p, sizeof(struct PACKET_ZC_TALKBOX_CHATCONTENTS), bl, AREA); } /// Displays wedding effect centered on an object (ZC_CONGRATULATION). @@ -9298,9 +9346,6 @@ static void clif_pcname_ack(int fd, struct block_list *bl) packet.gid = bl->id; const struct map_session_data *ssd = BL_UCCAST(BL_PC, bl); - const struct party_data *p = NULL; - const struct guild *g = NULL; - int ps = -1; if (ssd->fakename[0] != '\0' && ssd->disguise != -1) { packet.packet_id = reqName; @@ -9326,9 +9371,12 @@ static void clif_pcname_ack(int fd, struct block_list *bl) #endif memcpy(packet.name, ssd->status.name, NAME_LENGTH); + const struct party_data *p = NULL; + int ps = -1; if (ssd->status.party_id != 0) { p = party->search(ssd->status.party_id); } + const struct guild *g = NULL; if (ssd->status.guild_id != 0) { if ((g = ssd->guild) != NULL) { int i; @@ -9351,6 +9399,12 @@ static void clif_pcname_ack(int fd, struct block_list *bl) memcpy(packet.guild_name, g->name,NAME_LENGTH); memcpy(packet.position_name, g->position[ps].name, NAME_LENGTH); } + else if (ssd->status.clan_id != 0) { + struct clan *c = clan->search(ssd->status.clan_id); + if (c != 0) { + memcpy(packet.position_name, c->name, NAME_LENGTH); + } + } } clif->send_selforarea(fd, bl, &packet, len); @@ -12687,7 +12741,7 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin return; } //You can't use Graffiti/TalkieBox AND have a vending open, so this is safe. - safestrncpy(sd->message, RFIFOP(fd,skillmoreinfo), MESSAGE_SIZE); + safestrncpy(sd->message, RFIFOP(fd, skillmoreinfo), TALKBOX_MESSAGE_SIZE); } if( sd->ud.skilltimer != INVALID_TIMER ) @@ -14401,6 +14455,7 @@ static void clif_parse_GuildRequestInfo(int fd, struct map_session_data *sd) case 0: // Basic Information Guild, hostile alliance information clif->guild_basicinfo(sd); clif->guild_allianceinfo(sd); + clif->guild_castlelist(sd); break; case 1: // Members list, list job title clif->guild_positionnamelist(sd); @@ -15978,18 +16033,18 @@ static void clif_ranklist_sub(struct PACKET_ZC_ACK_RANKING_sub *ranks, enum fame if (list[i].id > 0) { const char* name; if (strcmp(list[i].name, "-") == 0 && (name = map->charid2nick(list[i].id)) != NULL) { - strncpy(ranks[i].name, name, NAME_LENGTH); + strncpy(ranks->names[i].name, name, NAME_LENGTH); } else { - strncpy(ranks[i].name, list[i].name, NAME_LENGTH); + strncpy(ranks->names[i].name, list[i].name, NAME_LENGTH); } } else { - strncpy(ranks[i].name, "None", 5); + strncpy(ranks->names[i].name, "None", 5); } - ranks[i].points = list[i].fame; //points + ranks->points[i].points = list[i].fame; //points } for (;i < 10; i++) { // In case the MAX is less than 10. - strncpy(ranks[i].name, "Unavailable", 12); - ranks[i].points = 0; + strncpy(ranks->names[i].name, "Unavailable", 12); + ranks->points[i].points = 0; } #endif } @@ -16038,7 +16093,7 @@ static void clif_ranklist(struct map_session_data *sd, enum fame_list_type type) #if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190703 || PACKETVER_ZERO_NUM >= 20190724 clif->ranklist_sub2(p->chars, p->points, type); #else - clif->ranklist_sub(p->ranks, type); + clif->ranklist_sub(&p->ranks, type); #endif if (pc->famelist_type(sd->job) == type) { @@ -16398,10 +16453,14 @@ static void clif_parse_AutoRevive(int fd, struct map_session_data *sd) { if (pc_istrading(sd) || pc_isvending(sd)) return; + if (!pc_isdead(sd)) return; - int item_position = pc->search_inventory(sd, ITEMID_TOKEN_OF_SIEGFRIED); + if (sd->sc.data[SC_HELLPOWER]) //Cannot res while under the effect of SC_HELLPOWER. + return; + + int item_position = pc->have_item_chain(sd, ECC_SIEGFRIED); int hpsp = 100; if (item_position == INDEX_NOT_FOUND) { @@ -16411,18 +16470,15 @@ static void clif_parse_AutoRevive(int fd, struct map_session_data *sd) return; } - if (sd->sc.data[SC_HELLPOWER]) //Cannot res while under the effect of SC_HELLPOWER. - return; - if (!status->revive(&sd->bl, hpsp, hpsp)) return; if (item_position == INDEX_NOT_FOUND) - status_change_end(&sd->bl,SC_LIGHT_OF_REGENE,INVALID_TIMER); + status_change_end(&sd->bl, SC_LIGHT_OF_REGENE, INVALID_TIMER); else pc->delitem(sd, item_position, 1, 0, DELITEM_SKILLUSE, LOG_TYPE_CONSUME); - clif->skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION, 4, 1); + clif->skill_nodamage(&sd->bl, &sd->bl, ALL_RESURRECTION, 4, 1); } /// Information about character's status values (ZC_ACK_STATUS_GM). @@ -20608,7 +20664,7 @@ static int clif_delay_damage_sub(int tid, int64 tick, int id, intptr_t data) * * @return clif->calc_walkdelay used in further processing **/ -static int clif_delay_damage(int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type) +static int clif_delay_damage(int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type) { struct cdelayed_damage *dd; struct status_change *sc; @@ -23204,6 +23260,78 @@ static void clif_announce_refine_status(struct map_session_data *sd, int item_id #endif } +static void clif_parse_GuildCastleTeleportRequest(int fd, struct map_session_data *sd) __attribute__((nonnull(2))); +static void clif_parse_GuildCastleTeleportRequest(int fd, struct map_session_data *sd) +{ +#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190522 || PACKETVER_ZERO_NUM >= 20190515 + const struct PACKET_CZ_CASTLE_TELEPORT_REQUEST *p = RFIFO2PTR(fd); + struct guild *g = sd->guild; + + if (g == NULL) + return; + + struct guild_castle *gc = guild->castle_search(p->castle_id); + if (gc == NULL) + return; + if (gc->enable_client_warp == false) + return; + if (gc->guild_id != g->guild_id) + return; + + if (map->list[sd->bl.m].flag.gvg_castle == 1) + return; + + int zeny = gc->client_warp.zeny; + if (gc->siege_type == SIEGE_TYPE_FE && map->agit_flag == 1) { + zeny = gc->client_warp.zeny_siege; + } else if (gc->siege_type == SIEGE_TYPE_SE && map->agit2_flag == 1) { + zeny = gc->client_warp.zeny_siege; + } else if (gc->siege_type == SIEGE_TYPE_TE) { + clif->guild_castleteleport_res(sd, SIEGE_TP_INVALID_MODE); + return; + } + + if (sd->status.zeny < zeny) { + clif->guild_castleteleport_res(sd, SIEGE_TP_NOT_ENOUGH_ZENY); + return; + } + sd->status.zeny -= zeny; + clif->updatestatus(sd, SP_ZENY); + pc->setpos(sd, gc->mapindex, gc->client_warp.x, gc->client_warp.y, CLR_OUTSIGHT); +#endif +} + +static void clif_guild_castleteleport_res(struct map_session_data *sd, enum siege_teleport_result result) +{ +#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814 + + nullpo_retv(sd); + + struct PACKET_ZC_CASTLE_TELEPORT_RESPONSE p = { 0 }; + p.packetType = HEADER_ZC_CASTLE_TELEPORT_RESPONSE; + p.result = (int16)result; + clif->send(&p, sizeof(p), &sd->bl, SELF); +#endif +} +static void clif_parse_GuildCastleInfoRequest(int fd, struct map_session_data *sd) __attribute__((nonnull(2))); +static void clif_parse_GuildCastleInfoRequest(int fd, struct map_session_data *sd) +{ +#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190522 || PACKETVER_ZERO_NUM >= 20190515 + const struct PACKET_CZ_CASTLE_INFO_REQUEST *p = RFIFO2PTR(fd); + struct guild *g = sd->guild; + + if (g == NULL) + return; + + struct guild_castle *gc = guild->castle_search(p->castle_id); + if (gc == NULL) + return; + if (gc->guild_id != g->guild_id) + return; + clif->guild_castleinfo(sd, gc); +#endif +} + /*========================================== * Main client packet processing function *------------------------------------------*/ @@ -23888,6 +24016,8 @@ void clif_defaults(void) clif->guild_masterormember = clif_guild_masterormember; clif->guild_basicinfo = clif_guild_basicinfo; clif->guild_allianceinfo = clif_guild_allianceinfo; + clif->guild_castlelist = clif_guild_castlelist; + clif->guild_castleinfo = clif_guild_castleinfo; clif->guild_memberlist = clif_guild_memberlist; clif->guild_skillinfo = clif_guild_skillinfo; clif->guild_send_onlineinfo = clif_guild_send_onlineinfo; @@ -24429,4 +24559,7 @@ void clif_defaults(void) clif->pRefineryUIClose = clif_parse_RefineryUIClose; clif->pRefineryUIRefine = clif_parse_RefineryUIRefine; clif->announce_refine_status = clif_announce_refine_status; + clif->pGuildCastleTeleportRequest = clif_parse_GuildCastleTeleportRequest; + clif->pGuildCastleInfoRequest = clif_parse_GuildCastleInfoRequest; + clif->guild_castleteleport_res = clif_guild_castleteleport_res; } diff --git a/src/map/clif.h b/src/map/clif.h index 07d2ef4a8..245352b9c 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -59,6 +59,7 @@ struct s_refine_requirement; struct PACKET_ZC_ACK_RANKING_sub; struct SKILLDATA; +enum battle_dmg_type; enum clif_messages; enum rodex_add_item; enum rodex_get_zeny; @@ -632,6 +633,13 @@ enum inventory_type { INVTYPE_GUILD_STORAGE = 3, }; +/** Guild Teleport Results */ +enum siege_teleport_result { + SIEGE_TP_SUCCESS = 0x0, + SIEGE_TP_NOT_ENOUGH_ZENY = 0x1, + SIEGE_TP_INVALID_MODE = 0x2 +}; + /** * Structures **/ @@ -861,7 +869,7 @@ struct clif_interface { void (*scriptclear) (struct map_session_data *sd, int npcid); /* client-user-interface-related */ void (*viewpoint) (struct map_session_data *sd, int npc_id, int type, int x, int y, int id, int color); - int (*damage) (struct block_list* src, struct block_list* dst, int sdelay, int ddelay, int64 damage, short div, unsigned char type, int64 damage2); + int (*damage) (struct block_list* src, struct block_list* dst, int sdelay, int ddelay, int64 damage, short div, enum battle_dmg_type type, int64 damage2); void (*sitting) (struct block_list* bl); void (*standing) (struct block_list* bl); void (*arrow_create_list) (struct map_session_data *sd); @@ -987,7 +995,7 @@ struct clif_interface { void (*wedding_effect) (struct block_list *bl); void (*divorced) (struct map_session_data* sd, const char* name); void (*callpartner) (struct map_session_data *sd); - int (*skill_damage) (struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, int type); + int (*skill_damage) (struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type); int (*skill_nodamage) (struct block_list *src,struct block_list *dst,uint16 skill_id,int heal,int fail); void (*skill_poseffect) (struct block_list *src, uint16 skill_id, int val, int x, int y, int64 tick); void (*skill_estimation) (struct map_session_data *sd,struct block_list *dst); @@ -1113,6 +1121,8 @@ struct clif_interface { void (*guild_masterormember) (struct map_session_data *sd); void (*guild_basicinfo) (struct map_session_data *sd); void (*guild_allianceinfo) (struct map_session_data *sd); + void (*guild_castlelist) (struct map_session_data *sd); + void (*guild_castleinfo) (struct map_session_data *sd, struct guild_castle *gc); void (*guild_memberlist) (struct map_session_data *sd); void (*guild_skillinfo) (struct map_session_data* sd); void (*guild_send_onlineinfo) (struct map_session_data *sd); //[LuzZza] @@ -1282,7 +1292,7 @@ struct clif_interface { /* */ void (*notify_bounditem) (struct map_session_data *sd, unsigned short index); /* */ - int (*delay_damage) (int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type); + int (*delay_damage) (int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type); int (*delay_damage_sub) (int tid, int64 tick, int id, intptr_t data); /* NPC Market */ void (*npc_market_open) (struct map_session_data *sd, struct npc_data *nd); @@ -1646,6 +1656,9 @@ struct clif_interface { void (*pRefineryUIClose) (int fd, struct map_session_data *sd); void (*pRefineryUIRefine) (int fd, struct map_session_data *sd); void (*announce_refine_status) (struct map_session_data *sd, int item_id, int refine_level, bool success, enum send_target target); + void (*pGuildCastleTeleportRequest) (int fd, struct map_session_data *sd); + void (*pGuildCastleInfoRequest) (int fd, struct map_session_data *sd); + void (*guild_castleteleport_res) (struct map_session_data *sd, enum siege_teleport_result result); }; #ifdef HERCULES_CORE diff --git a/src/map/guild.c b/src/map/guild.c index 415a46db5..3191515f7 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -169,7 +169,7 @@ static bool guild_read_castledb_libconfig(void) } libconfig->destroy(&castle_conf); - ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", i, config_filename); + ShowStatus("Done reading '"CL_WHITE"%u"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", db_size(guild->castle_db), config_filename); return true; } @@ -217,10 +217,59 @@ static bool guild_read_castledb_libconfig_sub(struct config_setting_t *it, int i } safestrncpy(gc->castle_event, name, sizeof(gc->castle_event)); + if (itemdb->lookup_const(it, "SiegeType", &i32) && (i32 >= SIEGE_TYPE_MAX || i32 < 0)) { + ShowWarning("guild_read_castledb_libconfig_sub: Invalid SiegeType in \"%s\", entry #%d, defaulting to SIEGE_TYPE_FE.\n", source, idx); + gc->siege_type = SIEGE_TYPE_FE; + } else { + gc->siege_type = i32; + } + + libconfig->setting_lookup_bool_real(it, "EnableClientWarp", &gc->enable_client_warp); + if (gc->enable_client_warp == true) { + struct config_setting_t *wd = libconfig->setting_get_member(it, "ClientWarp"); + guild->read_castledb_libconfig_sub_warp(wd, source, gc); + } idb_put(guild->castle_db, gc->castle_id, gc); return true; } +static bool guild_read_castledb_libconfig_sub_warp(struct config_setting_t *wd, const char *source, struct guild_castle *gc) +{ + nullpo_retr(false, wd); + nullpo_retr(false, gc); + nullpo_retr(false, source); + + int64 i64 = 0; + struct config_setting_t *it = libconfig->setting_get_member(wd, "Position"); + if (config_setting_is_list(it)) { + int m = map->mapindex2mapid(gc->mapindex); + + gc->client_warp.x = libconfig->setting_get_int_elem(it, 0); + gc->client_warp.y = libconfig->setting_get_int_elem(it, 1); + if (gc->client_warp.x < 0 || gc->client_warp.x >= map->list[m].xs || gc->client_warp.y < 0 || gc->client_warp.y >= map->list[m].ys) { + ShowWarning("guild_read_castledb_libconfig_sub_warp: Invalid Position in \"%s\", for castle (%d).\n", source, gc->castle_id); + return false; + } + } else { + ShowWarning("guild_read_castledb_libconfig_sub_warp: Invalid format for Position in \"%s\", for castle (%d).\n", source, gc->castle_id); + return false; + } + + if (libconfig->setting_lookup_int64(wd, "ZenyCost", &i64)) { + if (i64 > MAX_ZENY) { + ShowWarning("guild_read_castledb_libconfig_sub_warp: ZenyCost is too big in \"%s\", for castle (%d), capping to MAX_ZENY.\n", source, gc->castle_id); + } + gc->client_warp.zeny = cap_value((int)i64, 0, MAX_ZENY); + } + if (libconfig->setting_lookup_int64(wd, "ZenyCostSiegeTime", &i64)) { + if (i64 > MAX_ZENY) { + ShowWarning("guild_read_castledb_libconfig_sub_warp: ZenyCostSiegeTime is too big in \"%s\", for castle (%d), capping to MAX_ZENY.\n", source, gc->castle_id); + } + gc->client_warp.zeny_siege = cap_value((int)i64, 0, MAX_ZENY); + } + return true; +} + /// lookup: guild id -> guild* static struct guild *guild_search(int guild_id) { @@ -2497,6 +2546,7 @@ void guild_defaults(void) guild->read_guildskill_tree_db = guild_read_guildskill_tree_db; guild->read_castledb_libconfig = guild_read_castledb_libconfig; guild->read_castledb_libconfig_sub = guild_read_castledb_libconfig_sub; + guild->read_castledb_libconfig_sub_warp = guild_read_castledb_libconfig_sub_warp; guild->payexp_timer_sub = guild_payexp_timer_sub; guild->send_xy_timer_sub = guild_send_xy_timer_sub; guild->send_xy_timer = guild_send_xy_timer; diff --git a/src/map/guild.h b/src/map/guild.h index d0374103f..41f52711d 100644 --- a/src/map/guild.h +++ b/src/map/guild.h @@ -166,6 +166,7 @@ struct guild_interface { bool (*read_guildskill_tree_db) (char* split[], int columns, int current); bool (*read_castledb_libconfig) (void); bool (*read_castledb_libconfig_sub) (struct config_setting_t *it, int idx, const char *source); + bool (*read_castledb_libconfig_sub_warp) (struct config_setting_t *wd, const char *source, struct guild_castle *gc); int (*payexp_timer_sub) (union DBKey key, struct DBData *data, va_list ap); int (*send_xy_timer_sub) (union DBKey key, struct DBData *data, va_list ap); int (*send_xy_timer) (int tid, int64 tick, int id, intptr_t data); diff --git a/src/map/homunculus.c b/src/map/homunculus.c index 31744f479..43cb8d84b 100644 --- a/src/map/homunculus.c +++ b/src/map/homunculus.c @@ -172,7 +172,7 @@ static int homunculus_dead(struct homun_data *hd) } //Vaporize a character's homun. If flag, HP needs to be 80% or above. -static int homunculus_vaporize(struct map_session_data *sd, enum homun_state flag) +static int homunculus_vaporize(struct map_session_data *sd, enum homun_state state, bool force) { struct homun_data *hd; @@ -185,13 +185,13 @@ static int homunculus_vaporize(struct map_session_data *sd, enum homun_state fla if (status->isdead(&hd->bl)) return 0; //Can't vaporize a dead homun. - if (flag == HOM_ST_REST && get_percentage(hd->battle_status.hp, hd->battle_status.max_hp) < 80) + if (!force && get_percentage(hd->battle_status.hp, hd->battle_status.max_hp) < 80) return 0; hd->regen.state.block = 3; //Block regen while vaporized. //Delete timers when vaporized. homun->hunger_timer_delete(hd); - hd->homunculus.vaporize = flag; + hd->homunculus.vaporize = state; if(battle_config.hom_setting&0x40) memset(hd->blockskill, 0, sizeof(hd->blockskill)); clif->hominfo(sd, sd->hd, 0); @@ -258,7 +258,7 @@ static int homunculus_calc_skilltree(struct homun_data *hd, int flag_evolve) for( i = 0; i < MAX_SKILL_TREE && ( id = homun->dbs->skill_tree[c][i].id ) > 0; i++ ) { if( hd->homunculus.hskill[ id - HM_SKILLBASE ].id ) continue; //Skill already known. - j = ( flag_evolve ) ? 10 : hd->homunculus.intimacy; + j = ( flag_evolve ) ? 1000 : hd->homunculus.intimacy; if( j < homun->dbs->skill_tree[c][i].intimacylv ) continue; if(!battle_config.skillfree) { @@ -525,6 +525,21 @@ static bool homunculus_mutate(struct homun_data *hd, int homun_id) return true; } +static int homunculus_gainexp_real(struct homun_data *hd, unsigned int exp) +{ + nullpo_ret(hd); + nullpo_ret(hd->master); + + hd->homunculus.exp += exp; + + if (hd->master->state.showexp && hd->exp_next > 0) { + char output[256]; + sprintf(output, msg_fd(hd->master->fd, 449), exp, ((float)exp / (float)hd->exp_next * (float)100)); + clif_disp_onlyself(hd->master, output); + } + return 1; +} + static int homunculus_gainexp(struct homun_data *hd, unsigned int exp) { enum homun_type htype; @@ -550,16 +565,10 @@ static int homunculus_gainexp(struct homun_data *hd, unsigned int exp) break; } - hd->homunculus.exp += exp; - - if (hd->master->state.showexp && hd->exp_next > 0) { - char output[256]; - sprintf(output, "Homunculus Experience Gained Base:%u (%.2f%%)", exp, ((float)exp / (float)hd->exp_next * (float)100)); - clif_disp_onlyself(hd->master, output); - } + homun->gainexp_real(hd, exp); - if(hd->homunculus.exp < hd->exp_next) { - clif->hominfo(hd->master,hd,0); + if (hd->homunculus.exp < hd->exp_next) { + clif->hominfo(hd->master, hd, 0); return 0; } @@ -826,7 +835,7 @@ static int homunculus_db_search(int key, int type) * @param hom The homunculus source data. * @retval false in case of errors. */ -static bool homunculus_create(struct map_session_data *sd, const struct s_homunculus *hom) +static bool homunculus_create(struct map_session_data *sd, const struct s_homunculus *hom, bool is_new) { struct homun_data *hd; int i = 0; @@ -870,7 +879,9 @@ static bool homunculus_create(struct map_session_data *sd, const struct s_homunc map->addiddb(&hd->bl); status_calc_homunculus(hd,SCO_FIRST); - status_percent_heal(&hd->bl, 100, 100); + if (is_new) { + status_percent_heal(&hd->bl, 100, 100); + } hd->hungry_timer = INVALID_TIMER; return true; @@ -927,6 +938,7 @@ static bool homunculus_recv_data(int account_id, const struct s_homunculus *sh, { struct map_session_data *sd; struct homun_data *hd; + bool is_new = false; nullpo_retr(false, sh); @@ -942,15 +954,17 @@ static bool homunculus_recv_data(int account_id, const struct s_homunculus *sh, if (sd->status.char_id != sh->char_id && sd->status.hom_id != sh->hom_id) return false; - if (sd->status.hom_id == 0) //Hom just created. + if (sd->status.hom_id == 0) { // Hom just created. sd->status.hom_id = sh->hom_id; + is_new = true; + } if (sd->hd != NULL) { //uh? Overwrite the data. memcpy(&sd->hd->homunculus, sh, sizeof sd->hd->homunculus); sd->hd->homunculus.char_id = sd->status.char_id; // Correct char id if necessary. } else { - homun->create(sd, sh); + homun->create(sd, sh, is_new); } hd = sd->hd; @@ -1312,7 +1326,7 @@ static bool homunculus_read_skill_db_sub(char *split[], int columns, int current homun->dbs->skill_tree[classid][j].need[k].lv = atoi(split[3+k*2+minJobLevelPresent+1]); } - homun->dbs->skill_tree[classid][j].intimacylv = atoi(split[13+minJobLevelPresent]); + homun->dbs->skill_tree[classid][j].intimacylv = atoi(split[13+minJobLevelPresent]) * 100; return true; } @@ -1439,6 +1453,7 @@ void homunculus_defaults(void) homun->evolve = homunculus_evolve; homun->mutate = homunculus_mutate; homun->gainexp = homunculus_gainexp; + homun->gainexp_real = homunculus_gainexp_real; homun->add_intimacy = homunculus_add_intimacy; homun->consume_intimacy = homunculus_consume_intimacy; homun->healed = homunculus_healed; diff --git a/src/map/homunculus.h b/src/map/homunculus.h index 745c7cd84..2914a26cc 100644 --- a/src/map/homunculus.h +++ b/src/map/homunculus.h @@ -133,7 +133,7 @@ struct homun_skill_tree_entry { short id; unsigned char max; unsigned char joblv; - short intimacylv; + int intimacylv; struct { short id; unsigned char lv; @@ -167,7 +167,7 @@ struct homunculus_interface { enum homun_type (*class2type) (int class_); void (*damaged) (struct homun_data *hd); int (*dead) (struct homun_data *hd); - int (*vaporize) (struct map_session_data *sd, enum homun_state flag); + int (*vaporize) (struct map_session_data *sd, enum homun_state state, bool force); int (*delete) (struct homun_data *hd, int emote); int (*checkskill) (struct homun_data *hd, uint16 skill_id); int (*calc_skilltree) (struct homun_data *hd, int flag_evolve); @@ -178,6 +178,7 @@ struct homunculus_interface { bool (*evolve) (struct homun_data *hd); bool (*mutate) (struct homun_data *hd, int homun_id); int (*gainexp) (struct homun_data *hd, unsigned int exp); + int (*gainexp_real) (struct homun_data *hd, unsigned int exp); unsigned int (*add_intimacy) (struct homun_data * hd, unsigned int value); unsigned int (*consume_intimacy) (struct homun_data *hd, unsigned int value); void (*healed) (struct homun_data *hd); @@ -189,7 +190,7 @@ struct homunculus_interface { int (*change_name) (struct map_session_data *sd, const char *name); bool (*change_name_ack) (struct map_session_data *sd, const char *name, int flag); int (*db_search) (int key,int type); - bool (*create) (struct map_session_data *sd, const struct s_homunculus *hom); + bool (*create) (struct map_session_data *sd, const struct s_homunculus *hom, bool is_new); void (*init_timers) (struct homun_data * hd); bool (*call) (struct map_session_data *sd); bool (*recv_data) (int account_id, const struct s_homunculus *sh, int flag); diff --git a/src/map/itemdb.c b/src/map/itemdb.c index ddec295ca..3aae2c90c 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -1523,6 +1523,11 @@ static void itemdb_read_chains(void) else itemdb->chain_cache[ECC_ORE] = i; + if (!script->get_constant("ITMCHAIN_SIEGFRIED", &i)) + ShowWarning("itemdb_read_chains: failed to find 'ITMCHAIN_SIEGFRIED' chain to link to cache!\n"); + else + itemdb->chain_cache[ECC_SIEGFRIED] = i; + ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, config_filename); } @@ -1682,6 +1687,14 @@ static int itemdb_validate_entry(struct item_data *entry, int n, const char *sou script->free_code(entry->unequip_script); entry->unequip_script = NULL; } + if (entry->rental_start_script != NULL) { + script->free_code(entry->rental_start_script); + entry->rental_start_script = NULL; + } + if (entry->rental_end_script != NULL) { + script->free_code(entry->rental_end_script); + entry->rental_end_script = NULL; + } return 0; #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114 } @@ -1712,6 +1725,14 @@ static int itemdb_validate_entry(struct item_data *entry, int n, const char *sou script->free_code(entry->unequip_script); entry->unequip_script = NULL; } + if (entry->rental_start_script != NULL) { + script->free_code(entry->rental_start_script); + entry->rental_start_script = NULL; + } + if (entry->rental_end_script != NULL) { + script->free_code(entry->rental_end_script); + entry->rental_end_script = NULL; + } return 0; } } @@ -1839,7 +1860,14 @@ static int itemdb_validate_entry(struct item_data *entry, int n, const char *sou script->free_code(item->unequip_script); item->unequip_script = NULL; } - + if (item->rental_start_script != NULL && item->rental_start_script != entry->rental_start_script) { // Don't free if it's inheriting the same script + script->free_code(item->rental_start_script); + item->rental_start_script = NULL; + } + if (item->rental_end_script != NULL && item->rental_end_script != entry->rental_end_script) { // Don't free if it's inheriting the same script + script->free_code(item->rental_end_script); + item->rental_end_script = NULL; + } *item = *entry; return item->nameid; } @@ -1955,6 +1983,8 @@ static int itemdb_readdb_libconfig_sub(struct config_setting_t *it, int n, const * "> * OnEquipScript: <" OnEquip Script "> * OnUnequipScript: <" OnUnequip Script "> + * OnRentalStartScript: <" on renting script "> + * OnRentalEndScript: <" on renting end script "> * Inherit: inherit or override */ if( !itemdb->lookup_const(it, "Id", &i32) ) { @@ -2232,6 +2262,12 @@ static int itemdb_readdb_libconfig_sub(struct config_setting_t *it, int n, const if( libconfig->setting_lookup_string(it, "OnUnequipScript", &str) ) id.unequip_script = *str ? script->parse(str, source, -id.nameid, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL; + if (libconfig->setting_lookup_string(it, "OnRentalStartScript", &str) != CONFIG_FALSE) + id.rental_start_script = (*str != '\0') ? script->parse(str, source, -id.nameid, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL; + + if (libconfig->setting_lookup_string(it, "OnRentalEndScript", &str) != CONFIG_FALSE) + id.rental_end_script = (*str != '\0') ? script->parse(str, source, -id.nameid, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL; + return itemdb->validate_entry(&id, n, source); } @@ -2475,6 +2511,10 @@ static void destroy_item_data(struct item_data *self, int free_self) script->free_code(self->equip_script); if( self->unequip_script ) script->free_code(self->unequip_script); + if (self->rental_start_script != NULL) + script->free_code(self->rental_start_script); + if (self->rental_end_script != NULL) + script->free_code(self->rental_end_script); if( self->combos ) aFree(self->combos); HPM->data_store_destroy(&self->hdata); diff --git a/src/map/itemdb.h b/src/map/itemdb.h index 099a591af..16a348797 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -139,7 +139,6 @@ enum item_itemid { ITEMID_COATING_BOTTLE = 7139, ITEMID_FRAGMENT_OF_CRYSTAL = 7321, ITEMID_SKULL_ = 7420, - ITEMID_TOKEN_OF_SIEGFRIED = 7621, ITEMID_SPECIAL_ALLOY_TRAP = 7940, ITEMID_CATNIP_FRUIT = 11602, ITEMID_RED_POUCH_OF_SURPRISE = 12024, @@ -359,6 +358,7 @@ enum geneticist_item_list { // enum e_chain_cache { ECC_ORE, + ECC_SIEGFRIED, /* */ ECC_MAX, }; @@ -516,6 +516,8 @@ struct item_data { struct script_code *script; ///< Default script for everything. struct script_code *equip_script; ///< Script executed once when equipping. struct script_code *unequip_script; ///< Script executed once when unequipping. + struct script_code *rental_start_script; ///< Script executed once this item get rented + struct script_code *rental_end_script; ///< Script executed once this item rent ends struct { unsigned available : 1; unsigned no_refine : 1; // [celest] diff --git a/src/map/mapdefines.h b/src/map/mapdefines.h index df9e9bccb..348ca98fd 100644 --- a/src/map/mapdefines.h +++ b/src/map/mapdefines.h @@ -21,6 +21,8 @@ #ifndef MAP_MAPDEFINES_H #define MAP_MAPDEFINES_H +#include "common/mmo.h" // packet versions + #define MAX_NPC_PER_MAP 512 #define AREA_SIZE (battle->bc->area_size) #define CHAT_AREA_SIZE (battle->bc->chat_area_size) @@ -57,8 +59,14 @@ #define MAPID_UPPERMASK 0x0fff #define MAPID_THIRDMASK (JOBL_THIRD|MAPID_UPPERMASK) -// Max size for inputs to Graffiti, Talkie Box and Vending text prompts +// Max size for inputs to Vending text prompts #define MESSAGE_SIZE (79 + 1) +// Max size for inputs to Graffiti, Talkie Box text prompts +#if PACKETVER_MAIN_NUM >= 20190904 || PACKETVER_RE_NUM >= 20190904 || PACKETVER_ZERO_NUM >= 20190828 +#define TALKBOX_MESSAGE_SIZE 21 +#else +#define TALKBOX_MESSAGE_SIZE (79 + 1) +#endif // String length you can write in the 'talking box' #define CHATBOX_SIZE (70 + 1) // Chatroom-related string sizes diff --git a/src/map/messages_main.h b/src/map/messages_main.h index bc5bcf55d..1ef24d6ab 100644 --- a/src/map/messages_main.h +++ b/src/map/messages_main.h @@ -24,7 +24,7 @@ /* This file is autogenerated, please do not commit manual changes -Latest version: 20190821 +Latest version: 20190918 */ enum clif_messages { @@ -21875,6 +21875,92 @@ Sold Out */ MSG_ID_E50 = 0xe50, #endif +#if PACKETVER >= 20190828 +/*20190828 to latest +장착 중인 아이템은 교환할 수 없습니다. 장착을 해제한 뒤 시도해 주시길 바랍니다. +*/ + MSG_ID_E51 = 0xe51, +#endif +#if PACKETVER >= 20190904 +/*20190904 to latest +길드 창고 이용 중엔 캐릭터 선택창으로 이동 할 수 없습니다. +*/ + MSG_ID_E52 = 0xe52, +/*20190904 to latest +아이템 태그가 포함되어 있어 사용할 수 없습니다. +*/ + MSG_ID_E53 = 0xe53, +/*20190904 to latest +Monster +*/ + MSG_ID_E54 = 0xe54, +/*20190904 to latest +Unknown +*/ + MSG_ID_E55 = 0xe55, +/*20190904 to latest +Undead +*/ + MSG_ID_E56 = 0xe56, +/*20190904 to latest +Animal +*/ + MSG_ID_E57 = 0xe57, +/*20190904 to latest +Plant +*/ + MSG_ID_E58 = 0xe58, +/*20190904 to latest +Insect +*/ + MSG_ID_E59 = 0xe59, +/*20190904 to latest +Marine +*/ + MSG_ID_E5A = 0xe5a, +/*20190904 to latest +Devil +*/ + MSG_ID_E5B = 0xe5b, +/*20190904 to latest +Human +*/ + MSG_ID_E5C = 0xe5c, +/*20190904 to latest +Angel +*/ + MSG_ID_E5D = 0xe5d, +/*20190904 to latest +Dragon +*/ + MSG_ID_E5E = 0xe5e, +#endif +#if PACKETVER >= 20190918 +/*20190918 to latest +Balance: %s %c +*/ + MSG_ID_E5F = 0xe5f, +/*20190918 to latest + ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 %s캐시가 차감됩니다. +*/ + MSG_ID_E60 = 0xe60, +/*20190918 to latest + ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 일반 %s캐시, 무료 %s캐시가 차감됩니다. +*/ + MSG_ID_E61 = 0xe61, +/*20190918 to latest +[%s]의 호출이 거부되었습니다. +*/ + MSG_ID_E62 = 0xe62, +/*20190918 to latest +구매 한도액은 소지액을 초과할 수 없습니다. +*/ + MSG_ID_E63 = 0xe63, +/*20190918 to latest +노점을 여는데 실패하였습니다. 구매노점 개설을 닫아주시기 바랍니다. +*/ + MSG_ID_E64 = 0xe64, +#endif }; #endif /* MAP_MESSAGES_MAIN_H */ diff --git a/src/map/messages_re.h b/src/map/messages_re.h index efebecdb2..4ae3dee1d 100644 --- a/src/map/messages_re.h +++ b/src/map/messages_re.h @@ -24,7 +24,7 @@ /* This file is autogenerated, please do not commit manual changes -Latest version: 20190821 +Latest version: 20190918 */ enum clif_messages { @@ -21354,6 +21354,92 @@ Sold Out */ MSG_ID_E50 = 0xe50, #endif +#if PACKETVER >= 20190828 +/*20190828 to latest +장착 중인 아이템은 교환할 수 없습니다. 장착을 해제한 뒤 시도해 주시길 바랍니다. +*/ + MSG_ID_E51 = 0xe51, +#endif +#if PACKETVER >= 20190904 +/*20190904 to latest +길드 창고 이용 중엔 캐릭터 선택창으로 이동 할 수 없습니다. +*/ + MSG_ID_E52 = 0xe52, +/*20190904 to latest +아이템 태그가 포함되어 있어 사용할 수 없습니다. +*/ + MSG_ID_E53 = 0xe53, +/*20190904 to latest +Monster +*/ + MSG_ID_E54 = 0xe54, +/*20190904 to latest +Unknown +*/ + MSG_ID_E55 = 0xe55, +/*20190904 to latest +Undead +*/ + MSG_ID_E56 = 0xe56, +/*20190904 to latest +Animal +*/ + MSG_ID_E57 = 0xe57, +/*20190904 to latest +Plant +*/ + MSG_ID_E58 = 0xe58, +/*20190904 to latest +Insect +*/ + MSG_ID_E59 = 0xe59, +/*20190904 to latest +Marine +*/ + MSG_ID_E5A = 0xe5a, +/*20190904 to latest +Devil +*/ + MSG_ID_E5B = 0xe5b, +/*20190904 to latest +Human +*/ + MSG_ID_E5C = 0xe5c, +/*20190904 to latest +Angel +*/ + MSG_ID_E5D = 0xe5d, +/*20190904 to latest +Dragon +*/ + MSG_ID_E5E = 0xe5e, +#endif +#if PACKETVER >= 20190918 +/*20190918 to latest +Balance: %s %c +*/ + MSG_ID_E5F = 0xe5f, +/*20190918 to latest + ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 %s캐시가 차감됩니다. +*/ + MSG_ID_E60 = 0xe60, +/*20190918 to latest + ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 일반 %s캐시, 무료 %s캐시가 차감됩니다. +*/ + MSG_ID_E61 = 0xe61, +/*20190918 to latest +호출이 거부되었습니다. +*/ + MSG_ID_E62 = 0xe62, +/*20190918 to latest +구매 한도액은 소지액을 초과할 수 없습니다. +*/ + MSG_ID_E63 = 0xe63, +/*20190918 to latest +노점을 여는데 실패하였습니다. 구매노점 개설을 닫아주시기 바랍니다. +*/ + MSG_ID_E64 = 0xe64, +#endif }; #endif /* MAP_MESSAGES_RE_H */ diff --git a/src/map/messages_zero.h b/src/map/messages_zero.h index 344dbb29e..039d215ac 100644 --- a/src/map/messages_zero.h +++ b/src/map/messages_zero.h @@ -24,7 +24,7 @@ /* This file is autogenerated, please do not commit manual changes -Latest version: 20190814 +Latest version: 20190918 */ enum clif_messages { @@ -17922,8 +17922,10 @@ Sale Start Time 계정 한정 */ MSG_ID_E48 = 0xe48, -/*20190814 to latest +/*20190814 to 20190814 판매기간 : %d월 %d일 ~ %d월 %d일 +20190828 to latest +판매기간 : %d월 %d일 %d시 %d분 */ MSG_ID_E49 = 0xe49, /*20190814 to latest @@ -17947,6 +17949,102 @@ Sold Out */ MSG_ID_E4E = 0xe4e, #endif +#if PACKETVER >= 20190828 +/*20190828 to latest +~ %d월 %d일 %d시 %d분 +*/ + MSG_ID_E4F = 0xe4f, +/*20190828 to latest +상품을 더이상 추가할 수 없습니다 +*/ + MSG_ID_E50 = 0xe50, +/*20190828 to latest +장착 중인 아이템은 교환할 수 없습니다. 장착을 해제한 뒤 시도해 주시길 바랍니다. +*/ + MSG_ID_E51 = 0xe51, +#endif +#if PACKETVER >= 20190911 +/*20190911 to latest +길드 창고 이용 중엔 캐릭터 선택창으로 이동 할 수 없습니다. +*/ + MSG_ID_E52 = 0xe52, +/*20190911 to latest +아이템 태그가 포함되어 있어 사용할 수 없습니다. +*/ + MSG_ID_E53 = 0xe53, +/*20190911 to latest +Monster +*/ + MSG_ID_E54 = 0xe54, +/*20190911 to latest +Unknown +*/ + MSG_ID_E55 = 0xe55, +/*20190911 to latest +Undead +*/ + MSG_ID_E56 = 0xe56, +/*20190911 to latest +Animal +*/ + MSG_ID_E57 = 0xe57, +/*20190911 to latest +Plant +*/ + MSG_ID_E58 = 0xe58, +/*20190911 to latest +Insect +*/ + MSG_ID_E59 = 0xe59, +/*20190911 to latest +Marine +*/ + MSG_ID_E5A = 0xe5a, +/*20190911 to latest +Devil +*/ + MSG_ID_E5B = 0xe5b, +/*20190911 to latest +Human +*/ + MSG_ID_E5C = 0xe5c, +/*20190911 to latest +Angel +*/ + MSG_ID_E5D = 0xe5d, +/*20190911 to latest +Dragon +*/ + MSG_ID_E5E = 0xe5e, +/*20190911 to latest +Balance: %s %c +*/ + MSG_ID_E5F = 0xe5f, +/*20190911 to latest + ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 %s캐시가 차감됩니다. +*/ + MSG_ID_E60 = 0xe60, +/*20190911 to latest + ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 일반 %s캐시, 무료 %s캐시가 차감됩니다. +*/ + MSG_ID_E61 = 0xe61, +/*20190911 to 20190911 +호출이 거부되었습니다. +20190918 to latest +[%s]의 호출이 거부되었습니다. +*/ + MSG_ID_E62 = 0xe62, +#endif +#if PACKETVER >= 20190918 +/*20190918 to latest +구매 한도액은 소지액을 초과할 수 없습니다. +*/ + MSG_ID_E63 = 0xe63, +/*20190918 to latest +노점을 여는데 실패하였습니다. 구매노점 개설을 닫아주시기 바랍니다. +*/ + MSG_ID_E64 = 0xe64, +#endif }; #endif /* MAP_MESSAGES_ZERO_H */ diff --git a/src/map/mob.c b/src/map/mob.c index bad3f7eb8..e04d6944e 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -239,6 +239,14 @@ static void mvptomb_destroy(struct mob_data *md) m = nd->bl.m; + struct s_mapiterator *iter = mapit_geteachpc(); + for (struct map_session_data *sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) { + if (sd->npc_id == nd->bl.id) { + sd->state.npc_unloaded = 1; + } + } + mapit->free(iter); + clif->clearunit_area(&nd->bl,CLR_OUTSIGHT); map->delblock(&nd->bl); diff --git a/src/map/npc.c b/src/map/npc.c index c3dff5870..868b8711a 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -1258,6 +1258,9 @@ static void run_tomb(struct map_session_data *sd, struct npc_data *nd) char time[10]; nullpo_retv(nd); + + sd->npc_id = nd->bl.id; + strftime(time, sizeof(time), "%H:%M", localtime(&nd->u.tomb.kill_time)); // TODO: Find exact color? @@ -1349,8 +1352,10 @@ static int npc_scriptcont(struct map_session_data *sd, int id, bool closing) return 1; } - if(id != npc->fake_nd->bl.id) { // Not item script - if ((npc->checknear(sd,target)) == NULL){ + if (id != npc->fake_nd->bl.id) { // Not item script + if (sd->state.npc_unloaded != 0) { + sd->state.npc_unloaded = 0; + } else if ((npc->checknear(sd,target)) == NULL) { ShowWarning("npc_scriptcont: failed npc->checknear test.\n"); return 1; } @@ -1371,8 +1376,10 @@ static int npc_scriptcont(struct map_session_data *sd, int id, bool closing) if( sd->progressbar.npc_id && DIFF_TICK(sd->progressbar.timeout,timer->gettick()) > 0 ) return 1; - if( !sd->st ) + if( !sd->st ) { + sd->npc_id = 0; return 1; + } if( closing && sd->st->state == CLOSE ) sd->st->state = END; diff --git a/src/map/packets.h b/src/map/packets.h index 83a9d0322..e91421cfc 100644 --- a/src/map/packets.h +++ b/src/map/packets.h @@ -1954,4 +1954,9 @@ packet(0x96e,clif->ackmergeitems); packet(0x0b22,clif->pHotkeyRowShift2); // CZ_SHORTCUTKEYBAR_ROTATE #endif +#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190522 || PACKETVER_ZERO_NUM >= 20190515 + packet(0x0b28,clif->pGuildCastleTeleportRequest); + packet(0x0b2c,clif->pGuildCastleInfoRequest); +#endif + #endif /* MAP_PACKETS_H */ diff --git a/src/map/packets_keys_main.h b/src/map/packets_keys_main.h index 565835cd7..b7f25a83d 100644 --- a/src/map/packets_keys_main.h +++ b/src/map/packets_keys_main.h @@ -37,7 +37,7 @@ packetKeys(0x49357d72,0x22c370a1,0x5f836591); #endif -// 2010-11-23aRagexeRE, 2010-11-24aRagexeRE, 2010-11-24bRagexeRE, 2010-11-25aRagexeRE, 2010-11-26aRagexeRE, 2010-11-30aRagexeRE, 2010-12-07aRagexeRE, 2010-12-14aRagexeRE, 2010-12-21aRagexeRE, 2010-12-23aRagexeRE, 2010-12-28aRagexeRE, 2011-01-04aRagexeRE, 2011-01-05aRagexeRE, 2011-01-11aRagexeRE, 2011-01-18aRagexeRE, 2011-01-25aRagexeRE, 2011-01-26aRagexeRE, 2011-01-26bRagexeRE, 2011-01-31aRagexeRE, 2011-01-31bRagexeRE, 2011-01-31cRagexeRE, 2011-02-08aRagexeRE, 2011-02-15aRagexeRE, 2011-02-22aRagexeRE, 2011-02-23aRagexeRE, 2011-02-23bRagexeRE, 2011-02-24aRagexeRE, 2011-02-25aRagexeRE, 2011-02-28aRagexeRE, 2011-03-08aRagexeRE, 2011-03-09aRagexeRE, 2011-03-09bRagexeRE, 2011-03-09cRagexeRE, 2011-03-09dRagexeRE, 2011-03-15aRagexeRE, 2011-03-22aRagexeRE, 2011-03-29aRagexeRE, 2011-03-30aRagexeRE, 2011-03-30cRagexeRE, 2011-04-05aRagexeRE, 2011-04-12aRagexeRE, 2011-04-19aRagexeRE, 2011-04-20aRagexeRE, 2011-04-26aRagexeRE, 2011-04-27aRagexeRE, 2011-05-03aRagexeRE, 2011-05-11aRagexeRE, 2011-05-17bRagexeRE, 2011-05-24aRagexeRE, 2011-05-26aRagexeRE, 2011-05-31aRagexeRE, 2011-06-07aRagexeRE, 2011-06-08aRagexeRE, 2011-06-08bRagexeRE, 2011-06-08cRagexeRE, 2011-06-09aRagexeRE, 2011-06-14bRagexeRE, 2011-06-22aRagexeRE, 2011-06-28aRagexeRE, 2011-07-06aRagexeRE, 2011-07-13aRagexeRE, 2011-07-13bRagexeRE, 2011-07-13cRagexeRE, 2011-07-19aRagexeRE, 2011-07-26aRagexeRE, 2011-08-03aRagexeRE, 2011-08-03bRagexeRE, 2011-08-10aRagexeRE, 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-16cRagexeRE, 2018-05-23aRagexe, 2018-05-23aRagexeRE, 2018-05-30aRagexe, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexe, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20cRagexe, 2018-06-20dRagexeRE, 2018-06-20eRagexe, 2018-06-20eRagexeRE, 2018-06-21aRagexe, 2018-06-21aRagexeRE, 2018-07-04aRagexe, 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexe, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexe, 2018-07-18cRagexeRE, 2018-08-01cRagexe, 2018-08-01cRagexeRE, 2018-08-08bRagexe, 2018-08-08bRagexeRE, 2018-08-22cRagexe, 2018-08-22cRagexeRE, 2018-08-29aRagexe, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-12dRagexeRE, 2018-09-19aRagexe, 2018-09-19aRagexeRE, 2018-10-02aRagexe, 2018-10-02aRagexeRE, 2018-10-02bRagexe, 2018-10-02bRagexeRE, 2018-10-17_02aRagexe, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexe, 2018-10-17_03aRagexeRE, 2018-10-17bRagexe, 2018-10-17bRagexeRE, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-10-31cRagexeRE, 2018-11-07aRagexe, 2018-11-07aRagexeRE, 2018-11-14cRagexe, 2018-11-14cRagexeRE, 2018-11-14dRagexe, 2018-11-14dRagexeRE, 2018-11-21bRagexe, 2018-11-21cRagexeRE, 2018-11-28aRagexe, 2018-11-28aRagexeRE, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-05bRagexeRE, 2018-12-12aRagexe, 2018-12-12aRagexeRE, 2018-12-12bRagexe, 2018-12-12bRagexeRE, 2018-12-19bRagexe, 2018-12-19bRagexeRE, 2018-12-26aRagexe, 2018-12-26aRagexeRE, 2019-01-09aRagexe, 2019-01-09bRagexeRE, 2019-01-16bRagexe, 2019-01-16bRagexeRE, 2019-01-16cRagexe, 2019-01-16cRagexeRE, 2019-01-23dRagexe, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-20aRagexeRE, 2019-02-27aRagexe, 2019-02-27bRagexeRE, 2019-02-28aRagexe, 2019-02-28aRagexeRE, 2019-03-06bRagexe, 2019-03-06bRagexeRE, 2019-03-06cRagexe, 2019-03-06cRagexeRE, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-20aRagexeRE, 2019-03-22aRagexe, 2019-03-22aRagexeRE, 2019-03-27bRagexe, 2019-03-27bRagexeRE, 2019-04-03aRagexe, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17aRagexe, 2019-04-17cRagexeRE, 2019-04-18aRagexe, 2019-04-18aRagexeRE, 2019-05-08cRagexe, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexe, 2019-05-22bRagexeRE, 2019-05-22cRagexe, 2019-05-22cRagexeRE, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29bRagexeRE, 2019-05-29cRagexe, 2019-05-29cRagexeRE, 2019-05-30aRagexe, 2019-05-30aRagexeRE, 2019-06-05JRagexeRE, 2019-06-05KRagexe, 2019-06-05LRagexeRE, 2019-06-05fRagexe, 2019-06-05hRagexeRE, 2019-06-19bRagexe, 2019-06-19cRagexeRE, 2019-06-19eRagexe, 2019-06-19hRagexe, 2019-06-26bRagexeRE, 2019-07-03aRagexe, 2019-07-03bRagexeRE, 2019-07-17aRagexe, 2019-07-17cRagexeRE, 2019-07-17dRagexe, 2019-07-17dRagexeRE, 2019-07-24aRagexe, 2019-07-24bRagexeRE, 2019-07-31bRagexe, 2019-07-31bRagexeRE, 2019-08-02aRagexe, 2019-08-02aRagexeRE, 2019-08-07aRagexe, 2019-08-07dRagexeRE, 2019-08-21aRagexe, 2019-08-21cRagexeRE, 2019-08-21dRagexeRE +// 2010-11-23aRagexeRE, 2010-11-24aRagexeRE, 2010-11-24bRagexeRE, 2010-11-25aRagexeRE, 2010-11-26aRagexeRE, 2010-11-30aRagexeRE, 2010-12-07aRagexeRE, 2010-12-14aRagexeRE, 2010-12-21aRagexeRE, 2010-12-23aRagexeRE, 2010-12-28aRagexeRE, 2011-01-04aRagexeRE, 2011-01-05aRagexeRE, 2011-01-11aRagexeRE, 2011-01-18aRagexeRE, 2011-01-25aRagexeRE, 2011-01-26aRagexeRE, 2011-01-26bRagexeRE, 2011-01-31aRagexeRE, 2011-01-31bRagexeRE, 2011-01-31cRagexeRE, 2011-02-08aRagexeRE, 2011-02-15aRagexeRE, 2011-02-22aRagexeRE, 2011-02-23aRagexeRE, 2011-02-23bRagexeRE, 2011-02-24aRagexeRE, 2011-02-25aRagexeRE, 2011-02-28aRagexeRE, 2011-03-08aRagexeRE, 2011-03-09aRagexeRE, 2011-03-09bRagexeRE, 2011-03-09cRagexeRE, 2011-03-09dRagexeRE, 2011-03-15aRagexeRE, 2011-03-22aRagexeRE, 2011-03-29aRagexeRE, 2011-03-30aRagexeRE, 2011-03-30cRagexeRE, 2011-04-05aRagexeRE, 2011-04-12aRagexeRE, 2011-04-19aRagexeRE, 2011-04-20aRagexeRE, 2011-04-26aRagexeRE, 2011-04-27aRagexeRE, 2011-05-03aRagexeRE, 2011-05-11aRagexeRE, 2011-05-17bRagexeRE, 2011-05-24aRagexeRE, 2011-05-26aRagexeRE, 2011-05-31aRagexeRE, 2011-06-07aRagexeRE, 2011-06-08aRagexeRE, 2011-06-08bRagexeRE, 2011-06-08cRagexeRE, 2011-06-09aRagexeRE, 2011-06-14bRagexeRE, 2011-06-22aRagexeRE, 2011-06-28aRagexeRE, 2011-07-06aRagexeRE, 2011-07-13aRagexeRE, 2011-07-13bRagexeRE, 2011-07-13cRagexeRE, 2011-07-19aRagexeRE, 2011-07-26aRagexeRE, 2011-08-03aRagexeRE, 2011-08-03bRagexeRE, 2011-08-10aRagexeRE, 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-16cRagexeRE, 2018-05-23aRagexe, 2018-05-23aRagexeRE, 2018-05-30aRagexe, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexe, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20cRagexe, 2018-06-20dRagexeRE, 2018-06-20eRagexe, 2018-06-20eRagexeRE, 2018-06-21aRagexe, 2018-06-21aRagexeRE, 2018-07-04aRagexe, 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexe, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexe, 2018-07-18cRagexeRE, 2018-08-01cRagexe, 2018-08-01cRagexeRE, 2018-08-08bRagexe, 2018-08-08bRagexeRE, 2018-08-22cRagexe, 2018-08-22cRagexeRE, 2018-08-29aRagexe, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-12dRagexeRE, 2018-09-19aRagexe, 2018-09-19aRagexeRE, 2018-10-02aRagexe, 2018-10-02aRagexeRE, 2018-10-02bRagexe, 2018-10-02bRagexeRE, 2018-10-17_02aRagexe, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexe, 2018-10-17_03aRagexeRE, 2018-10-17bRagexe, 2018-10-17bRagexeRE, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-10-31cRagexeRE, 2018-11-07aRagexe, 2018-11-07aRagexeRE, 2018-11-14cRagexe, 2018-11-14cRagexeRE, 2018-11-14dRagexe, 2018-11-14dRagexeRE, 2018-11-21bRagexe, 2018-11-21cRagexeRE, 2018-11-28aRagexe, 2018-11-28aRagexeRE, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-05bRagexeRE, 2018-12-12aRagexe, 2018-12-12aRagexeRE, 2018-12-12bRagexe, 2018-12-12bRagexeRE, 2018-12-19bRagexe, 2018-12-19bRagexeRE, 2018-12-26aRagexe, 2018-12-26aRagexeRE, 2019-01-09aRagexe, 2019-01-09bRagexeRE, 2019-01-16bRagexe, 2019-01-16bRagexeRE, 2019-01-16cRagexe, 2019-01-16cRagexeRE, 2019-01-23dRagexe, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-20aRagexeRE, 2019-02-27aRagexe, 2019-02-27bRagexeRE, 2019-02-28aRagexe, 2019-02-28aRagexeRE, 2019-03-06bRagexe, 2019-03-06bRagexeRE, 2019-03-06cRagexe, 2019-03-06cRagexeRE, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-20aRagexeRE, 2019-03-22aRagexe, 2019-03-22aRagexeRE, 2019-03-27bRagexe, 2019-03-27bRagexeRE, 2019-04-03aRagexe, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17aRagexe, 2019-04-17cRagexeRE, 2019-04-18aRagexe, 2019-04-18aRagexeRE, 2019-05-08cRagexe, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexe, 2019-05-22bRagexeRE, 2019-05-22cRagexe, 2019-05-22cRagexeRE, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29bRagexeRE, 2019-05-29cRagexe, 2019-05-29cRagexeRE, 2019-05-30aRagexe, 2019-05-30aRagexeRE, 2019-06-05JRagexeRE, 2019-06-05KRagexe, 2019-06-05LRagexeRE, 2019-06-05fRagexe, 2019-06-05hRagexeRE, 2019-06-19bRagexe, 2019-06-19cRagexeRE, 2019-06-19eRagexe, 2019-06-19hRagexe, 2019-06-26bRagexeRE, 2019-07-03aRagexe, 2019-07-03bRagexeRE, 2019-07-17aRagexe, 2019-07-17cRagexeRE, 2019-07-17dRagexe, 2019-07-17dRagexeRE, 2019-07-24aRagexe, 2019-07-24bRagexeRE, 2019-07-31bRagexe, 2019-07-31bRagexeRE, 2019-08-02aRagexe, 2019-08-02aRagexeRE, 2019-08-07aRagexe, 2019-08-07dRagexeRE, 2019-08-21aRagexe, 2019-08-21cRagexeRE, 2019-08-21dRagexeRE, 2019-08-28aRagexe, 2019-08-28aRagexeRE, 2019-09-04aRagexe, 2019-09-04bRagexe, 2019-09-04bRagexeRE, 2019-09-18bRagexe, 2019-09-18cRagexeRE #if PACKETVER == 20101123 || \ PACKETVER == 20101124 || \ PACKETVER == 20101125 || \ @@ -162,7 +162,10 @@ PACKETVER == 20190731 || \ PACKETVER == 20190802 || \ PACKETVER == 20190807 || \ - PACKETVER >= 20190821 + PACKETVER == 20190821 || \ + PACKETVER == 20190828 || \ + PACKETVER == 20190904 || \ + PACKETVER >= 20190918 packetKeys(0x00000000,0x00000000,0x00000000); #endif diff --git a/src/map/packets_keys_zero.h b/src/map/packets_keys_zero.h index 0e70ef641..2708d11e1 100644 --- a/src/map/packets_keys_zero.h +++ b/src/map/packets_keys_zero.h @@ -30,7 +30,7 @@ /* This file is autogenerated, please do not commit manual changes */ -// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero, 2018-08-01aRagexe_zero, 2018-08-08_2aRagexe_zero, 2018-08-22aRagexe_zero, 2018-08-29aRagexe_zero, 2018-09-05aRagexe_zero, 2018-09-12aRagexe_zero, 2018-09-19aRagexe_zero, 2018-09-28aRagexe_zero, 2018-10-10_2aRagexe_zero, 2018-10-24_2aRagexe_zero, 2018-11-14aRagexe_zero, 2018-11-20aRagexe_zero, 2018-11-28aRagexe_zero, 2018-12-12aRagexe_zero, 2018-12-19aRagexe_zero, 2018-12-26_2aRagexe_zero, 2019-01-16_2aRagexe_zero, 2019-01-17_1aRagexe_zero, 2019-01-30_2aRagexe_zero, 2019-02-13aRagexe_zero, 2019-02-20aRagexe_zero, 2019-02-27aRagexe_zero, 2019-03-13aRagexe_zero, 2019-03-27_2aRagexe_zero, 2019-03-27_3aRagexe_zero, 2019-04-03aRagexe_zero, 2019-04-10bRagexe_zero, 2019-04-24aRagexe_zero, 2019-05-02aRagexe_zero, 2019-05-08_2aRagexe_zero, 2019-05-08aRagexe_zero, 2019-05-15aRagexe_zero, 2019-05-29aRagexe_zero, 2019-05-30aRagexe_zero, 2019-06-05_2aRagexe_zero, 2019-06-26_2aRagexe_zero, 2019-06-26_3aRagexe_zero, 2019-07-09aRagexe_zero, 2019-07-10_3aRagexe_zero, 2019-07-17aRagexe_zero, 2019-07-24aRagexe_zero, 2019-08-14_3aRagexe_zero +// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero, 2018-08-01aRagexe_zero, 2018-08-08_2aRagexe_zero, 2018-08-22aRagexe_zero, 2018-08-29aRagexe_zero, 2018-09-05aRagexe_zero, 2018-09-12aRagexe_zero, 2018-09-19aRagexe_zero, 2018-09-28aRagexe_zero, 2018-10-10_2aRagexe_zero, 2018-10-24_2aRagexe_zero, 2018-11-14aRagexe_zero, 2018-11-20aRagexe_zero, 2018-11-28aRagexe_zero, 2018-12-12aRagexe_zero, 2018-12-19aRagexe_zero, 2018-12-26_2aRagexe_zero, 2019-01-16_2aRagexe_zero, 2019-01-17_1aRagexe_zero, 2019-01-30_2aRagexe_zero, 2019-02-13aRagexe_zero, 2019-02-20aRagexe_zero, 2019-02-27aRagexe_zero, 2019-03-13aRagexe_zero, 2019-03-27_2aRagexe_zero, 2019-03-27_3aRagexe_zero, 2019-04-03aRagexe_zero, 2019-04-10bRagexe_zero, 2019-04-24aRagexe_zero, 2019-05-02aRagexe_zero, 2019-05-08_2aRagexe_zero, 2019-05-08aRagexe_zero, 2019-05-15aRagexe_zero, 2019-05-29aRagexe_zero, 2019-05-30aRagexe_zero, 2019-06-05_2aRagexe_zero, 2019-06-26_2aRagexe_zero, 2019-06-26_3aRagexe_zero, 2019-07-09aRagexe_zero, 2019-07-10_3aRagexe_zero, 2019-07-17aRagexe_zero, 2019-07-24aRagexe_zero, 2019-08-14_3aRagexe_zero, 2019-08-28_2aRagexe_zero, 2019-08-28_3aRagexe_zero, 2019-09-11aRagexe_zero, 2019-09-18_2aRagexe_zero, 2019-09-18aRagexe_zero #if PACKETVER == 20171018 || \ PACKETVER == 20171019 || \ PACKETVER == 20171023 || \ @@ -91,7 +91,10 @@ PACKETVER == 20190710 || \ PACKETVER == 20190717 || \ PACKETVER == 20190724 || \ - PACKETVER >= 20190814 + PACKETVER == 20190814 || \ + PACKETVER == 20190828 || \ + PACKETVER == 20190911 || \ + PACKETVER >= 20190918 packetKeys(0x00000000,0x00000000,0x00000000); #endif diff --git a/src/map/packets_shuffle_main.h b/src/map/packets_shuffle_main.h index 082c940c9..e3e798dd1 100644 --- a/src/map/packets_shuffle_main.h +++ b/src/map/packets_shuffle_main.h @@ -9727,7 +9727,7 @@ packet(0x0967,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6 #endif -// 2018-11-21bRagexe, 2018-11-28aRagexe, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-12aRagexe, 2018-12-12bRagexe, 2018-12-19bRagexe, 2018-12-26aRagexe, 2019-01-09aRagexe, 2019-01-16bRagexe, 2019-01-16cRagexe, 2019-01-23dRagexe, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-27aRagexe, 2019-02-28aRagexe, 2019-03-06bRagexe, 2019-03-06cRagexe, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-22aRagexe, 2019-03-27bRagexe, 2019-04-03aRagexe, 2019-04-17aRagexe, 2019-04-18aRagexe, 2019-05-08cRagexe, 2019-05-22bRagexe, 2019-05-22cRagexe, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29cRagexe, 2019-05-30aRagexe, 2019-06-05fRagexe, 2019-06-05KRagexe, 2019-06-19bRagexe, 2019-06-19eRagexe, 2019-06-19hRagexe, 2019-07-03aRagexe, 2019-07-17aRagexe, 2019-07-17dRagexe, 2019-07-24aRagexe, 2019-07-31bRagexe, 2019-08-02aRagexe, 2019-08-07aRagexe, 2019-08-21aRagexe +// 2018-11-21bRagexe, 2018-11-28aRagexe, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-12aRagexe, 2018-12-12bRagexe, 2018-12-19bRagexe, 2018-12-26aRagexe, 2019-01-09aRagexe, 2019-01-16bRagexe, 2019-01-16cRagexe, 2019-01-23dRagexe, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-27aRagexe, 2019-02-28aRagexe, 2019-03-06bRagexe, 2019-03-06cRagexe, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-22aRagexe, 2019-03-27bRagexe, 2019-04-03aRagexe, 2019-04-17aRagexe, 2019-04-18aRagexe, 2019-05-08cRagexe, 2019-05-22bRagexe, 2019-05-22cRagexe, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29cRagexe, 2019-05-30aRagexe, 2019-06-05fRagexe, 2019-06-05KRagexe, 2019-06-19bRagexe, 2019-06-19eRagexe, 2019-06-19hRagexe, 2019-07-03aRagexe, 2019-07-17aRagexe, 2019-07-17dRagexe, 2019-07-24aRagexe, 2019-07-31bRagexe, 2019-08-02aRagexe, 2019-08-07aRagexe, 2019-08-21aRagexe, 2019-08-28aRagexe #if PACKETVER == 20181121 || \ PACKETVER == 20181128 || \ PACKETVER == 20181205 || \ @@ -9761,7 +9761,8 @@ PACKETVER == 20190731 || \ PACKETVER == 20190802 || \ PACKETVER == 20190807 || \ - PACKETVER >= 20190821 + PACKETVER == 20190821 || \ + PACKETVER >= 20190828 packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26 packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5 packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36 @@ -9793,5 +9794,39 @@ packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14 #endif +// 2019-09-04aRagexe, 2019-09-04bRagexe, 2019-09-18bRagexe +#if PACKETVER == 20190904 || \ + PACKETVER == 20190918 + packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26 + packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5 + packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36 + packet(0x0281,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4 + packet(0x02c4,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26 + packet(0x035f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5 + packet(0x0360,clif->pTickSend,2); // CZ_REQUEST_TIME // 6 + packet(0x0361,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5 + packet(0x0362,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6 + packet(0x0363,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6 + packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8 + packet(0x0365,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8 + packet(0x0366,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10 + packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 31 + packet(0x0368,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6 + packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6 + packet(0x0436,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19 + packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7 + packet(0x0438,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10 + packet(0x07e4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1 + packet(0x07ec,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8 + packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18 + packet(0x0811,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1 + packet(0x0815,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2 + packet(0x0817,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6 + packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1 + packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1 + packet(0x0838,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2 + packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14 +#endif + #endif /* MAP_PACKETS_SHUFFLE_MAIN_H */ diff --git a/src/map/packets_shuffle_re.h b/src/map/packets_shuffle_re.h index 044788301..f2a1b96ad 100644 --- a/src/map/packets_shuffle_re.h +++ b/src/map/packets_shuffle_re.h @@ -9663,7 +9663,7 @@ packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12 #endif -// 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexeRE, 2018-08-01cRagexeRE, 2018-08-08bRagexeRE, 2018-08-22cRagexeRE, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-09-12dRagexeRE, 2018-09-19aRagexeRE, 2018-10-02aRagexeRE, 2018-10-02bRagexeRE, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexeRE, 2018-10-17bRagexeRE, 2018-10-31cRagexeRE, 2018-11-07aRagexeRE, 2018-11-14cRagexeRE, 2018-11-14dRagexeRE, 2018-11-21cRagexeRE, 2018-11-28aRagexeRE, 2018-12-05bRagexeRE, 2018-12-12aRagexeRE, 2018-12-12bRagexeRE, 2018-12-19bRagexeRE, 2018-12-26aRagexeRE, 2019-01-09bRagexeRE, 2019-01-16bRagexeRE, 2019-01-16cRagexeRE, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-20aRagexeRE, 2019-02-27bRagexeRE, 2019-02-28aRagexeRE, 2019-03-06bRagexeRE, 2019-03-06cRagexeRE, 2019-03-20aRagexeRE, 2019-03-22aRagexeRE, 2019-03-27bRagexeRE, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17cRagexeRE, 2019-04-18aRagexeRE, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexeRE, 2019-05-22cRagexeRE, 2019-05-29bRagexeRE, 2019-05-29cRagexeRE, 2019-05-30aRagexeRE, 2019-06-05hRagexeRE, 2019-06-05JRagexeRE, 2019-06-05LRagexeRE, 2019-06-19cRagexeRE, 2019-06-26bRagexeRE, 2019-07-03bRagexeRE, 2019-07-17cRagexeRE, 2019-07-17dRagexeRE, 2019-07-24bRagexeRE, 2019-07-31bRagexeRE, 2019-08-02aRagexeRE, 2019-08-07dRagexeRE, 2019-08-21cRagexeRE, 2019-08-21dRagexeRE +// 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexeRE, 2018-08-01cRagexeRE, 2018-08-08bRagexeRE, 2018-08-22cRagexeRE, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-09-12dRagexeRE, 2018-09-19aRagexeRE, 2018-10-02aRagexeRE, 2018-10-02bRagexeRE, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexeRE, 2018-10-17bRagexeRE, 2018-10-31cRagexeRE, 2018-11-07aRagexeRE, 2018-11-14cRagexeRE, 2018-11-14dRagexeRE, 2018-11-21cRagexeRE, 2018-11-28aRagexeRE, 2018-12-05bRagexeRE, 2018-12-12aRagexeRE, 2018-12-12bRagexeRE, 2018-12-19bRagexeRE, 2018-12-26aRagexeRE, 2019-01-09bRagexeRE, 2019-01-16bRagexeRE, 2019-01-16cRagexeRE, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-20aRagexeRE, 2019-02-27bRagexeRE, 2019-02-28aRagexeRE, 2019-03-06bRagexeRE, 2019-03-06cRagexeRE, 2019-03-20aRagexeRE, 2019-03-22aRagexeRE, 2019-03-27bRagexeRE, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17cRagexeRE, 2019-04-18aRagexeRE, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexeRE, 2019-05-22cRagexeRE, 2019-05-29bRagexeRE, 2019-05-29cRagexeRE, 2019-05-30aRagexeRE, 2019-06-05hRagexeRE, 2019-06-05JRagexeRE, 2019-06-05LRagexeRE, 2019-06-19cRagexeRE, 2019-06-26bRagexeRE, 2019-07-03bRagexeRE, 2019-07-17cRagexeRE, 2019-07-17dRagexeRE, 2019-07-24bRagexeRE, 2019-07-31bRagexeRE, 2019-08-02aRagexeRE, 2019-08-07dRagexeRE, 2019-08-21cRagexeRE, 2019-08-21dRagexeRE, 2019-08-28aRagexeRE #if PACKETVER == 20180704 || \ PACKETVER == 20180711 || \ PACKETVER == 20180718 || \ @@ -9711,7 +9711,8 @@ PACKETVER == 20190731 || \ PACKETVER == 20190802 || \ PACKETVER == 20190807 || \ - PACKETVER >= 20190821 + PACKETVER == 20190821 || \ + PACKETVER >= 20190828 packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26 packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5 packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36 @@ -9743,5 +9744,39 @@ packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14 #endif +// 2019-09-04bRagexeRE, 2019-09-18cRagexeRE +#if PACKETVER == 20190904 || \ + PACKETVER == 20190918 + packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26 + packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5 + packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36 + packet(0x0281,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4 + packet(0x02c4,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26 + packet(0x035f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5 + packet(0x0360,clif->pTickSend,2); // CZ_REQUEST_TIME // 6 + packet(0x0361,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5 + packet(0x0362,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6 + packet(0x0363,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6 + packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8 + packet(0x0365,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8 + packet(0x0366,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10 + packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 31 + packet(0x0368,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6 + packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6 + packet(0x0436,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19 + packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7 + packet(0x0438,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10 + packet(0x07e4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1 + packet(0x07ec,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8 + packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18 + packet(0x0811,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1 + packet(0x0815,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2 + packet(0x0817,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6 + packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1 + packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1 + packet(0x0838,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2 + packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14 +#endif + #endif /* MAP_PACKETS_SHUFFLE_RE_H */ diff --git a/src/map/packets_shuffle_zero.h b/src/map/packets_shuffle_zero.h index 109dadaba..4d6da7a8a 100644 --- a/src/map/packets_shuffle_zero.h +++ b/src/map/packets_shuffle_zero.h @@ -803,5 +803,40 @@ packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14 #endif +// 2019-08-28_2aRagexe_zero, 2019-08-28_3aRagexe_zero, 2019-09-11aRagexe_zero, 2019-09-18_2aRagexe_zero, 2019-09-18aRagexe_zero +#if PACKETVER == 20190828 || \ + PACKETVER == 20190911 || \ + PACKETVER == 20190918 + packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26 + packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5 + packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36 + packet(0x0281,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4 + packet(0x02c4,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26 + packet(0x035f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5 + packet(0x0360,clif->pTickSend,2); // CZ_REQUEST_TIME // 6 + packet(0x0361,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5 + packet(0x0362,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6 + packet(0x0363,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6 + packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8 + packet(0x0365,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8 + packet(0x0366,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10 + packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 31 + packet(0x0368,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6 + packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6 + packet(0x0436,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19 + packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7 + packet(0x0438,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10 + packet(0x07e4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1 + packet(0x07ec,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8 + packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18 + packet(0x0811,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1 + packet(0x0815,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2 + packet(0x0817,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6 + packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1 + packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1 + packet(0x0838,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2 + packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14 +#endif + #endif /* MAP_PACKETS_SHUFFLE_ZERO_H */ diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index d12dc14d4..24bb718da 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -3460,6 +3460,14 @@ struct PACKET_ZC_REFINE_STATUS { DEFINE_PACKET_HEADER(ZC_REFINE_STATUS, 0x0ada); #endif +struct PACKET_ZC_ACK_RANKING_name { + char name[NAME_LENGTH]; +} __attribute__((packed)); + +struct PACKET_ZC_ACK_RANKING_points { + uint32 points; +} __attribute__((packed)); + #if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190703 || PACKETVER_ZERO_NUM >= 20190724 struct PACKET_ZC_ACK_RANKING_sub { char name[NAME_LENGTH]; @@ -3476,21 +3484,22 @@ struct PACKET_ZC_ACK_RANKING { DEFINE_PACKET_HEADER(ZC_ACK_RANKING, 0x0af6); #elif PACKETVER_MAIN_NUM >= 20130605 || PACKETVER_RE_NUM >= 20130529 || defined(PACKETVER_ZERO) struct PACKET_ZC_ACK_RANKING_sub { - char name[NAME_LENGTH]; - uint32 points; + struct PACKET_ZC_ACK_RANKING_name names[10]; + struct PACKET_ZC_ACK_RANKING_points points[10]; } __attribute__((packed)); struct PACKET_ZC_ACK_RANKING { int16 packetType; int16 rankType; - struct PACKET_ZC_ACK_RANKING_sub ranks[10]; + struct PACKET_ZC_ACK_RANKING_sub ranks; uint32 myPoints; } __attribute__((packed)); + DEFINE_PACKET_HEADER(ZC_ACK_RANKING, 0x097d); #else struct PACKET_ZC_ACK_RANKING_sub { - char name[NAME_LENGTH]; - uint32 points; + struct PACKET_ZC_ACK_RANKING_name names[10]; + struct PACKET_ZC_ACK_RANKING_points points[10]; } __attribute__((packed)); #endif @@ -3514,7 +3523,7 @@ DEFINE_PACKET_HEADER(ZC_HAT_EFFECT, 0x0a3b); #endif // [4144] this struct updated not in all packets in client -#if PACKETVER_RE_NUM >= 20190807 || PACKETVER_ZERO_NUM >= 20190814 +#if PACKETVER_RE_NUM >= 20190807 struct SKILLDATA { uint16 id; int inf; @@ -3540,7 +3549,7 @@ struct PACKET_ZC_ADD_SKILL { int16 packetType; struct SKILLDATA skill; } __attribute__((packed)); -#if PACKETVER_RE_NUM >= 20190807 || PACKETVER_ZERO_NUM >= 20190814 +#if PACKETVER_RE_NUM >= 20190807 DEFINE_PACKET_HEADER(ZC_ADD_SKILL, 0x0b31); #else DEFINE_PACKET_HEADER(ZC_ADD_SKILL, 0x0111); @@ -3551,13 +3560,13 @@ struct PACKET_ZC_SKILLINFO_LIST { int16 packetLength; struct SKILLDATA skills[]; } __attribute__((packed)); -#if PACKETVER_RE_NUM >= 20190807 || PACKETVER_ZERO_NUM >= 20190814 +#if PACKETVER_RE_NUM >= 20190807 DEFINE_PACKET_HEADER(ZC_SKILLINFO_LIST, 0x0b32); #else DEFINE_PACKET_HEADER(ZC_SKILLINFO_LIST, 0x010f); #endif -#if PACKETVER_RE_NUM >= 20190807 || PACKETVER_ZERO_NUM >= 20190814 +#if PACKETVER_RE_NUM >= 20190807 struct PACKET_ZC_SKILLINFO_UPDATE2 { int16 packetType; uint16 id; @@ -3610,6 +3619,56 @@ struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT { DEFINE_PACKET_HEADER(ZC_NPC_MARKET_PURCHASE_RESULT, 0x09d7); #endif +struct PACKET_ZC_TALKBOX_CHATCONTENTS { + int16 PacketType; + uint32 aid; + char message[TALKBOX_MESSAGE_SIZE]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_TALKBOX_CHATCONTENTS, 0x0191); + +#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814 +struct PACKET_ZC_GUILD_CASTLE_LIST { + int16 packetType; + int16 packetLength; + int8 castle_list[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_GUILD_CASTLE_LIST, 0x0b27); +#endif + +#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190522 || PACKETVER_ZERO_NUM >= 20190515 +struct PACKET_CZ_CASTLE_TELEPORT_REQUEST { + int16 packetType; + int8 castle_id; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_CASTLE_TELEPORT_REQUEST, 0x0b28); +#endif + +#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814 +struct PACKET_ZC_CASTLE_TELEPORT_RESPONSE { + int16 packetType; + int16 result; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_CASTLE_TELEPORT_RESPONSE, 0x0b2e); +#endif + +#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814 +struct PACKET_ZC_CASTLE_INFO { + int16 packetType; + int8 castle_id; + int32 economy; + int32 defense; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_CASTLE_INFO, 0x0b2d); +#endif + +#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190522 || PACKETVER_ZERO_NUM >= 20190515 +struct PACKET_CZ_CASTLE_INFO_REQUEST { + int16 packetType; + int8 castle_id; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_CASTLE_INFO_REQUEST, 0x0b2c); +#endif + #if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute #pragma pack(pop) #endif // not NetBSD < 6 / Solaris diff --git a/src/map/pc.c b/src/map/pc.c index 24f71f47b..2cefa7674 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -565,72 +565,8 @@ static int pc_inventory_rental_clear(struct map_session_data *sd) /* assumes i is valid (from default areas where it is called, it is) */ static void pc_rental_expire(struct map_session_data *sd, int i) { - int nameid; - nullpo_retv(sd); Assert_retv(i >= 0 && i < sd->status.inventorySize); - nameid = sd->status.inventory[i].nameid; - - /* Soon to be dropped, we got plans to integrate it with item db */ - switch( nameid ) { - case ITEMID_BOARDING_HALTER: - status_change_end(&sd->bl,SC_ALL_RIDING,INVALID_TIMER); - break; - case ITEMID_LOVE_ANGEL: - if( sd->status.font == 1 ) { - sd->status.font = 0; - clif->font(sd); - } - break; - case ITEMID_SQUIRREL: - if( sd->status.font == 2 ) { - sd->status.font = 0; - clif->font(sd); - } - break; - case ITEMID_GOGO: - if( sd->status.font == 3 ) { - sd->status.font = 0; - clif->font(sd); - } - break; - case ITEMID_PICTURE_DIARY: - if( sd->status.font == 4 ) { - sd->status.font = 0; - clif->font(sd); - } - break; - case ITEMID_MINI_HEART: - if( sd->status.font == 5 ) { - sd->status.font = 0; - clif->font(sd); - } - break; - case ITEMID_NEWCOMER: - if( sd->status.font == 6 ) { - sd->status.font = 0; - clif->font(sd); - } - break; - case ITEMID_KID: - if( sd->status.font == 7 ) { - sd->status.font = 0; - clif->font(sd); - } - break; - case ITEMID_MAGIC_CASTLE: - if( sd->status.font == 8 ) { - sd->status.font = 0; - clif->font(sd); - } - break; - case ITEMID_BULGING_HEAD: - if( sd->status.font == 9 ) { - sd->status.font = 0; - clif->font(sd); - } - break; - } clif->rental_expired(sd->fd, i, sd->status.inventory[i].nameid); pc->delitem(sd, i, sd->status.inventory[i].amount, 0, DELITEM_NORMAL, LOG_TYPE_RENTAL); @@ -1536,17 +1472,16 @@ static int pc_reg_received(struct map_session_data *sd) if (sd->status.guild_id) guild->member_joined(sd); - // pet - if (sd->status.pet_id > 0) - intif->request_petdata(sd->status.account_id, sd->status.char_id, sd->status.pet_id); - - // Homunculus [albator] - if( sd->status.hom_id > 0 ) - intif->homunculus_requestload(sd->status.account_id, sd->status.hom_id); - if( sd->status.mer_id > 0 ) - intif->mercenary_request(sd->status.mer_id, sd->status.char_id); - if( sd->status.ele_id > 0 ) - intif->elemental_request(sd->status.ele_id, sd->status.char_id); + if (sd->state.standalone == 0 && sd->state.autotrade == 0) { // prevents loading pets, homunculi, mercenaries or elementals if the character doesn't have a client attached + if (sd->status.pet_id != 0) + intif->request_petdata(sd->status.account_id, sd->status.char_id, sd->status.pet_id); + if (sd->status.hom_id != 0) + intif->homunculus_requestload(sd->status.account_id, sd->status.hom_id); + if (sd->status.mer_id != 0) + intif->mercenary_request(sd->status.mer_id, sd->status.char_id); + if (sd->status.ele_id != 0) + intif->elemental_request(sd->status.ele_id, sd->status.char_id); + } map->addiddb(&sd->bl); map->delnickdb(sd->status.char_id, sd->status.name); @@ -4790,13 +4725,15 @@ static int pc_additem(struct map_session_data *sd, const struct item *item_data, pc->equipitem(sd, i, data->equip); /* rental item check */ - if( item_data->expire_time ) { - if( time(NULL) > item_data->expire_time ) { - pc->rental_expire(sd,i); + if (item_data->expire_time > 0) { + if (time(NULL) > item_data->expire_time) { + pc->rental_expire(sd, i); } else { - int seconds = (int)( item_data->expire_time - time(NULL) ); + int seconds = (int)(item_data->expire_time - time(NULL)); clif->rental_time(sd->fd, sd->status.inventory[i].nameid, seconds); pc->inventory_rental_add(sd, seconds); + if (data->rental_start_script != NULL) + script->run_item_rental_start_script(sd, data, 0); } } quest->questinfo_refresh(sd); @@ -4827,12 +4764,21 @@ static int pc_delitem(struct map_session_data *sd, int n, int amount, int type, sd->status.inventory[n].amount -= amount; sd->weight -= sd->inventory_data[n]->weight*amount ; + + // It's here because the data would most likely get zeroed in following if [Hemagx] + struct item_data *itd = sd->inventory_data[n]; + bool is_rental = (sd->status.inventory[n].expire_time > 0) ? true : false; + if( sd->status.inventory[n].amount <= 0 ){ if(sd->status.inventory[n].equip) pc->unequipitem(sd, n, PCUNEQUIPITEM_RECALC|PCUNEQUIPITEM_FORCE); memset(&sd->status.inventory[n],0,sizeof(sd->status.inventory[0])); sd->inventory_data[n] = NULL; } + + if (is_rental && itd->rental_end_script != NULL) + script->run_item_rental_end_script(sd, itd, 0); + if(!(type&1)) clif->delitem(sd,n,amount,reason); if(!(type&2)) @@ -7765,7 +7711,7 @@ static int pc_resetskill(struct map_session_data *sd, int flag) pc->setoption(sd, i); if( homun_alive(sd->hd) && pc->checkskill(sd, AM_CALLHOMUN) ) - homun->vaporize(sd, HOM_ST_REST); + homun->vaporize(sd, HOM_ST_REST, true); if ((sd->sc.data[SC_SPRITEMABLE] && pc->checkskill(sd, SU_SPRITEMABLE))) status_change_end(&sd->bl, SC_SPRITEMABLE, INVALID_TIMER); @@ -8006,7 +7952,7 @@ static void pc_damage(struct map_session_data *sd, struct block_list *src, unsig if( sd->status.pet_id > 0 && sd->pd && battle_config.pet_damage_support ) pet->target_check(sd,src,1); - if( sd->status.ele_id > 0 ) + if (sd->status.ele_id != 0 && sd->ed != NULL) elemental->set_target(sd,src); if (battle_config.prevent_logout_trigger & PLT_DAMAGE) @@ -8054,7 +8000,7 @@ static int pc_dead(struct map_session_data *sd, struct block_list *src) if (sd->status.hom_id > 0){ if(battle_config.homunculus_auto_vapor && sd->hd) - homun->vaporize(sd, HOM_ST_REST); + homun->vaporize(sd, HOM_ST_REST, true); } if( sd->md ) @@ -9069,7 +9015,7 @@ static int pc_jobchange(struct map_session_data *sd, int class, int upper) pc->setoption(sd, i); if(homun_alive(sd->hd) && !pc->checkskill(sd, AM_CALLHOMUN)) - homun->vaporize(sd, HOM_ST_REST); + homun->vaporize(sd, HOM_ST_REST, true); if ((sd->sc.data[SC_SPRITEMABLE] && pc->checkskill(sd, SU_SPRITEMABLE))) status_change_end(&sd->bl, SC_SPRITEMABLE, INVALID_TIMER); @@ -12215,6 +12161,29 @@ static int pc_have_magnifier(struct map_session_data *sd) } /** + * checks if player have any item that listed in item chain + * @param sd map_session_data of Player + * @param chain_id unsigned short of item chain id + * @return index of inventory, INDEX_NOT_FOUND if it is not found + */ +static int pc_have_item_chain(struct map_session_data *sd, unsigned short chain_id) +{ + if (chain_id >= itemdb->chain_count) { + ShowError("itemdb_chain_item: unknown chain id %d\n", chain_id); + return INDEX_NOT_FOUND; + } + + for (int n = 0; n < itemdb->chains[chain_id].qty; n++) { + struct item_chain_entry *entry = &itemdb->chains[chain_id].items[n]; + int index = pc->search_inventory(sd, entry->id); + if (index != INDEX_NOT_FOUND) + return index; + } + + return INDEX_NOT_FOUND; +} + +/** * Checks if player have basic skills learned. * @param sd Player Data * @param level Required Level of Novice Skill @@ -12823,6 +12792,7 @@ void pc_defaults(void) pc->update_idle_time = pc_update_idle_time; pc->have_magnifier = pc_have_magnifier; + pc->have_item_chain = pc_have_item_chain; pc->check_basicskill = pc_check_basicskill; diff --git a/src/map/pc.h b/src/map/pc.h index 8df02a891..2d21dabf6 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -238,6 +238,7 @@ struct map_session_data { unsigned int loggingout : 1; unsigned int warp_clean : 1; unsigned int refine_ui : 1; + unsigned int npc_unloaded : 1; ///< The player is talking with an unloaded NPCs (respawned tombstones) } state; struct { unsigned char no_weapon_damage, no_magic_damage, no_misc_damage; @@ -1184,6 +1185,7 @@ END_ZEROED_BLOCK; /* End */ void (*update_idle_time) (struct map_session_data* sd, enum e_battle_config_idletime type); int (*have_magnifier) (struct map_session_data *sd); + int (*have_item_chain) (struct map_session_data *sd, unsigned short chain_id); bool (*process_chat_message) (struct map_session_data *sd, const char *message); int (*wis_message_to_gm) (const char *sender_name, int permission, const char *message); diff --git a/src/map/script.c b/src/map/script.c index 4fc47e039..64b794ba0 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -12629,7 +12629,7 @@ static BUILDIN(homunculus_morphembryo) clif->additem(sd, 0, 0, i); clif->emotion(&sd->hd->bl, E_SWT); } else { - homun->vaporize(sd, HOM_ST_MORPH); + homun->vaporize(sd, HOM_ST_MORPH, true); success = true; } } else { @@ -22744,6 +22744,19 @@ static BUILDIN(setfont) return true; } +static BUILDIN(getfont) +{ + struct map_session_data *sd = script->rid2sd(st); + + if (sd == NULL) { + script_pushint(st, 0); + return true; + } + + script_pushint(st, sd->status.font); + return true; +} + static int buildin_mobuseskill_sub(struct block_list *bl, va_list ap) { struct mob_data *md = NULL; @@ -25891,6 +25904,36 @@ static void script_run_item_unequip_script(struct map_session_data *sd, struct i script->current_item_id = 0; } +static void script_run_item_rental_start_script(struct map_session_data *sd, struct item_data *data, int oid) __attribute__((nonnull(1, 2))); + +/** + * Run item rental start script + * @param sd player session data. Must be correct and checked before. + * @param data rental item data. Must be correct and checked before. + * @param oid npc id. Can be also 0 or fake npc id. + **/ +static void script_run_item_rental_start_script(struct map_session_data *sd, struct item_data *data, int oid) +{ + script->current_item_id = data->nameid; + script->run(data->rental_start_script, 0, sd->bl.id, oid); + script->current_item_id = 0; +} + +static void script_run_item_rental_end_script(struct map_session_data *sd, struct item_data *data, int oid) __attribute__((nonnull(1, 2))); + +/** +* Run item rental end script +* @param sd player session data. Must be correct and checked before. +* @param data rental item data. Must be correct and checked before. +* @param oid npc id. Can be also 0 or fake npc id. +**/ +static void script_run_item_rental_end_script(struct map_session_data *sd, struct item_data *data, int oid) +{ + script->current_item_id = data->nameid; + script->run(data->rental_end_script, 0, sd->bl.id, oid); + script->current_item_id = 0; +} + #define BUILDIN_DEF(x,args) { buildin_ ## x , #x , args, false } #define BUILDIN_DEF2(x,x2,args) { buildin_ ## x , x2 , args, false } #define BUILDIN_DEF_DEPRECATED(x,args) { buildin_ ## x , #x , args, true } @@ -26326,6 +26369,7 @@ static void script_parse_builtin(void) BUILDIN_DEF(mercenary_set_faith,"ii"), BUILDIN_DEF(readbook,"ii"), BUILDIN_DEF(setfont,"i"), + BUILDIN_DEF(getfont, ""), BUILDIN_DEF(areamobuseskill,"siiiiviiiii"), BUILDIN_DEF(progressbar,"si"), BUILDIN_DEF(progressbar_unit,"si?"), @@ -27078,6 +27122,11 @@ static void script_hardcoded_constants(void) script->set_constant("GUILD_ONLINE_VENDOR", GUILD_ONLINE_VENDOR, false, false); script->set_constant("GUILD_ONLINE_NO_VENDOR", GUILD_ONLINE_NO_VENDOR, false, false); + script->constdb_comment("Siege Types"); + script->set_constant("SIEGE_TYPE_FE", SIEGE_TYPE_FE, false, false); + script->set_constant("SIEGE_TYPE_SE", SIEGE_TYPE_SE, false, false); + script->set_constant("SIEGE_TYPE_TE", SIEGE_TYPE_TE, false, false); + script->constdb_comment("Renewal"); #ifdef RENEWAL script->set_constant("RENEWAL", 1, false, false); @@ -27438,4 +27487,6 @@ void script_defaults(void) script->run_use_script = script_run_use_script; script->run_item_equip_script = script_run_item_equip_script; script->run_item_unequip_script = script_run_item_unequip_script; + script->run_item_rental_start_script = script_run_item_rental_start_script; + script->run_item_rental_end_script = script_run_item_rental_end_script; } diff --git a/src/map/script.h b/src/map/script.h index 5dc480a15..a75b948ab 100644 --- a/src/map/script.h +++ b/src/map/script.h @@ -542,6 +542,16 @@ enum pcblock_action_flag { }; /** + * Types of Siege (WoE) + */ +enum siege_type { + SIEGE_TYPE_FE, + SIEGE_TYPE_SE, + SIEGE_TYPE_TE, + SIEGE_TYPE_MAX +}; + +/** * Structures **/ @@ -1039,6 +1049,8 @@ struct script_interface { void (*run_use_script) (struct map_session_data *sd, struct item_data *data, int oid); void (*run_item_equip_script) (struct map_session_data *sd, struct item_data *data, int oid); void (*run_item_unequip_script) (struct map_session_data *sd, struct item_data *data, int oid); + void (*run_item_rental_end_script) (struct map_session_data *sd, struct item_data *data, int oid); + void (*run_item_rental_start_script) (struct map_session_data *sd, struct item_data *data, int oid); }; #ifdef HERCULES_CORE diff --git a/src/map/skill.c b/src/map/skill.c index af61c887c..4b6ab7d0d 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -8710,7 +8710,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * case AM_REST: if (sd) { - if (homun->vaporize(sd,HOM_ST_REST)) + if (homun->vaporize(sd, HOM_ST_REST, false)) clif->skill_nodamage(src, bl, skill_id, skill_lv, 1); else clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0); diff --git a/src/map/status.c b/src/map/status.c index 83434996e..ba32b267e 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -9072,7 +9072,7 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en if (sd->status.pet_id > 0) pet->menu(sd, 3); if (homun_alive(sd->hd)) - homun->vaporize(sd,HOM_ST_REST); + homun->vaporize(sd, HOM_ST_REST, true); if (sd->md) mercenary->delete(sd->md,3); } @@ -13397,25 +13397,104 @@ static bool status_readdb_sizefix(char *fields[], int columns, int current) return true; } -static bool status_readdb_scconfig(char *fields[], int columns, int current) +static bool status_read_scdb_libconfig(void) { - int val = 0; - char* type = fields[0]; + struct config_t status_conf; + char filepath[256]; + safesnprintf(filepath, sizeof(filepath), "%s/%s", map->db_path, "sc_config.conf"); - nullpo_retr(false, fields); - if( !script->get_constant(type, &val) ){ - ShowWarning("status_readdb_sc_conf: Invalid status type %s specified.\n", type); + if (libconfig->load_file(&status_conf, filepath) == CONFIG_FALSE) { + ShowError("status_read_scdb_libconfig: can't read %s\n", filepath); return false; } - status->dbs->sc_conf[val] = (int)strtol(fields[1], NULL, 0); - if (status->dbs->sc_conf[val] & SC_VISIBLE) - { - status->dbs->DisplayType[val] = true; + int i = 0; + int count = 0; + struct config_setting_t *it = NULL; + + while ((it = libconfig->setting_get_elem(status_conf.root, i++)) != NULL) { + if (status->read_scdb_libconfig_sub(it, i - 1, filepath)) + ++count; + } + + libconfig->destroy(&status_conf); + ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath); + return true; +} + +static bool status_read_scdb_libconfig_sub(struct config_setting_t *it, int idx, const char *source) +{ + nullpo_retr(false, it); + nullpo_retr(false, source); + + int i32; + const char *name = config_setting_name(it); + + if (!script->get_constant(name, &i32) || i32 <= SC_NONE || i32 >= SC_MAX) { + ShowWarning("status_read_scdb_libconfig_sub: Invalid status type (%s) in \"%s\" entry #%d, skipping.\n", name, source, idx); + return false; } + libconfig->setting_lookup_bool_real(it, "Visible", &status->dbs->DisplayType[i32]); + + struct config_setting_t *fg = libconfig->setting_get_member(it, "Flags"); + if (fg != NULL) + status->read_scdb_libconfig_sub_flag(fg, i32, source); + return true; } + +static bool status_read_scdb_libconfig_sub_flag(struct config_setting_t *it, int type, const char *source) +{ + nullpo_retr(false, it); + nullpo_retr(false, source); + Assert_retr(false, type > SC_NONE && type < SC_MAX); + + int i = 0; + struct config_setting_t *t = NULL; + while ((t = libconfig->setting_get_elem(it, i++)) != NULL) { + const char *flag = config_setting_name(t); + bool on = libconfig->setting_get_bool_real(t); + int j; + + struct { + const char *name; + enum sc_conf_type value; + } flags[] = { + { "NoDeathReset", SC_NO_REM_DEATH }, + { "NoSave", SC_NO_SAVE }, + { "NoDispelReset", SC_NO_DISPELL }, + { "NoClearanceReset", SC_NO_CLEARANCE }, + { "Buff", SC_BUFF }, + { "Debuff", SC_DEBUFF }, + { "NoMadoReset", SC_MADO_NO_RESET }, + { "NoAllReset", SC_NO_CLEAR } + }; + + ARR_FIND(0, ARRAYLENGTH(flags), j, strcmpi(flag, flags[j].name) == 0); + if (j != ARRAYLENGTH(flags)) { + if (strcmp(flag, flags[j].name) != 0) { + ShowWarning("status_read_scdb_libconfig_sub_flag: flag (%s) for status effect (%d) is casesensitive, correct it to (%s).", flag, type, flags[i].name); + } + if (on) { + status->dbs->sc_conf[type] |= flags[j].value; + } else { + status->dbs->sc_conf[type] &= ~flags[j].value; + } + } else { + if (!status->read_scdb_libconfig_sub_flag_additional(it, type, source)) + ShowWarning("status_read_scdb_libconfig_sub_flag: invalid flag (%s) for status effect (%d).", flag, type); + } + } + return true; +} + +static bool status_read_scdb_libconfig_sub_flag_additional(struct config_setting_t *it, int type, const char *source) +{ + // to be used by plugins + return false; +} + /** * Read status db * job1.txt @@ -13454,7 +13533,7 @@ static int status_readdb(void) // sv->readdb(map->db_path, "job_db2.txt", ',', 1, 1+MAX_LEVEL, -1, status->readdb_job2); sv->readdb(map->db_path, DBPATH"size_fix.txt", ',', MAX_SINGLE_WEAPON_TYPE, MAX_SINGLE_WEAPON_TYPE, ARRAYLENGTH(status->dbs->atkmods), status->readdb_sizefix); - sv->readdb(map->db_path, "sc_config.txt", ',', 2, 2, SC_MAX, status->readdb_scconfig); + status->read_scdb_libconfig(); status->read_job_db(); pc->validate_levels(); @@ -13644,7 +13723,10 @@ void status_defaults(void) status->natural_heal_timer = status_natural_heal_timer; status->readdb_job2 = status_readdb_job2; status->readdb_sizefix = status_readdb_sizefix; - status->readdb_scconfig = status_readdb_scconfig; + status->read_scdb_libconfig = status_read_scdb_libconfig; + status->read_scdb_libconfig_sub = status_read_scdb_libconfig_sub; + status->read_scdb_libconfig_sub_flag = status_read_scdb_libconfig_sub_flag; + status->read_scdb_libconfig_sub_flag_additional = status_read_scdb_libconfig_sub_flag_additional; status->read_job_db = status_read_job_db; status->read_job_db_sub = status_read_job_db_sub; status->set_sc = status_set_sc; diff --git a/src/map/status.h b/src/map/status.h index dc7629dea..536003d04 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -50,7 +50,7 @@ struct pet_data; /** * SC configuration type - * @see db/sc_config.txt for more information + * @see db/sc_config.conf for more information **/ typedef enum sc_conf_type { SC_NO_REM_DEATH = 0x001, @@ -2387,7 +2387,10 @@ struct status_interface { int (*natural_heal_timer) (int tid, int64 tick, int id, intptr_t data); bool (*readdb_job2) (char *fields[], int columns, int current); bool (*readdb_sizefix) (char *fields[], int columns, int current); - bool (*readdb_scconfig) (char *fields[], int columns, int current); + bool (*read_scdb_libconfig) (void); + bool (*read_scdb_libconfig_sub) (struct config_setting_t *it, int idx, const char *source); + bool (*read_scdb_libconfig_sub_flag) (struct config_setting_t *it, int type, const char *source); + bool (*read_scdb_libconfig_sub_flag_additional) (struct config_setting_t *it, int type, const char *source); void (*read_job_db) (void); void (*read_job_db_sub) (int idx, const char *name, struct config_setting_t *jdb); void (*set_sc) (uint16 skill_id, sc_type sc, int icon, unsigned int flag); diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc index af057dbc5..433d9338e 100644 --- a/src/plugins/HPMHooking/HPMHooking.Defs.inc +++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc @@ -1276,8 +1276,8 @@ typedef void (*HPMHOOK_pre_clif_scriptclear) (struct map_session_data **sd, int typedef void (*HPMHOOK_post_clif_scriptclear) (struct map_session_data *sd, int npcid); typedef void (*HPMHOOK_pre_clif_viewpoint) (struct map_session_data **sd, int *npc_id, int *type, int *x, int *y, int *id, int *color); typedef void (*HPMHOOK_post_clif_viewpoint) (struct map_session_data *sd, int npc_id, int type, int x, int y, int id, int color); -typedef int (*HPMHOOK_pre_clif_damage) (struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *damage, short *div, unsigned char *type, int64 *damage2); -typedef int (*HPMHOOK_post_clif_damage) (int retVal___, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, unsigned char type, int64 damage2); +typedef int (*HPMHOOK_pre_clif_damage) (struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *damage, short *div, enum battle_dmg_type *type, int64 *damage2); +typedef int (*HPMHOOK_post_clif_damage) (int retVal___, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, enum battle_dmg_type type, int64 damage2); typedef void (*HPMHOOK_pre_clif_sitting) (struct block_list **bl); typedef void (*HPMHOOK_post_clif_sitting) (struct block_list *bl); typedef void (*HPMHOOK_pre_clif_standing) (struct block_list **bl); @@ -1524,8 +1524,8 @@ typedef void (*HPMHOOK_pre_clif_divorced) (struct map_session_data **sd, const c typedef void (*HPMHOOK_post_clif_divorced) (struct map_session_data *sd, const char *name); typedef void (*HPMHOOK_pre_clif_callpartner) (struct map_session_data **sd); typedef void (*HPMHOOK_post_clif_callpartner) (struct map_session_data *sd); -typedef int (*HPMHOOK_pre_clif_skill_damage) (struct block_list **src, struct block_list **dst, int64 *tick, int *sdelay, int *ddelay, int64 *damage, int *div, uint16 *skill_id, uint16 *skill_lv, int *type); -typedef int (*HPMHOOK_post_clif_skill_damage) (int retVal___, struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, int type); +typedef int (*HPMHOOK_pre_clif_skill_damage) (struct block_list **src, struct block_list **dst, int64 *tick, int *sdelay, int *ddelay, int64 *damage, int *div, uint16 *skill_id, uint16 *skill_lv, enum battle_dmg_type *type); +typedef int (*HPMHOOK_post_clif_skill_damage) (int retVal___, struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type); typedef int (*HPMHOOK_pre_clif_skill_nodamage) (struct block_list **src, struct block_list **dst, uint16 *skill_id, int *heal, int *fail); typedef int (*HPMHOOK_post_clif_skill_nodamage) (int retVal___, struct block_list *src, struct block_list *dst, uint16 skill_id, int heal, int fail); typedef void (*HPMHOOK_pre_clif_skill_poseffect) (struct block_list **src, uint16 *skill_id, int *val, int *x, int *y, int64 *tick); @@ -1756,6 +1756,10 @@ typedef void (*HPMHOOK_pre_clif_guild_basicinfo) (struct map_session_data **sd); typedef void (*HPMHOOK_post_clif_guild_basicinfo) (struct map_session_data *sd); typedef void (*HPMHOOK_pre_clif_guild_allianceinfo) (struct map_session_data **sd); typedef void (*HPMHOOK_post_clif_guild_allianceinfo) (struct map_session_data *sd); +typedef void (*HPMHOOK_pre_clif_guild_castlelist) (struct map_session_data **sd); +typedef void (*HPMHOOK_post_clif_guild_castlelist) (struct map_session_data *sd); +typedef void (*HPMHOOK_pre_clif_guild_castleinfo) (struct map_session_data **sd, struct guild_castle **gc); +typedef void (*HPMHOOK_post_clif_guild_castleinfo) (struct map_session_data *sd, struct guild_castle *gc); typedef void (*HPMHOOK_pre_clif_guild_memberlist) (struct map_session_data **sd); typedef void (*HPMHOOK_post_clif_guild_memberlist) (struct map_session_data *sd); typedef void (*HPMHOOK_pre_clif_guild_skillinfo) (struct map_session_data **sd); @@ -2046,8 +2050,8 @@ typedef void (*HPMHOOK_pre_clif_show_modifiers) (struct map_session_data **sd); typedef void (*HPMHOOK_post_clif_show_modifiers) (struct map_session_data *sd); typedef void (*HPMHOOK_pre_clif_notify_bounditem) (struct map_session_data **sd, unsigned short *index); typedef void (*HPMHOOK_post_clif_notify_bounditem) (struct map_session_data *sd, unsigned short index); -typedef int (*HPMHOOK_pre_clif_delay_damage) (int64 *tick, struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *in_damage, short *div, unsigned char *type); -typedef int (*HPMHOOK_post_clif_delay_damage) (int retVal___, int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type); +typedef int (*HPMHOOK_pre_clif_delay_damage) (int64 *tick, struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *in_damage, short *div, enum battle_dmg_type *type); +typedef int (*HPMHOOK_post_clif_delay_damage) (int retVal___, int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type); typedef int (*HPMHOOK_pre_clif_delay_damage_sub) (int *tid, int64 *tick, int *id, intptr_t *data); typedef int (*HPMHOOK_post_clif_delay_damage_sub) (int retVal___, int tid, int64 tick, int id, intptr_t data); typedef void (*HPMHOOK_pre_clif_npc_market_open) (struct map_session_data **sd, struct npc_data **nd); @@ -2726,6 +2730,12 @@ typedef void (*HPMHOOK_pre_clif_pRefineryUIRefine) (int *fd, struct map_session_ typedef void (*HPMHOOK_post_clif_pRefineryUIRefine) (int fd, struct map_session_data *sd); typedef void (*HPMHOOK_pre_clif_announce_refine_status) (struct map_session_data **sd, int *item_id, int *refine_level, bool *success, enum send_target *target); typedef void (*HPMHOOK_post_clif_announce_refine_status) (struct map_session_data *sd, int item_id, int refine_level, bool success, enum send_target target); +typedef void (*HPMHOOK_pre_clif_pGuildCastleTeleportRequest) (int *fd, struct map_session_data **sd); +typedef void (*HPMHOOK_post_clif_pGuildCastleTeleportRequest) (int fd, struct map_session_data *sd); +typedef void (*HPMHOOK_pre_clif_pGuildCastleInfoRequest) (int *fd, struct map_session_data **sd); +typedef void (*HPMHOOK_post_clif_pGuildCastleInfoRequest) (int fd, struct map_session_data *sd); +typedef void (*HPMHOOK_pre_clif_guild_castleteleport_res) (struct map_session_data **sd, enum siege_teleport_result *result); +typedef void (*HPMHOOK_post_clif_guild_castleteleport_res) (struct map_session_data *sd, enum siege_teleport_result result); #endif // MAP_CLIF_H #ifdef COMMON_CORE_H /* cmdline */ typedef void (*HPMHOOK_pre_cmdline_init) (void); @@ -3058,6 +3068,8 @@ typedef bool (*HPMHOOK_pre_guild_read_castledb_libconfig) (void); typedef bool (*HPMHOOK_post_guild_read_castledb_libconfig) (bool retVal___); typedef bool (*HPMHOOK_pre_guild_read_castledb_libconfig_sub) (struct config_setting_t **it, int *idx, const char **source); typedef bool (*HPMHOOK_post_guild_read_castledb_libconfig_sub) (bool retVal___, struct config_setting_t *it, int idx, const char *source); +typedef bool (*HPMHOOK_pre_guild_read_castledb_libconfig_sub_warp) (struct config_setting_t **wd, const char **source, struct guild_castle **gc); +typedef bool (*HPMHOOK_post_guild_read_castledb_libconfig_sub_warp) (bool retVal___, struct config_setting_t *wd, const char *source, struct guild_castle *gc); typedef int (*HPMHOOK_pre_guild_payexp_timer_sub) (union DBKey *key, struct DBData **data, va_list ap); typedef int (*HPMHOOK_post_guild_payexp_timer_sub) (int retVal___, union DBKey key, struct DBData *data, va_list ap); typedef int (*HPMHOOK_pre_guild_send_xy_timer_sub) (union DBKey *key, struct DBData **data, va_list ap); @@ -3136,8 +3148,8 @@ typedef void (*HPMHOOK_pre_homun_damaged) (struct homun_data **hd); typedef void (*HPMHOOK_post_homun_damaged) (struct homun_data *hd); typedef int (*HPMHOOK_pre_homun_dead) (struct homun_data **hd); typedef int (*HPMHOOK_post_homun_dead) (int retVal___, struct homun_data *hd); -typedef int (*HPMHOOK_pre_homun_vaporize) (struct map_session_data **sd, enum homun_state *flag); -typedef int (*HPMHOOK_post_homun_vaporize) (int retVal___, struct map_session_data *sd, enum homun_state flag); +typedef int (*HPMHOOK_pre_homun_vaporize) (struct map_session_data **sd, enum homun_state *state, bool *force); +typedef int (*HPMHOOK_post_homun_vaporize) (int retVal___, struct map_session_data *sd, enum homun_state state, bool force); typedef int (*HPMHOOK_pre_homun_delete) (struct homun_data **hd, int *emote); typedef int (*HPMHOOK_post_homun_delete) (int retVal___, struct homun_data *hd, int emote); typedef int (*HPMHOOK_pre_homun_checkskill) (struct homun_data **hd, uint16 *skill_id); @@ -3158,6 +3170,8 @@ typedef bool (*HPMHOOK_pre_homun_mutate) (struct homun_data **hd, int *homun_id) typedef bool (*HPMHOOK_post_homun_mutate) (bool retVal___, struct homun_data *hd, int homun_id); typedef int (*HPMHOOK_pre_homun_gainexp) (struct homun_data **hd, unsigned int *exp); typedef int (*HPMHOOK_post_homun_gainexp) (int retVal___, struct homun_data *hd, unsigned int exp); +typedef int (*HPMHOOK_pre_homun_gainexp_real) (struct homun_data **hd, unsigned int *exp); +typedef int (*HPMHOOK_post_homun_gainexp_real) (int retVal___, struct homun_data *hd, unsigned int exp); typedef unsigned int (*HPMHOOK_pre_homun_add_intimacy) (struct homun_data **hd, unsigned int *value); typedef unsigned int (*HPMHOOK_post_homun_add_intimacy) (unsigned int retVal___, struct homun_data *hd, unsigned int value); typedef unsigned int (*HPMHOOK_pre_homun_consume_intimacy) (struct homun_data **hd, unsigned int *value); @@ -3180,8 +3194,8 @@ typedef bool (*HPMHOOK_pre_homun_change_name_ack) (struct map_session_data **sd, typedef bool (*HPMHOOK_post_homun_change_name_ack) (bool retVal___, struct map_session_data *sd, const char *name, int flag); typedef int (*HPMHOOK_pre_homun_db_search) (int *key, int *type); typedef int (*HPMHOOK_post_homun_db_search) (int retVal___, int key, int type); -typedef bool (*HPMHOOK_pre_homun_create) (struct map_session_data **sd, const struct s_homunculus **hom); -typedef bool (*HPMHOOK_post_homun_create) (bool retVal___, struct map_session_data *sd, const struct s_homunculus *hom); +typedef bool (*HPMHOOK_pre_homun_create) (struct map_session_data **sd, const struct s_homunculus **hom, bool *is_new); +typedef bool (*HPMHOOK_post_homun_create) (bool retVal___, struct map_session_data *sd, const struct s_homunculus *hom, bool is_new); typedef void (*HPMHOOK_pre_homun_init_timers) (struct homun_data **hd); typedef void (*HPMHOOK_post_homun_init_timers) (struct homun_data *hd); typedef bool (*HPMHOOK_pre_homun_call) (struct map_session_data **sd); @@ -6372,6 +6386,8 @@ typedef void (*HPMHOOK_pre_pc_update_idle_time) (struct map_session_data **sd, e typedef void (*HPMHOOK_post_pc_update_idle_time) (struct map_session_data *sd, enum e_battle_config_idletime type); typedef int (*HPMHOOK_pre_pc_have_magnifier) (struct map_session_data **sd); typedef int (*HPMHOOK_post_pc_have_magnifier) (int retVal___, struct map_session_data *sd); +typedef int (*HPMHOOK_pre_pc_have_item_chain) (struct map_session_data **sd, unsigned short *chain_id); +typedef int (*HPMHOOK_post_pc_have_item_chain) (int retVal___, struct map_session_data *sd, unsigned short chain_id); typedef bool (*HPMHOOK_pre_pc_process_chat_message) (struct map_session_data **sd, const char **message); typedef bool (*HPMHOOK_post_pc_process_chat_message) (bool retVal___, struct map_session_data *sd, const char *message); typedef int (*HPMHOOK_pre_pc_wis_message_to_gm) (const char **sender_name, int *permission, const char **message); @@ -7046,6 +7062,10 @@ typedef void (*HPMHOOK_pre_script_run_item_equip_script) (struct map_session_dat typedef void (*HPMHOOK_post_script_run_item_equip_script) (struct map_session_data *sd, struct item_data *data, int oid); typedef void (*HPMHOOK_pre_script_run_item_unequip_script) (struct map_session_data **sd, struct item_data **data, int *oid); typedef void (*HPMHOOK_post_script_run_item_unequip_script) (struct map_session_data *sd, struct item_data *data, int oid); +typedef void (*HPMHOOK_pre_script_run_item_rental_end_script) (struct map_session_data **sd, struct item_data **data, int *oid); +typedef void (*HPMHOOK_post_script_run_item_rental_end_script) (struct map_session_data *sd, struct item_data *data, int oid); +typedef void (*HPMHOOK_pre_script_run_item_rental_start_script) (struct map_session_data **sd, struct item_data **data, int *oid); +typedef void (*HPMHOOK_post_script_run_item_rental_start_script) (struct map_session_data *sd, struct item_data *data, int oid); #endif // MAP_SCRIPT_H #ifdef MAP_SEARCHSTORE_H /* searchstore */ typedef bool (*HPMHOOK_pre_searchstore_open) (struct map_session_data **sd, unsigned int *uses, unsigned short *effect); @@ -7934,8 +7954,14 @@ typedef bool (*HPMHOOK_pre_status_readdb_job2) (char **fields[], int *columns, i typedef bool (*HPMHOOK_post_status_readdb_job2) (bool retVal___, char *fields[], int columns, int current); typedef bool (*HPMHOOK_pre_status_readdb_sizefix) (char **fields[], int *columns, int *current); typedef bool (*HPMHOOK_post_status_readdb_sizefix) (bool retVal___, char *fields[], int columns, int current); -typedef bool (*HPMHOOK_pre_status_readdb_scconfig) (char **fields[], int *columns, int *current); -typedef bool (*HPMHOOK_post_status_readdb_scconfig) (bool retVal___, char *fields[], int columns, int current); +typedef bool (*HPMHOOK_pre_status_read_scdb_libconfig) (void); +typedef bool (*HPMHOOK_post_status_read_scdb_libconfig) (bool retVal___); +typedef bool (*HPMHOOK_pre_status_read_scdb_libconfig_sub) (struct config_setting_t **it, int *idx, const char **source); +typedef bool (*HPMHOOK_post_status_read_scdb_libconfig_sub) (bool retVal___, struct config_setting_t *it, int idx, const char *source); +typedef bool (*HPMHOOK_pre_status_read_scdb_libconfig_sub_flag) (struct config_setting_t **it, int *type, const char **source); +typedef bool (*HPMHOOK_post_status_read_scdb_libconfig_sub_flag) (bool retVal___, struct config_setting_t *it, int type, const char *source); +typedef bool (*HPMHOOK_pre_status_read_scdb_libconfig_sub_flag_additional) (struct config_setting_t **it, int *type, const char **source); +typedef bool (*HPMHOOK_post_status_read_scdb_libconfig_sub_flag_additional) (bool retVal___, struct config_setting_t *it, int type, const char *source); typedef void (*HPMHOOK_pre_status_read_job_db) (void); typedef void (*HPMHOOK_post_status_read_job_db) (void); typedef void (*HPMHOOK_pre_status_read_job_db_sub) (int *idx, const char **name, struct config_setting_t **jdb); diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc index 29d802640..37c42d8c2 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc @@ -1346,6 +1346,10 @@ struct { struct HPMHookPoint *HP_clif_guild_basicinfo_post; struct HPMHookPoint *HP_clif_guild_allianceinfo_pre; struct HPMHookPoint *HP_clif_guild_allianceinfo_post; + struct HPMHookPoint *HP_clif_guild_castlelist_pre; + struct HPMHookPoint *HP_clif_guild_castlelist_post; + struct HPMHookPoint *HP_clif_guild_castleinfo_pre; + struct HPMHookPoint *HP_clif_guild_castleinfo_post; struct HPMHookPoint *HP_clif_guild_memberlist_pre; struct HPMHookPoint *HP_clif_guild_memberlist_post; struct HPMHookPoint *HP_clif_guild_skillinfo_pre; @@ -2316,6 +2320,12 @@ struct { struct HPMHookPoint *HP_clif_pRefineryUIRefine_post; struct HPMHookPoint *HP_clif_announce_refine_status_pre; struct HPMHookPoint *HP_clif_announce_refine_status_post; + struct HPMHookPoint *HP_clif_pGuildCastleTeleportRequest_pre; + struct HPMHookPoint *HP_clif_pGuildCastleTeleportRequest_post; + struct HPMHookPoint *HP_clif_pGuildCastleInfoRequest_pre; + struct HPMHookPoint *HP_clif_pGuildCastleInfoRequest_post; + struct HPMHookPoint *HP_clif_guild_castleteleport_res_pre; + struct HPMHookPoint *HP_clif_guild_castleteleport_res_post; struct HPMHookPoint *HP_cmdline_init_pre; struct HPMHookPoint *HP_cmdline_init_post; struct HPMHookPoint *HP_cmdline_final_pre; @@ -2622,6 +2632,8 @@ struct { struct HPMHookPoint *HP_guild_read_castledb_libconfig_post; struct HPMHookPoint *HP_guild_read_castledb_libconfig_sub_pre; struct HPMHookPoint *HP_guild_read_castledb_libconfig_sub_post; + struct HPMHookPoint *HP_guild_read_castledb_libconfig_sub_warp_pre; + struct HPMHookPoint *HP_guild_read_castledb_libconfig_sub_warp_post; struct HPMHookPoint *HP_guild_payexp_timer_sub_pre; struct HPMHookPoint *HP_guild_payexp_timer_sub_post; struct HPMHookPoint *HP_guild_send_xy_timer_sub_pre; @@ -2718,6 +2730,8 @@ struct { struct HPMHookPoint *HP_homun_mutate_post; struct HPMHookPoint *HP_homun_gainexp_pre; struct HPMHookPoint *HP_homun_gainexp_post; + struct HPMHookPoint *HP_homun_gainexp_real_pre; + struct HPMHookPoint *HP_homun_gainexp_real_post; struct HPMHookPoint *HP_homun_add_intimacy_pre; struct HPMHookPoint *HP_homun_add_intimacy_post; struct HPMHookPoint *HP_homun_consume_intimacy_pre; @@ -4956,6 +4970,8 @@ struct { struct HPMHookPoint *HP_pc_update_idle_time_post; struct HPMHookPoint *HP_pc_have_magnifier_pre; struct HPMHookPoint *HP_pc_have_magnifier_post; + struct HPMHookPoint *HP_pc_have_item_chain_pre; + struct HPMHookPoint *HP_pc_have_item_chain_post; struct HPMHookPoint *HP_pc_process_chat_message_pre; struct HPMHookPoint *HP_pc_process_chat_message_post; struct HPMHookPoint *HP_pc_wis_message_to_gm_pre; @@ -5580,6 +5596,10 @@ struct { struct HPMHookPoint *HP_script_run_item_equip_script_post; struct HPMHookPoint *HP_script_run_item_unequip_script_pre; struct HPMHookPoint *HP_script_run_item_unequip_script_post; + struct HPMHookPoint *HP_script_run_item_rental_end_script_pre; + struct HPMHookPoint *HP_script_run_item_rental_end_script_post; + struct HPMHookPoint *HP_script_run_item_rental_start_script_pre; + struct HPMHookPoint *HP_script_run_item_rental_start_script_post; struct HPMHookPoint *HP_searchstore_open_pre; struct HPMHookPoint *HP_searchstore_open_post; struct HPMHookPoint *HP_searchstore_query_pre; @@ -6456,8 +6476,14 @@ struct { struct HPMHookPoint *HP_status_readdb_job2_post; struct HPMHookPoint *HP_status_readdb_sizefix_pre; struct HPMHookPoint *HP_status_readdb_sizefix_post; - struct HPMHookPoint *HP_status_readdb_scconfig_pre; - struct HPMHookPoint *HP_status_readdb_scconfig_post; + struct HPMHookPoint *HP_status_read_scdb_libconfig_pre; + struct HPMHookPoint *HP_status_read_scdb_libconfig_post; + struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_pre; + struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_post; + struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_flag_pre; + struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_flag_post; + struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_flag_additional_pre; + struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_flag_additional_post; struct HPMHookPoint *HP_status_read_job_db_pre; struct HPMHookPoint *HP_status_read_job_db_post; struct HPMHookPoint *HP_status_read_job_db_sub_pre; @@ -8117,6 +8143,10 @@ struct { int HP_clif_guild_basicinfo_post; int HP_clif_guild_allianceinfo_pre; int HP_clif_guild_allianceinfo_post; + int HP_clif_guild_castlelist_pre; + int HP_clif_guild_castlelist_post; + int HP_clif_guild_castleinfo_pre; + int HP_clif_guild_castleinfo_post; int HP_clif_guild_memberlist_pre; int HP_clif_guild_memberlist_post; int HP_clif_guild_skillinfo_pre; @@ -9087,6 +9117,12 @@ struct { int HP_clif_pRefineryUIRefine_post; int HP_clif_announce_refine_status_pre; int HP_clif_announce_refine_status_post; + int HP_clif_pGuildCastleTeleportRequest_pre; + int HP_clif_pGuildCastleTeleportRequest_post; + int HP_clif_pGuildCastleInfoRequest_pre; + int HP_clif_pGuildCastleInfoRequest_post; + int HP_clif_guild_castleteleport_res_pre; + int HP_clif_guild_castleteleport_res_post; int HP_cmdline_init_pre; int HP_cmdline_init_post; int HP_cmdline_final_pre; @@ -9393,6 +9429,8 @@ struct { int HP_guild_read_castledb_libconfig_post; int HP_guild_read_castledb_libconfig_sub_pre; int HP_guild_read_castledb_libconfig_sub_post; + int HP_guild_read_castledb_libconfig_sub_warp_pre; + int HP_guild_read_castledb_libconfig_sub_warp_post; int HP_guild_payexp_timer_sub_pre; int HP_guild_payexp_timer_sub_post; int HP_guild_send_xy_timer_sub_pre; @@ -9489,6 +9527,8 @@ struct { int HP_homun_mutate_post; int HP_homun_gainexp_pre; int HP_homun_gainexp_post; + int HP_homun_gainexp_real_pre; + int HP_homun_gainexp_real_post; int HP_homun_add_intimacy_pre; int HP_homun_add_intimacy_post; int HP_homun_consume_intimacy_pre; @@ -11727,6 +11767,8 @@ struct { int HP_pc_update_idle_time_post; int HP_pc_have_magnifier_pre; int HP_pc_have_magnifier_post; + int HP_pc_have_item_chain_pre; + int HP_pc_have_item_chain_post; int HP_pc_process_chat_message_pre; int HP_pc_process_chat_message_post; int HP_pc_wis_message_to_gm_pre; @@ -12351,6 +12393,10 @@ struct { int HP_script_run_item_equip_script_post; int HP_script_run_item_unequip_script_pre; int HP_script_run_item_unequip_script_post; + int HP_script_run_item_rental_end_script_pre; + int HP_script_run_item_rental_end_script_post; + int HP_script_run_item_rental_start_script_pre; + int HP_script_run_item_rental_start_script_post; int HP_searchstore_open_pre; int HP_searchstore_open_post; int HP_searchstore_query_pre; @@ -13227,8 +13273,14 @@ struct { int HP_status_readdb_job2_post; int HP_status_readdb_sizefix_pre; int HP_status_readdb_sizefix_post; - int HP_status_readdb_scconfig_pre; - int HP_status_readdb_scconfig_post; + int HP_status_read_scdb_libconfig_pre; + int HP_status_read_scdb_libconfig_post; + int HP_status_read_scdb_libconfig_sub_pre; + int HP_status_read_scdb_libconfig_sub_post; + int HP_status_read_scdb_libconfig_sub_flag_pre; + int HP_status_read_scdb_libconfig_sub_flag_post; + int HP_status_read_scdb_libconfig_sub_flag_additional_pre; + int HP_status_read_scdb_libconfig_sub_flag_additional_post; int HP_status_read_job_db_pre; int HP_status_read_job_db_post; int HP_status_read_job_db_sub_pre; diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc index 4a991672a..748db6123 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc @@ -697,6 +697,8 @@ struct HookingPointData HookingPoints[] = { { HP_POP(clif->guild_masterormember, HP_clif_guild_masterormember) }, { HP_POP(clif->guild_basicinfo, HP_clif_guild_basicinfo) }, { HP_POP(clif->guild_allianceinfo, HP_clif_guild_allianceinfo) }, + { HP_POP(clif->guild_castlelist, HP_clif_guild_castlelist) }, + { HP_POP(clif->guild_castleinfo, HP_clif_guild_castleinfo) }, { HP_POP(clif->guild_memberlist, HP_clif_guild_memberlist) }, { HP_POP(clif->guild_skillinfo, HP_clif_guild_skillinfo) }, { HP_POP(clif->guild_send_onlineinfo, HP_clif_guild_send_onlineinfo) }, @@ -1182,6 +1184,9 @@ struct HookingPointData HookingPoints[] = { { HP_POP(clif->pRefineryUIClose, HP_clif_pRefineryUIClose) }, { HP_POP(clif->pRefineryUIRefine, HP_clif_pRefineryUIRefine) }, { HP_POP(clif->announce_refine_status, HP_clif_announce_refine_status) }, + { HP_POP(clif->pGuildCastleTeleportRequest, HP_clif_pGuildCastleTeleportRequest) }, + { HP_POP(clif->pGuildCastleInfoRequest, HP_clif_pGuildCastleInfoRequest) }, + { HP_POP(clif->guild_castleteleport_res, HP_clif_guild_castleteleport_res) }, /* cmdline_interface */ { HP_POP(cmdline->init, HP_cmdline_init) }, { HP_POP(cmdline->final, HP_cmdline_final) }, @@ -1344,6 +1349,7 @@ struct HookingPointData HookingPoints[] = { { HP_POP(guild->read_guildskill_tree_db, HP_guild_read_guildskill_tree_db) }, { HP_POP(guild->read_castledb_libconfig, HP_guild_read_castledb_libconfig) }, { HP_POP(guild->read_castledb_libconfig_sub, HP_guild_read_castledb_libconfig_sub) }, + { HP_POP(guild->read_castledb_libconfig_sub_warp, HP_guild_read_castledb_libconfig_sub_warp) }, { HP_POP(guild->payexp_timer_sub, HP_guild_payexp_timer_sub) }, { HP_POP(guild->send_xy_timer_sub, HP_guild_send_xy_timer_sub) }, { HP_POP(guild->send_xy_timer, HP_guild_send_xy_timer) }, @@ -1394,6 +1400,7 @@ struct HookingPointData HookingPoints[] = { { HP_POP(homun->evolve, HP_homun_evolve) }, { HP_POP(homun->mutate, HP_homun_mutate) }, { HP_POP(homun->gainexp, HP_homun_gainexp) }, + { HP_POP(homun->gainexp_real, HP_homun_gainexp_real) }, { HP_POP(homun->add_intimacy, HP_homun_add_intimacy) }, { HP_POP(homun->consume_intimacy, HP_homun_consume_intimacy) }, { HP_POP(homun->healed, HP_homun_healed) }, @@ -2536,6 +2543,7 @@ struct HookingPointData HookingPoints[] = { { HP_POP(pc->check_job_name, HP_pc_check_job_name) }, { HP_POP(pc->update_idle_time, HP_pc_update_idle_time) }, { HP_POP(pc->have_magnifier, HP_pc_have_magnifier) }, + { HP_POP(pc->have_item_chain, HP_pc_have_item_chain) }, { HP_POP(pc->process_chat_message, HP_pc_process_chat_message) }, { HP_POP(pc->wis_message_to_gm, HP_pc_wis_message_to_gm) }, { HP_POP(pc->wis_message_to_gm_sub, HP_pc_wis_message_to_gm_sub) }, @@ -2856,6 +2864,8 @@ struct HookingPointData HookingPoints[] = { { HP_POP(script->run_use_script, HP_script_run_use_script) }, { HP_POP(script->run_item_equip_script, HP_script_run_item_equip_script) }, { HP_POP(script->run_item_unequip_script, HP_script_run_item_unequip_script) }, + { HP_POP(script->run_item_rental_end_script, HP_script_run_item_rental_end_script) }, + { HP_POP(script->run_item_rental_start_script, HP_script_run_item_rental_start_script) }, /* searchstore_interface */ { HP_POP(searchstore->open, HP_searchstore_open) }, { HP_POP(searchstore->query, HP_searchstore_query) }, @@ -3300,7 +3310,10 @@ struct HookingPointData HookingPoints[] = { { HP_POP(status->natural_heal_timer, HP_status_natural_heal_timer) }, { HP_POP(status->readdb_job2, HP_status_readdb_job2) }, { HP_POP(status->readdb_sizefix, HP_status_readdb_sizefix) }, - { HP_POP(status->readdb_scconfig, HP_status_readdb_scconfig) }, + { HP_POP(status->read_scdb_libconfig, HP_status_read_scdb_libconfig) }, + { HP_POP(status->read_scdb_libconfig_sub, HP_status_read_scdb_libconfig_sub) }, + { HP_POP(status->read_scdb_libconfig_sub_flag, HP_status_read_scdb_libconfig_sub_flag) }, + { HP_POP(status->read_scdb_libconfig_sub_flag_additional, HP_status_read_scdb_libconfig_sub_flag_additional) }, { HP_POP(status->read_job_db, HP_status_read_job_db) }, { HP_POP(status->read_job_db_sub, HP_status_read_job_db_sub) }, { HP_POP(status->set_sc, HP_status_set_sc) }, diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc index d71aff20b..c9bdefbd7 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc @@ -11278,11 +11278,11 @@ void HP_clif_viewpoint(struct map_session_data *sd, int npc_id, int type, int x, } return; } -int HP_clif_damage(struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, unsigned char type, int64 damage2) { +int HP_clif_damage(struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, enum battle_dmg_type type, int64 damage2) { int hIndex = 0; int retVal___ = 0; if (HPMHooks.count.HP_clif_damage_pre > 0) { - int (*preHookFunc) (struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *damage, short *div, unsigned char *type, int64 *damage2); + int (*preHookFunc) (struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *damage, short *div, enum battle_dmg_type *type, int64 *damage2); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_damage_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_clif_damage_pre[hIndex].func; @@ -11297,7 +11297,7 @@ int HP_clif_damage(struct block_list *src, struct block_list *dst, int sdelay, i retVal___ = HPMHooks.source.clif.damage(src, dst, sdelay, ddelay, damage, div, type, damage2); } if (HPMHooks.count.HP_clif_damage_post > 0) { - int (*postHookFunc) (int retVal___, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, unsigned char type, int64 damage2); + int (*postHookFunc) (int retVal___, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, enum battle_dmg_type type, int64 damage2); for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_damage_post; hIndex++) { postHookFunc = HPMHooks.list.HP_clif_damage_post[hIndex].func; retVal___ = postHookFunc(retVal___, src, dst, sdelay, ddelay, damage, div, type, damage2); @@ -14532,11 +14532,11 @@ void HP_clif_callpartner(struct map_session_data *sd) { } return; } -int HP_clif_skill_damage(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, int type) { +int HP_clif_skill_damage(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type) { int hIndex = 0; int retVal___ = 0; if (HPMHooks.count.HP_clif_skill_damage_pre > 0) { - int (*preHookFunc) (struct block_list **src, struct block_list **dst, int64 *tick, int *sdelay, int *ddelay, int64 *damage, int *div, uint16 *skill_id, uint16 *skill_lv, int *type); + int (*preHookFunc) (struct block_list **src, struct block_list **dst, int64 *tick, int *sdelay, int *ddelay, int64 *damage, int *div, uint16 *skill_id, uint16 *skill_lv, enum battle_dmg_type *type); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_skill_damage_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_clif_skill_damage_pre[hIndex].func; @@ -14551,7 +14551,7 @@ int HP_clif_skill_damage(struct block_list *src, struct block_list *dst, int64 t retVal___ = HPMHooks.source.clif.skill_damage(src, dst, tick, sdelay, ddelay, damage, div, skill_id, skill_lv, type); } if (HPMHooks.count.HP_clif_skill_damage_post > 0) { - int (*postHookFunc) (int retVal___, struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, int type); + int (*postHookFunc) (int retVal___, struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type); for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_skill_damage_post; hIndex++) { postHookFunc = HPMHooks.list.HP_clif_skill_damage_post[hIndex].func; retVal___ = postHookFunc(retVal___, src, dst, tick, sdelay, ddelay, damage, div, skill_id, skill_lv, type); @@ -17552,6 +17552,58 @@ void HP_clif_guild_allianceinfo(struct map_session_data *sd) { } return; } +void HP_clif_guild_castlelist(struct map_session_data *sd) { + int hIndex = 0; + if (HPMHooks.count.HP_clif_guild_castlelist_pre > 0) { + void (*preHookFunc) (struct map_session_data **sd); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castlelist_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_clif_guild_castlelist_pre[hIndex].func; + preHookFunc(&sd); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.clif.guild_castlelist(sd); + } + if (HPMHooks.count.HP_clif_guild_castlelist_post > 0) { + void (*postHookFunc) (struct map_session_data *sd); + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castlelist_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_clif_guild_castlelist_post[hIndex].func; + postHookFunc(sd); + } + } + return; +} +void HP_clif_guild_castleinfo(struct map_session_data *sd, struct guild_castle *gc) { + int hIndex = 0; + if (HPMHooks.count.HP_clif_guild_castleinfo_pre > 0) { + void (*preHookFunc) (struct map_session_data **sd, struct guild_castle **gc); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castleinfo_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_clif_guild_castleinfo_pre[hIndex].func; + preHookFunc(&sd, &gc); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.clif.guild_castleinfo(sd, gc); + } + if (HPMHooks.count.HP_clif_guild_castleinfo_post > 0) { + void (*postHookFunc) (struct map_session_data *sd, struct guild_castle *gc); + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castleinfo_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_clif_guild_castleinfo_post[hIndex].func; + postHookFunc(sd, gc); + } + } + return; +} void HP_clif_guild_memberlist(struct map_session_data *sd) { int hIndex = 0; if (HPMHooks.count.HP_clif_guild_memberlist_pre > 0) { @@ -21332,11 +21384,11 @@ void HP_clif_notify_bounditem(struct map_session_data *sd, unsigned short index) } return; } -int HP_clif_delay_damage(int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type) { +int HP_clif_delay_damage(int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type) { int hIndex = 0; int retVal___ = 0; if (HPMHooks.count.HP_clif_delay_damage_pre > 0) { - int (*preHookFunc) (int64 *tick, struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *in_damage, short *div, unsigned char *type); + int (*preHookFunc) (int64 *tick, struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *in_damage, short *div, enum battle_dmg_type *type); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_delay_damage_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_clif_delay_damage_pre[hIndex].func; @@ -21351,7 +21403,7 @@ int HP_clif_delay_damage(int64 tick, struct block_list *src, struct block_list * retVal___ = HPMHooks.source.clif.delay_damage(tick, src, dst, sdelay, ddelay, in_damage, div, type); } if (HPMHooks.count.HP_clif_delay_damage_post > 0) { - int (*postHookFunc) (int retVal___, int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type); + int (*postHookFunc) (int retVal___, int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type); for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_delay_damage_post; hIndex++) { postHookFunc = HPMHooks.list.HP_clif_delay_damage_post[hIndex].func; retVal___ = postHookFunc(retVal___, tick, src, dst, sdelay, ddelay, in_damage, div, type); @@ -30193,6 +30245,84 @@ void HP_clif_announce_refine_status(struct map_session_data *sd, int item_id, in } return; } +void HP_clif_pGuildCastleTeleportRequest(int fd, struct map_session_data *sd) { + int hIndex = 0; + if (HPMHooks.count.HP_clif_pGuildCastleTeleportRequest_pre > 0) { + void (*preHookFunc) (int *fd, struct map_session_data **sd); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pGuildCastleTeleportRequest_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_clif_pGuildCastleTeleportRequest_pre[hIndex].func; + preHookFunc(&fd, &sd); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.clif.pGuildCastleTeleportRequest(fd, sd); + } + if (HPMHooks.count.HP_clif_pGuildCastleTeleportRequest_post > 0) { + void (*postHookFunc) (int fd, struct map_session_data *sd); + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pGuildCastleTeleportRequest_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_clif_pGuildCastleTeleportRequest_post[hIndex].func; + postHookFunc(fd, sd); + } + } + return; +} +void HP_clif_pGuildCastleInfoRequest(int fd, struct map_session_data *sd) { + int hIndex = 0; + if (HPMHooks.count.HP_clif_pGuildCastleInfoRequest_pre > 0) { + void (*preHookFunc) (int *fd, struct map_session_data **sd); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pGuildCastleInfoRequest_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_clif_pGuildCastleInfoRequest_pre[hIndex].func; + preHookFunc(&fd, &sd); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.clif.pGuildCastleInfoRequest(fd, sd); + } + if (HPMHooks.count.HP_clif_pGuildCastleInfoRequest_post > 0) { + void (*postHookFunc) (int fd, struct map_session_data *sd); + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pGuildCastleInfoRequest_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_clif_pGuildCastleInfoRequest_post[hIndex].func; + postHookFunc(fd, sd); + } + } + return; +} +void HP_clif_guild_castleteleport_res(struct map_session_data *sd, enum siege_teleport_result result) { + int hIndex = 0; + if (HPMHooks.count.HP_clif_guild_castleteleport_res_pre > 0) { + void (*preHookFunc) (struct map_session_data **sd, enum siege_teleport_result *result); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castleteleport_res_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_clif_guild_castleteleport_res_pre[hIndex].func; + preHookFunc(&sd, &result); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.clif.guild_castleteleport_res(sd, result); + } + if (HPMHooks.count.HP_clif_guild_castleteleport_res_post > 0) { + void (*postHookFunc) (struct map_session_data *sd, enum siege_teleport_result result); + for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castleteleport_res_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_clif_guild_castleteleport_res_post[hIndex].func; + postHookFunc(sd, result); + } + } + return; +} /* cmdline_interface */ void HP_cmdline_init(void) { int hIndex = 0; @@ -34304,6 +34434,33 @@ bool HP_guild_read_castledb_libconfig_sub(struct config_setting_t *it, int idx, } return retVal___; } +bool HP_guild_read_castledb_libconfig_sub_warp(struct config_setting_t *wd, const char *source, struct guild_castle *gc) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_guild_read_castledb_libconfig_sub_warp_pre > 0) { + bool (*preHookFunc) (struct config_setting_t **wd, const char **source, struct guild_castle **gc); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_read_castledb_libconfig_sub_warp_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_guild_read_castledb_libconfig_sub_warp_pre[hIndex].func; + retVal___ = preHookFunc(&wd, &source, &gc); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.guild.read_castledb_libconfig_sub_warp(wd, source, gc); + } + if (HPMHooks.count.HP_guild_read_castledb_libconfig_sub_warp_post > 0) { + bool (*postHookFunc) (bool retVal___, struct config_setting_t *wd, const char *source, struct guild_castle *gc); + for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_read_castledb_libconfig_sub_warp_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_guild_read_castledb_libconfig_sub_warp_post[hIndex].func; + retVal___ = postHookFunc(retVal___, wd, source, gc); + } + } + return retVal___; +} int HP_guild_payexp_timer_sub(union DBKey key, struct DBData *data, va_list ap) { int hIndex = 0; int retVal___ = 0; @@ -35356,15 +35513,15 @@ int HP_homun_dead(struct homun_data *hd) { } return retVal___; } -int HP_homun_vaporize(struct map_session_data *sd, enum homun_state flag) { +int HP_homun_vaporize(struct map_session_data *sd, enum homun_state state, bool force) { int hIndex = 0; int retVal___ = 0; if (HPMHooks.count.HP_homun_vaporize_pre > 0) { - int (*preHookFunc) (struct map_session_data **sd, enum homun_state *flag); + int (*preHookFunc) (struct map_session_data **sd, enum homun_state *state, bool *force); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_vaporize_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_homun_vaporize_pre[hIndex].func; - retVal___ = preHookFunc(&sd, &flag); + retVal___ = preHookFunc(&sd, &state, &force); } if (*HPMforce_return) { *HPMforce_return = false; @@ -35372,13 +35529,13 @@ int HP_homun_vaporize(struct map_session_data *sd, enum homun_state flag) { } } { - retVal___ = HPMHooks.source.homun.vaporize(sd, flag); + retVal___ = HPMHooks.source.homun.vaporize(sd, state, force); } if (HPMHooks.count.HP_homun_vaporize_post > 0) { - int (*postHookFunc) (int retVal___, struct map_session_data *sd, enum homun_state flag); + int (*postHookFunc) (int retVal___, struct map_session_data *sd, enum homun_state state, bool force); for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_vaporize_post; hIndex++) { postHookFunc = HPMHooks.list.HP_homun_vaporize_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd, flag); + retVal___ = postHookFunc(retVal___, sd, state, force); } } return retVal___; @@ -35652,6 +35809,33 @@ int HP_homun_gainexp(struct homun_data *hd, unsigned int exp) { } return retVal___; } +int HP_homun_gainexp_real(struct homun_data *hd, unsigned int exp) { + int hIndex = 0; + int retVal___ = 0; + if (HPMHooks.count.HP_homun_gainexp_real_pre > 0) { + int (*preHookFunc) (struct homun_data **hd, unsigned int *exp); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_gainexp_real_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_homun_gainexp_real_pre[hIndex].func; + retVal___ = preHookFunc(&hd, &exp); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.homun.gainexp_real(hd, exp); + } + if (HPMHooks.count.HP_homun_gainexp_real_post > 0) { + int (*postHookFunc) (int retVal___, struct homun_data *hd, unsigned int exp); + for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_gainexp_real_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_homun_gainexp_real_post[hIndex].func; + retVal___ = postHookFunc(retVal___, hd, exp); + } + } + return retVal___; +} unsigned int HP_homun_add_intimacy(struct homun_data *hd, unsigned int value) { int hIndex = 0; unsigned int retVal___ = 0; @@ -35946,15 +36130,15 @@ int HP_homun_db_search(int key, int type) { } return retVal___; } -bool HP_homun_create(struct map_session_data *sd, const struct s_homunculus *hom) { +bool HP_homun_create(struct map_session_data *sd, const struct s_homunculus *hom, bool is_new) { int hIndex = 0; bool retVal___ = false; if (HPMHooks.count.HP_homun_create_pre > 0) { - bool (*preHookFunc) (struct map_session_data **sd, const struct s_homunculus **hom); + bool (*preHookFunc) (struct map_session_data **sd, const struct s_homunculus **hom, bool *is_new); *HPMforce_return = false; for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_create_pre; hIndex++) { preHookFunc = HPMHooks.list.HP_homun_create_pre[hIndex].func; - retVal___ = preHookFunc(&sd, &hom); + retVal___ = preHookFunc(&sd, &hom, &is_new); } if (*HPMforce_return) { *HPMforce_return = false; @@ -35962,13 +36146,13 @@ bool HP_homun_create(struct map_session_data *sd, const struct s_homunculus *hom } } { - retVal___ = HPMHooks.source.homun.create(sd, hom); + retVal___ = HPMHooks.source.homun.create(sd, hom, is_new); } if (HPMHooks.count.HP_homun_create_post > 0) { - bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, const struct s_homunculus *hom); + bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, const struct s_homunculus *hom, bool is_new); for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_create_post; hIndex++) { postHookFunc = HPMHooks.list.HP_homun_create_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd, hom); + retVal___ = postHookFunc(retVal___, sd, hom, is_new); } } return retVal___; @@ -65958,6 +66142,33 @@ int HP_pc_have_magnifier(struct map_session_data *sd) { } return retVal___; } +int HP_pc_have_item_chain(struct map_session_data *sd, unsigned short chain_id) { + int hIndex = 0; + int retVal___ = 0; + if (HPMHooks.count.HP_pc_have_item_chain_pre > 0) { + int (*preHookFunc) (struct map_session_data **sd, unsigned short *chain_id); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_have_item_chain_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_pc_have_item_chain_pre[hIndex].func; + retVal___ = preHookFunc(&sd, &chain_id); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.pc.have_item_chain(sd, chain_id); + } + if (HPMHooks.count.HP_pc_have_item_chain_post > 0) { + int (*postHookFunc) (int retVal___, struct map_session_data *sd, unsigned short chain_id); + for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_have_item_chain_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_pc_have_item_chain_post[hIndex].func; + retVal___ = postHookFunc(retVal___, sd, chain_id); + } + } + return retVal___; +} bool HP_pc_process_chat_message(struct map_session_data *sd, const char *message) { int hIndex = 0; bool retVal___ = false; @@ -74462,6 +74673,58 @@ void HP_script_run_item_unequip_script(struct map_session_data *sd, struct item_ } return; } +void HP_script_run_item_rental_end_script(struct map_session_data *sd, struct item_data *data, int oid) { + int hIndex = 0; + if (HPMHooks.count.HP_script_run_item_rental_end_script_pre > 0) { + void (*preHookFunc) (struct map_session_data **sd, struct item_data **data, int *oid); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_script_run_item_rental_end_script_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_script_run_item_rental_end_script_pre[hIndex].func; + preHookFunc(&sd, &data, &oid); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.script.run_item_rental_end_script(sd, data, oid); + } + if (HPMHooks.count.HP_script_run_item_rental_end_script_post > 0) { + void (*postHookFunc) (struct map_session_data *sd, struct item_data *data, int oid); + for (hIndex = 0; hIndex < HPMHooks.count.HP_script_run_item_rental_end_script_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_script_run_item_rental_end_script_post[hIndex].func; + postHookFunc(sd, data, oid); + } + } + return; +} +void HP_script_run_item_rental_start_script(struct map_session_data *sd, struct item_data *data, int oid) { + int hIndex = 0; + if (HPMHooks.count.HP_script_run_item_rental_start_script_pre > 0) { + void (*preHookFunc) (struct map_session_data **sd, struct item_data **data, int *oid); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_script_run_item_rental_start_script_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_script_run_item_rental_start_script_pre[hIndex].func; + preHookFunc(&sd, &data, &oid); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.script.run_item_rental_start_script(sd, data, oid); + } + if (HPMHooks.count.HP_script_run_item_rental_start_script_post > 0) { + void (*postHookFunc) (struct map_session_data *sd, struct item_data *data, int oid); + for (hIndex = 0; hIndex < HPMHooks.count.HP_script_run_item_rental_start_script_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_script_run_item_rental_start_script_post[hIndex].func; + postHookFunc(sd, data, oid); + } + } + return; +} /* searchstore_interface */ bool HP_searchstore_open(struct map_session_data *sd, unsigned int uses, unsigned short effect) { int hIndex = 0; @@ -86387,15 +86650,15 @@ bool HP_status_readdb_sizefix(char *fields[], int columns, int current) { } return retVal___; } -bool HP_status_readdb_scconfig(char *fields[], int columns, int current) { +bool HP_status_read_scdb_libconfig(void) { int hIndex = 0; bool retVal___ = false; - if (HPMHooks.count.HP_status_readdb_scconfig_pre > 0) { - bool (*preHookFunc) (char **fields[], int *columns, int *current); + if (HPMHooks.count.HP_status_read_scdb_libconfig_pre > 0) { + bool (*preHookFunc) (void); *HPMforce_return = false; - for (hIndex = 0; hIndex < HPMHooks.count.HP_status_readdb_scconfig_pre; hIndex++) { - preHookFunc = HPMHooks.list.HP_status_readdb_scconfig_pre[hIndex].func; - retVal___ = preHookFunc(&fields, &columns, ¤t); + for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_pre[hIndex].func; + retVal___ = preHookFunc(); } if (*HPMforce_return) { *HPMforce_return = false; @@ -86403,13 +86666,94 @@ bool HP_status_readdb_scconfig(char *fields[], int columns, int current) { } } { - retVal___ = HPMHooks.source.status.readdb_scconfig(fields, columns, current); + retVal___ = HPMHooks.source.status.read_scdb_libconfig(); } - if (HPMHooks.count.HP_status_readdb_scconfig_post > 0) { - bool (*postHookFunc) (bool retVal___, char *fields[], int columns, int current); - for (hIndex = 0; hIndex < HPMHooks.count.HP_status_readdb_scconfig_post; hIndex++) { - postHookFunc = HPMHooks.list.HP_status_readdb_scconfig_post[hIndex].func; - retVal___ = postHookFunc(retVal___, fields, columns, current); + if (HPMHooks.count.HP_status_read_scdb_libconfig_post > 0) { + bool (*postHookFunc) (bool retVal___); + for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_post[hIndex].func; + retVal___ = postHookFunc(retVal___); + } + } + return retVal___; +} +bool HP_status_read_scdb_libconfig_sub(struct config_setting_t *it, int idx, const char *source) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_pre > 0) { + bool (*preHookFunc) (struct config_setting_t **it, int *idx, const char **source); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_pre[hIndex].func; + retVal___ = preHookFunc(&it, &idx, &source); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.status.read_scdb_libconfig_sub(it, idx, source); + } + if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_post > 0) { + bool (*postHookFunc) (bool retVal___, struct config_setting_t *it, int idx, const char *source); + for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_post[hIndex].func; + retVal___ = postHookFunc(retVal___, it, idx, source); + } + } + return retVal___; +} +bool HP_status_read_scdb_libconfig_sub_flag(struct config_setting_t *it, int type, const char *source) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_pre > 0) { + bool (*preHookFunc) (struct config_setting_t **it, int *type, const char **source); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_flag_pre[hIndex].func; + retVal___ = preHookFunc(&it, &type, &source); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.status.read_scdb_libconfig_sub_flag(it, type, source); + } + if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_post > 0) { + bool (*postHookFunc) (bool retVal___, struct config_setting_t *it, int type, const char *source); + for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_flag_post[hIndex].func; + retVal___ = postHookFunc(retVal___, it, type, source); + } + } + return retVal___; +} +bool HP_status_read_scdb_libconfig_sub_flag_additional(struct config_setting_t *it, int type, const char *source) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_additional_pre > 0) { + bool (*preHookFunc) (struct config_setting_t **it, int *type, const char **source); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_additional_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_flag_additional_pre[hIndex].func; + retVal___ = preHookFunc(&it, &type, &source); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.status.read_scdb_libconfig_sub_flag_additional(it, type, source); + } + if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_additional_post > 0) { + bool (*postHookFunc) (bool retVal___, struct config_setting_t *it, int type, const char *source); + for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_additional_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_flag_additional_post[hIndex].func; + retVal___ = postHookFunc(retVal___, it, type, source); } } return retVal___; diff --git a/tools/scconfigconverter.py b/tools/scconfigconverter.py new file mode 100644 index 000000000..9216fa3b5 --- /dev/null +++ b/tools/scconfigconverter.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python +# -*- coding: utf8 -*- +# +# This file is part of Hercules. +# http://herc.ws - http://github.com/HerculesWS/Hercules +# +# Copyright (C) 2019 Hercules Dev Team +# Copyright (C) 2019 Asheraf +# +# Hercules is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +import csv + +with open('../db/sc_config.txt') as dbfile: + sc_config = csv.reader(dbfile, delimiter=',') + + print(r'''//================= Hercules Database ===================================== +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2019 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//================= Description =========================================== +// Configurations file for status effects +//========================================================================= +''') + print('''/************************************************************************** + ************* Entry structure ******************************************** + ************************************************************************** +SC_TYPE: { + // ================ Optional fields =============================== + Visible: (bool) SC can be visible for all players + Flags: { + NoDeathReset: (bool) SC cannot be removed by death. + NoSave: (bool) SC cannot be saved. + NoDispelReset: (bool) SC cannot be reset by dispell. + NoClearanceReset: (bool) SC cannot be reset by clearance. + Buff: (bool) SC considered as buff and be removed by Hermode and etc. + Debuff: (bool) SC considered as debuff and be removed by Gospel and etc. + NoMadoReset: (bool) SC cannot be reset when MADO Gear is taken off. + NoAllReset: (bool) SC cannot be reset by 'sc_end SC_ALL' and status change clear. + } +} +**************************************************************************/''') + flags = [ + ('NoDeathReset', 1), + ('NoSave', 2), + ('NoDispelReset', 4), + ('NoClearanceReset', 8), + ('Buff', 16), + ('Debuff', 32), + ('NoMadoReset', 64), + ('NoAllReset', 128) + ] + + for sc in sc_config: + if len(sc) != 2 or sc[0].startswith('//'): + continue + value = int(sc[1]) + print('{}: {{'.format(sc[0])) + if value & 256: + print('\tVisible: true') + value &= ~256; + + print('\tFlags: {') + for flag in flags: + if value & flag[1]: + print('\t\t{}: true'.format(flag[0])) + value &= ~flag[1]; + if value != 0: + print('Error: invalid value ({}) for status ({}), aborting.'.format(int(sc[1]), sc[0])) + exit() + print('\t}') + print('}') |