From 5456bfe482c21a0bf44eba9d88f681093c982918 Mon Sep 17 00:00:00 2001 From: Marco Date: Wed, 22 Nov 2023 13:26:42 -0300 Subject: [PATCH 1/6] Update to game protocol 12.91 --- data/items/items.otb | Bin 2108331 -> 2198890 bytes src/definitions.h | 6 +++--- src/game.cpp | 4 ++-- src/game.h | 6 +++--- src/itemloader.h | 7 ++++--- src/items.cpp | 2 ++ src/items.h | 2 ++ src/networkmessage.cpp | 14 ++++++++++++++ src/npc.cpp | 4 ++-- src/npc.h | 4 ++-- src/protocolgame.cpp | 7 +++---- 11 files changed, 37 insertions(+), 19 deletions(-) diff --git a/data/items/items.otb b/data/items/items.otb index 3def2d5c663ff7ee073b975e98e0a80fe585f483..a76ae7874a7d85886e779eda64c036043581e3f3 100644 GIT binary patch delta 85506 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 T)nP8l=8{X0Je5sW`1b8Ty#a#p delta 4897 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 diff --git a/src/definitions.h b/src/definitions.h index d65a657dcb..c7aafc934d 100644 --- a/src/definitions.h +++ b/src/definitions.h @@ -8,9 +8,9 @@ static constexpr auto STATUS_SERVER_NAME = "The Forgotten Server"; static constexpr auto STATUS_SERVER_VERSION = "1.5"; static constexpr auto STATUS_SERVER_DEVELOPERS = "The Forgotten Server Team"; -static constexpr auto CLIENT_VERSION_MIN = 1280; -static constexpr auto CLIENT_VERSION_MAX = 1288; -static constexpr auto CLIENT_VERSION_STR = "12.87"; +static constexpr auto CLIENT_VERSION_MIN = 1290; +static constexpr auto CLIENT_VERSION_MAX = 1291; +static constexpr auto CLIENT_VERSION_STR = "12.90"; static constexpr auto AUTHENTICATOR_DIGITS = 6U; static constexpr auto AUTHENTICATOR_PERIOD = 30U; diff --git a/src/game.cpp b/src/game.cpp index 6de690c024..dd3b5702e5 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -3049,7 +3049,7 @@ void Game::internalCloseTrade(Player* player, bool sendCancel /* = true*/) } } -void Game::playerPurchaseItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint8_t amount, +void Game::playerPurchaseItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint16_t amount, bool ignoreCap /* = false*/, bool inBackpacks /* = false*/) { if (amount == 0 || amount > ITEM_STACK_SIZE) { @@ -3087,7 +3087,7 @@ void Game::playerPurchaseItem(uint32_t playerId, uint16_t spriteId, uint8_t coun merchant->onPlayerTrade(player, onBuy, it.id, subType, amount, ignoreCap, inBackpacks); } -void Game::playerSellItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint8_t amount, bool ignoreEquipped) +void Game::playerSellItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint16_t amount, bool ignoreEquipped) { if (amount == 0 || amount > ITEM_STACK_SIZE) { return; diff --git a/src/game.h b/src/game.h index cbdbe8ce72..897e3f6c21 100644 --- a/src/game.h +++ b/src/game.h @@ -364,9 +364,9 @@ class Game uint16_t spriteId); void playerAcceptTrade(uint32_t playerId); void playerLookInTrade(uint32_t playerId, bool lookAtCounterOffer, uint8_t index); - void playerPurchaseItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint8_t amount, bool ignoreCap = false, - bool inBackpacks = false); - void playerSellItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint8_t amount, + void playerPurchaseItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint16_t amount, + bool ignoreCap = false, bool inBackpacks = false); + void playerSellItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint16_t amount, bool ignoreEquipped = false); void playerCloseShop(uint32_t playerId); void playerLookInShop(uint32_t playerId, uint16_t spriteId, uint8_t count); diff --git a/src/itemloader.h b/src/itemloader.h index c419870e4d..b593782068 100644 --- a/src/itemloader.h +++ b/src/itemloader.h @@ -96,8 +96,9 @@ enum clientVersion_t CLIENT_VERSION_1285 = 61, CLIENT_VERSION_1286 = 62, CLIENT_VERSION_1287 = 63, + CLIENT_VERSION_1290 = 64, - CLIENT_VERSION_LAST = CLIENT_VERSION_1287 + CLIENT_VERSION_LAST = CLIENT_VERSION_1290 }; enum rootattrib_ @@ -169,8 +170,8 @@ enum itemflags_t FLAG_HORIZONTAL = 1 << 18, FLAG_CANNOTDECAY = 1 << 19, // unused FLAG_ALLOWDISTREAD = 1 << 20, - FLAG_UNUSED = 1 << 21, // unused - FLAG_CLIENTCHARGES = 1 << 22, /* deprecated */ + FLAG_CLIENTDURATION = 1 << 21, + FLAG_CLIENTCHARGES = 1 << 22, FLAG_LOOKTHROUGH = 1 << 23, FLAG_ANIMATION = 1 << 24, FLAG_FULLTILE = 1 << 25, // unused diff --git a/src/items.cpp b/src/items.cpp index 0c589377b1..62befdc18b 100644 --- a/src/items.cpp +++ b/src/items.cpp @@ -560,6 +560,8 @@ bool Items::loadFromOtb(const std::string& file) iType.isAnimation = hasBitSet(FLAG_ANIMATION, flags); // iType.walkStack = !hasBitSet(FLAG_FULLTILE, flags); iType.forceUse = hasBitSet(FLAG_FORCEUSE, flags); + iType.showClientCharges = hasBitSet(FLAG_CLIENTCHARGES, flags); + iType.showClientDuration = hasBitSet(FLAG_CLIENTDURATION, flags); iType.id = serverId; iType.clientId = clientId; diff --git a/src/items.h b/src/items.h index 3a89980c5b..0f33e2061a 100644 --- a/src/items.h +++ b/src/items.h @@ -412,6 +412,8 @@ class ItemType bool stopTime = false; bool showCount = true; bool supply = false; + bool showClientCharges = false; + bool showClientDuration = false; }; class Items diff --git a/src/networkmessage.cpp b/src/networkmessage.cpp index 5bfc3e5be8..882fb2ddc0 100644 --- a/src/networkmessage.cpp +++ b/src/networkmessage.cpp @@ -95,6 +95,12 @@ void NetworkMessage::addItem(uint16_t id, uint8_t count) addByte(0x00); // quiver ammo count } else if (it.classification > 0) { addByte(0x00); // item tier (0-10) + } else if (it.showClientCharges) { + add(it.charges); + addByte(0x00); // boolean (is brand new) + } else if (it.showClientDuration) { + add(it.decayTime); + addByte(0x00); // boolean (is brand new) } if (it.isPodium()) { @@ -119,6 +125,14 @@ void NetworkMessage::addItem(const Item* item) addByte(0x00); // item tier (0-10) } + if (it.showClientCharges) { + add(item->getCharges()); + addByte(0); // boolean (is brand new) + } else if (it.showClientDuration) { + add(item->getDuration() / 1000); + addByte(0); // boolean (is brand new) + } + if (it.isContainer()) { addByte(0x00); // assigned loot container icon // quiver ammo count diff --git a/src/npc.cpp b/src/npc.cpp index 7171b874a2..996783a2d9 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -344,7 +344,7 @@ void Npc::doSayToPlayer(Player* player, const std::string& text) } } -void Npc::onPlayerTrade(Player* player, int32_t callback, uint16_t itemId, uint8_t count, uint8_t amount, +void Npc::onPlayerTrade(Player* player, int32_t callback, uint16_t itemId, uint8_t count, uint16_t amount, bool ignore /* = false*/, bool inBackpacks /* = false*/) { if (npcEventHandler) { @@ -1194,7 +1194,7 @@ void NpcEventsHandler::onCreatureSay(Creature* creature, SpeakClasses type, cons scriptInterface->callFunction(3); } -void NpcEventsHandler::onPlayerTrade(Player* player, int32_t callback, uint16_t itemId, uint8_t count, uint8_t amount, +void NpcEventsHandler::onPlayerTrade(Player* player, int32_t callback, uint16_t itemId, uint8_t count, uint16_t amount, bool ignore, bool inBackpacks) { if (callback == -1) { diff --git a/src/npc.h b/src/npc.h index 0ce5db7c6b..4f5ec6c1b0 100644 --- a/src/npc.h +++ b/src/npc.h @@ -62,7 +62,7 @@ class NpcEventsHandler void onCreatureDisappear(Creature* creature); void onCreatureMove(Creature* creature, const Position& oldPos, const Position& newPos); void onCreatureSay(Creature* creature, SpeakClasses, const std::string& text); - void onPlayerTrade(Player* player, int32_t callback, uint16_t itemId, uint8_t count, uint8_t amount, + void onPlayerTrade(Player* player, int32_t callback, uint16_t itemId, uint8_t count, uint16_t amount, bool ignore = false, bool inBackpacks = false); void onPlayerCloseChannel(Player* player); void onPlayerEndTrade(Player* player); @@ -143,7 +143,7 @@ class Npc final : public Creature } void onPlayerCloseChannel(Player* player); - void onPlayerTrade(Player* player, int32_t callback, uint16_t itemId, uint8_t count, uint8_t amount, + void onPlayerTrade(Player* player, int32_t callback, uint16_t itemId, uint8_t count, uint16_t amount, bool ignore = false, bool inBackpacks = false); void onPlayerEndTrade(Player* player, int32_t buyCallback, int32_t sellCallback); diff --git a/src/protocolgame.cpp b/src/protocolgame.cpp index f82eb233d8..282be7be7e 100644 --- a/src/protocolgame.cpp +++ b/src/protocolgame.cpp @@ -1370,7 +1370,7 @@ void ProtocolGame::parsePlayerPurchase(NetworkMessage& msg) { uint16_t id = msg.get(); uint8_t count = msg.getByte(); - uint8_t amount = msg.getByte(); + uint16_t amount = msg.get(); bool ignoreCap = msg.getByte() != 0; bool inBackpacks = msg.getByte() != 0; g_dispatcher.addTask(DISPATCHER_TASK_EXPIRATION, [=, playerID = player->getID()]() { @@ -1382,7 +1382,7 @@ void ProtocolGame::parsePlayerSale(NetworkMessage& msg) { uint16_t id = msg.get(); uint8_t count = msg.getByte(); - uint8_t amount = msg.getByte(); + uint16_t amount = msg.get(); bool ignoreEquipped = msg.getByte() != 0; g_dispatcher.addTask(DISPATCHER_TASK_EXPIRATION, [=, playerID = player->getID()]() { g_game.playerSellItem(playerID, id, count, amount, ignoreEquipped); @@ -2039,7 +2039,6 @@ void ProtocolGame::sendSaleItemList(const std::list& shop) NetworkMessage msg; msg.addByte(0x7B); - msg.add(playerBank + playerMoney); // deprecated and ignored by QT client. OTClient still uses it. std::map saleMap; @@ -2109,7 +2108,7 @@ void ProtocolGame::sendSaleItemList(const std::list& shop) uint8_t i = 0; for (std::map::const_iterator it = saleMap.begin(); i < itemsToSend; ++it, ++i) { msg.addItemId(it->first); - msg.addByte(std::min(it->second, std::numeric_limits::max())); + msg.add(std::min(it->second, std::numeric_limits::max())); } writeToOutputBuffer(msg); From 8b0532ea94b17cc25f5ccc4cedde3e14aabb85a0 Mon Sep 17 00:00:00 2001 From: Marco Date: Mon, 11 Dec 2023 15:11:07 -0300 Subject: [PATCH 2/6] adding things from the update --- data/XML/mounts.xml | 2 + data/XML/outfits.xml | 4 + data/items/items.xml | 1558 ++++++++++++++++++++++++ data/lib/core/achievements.lua | 10 + data/scripts/actions/others/taming.lua | 8 + src/const.h | 3 + src/luascript.cpp | 1 + src/tools.cpp | 11 +- 8 files changed, 1592 insertions(+), 5 deletions(-) diff --git a/data/XML/mounts.xml b/data/XML/mounts.xml index 0731871ed4..c604442e4f 100644 --- a/data/XML/mounts.xml +++ b/data/XML/mounts.xml @@ -200,4 +200,6 @@ + + diff --git a/data/XML/outfits.xml b/data/XML/outfits.xml index 3d97ac4655..4041d2c1dc 100644 --- a/data/XML/outfits.xml +++ b/data/XML/outfits.xml @@ -107,6 +107,8 @@ + + @@ -215,4 +217,6 @@ + + diff --git a/data/items/items.xml b/data/items/items.xml index 6eed1612a2..b7c8798cf2 100644 --- a/data/items/items.xml +++ b/data/items/items.xml @@ -42934,4 +42934,1562 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/lib/core/achievements.lua b/data/lib/core/achievements.lua index 2cf952c6b1..4f763c5aa2 100644 --- a/data/lib/core/achievements.lua +++ b/data/lib/core/achievements.lua @@ -589,6 +589,16 @@ achievements = { [494] = {clientId = 528, name = "Shell we take a Ride", grade = 1, points = 3, description = "Equipped with the shell of a tortoise and claws of a lobster this insect like companion will help you through every hardship."}, [495] = {clientId = 530, name = "Some Like It Hot", grade = 1, points = 2, description = "You have braved the searing heat in the tunnels deep below Kazordoon and vanquished the Brainstealer. The voices inside your head are finally silenced."}, [496] = {clientId = 427, name = "Woodcarver", grade = 1, points = 3, secret = true, description = "You defeated Megasylvan Yselda in the wake of the sleeping carnisylvan menace deep under Bounac."}, + + -- 12.90 + [502] = {clientId = 534, name = "Friendly Fire", grade = 1, points = 1, description = "You mastered the fire and tamed a supervulcano!"}, + [503] = {clientId = 535, name = "Wedding Planner", grade = 1, points = 3, description = "Alas! What could be more beautiful and satisfying than bringing two loving hearts together? So romantic!"}, + [504] = {clientId = 536, name = "Beaver Away", grade = 1, points = 1, description = "You really were as busy as a beaver in order to help the nagas. Enjoy some eager company!"}, + [505] = {clientId = 537, name = "Snake Pit", grade = 1, points = 1, description = "Mysterious nagas, a vibrant jungle and a sinking island - you really know every corner of Marapur now."}, + [506] = {clientId = 538, name = "Royalty of Hazard", grade = 1, points = 1, description = "For some it can't be hazardous enough."}, + [507] = {clientId = 539, name = "Measuring the World", grade = 1, points = 3, description = "Step by step you discovered many of the secrets hidden in the world, thus gaining the right to wear the Discoverer outfit and hat. Made-to-measure for a brave traveller of the wilds."}, + [508] = {clientId = 540, name = "Ripp-Ripp Hooray!", grade = 1, points = 3, description = "Don't get carried away by your success. Get carried away by your ripptor."}, + [509] = {clientId = 531, name = "First Achievement", grade = 1, points = 1, secret = true, description = "Congratulations to your very first achievement! ... Well, not really. But imagine, it is. Because at this point during your journey into the past, achievements have been introduced."}, } ACHIEVEMENT_FIRST = 1 diff --git a/data/scripts/actions/others/taming.lua b/data/scripts/actions/others/taming.lua index b98abd99d3..8341f3bda7 100644 --- a/data/scripts/actions/others/taming.lua +++ b/data/scripts/actions/others/taming.lua @@ -359,6 +359,14 @@ local config = { {sound = "GRRRRRRRRR", text = "The noble lion majestically rejects your amulet."} }, success = {sound = "Grrr", text = "The noble lion will now accompany you as a friend and ally."} + }, + [44579] = { -- colourful water lily + name = "giant beaver", + id = 201, + type = TYPE_MONSTER, + achievement = "Beaver Away", + chance = 100, + success = {sound = "Grrr!", text = "You tamed the giant beaver."} } } diff --git a/src/const.h b/src/const.h index 6dbc04df45..56484b1949 100644 --- a/src/const.h +++ b/src/const.h @@ -172,6 +172,7 @@ enum MagicEffectClasses : uint8_t CONST_ME_HORESTIS = 238, CONST_ME_DEVOVORGA = 239, CONST_ME_FERUMBRAS_2 = 240, + CONST_ME_FOAM = 241, }; enum ShootType_t : uint8_t @@ -581,6 +582,8 @@ enum item_t : uint16_t ITEM_DEPOT_BOX_XVI = 25468, ITEM_DEPOT_BOX_XVII = 25469, ITEM_DEPOT_BOX_XVIII = 34571, + ITEM_DEPOT_BOX_XIX = 44714, + ITEM_DEPOT_BOX_XX = 44715, ITEM_MALE_CORPSE = 3058, ITEM_FEMALE_CORPSE = 3065, diff --git a/src/luascript.cpp b/src/luascript.cpp index b790107acc..59de8bffdb 100644 --- a/src/luascript.cpp +++ b/src/luascript.cpp @@ -1474,6 +1474,7 @@ void LuaScriptInterface::registerFunctions() registerEnum(CONST_ME_HORESTIS); registerEnum(CONST_ME_DEVOVORGA); registerEnum(CONST_ME_FERUMBRAS_2); + registerEnum(CONST_ME_FOAM); registerEnum(CONST_ANI_NONE); registerEnum(CONST_ANI_SPEAR); diff --git a/src/tools.cpp b/src/tools.cpp index 0ad6fefed7..c945ce8e66 100644 --- a/src/tools.cpp +++ b/src/tools.cpp @@ -539,6 +539,7 @@ MagicEffectNames magicEffectNames = { {"horestis", CONST_ME_HORESTIS}, {"devovorga", CONST_ME_DEVOVORGA}, {"ferumbras2", CONST_ME_FERUMBRAS_2}, + {"foam", CONST_ME_FOAM}, }; ShootTypeNames shootTypeNames = { @@ -656,11 +657,11 @@ SkullNames skullNames = { {"red", SKULL_RED}, {"black", SKULL_BLACK}, {"orange", SKULL_ORANGE}, }; -std::vector depotBoxes = {ITEM_DEPOT_BOX_I, ITEM_DEPOT_BOX_II, ITEM_DEPOT_BOX_III, ITEM_DEPOT_BOX_IV, - ITEM_DEPOT_BOX_V, ITEM_DEPOT_BOX_VI, ITEM_DEPOT_BOX_VII, ITEM_DEPOT_BOX_VIII, - ITEM_DEPOT_BOX_IX, ITEM_DEPOT_BOX_X, ITEM_DEPOT_BOX_XI, ITEM_DEPOT_BOX_XII, - ITEM_DEPOT_BOX_XIII, ITEM_DEPOT_BOX_XIV, ITEM_DEPOT_BOX_XV, ITEM_DEPOT_BOX_XVI, - ITEM_DEPOT_BOX_XVII, ITEM_DEPOT_BOX_XVIII}; +std::vector depotBoxes = {ITEM_DEPOT_BOX_I, ITEM_DEPOT_BOX_II, ITEM_DEPOT_BOX_III, ITEM_DEPOT_BOX_IV, + ITEM_DEPOT_BOX_V, ITEM_DEPOT_BOX_VI, ITEM_DEPOT_BOX_VII, ITEM_DEPOT_BOX_VIII, + ITEM_DEPOT_BOX_IX, ITEM_DEPOT_BOX_X, ITEM_DEPOT_BOX_XI, ITEM_DEPOT_BOX_XII, + ITEM_DEPOT_BOX_XIII, ITEM_DEPOT_BOX_XIV, ITEM_DEPOT_BOX_XV, ITEM_DEPOT_BOX_XVI, + ITEM_DEPOT_BOX_XVII, ITEM_DEPOT_BOX_XVIII, ITEM_DEPOT_BOX_XIX, ITEM_DEPOT_BOX_XX}; uint16_t getDepotBoxId(uint16_t index) { From a1e31795f7f72ccf6cd76d8694d2628b5b97dadf Mon Sep 17 00:00:00 2001 From: Marco Date: Mon, 11 Dec 2023 15:17:38 -0300 Subject: [PATCH 3/6] fix: depot boxes --- data/items/items.xml | 2 +- src/tools.cpp | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/data/items/items.xml b/data/items/items.xml index b7c8798cf2..e51054550c 100644 --- a/data/items/items.xml +++ b/data/items/items.xml @@ -4420,7 +4420,7 @@ - + diff --git a/src/tools.cpp b/src/tools.cpp index 811f5164f6..a047b690ba 100644 --- a/src/tools.cpp +++ b/src/tools.cpp @@ -657,11 +657,12 @@ SkullNames skullNames = { {"red", SKULL_RED}, {"black", SKULL_BLACK}, {"orange", SKULL_ORANGE}, }; -std::vector depotBoxes = {ITEM_DEPOT_BOX_I, ITEM_DEPOT_BOX_II, ITEM_DEPOT_BOX_III, ITEM_DEPOT_BOX_IV, - ITEM_DEPOT_BOX_V, ITEM_DEPOT_BOX_VI, ITEM_DEPOT_BOX_VII, ITEM_DEPOT_BOX_VIII, - ITEM_DEPOT_BOX_IX, ITEM_DEPOT_BOX_X, ITEM_DEPOT_BOX_XI, ITEM_DEPOT_BOX_XII, - ITEM_DEPOT_BOX_XIII, ITEM_DEPOT_BOX_XIV, ITEM_DEPOT_BOX_XV, ITEM_DEPOT_BOX_XVI, - ITEM_DEPOT_BOX_XVII, ITEM_DEPOT_BOX_XVIII, ITEM_DEPOT_BOX_XIX, ITEM_DEPOT_BOX_XX}; +std::vector depotBoxes = { + ITEM_DEPOT_BOX_I, ITEM_DEPOT_BOX_II, ITEM_DEPOT_BOX_III, ITEM_DEPOT_BOX_IV, ITEM_DEPOT_BOX_V, + ITEM_DEPOT_BOX_VI, ITEM_DEPOT_BOX_VII, ITEM_DEPOT_BOX_VIII, ITEM_DEPOT_BOX_IX, ITEM_DEPOT_BOX_X, + ITEM_DEPOT_BOX_XI, ITEM_DEPOT_BOX_XII, ITEM_DEPOT_BOX_XIII, ITEM_DEPOT_BOX_XIV, ITEM_DEPOT_BOX_XV, + ITEM_DEPOT_BOX_XVI, ITEM_DEPOT_BOX_XVII, ITEM_DEPOT_BOX_XVIII, ITEM_DEPOT_BOX_XIX, ITEM_DEPOT_BOX_XX, +}; uint16_t getDepotBoxId(uint16_t index) { From 056914a898499a091c34f54365394e0d29fb9464 Mon Sep 17 00:00:00 2001 From: Evil Puncker Date: Mon, 11 Dec 2023 18:14:46 -0300 Subject: [PATCH 4/6] Update items.xml --- data/items/items.xml | 94 +++++++++++--------------------------------- 1 file changed, 24 insertions(+), 70 deletions(-) diff --git a/data/items/items.xml b/data/items/items.xml index e51054550c..054d3221d6 100644 --- a/data/items/items.xml +++ b/data/items/items.xml @@ -42934,76 +42934,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + From efa973c5700270ad27dd9a177e3a2d5e10750028 Mon Sep 17 00:00:00 2001 From: Marco Date: Mon, 11 Dec 2023 19:51:31 -0300 Subject: [PATCH 5/6] Update items.xml --- data/items/items.xml | 1512 ------------------------------------------ 1 file changed, 1512 deletions(-) diff --git a/data/items/items.xml b/data/items/items.xml index 054d3221d6..0961d7f77f 100644 --- a/data/items/items.xml +++ b/data/items/items.xml @@ -42934,1516 +42934,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 13f26b40b5d59b923bac30bb5042880c6e40f50f Mon Sep 17 00:00:00 2001 From: Marco Date: Mon, 11 Dec 2023 20:04:58 -0300 Subject: [PATCH 6/6] fix new depot boxes --- data/items/items.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/data/items/items.xml b/data/items/items.xml index 0961d7f77f..42fd8ec1bf 100644 --- a/data/items/items.xml +++ b/data/items/items.xml @@ -42934,4 +42934,10 @@ + + + + + +