diff --git a/config.lua.dist b/config.lua.dist index c894015..e71aaff 100644 --- a/config.lua.dist +++ b/config.lua.dist @@ -33,7 +33,7 @@ allowWalkthrough = true serverName = "Forgotten" statusTimeout = 5000 replaceKickOnLogin = true -maxPacketsPerSecond = 25 +maxPacketsPerSecond = 50 -- Deaths -- NOTE: Leave deathLosePercent as -1 if you want to use the default diff --git a/data/monster/monsters/orc.xml b/data/monster/monsters/orc.xml index 5db0979..6b6fdeb 100644 --- a/data/monster/monsters/orc.xml +++ b/data/monster/monsters/orc.xml @@ -1,5 +1,5 @@ - + diff --git a/data/scripts/OTCMehah/talkactions/Attachedeffect.lua b/data/scripts/OTCMehah/talkactions/Attachedeffect.lua new file mode 100644 index 0000000..e55ce3f --- /dev/null +++ b/data/scripts/OTCMehah/talkactions/Attachedeffect.lua @@ -0,0 +1,92 @@ +local mehah = { + talkactions = { + attacheffect = "!attacheffect", + detachEffect = "!detacheffect", + playerSetShader = "!playerSetShader", + itemSetShader = "!itemSetShader", + mapShader = "!mapShader" + }, +} + +local events = {} + +local function processCommand(player, words, param, type, action) + if not player:getGroup():getAccess() or player:getAccountType() < ACCOUNT_TYPE_GOD then + player:sendCancelMessage("No tienes acceso a este comando.") + return false + end + + local params, arg + if param:find("\"") then + params = { param:match("\"(.+)\",*(.*)") } + arg = params[1] + print(params) + print(arg) + pdump(params) + else + params = param:split(", ") + arg = params[1] + print("2",params) + print("2",arg) + end + + if not arg then + player:sendCancelMessage("Parámetro inválido. Por favor proporciona un argumento válido.") + return false + end + + local creature + if params[2] and params[2] ~= "" then + creature = Player(params[2]) + if not creature then + player:sendCancelMessage("El nombre del jugador proporcionado no es válido.") + return false + end + else + creature = player + end + + action(creature, arg) + return false +end + +local attachEffect = TalkAction(mehah.talkactions.attacheffect) +function attachEffect.onSay(player, words, param, type) + return processCommand(player, words, param, type, function(creature, effect) + creature:attachEffectById(tonumber(effect), false) + end) +end +table.insert(events, attachEffect) + +local detachEffect = TalkAction(mehah.talkactions.detachEffect) +function detachEffect.onSay(player, words, param, type) + return processCommand(player, words, param, type, function(creature, effect) + creature:detachEffectById(tonumber(effect)) + end) +end +table.insert(events, detachEffect) + +local setShader = TalkAction(mehah.talkactions.playerSetShader) +function setShader.onSay(player, words, param, type) + return processCommand(player, words, param, type, function(creature, shader) + creature:setShader(shader) + end) +end +table.insert(events, setShader) + +local mapShader = TalkAction(mehah.talkactions.mapShader) +function mapShader.onSay(player, words, param, type) + return processCommand(player, words, param, type, function(creature, shader) + if creature:getMapShader() ~= shader then + creature:setMapShader(shader, true) + end + end) +end +table.insert(events, mapShader) + +for _, event in ipairs(events) do + event:accountType(ACCOUNT_TYPE_GOD) + event:access(true) + event:separator(" ") + event:register() +end diff --git a/data/world/forgotten-spawn.xml b/data/world/forgotten-spawn.xml index 65d231e..3c01ca5 100644 --- a/data/world/forgotten-spawn.xml +++ b/data/world/forgotten-spawn.xml @@ -1,3 +1,6 @@ + + + diff --git a/src/configmanager.cpp b/src/configmanager.cpp index f79da96..e09f24f 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -277,7 +277,7 @@ bool ConfigManager::load() integers[ConfigKeysInteger::WHITE_SKULL_TIME] = getGlobalInteger(L, "whiteSkullTime", 15 * 60); integers[ConfigKeysInteger::STAIRHOP_DELAY] = getGlobalInteger(L, "stairJumpExhaustion", 2000); integers[ConfigKeysInteger::EXP_FROM_PLAYERS_LEVEL_RANGE] = getGlobalInteger(L, "expFromPlayersLevelRange", 75); - integers[ConfigKeysInteger::MAX_PACKETS_PER_SECOND] = getGlobalInteger(L, "maxPacketsPerSecond", 25); + integers[ConfigKeysInteger::MAX_PACKETS_PER_SECOND] = getGlobalInteger(L, "maxPacketsPerSecond", 50); integers[ConfigKeysInteger::SERVER_SAVE_NOTIFY_DURATION] = getGlobalInteger(L, "serverSaveNotifyDuration", 5); integers[ConfigKeysInteger::YELL_MINIMUM_LEVEL] = getGlobalInteger(L, "yellMinimumLevel", 2); integers[ConfigKeysInteger::MINIMUM_LEVEL_TO_SEND_PRIVATE] = getGlobalInteger(L, "minimumLevelToSendPrivate", 1); diff --git a/src/const.h b/src/const.h index 7d28ff7..f3fe12c 100644 --- a/src/const.h +++ b/src/const.h @@ -4,7 +4,7 @@ #ifndef FS_CONST_H #define FS_CONST_H -inline constexpr int32_t NETWORKMESSAGE_MAXSIZE = 24590; +inline constexpr int32_t NETWORKMESSAGE_MAXSIZE = 65500; enum MagicEffectClasses : uint8_t { diff --git a/src/creature.cpp b/src/creature.cpp index e0e2ab9..57359d0 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -1676,3 +1676,21 @@ std::optional Creature::getStorageValue(uint32_t key) const } return std::make_optional(it->second); } + + +void Creature::attachEffectById(uint16_t id) +{ + auto it = std::find(attachedEffectList.begin(), attachedEffectList.end(), id); + if (it != attachedEffectList.end()) return; + + attachedEffectList.push_back(id); + g_game.sendAttachedEffect(this, id); +} +void Creature::detachEffectById(uint16_t id) +{ + auto it = std::find(attachedEffectList.begin(), attachedEffectList.end(), id); + if (it == attachedEffectList.end()) return; + + attachedEffectList.erase(it); + g_game.sendDetachEffect(this, id); +} diff --git a/src/creature.h b/src/creature.h index 33e0f61..366ffde 100644 --- a/src/creature.h +++ b/src/creature.h @@ -331,6 +331,10 @@ class Creature : virtual public Thing int32_t maxTargetDist, bool fullPathSearch = true, bool clearSight = true, int32_t maxSearchDist = 0) const; + std::string getShader() const { return shader; } + void setShader(const std::string& shaderName) { shader = shaderName; } + + void incrementReferenceCounter() { ++referenceCounter; } void decrementReferenceCounter() { @@ -353,6 +357,11 @@ class Creature : virtual public Thing const auto& getDamageMap() const { return damageMap; } + void attachEffectById(uint16_t id); + void detachEffectById(uint16_t id); + const std::vector getAttachedEffectList() const { return attachedEffectList; } + + protected: virtual bool useCacheMap() const { return false; } @@ -371,6 +380,7 @@ class Creature : virtual public Thing using CountMap = std::map; CountMap damageMap; + std::string shader; std::list summons; CreatureEventList eventsList; @@ -409,6 +419,8 @@ class Creature : virtual public Thing Direction direction = DIRECTION_SOUTH; Skulls_t skull = SKULL_NONE; + std::vector attachedEffectList; + bool localMapCache[mapWalkHeight][mapWalkWidth] = {{false}}; bool isInternalRemoved = false; bool isMapLoaded = false; diff --git a/src/game.cpp b/src/game.cpp index cae442c..fead909 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -5345,3 +5345,52 @@ bool Game::reload(ReloadTypes_t reloadType) } return true; } + + + + + +void Game::sendAttachedEffect(const Creature* creature, uint16_t effectId) +{ + SpectatorVec spectators; + map.getSpectators(spectators, creature->getPosition(), false, true, 8, 8, 6, 6); + for (Creature* spectator : spectators) { + if (Player* spectatorPlayer = spectator->getPlayer()) { + if (spectatorPlayer->getOperatingSystem() >= CLIENTOS_OTCLIENT_LINUX) { + spectatorPlayer->sendAttachedEffect(creature, effectId); + } + } else { + spectator->attachEffectById(effectId); + } + } +} + +void Game::sendDetachEffect(const Creature* creature, uint16_t effectId) +{ + SpectatorVec spectators; + map.getSpectators(spectators, creature->getPosition(), false, true, 8, 8, 6, 6); + for (Creature* spectator : spectators) { + if (Player* spectatorPlayer = spectator->getPlayer()) { + if (spectatorPlayer->getOperatingSystem() >= CLIENTOS_OTCLIENT_LINUX) { + spectatorPlayer->sendDetachEffect(creature, effectId); + } + } else { + spectator->detachEffectById(effectId); + } + } +} + +void Game::updateCreatureShader(const Creature* creature) +{ + SpectatorVec spectators; + map.getSpectators(spectators, creature->getPosition(), false, true, 8, 8, 6, 6); + for (Creature* spectator : spectators) { + if (Player* spectatorPlayer = spectator->getPlayer()) { + if (spectatorPlayer->getOperatingSystem() >= CLIENTOS_OTCLIENT_LINUX) { + spectatorPlayer->sendShader(creature, creature->getShader()); + } + } else { + spectator->setShader(creature->getShader()); + } + } +} diff --git a/src/game.h b/src/game.h index 12a47c0..51b659a 100644 --- a/src/game.h +++ b/src/game.h @@ -434,6 +434,9 @@ class Game void addDistanceEffect(const Position& fromPos, const Position& toPos, uint8_t effect); static void addDistanceEffect(const SpectatorVec& spectators, const Position& fromPos, const Position& toPos, uint8_t effect); + void sendAttachedEffect(const Creature* creature, uint16_t effectId); + void sendDetachEffect(const Creature* creature, uint16_t effectId); + void updateCreatureShader(const Creature* creature); void setAccountStorageValue(const uint32_t accountId, const uint32_t key, const int32_t value); int32_t getAccountStorageValue(const uint32_t accountId, const uint32_t key) const; diff --git a/src/luacreature.cpp b/src/luacreature.cpp index 5b462ba..cb8adb7 100644 --- a/src/luacreature.cpp +++ b/src/luacreature.cpp @@ -1072,6 +1072,72 @@ int luaCreatureSendCreatureSquare(lua_State* L) } } // namespace + +int luaCreatureAttachEffectById(lua_State* L) +{ + // creature:attachEffectById(effectId, [temporary]) + Creature* creature = getUserdata(L, 1); + if (!creature) { + lua_pushnil(L); + return 1; + } + + uint16_t id = getInteger(L, 2); + bool temp = getBoolean(L, 3, false); + + if (temp) + g_game.sendAttachedEffect(creature, id); + else + creature->attachEffectById(id); + + return 1; +} + +int luaCreatureDetachEffectById(lua_State* L) +{ + // creature:detachEffectById(effectId) + Creature* creature = getUserdata(L, 1); + if (!creature) { + lua_pushnil(L); + return 1; + } + + uint16_t id = getInteger(L, 2); + creature->detachEffectById(id); + + return 1; +} + +int luaCreatureGetShader(lua_State* L) +{ + // creature:getShader() + const auto* creature = getUserdata(L, 1); + if (creature) { + pushString(L, creature->getShader()); + } else { + lua_pushnil(L); + } + + return 1; +} + +int luaCreatureSetShader(lua_State* L) +{ + // creature:setShader(shaderName) + auto* creature = getUserdata(L, 1); + if (!creature) { + lua_pushnil(L); + return 1; + } + + creature->setShader(getString(L, 2)); + g_game.updateCreatureShader(creature); + + pushBoolean(L, true); + return 1; +} + + void LuaScriptInterface::registerCreature() { // Creature @@ -1111,6 +1177,9 @@ void LuaScriptInterface::registerCreature() registerMethod("Creature", "getLight", luaCreatureGetLight); registerMethod("Creature", "setLight", luaCreatureSetLight); + registerMethod("Creature", "getShader", luaCreatureGetShader); + registerMethod("Creature", "setShader", luaCreatureSetShader); + registerMethod("Creature", "getSpeed", luaCreatureGetSpeed); registerMethod("Creature", "getBaseSpeed", luaCreatureGetBaseSpeed); registerMethod("Creature", "changeSpeed", luaCreatureChangeSpeed); @@ -1161,4 +1230,6 @@ void LuaScriptInterface::registerCreature() registerMethod("Creature", "setStorageValue", luaCreatureSetStorageValue); registerMethod("Creature", "sendCreatureSquare", luaCreatureSendCreatureSquare); + registerMethod("Creature", "attachEffectById", luaCreatureAttachEffectById); + registerMethod("Creature", "detachEffectById", luaCreatureDetachEffectById); } diff --git a/src/luagame.cpp b/src/luagame.cpp index b075e91..74ba213 100644 --- a/src/luagame.cpp +++ b/src/luagame.cpp @@ -422,6 +422,21 @@ int luaGameCreateMonster(lua_State* L) if (g_game.placeCreature(monster, position, extended, force, magicEffect)) { pushUserdata(L, monster); setMetatable(L, -1, "Monster"); + + if (monster->rayosEffect() != 0) { + monster->attachEffectById(monster->rayosEffect()); + } + if (monster->wignsEffect() != 0) { + monster->attachEffectById(monster->wignsEffect()); + } + if (monster->auraEffect() != 0) { + monster->attachEffectById(monster->auraEffect()); + } + if (monster->shaderEffect() != "") { + monster->setShader(monster->shaderEffect()); + g_game.updateCreatureShader(monster); + } + } else { delete monster; lua_pushnil(L); diff --git a/src/luamonster.cpp b/src/luamonster.cpp index 8528817..cef9eb6 100644 --- a/src/luamonster.cpp +++ b/src/luamonster.cpp @@ -30,6 +30,20 @@ int luaMonsterCreate(lua_State* L) if (monster) { pushUserdata(L, monster); setMetatable(L, -1, "Monster"); + + if (monster->rayosEffect() != 0) { + monster->attachEffectById(monster->rayosEffect()); + } + if (monster->wignsEffect() != 0) { + monster->attachEffectById(monster->wignsEffect()); + } + if (monster->auraEffect() != 0) { + monster->attachEffectById(monster->auraEffect()); + } + if (monster->shaderEffect() != "") { + monster->setShader(monster->shaderEffect()); + g_game.updateCreatureShader(monster); + } } else { lua_pushnil(L); } diff --git a/src/luaplayer.cpp b/src/luaplayer.cpp index 1be24a1..265cac1 100644 --- a/src/luaplayer.cpp +++ b/src/luaplayer.cpp @@ -2168,6 +2168,43 @@ int luaPlayerHasDebugAssertSent(lua_State* L) return 1; } + + +int luaPlayerGetMapShader(lua_State* L) +{ + // player:getMapShader() + const auto* player = getUserdata(L, 1); + if (player) { + pushString(L, player->getMapShader()); + } else { + lua_pushnil(L); + } + + return 1; +} + +int luaPlayerSetMapShader(lua_State* L) +{ + // player:setMapShader(shaderName, [temporary]) + auto* player = getUserdata(L, 1); + if (!player) { + lua_pushnil(L); + return 1; + } + + const auto& shaderName = getString(L, 2); + bool temp = getBoolean(L, 3, false); + + if (!temp) player->setMapShader(shaderName); + + player->sendMapShader(shaderName); + + pushBoolean(L, true); + return 1; +} + + + // OfflinePlayer int luaOfflinePlayerCreate(lua_State* L) { @@ -2380,6 +2417,10 @@ void LuaScriptInterface::registerPlayer() registerMethod("Player", "hasDebugAssertSent", luaPlayerHasDebugAssertSent); + registerMethod("Player", "getMapShader", luaPlayerGetMapShader); + registerMethod("Player", "setMapShader", luaPlayerSetMapShader); + + // OfflinePlayer registerClass("OfflinePlayer", "Player", luaOfflinePlayerCreate); registerMetaMethod("OfflinePlayer", "__gc", luaOfflinePlayerRemove); diff --git a/src/monster.h b/src/monster.h index fa4631f..b720bdd 100644 --- a/src/monster.h +++ b/src/monster.h @@ -76,6 +76,13 @@ class Monster final : public Creature bool canSee(const Position& pos) const override; bool canSeeInvisibility() const override { return isImmune(CONDITION_INVISIBLE); } uint32_t getManaCost() const { return mType->info.manaCost; } + uint16_t auraEffect() const { return mType->info.auraEffect; } + + std::string shaderEffect() const { return mType->info.shaderEffect; } + + uint16_t wignsEffect() const { return mType->info.wignsEffect; } + + uint16_t rayosEffect() const { return mType->info.rayosEffect; } void setSpawn(Spawn* spawn) { this->spawn = spawn; } bool canWalkOnFieldType(CombatType_t combatType) const; diff --git a/src/monsters.cpp b/src/monsters.cpp index 27e8624..585f248 100644 --- a/src/monsters.cpp +++ b/src/monsters.cpp @@ -863,6 +863,18 @@ MonsterType* Monsters::loadMonster(const std::string& file, const std::string& m if ((attr = monsterNode.attribute("manacost"))) { mType->info.manaCost = pugi::cast(attr.value()); } + if ((attr = monsterNode.attribute("rayosEffect"))) { + mType->info.rayosEffect = pugi::cast(attr.value()); + } + if ((attr = monsterNode.attribute("wignsEffect"))) { + mType->info.wignsEffect = pugi::cast(attr.value()); + } + if ((attr = monsterNode.attribute("auraEffect"))) { + mType->info.auraEffect = pugi::cast(attr.value()); + } + if ((attr = monsterNode.attribute("shaderEffect"))) { + mType->info.shaderEffect = (attr.as_string()); + } if ((attr = monsterNode.attribute("skull"))) { mType->info.skull = getSkullType(boost::algorithm::to_lower_copy(attr.as_string())); diff --git a/src/monsters.h b/src/monsters.h index 63e8c73..0202e46 100644 --- a/src/monsters.h +++ b/src/monsters.h @@ -113,6 +113,11 @@ class MonsterType LightInfo light = {}; uint16_t lookcorpse = 0; + uint16_t rayosEffect = 0; + uint16_t wignsEffect = 0; + std::string shaderEffect = ""; + uint16_t auraEffect = 0; + uint64_t experience = 0; uint32_t manaCost = 0; diff --git a/src/player.h b/src/player.h index c385cbe..647c215 100644 --- a/src/player.h +++ b/src/player.h @@ -685,7 +685,32 @@ class Player final : public Creature, public Cylinder client->sendInventoryItem(slot, item); } } + void sendAttachedEffect(const Creature* creature, uint16_t effectId) + { + if (client) { + client->sendAttachedEffect(creature, effectId); + } + } + + void sendDetachEffect(const Creature* creature, uint16_t effectId) + { + if (client) { + client->sendDetachEffect(creature, effectId); + } + } + void sendShader(const Creature* creature, const std::string& shaderName) + { + if (client) { + client->sendShader(creature, shaderName); + } + } + void sendMapShader(const std::string& shaderName) + { + if (client) { + client->sendMapShader(shaderName); + } + } // event methods void onUpdateTileItem(const Tile* tile, const Position& pos, const Item* oldItem, const ItemType& oldType, const Item* newItem, const ItemType& newType) override; @@ -976,6 +1001,8 @@ class Player final : public Creature, public Cylinder bool isOTCv8() const { return client ? client->isOTCv8 : false; } static uint32_t playerAutoID; + std::string getMapShader() const { return mapShader; } + void setMapShader(const std::string& shaderName) { mapShader = shaderName; } private: std::forward_list getMuteConditions() const; @@ -1042,6 +1069,7 @@ class Player final : public Creature, public Cylinder std::string name; std::string guildNick; + std::string mapShader; Skill skills[SKILL_LAST + 1]; LightInfo itemsLight; diff --git a/src/protocolgame.cpp b/src/protocolgame.cpp index 6e6880d..65c62a6 100644 --- a/src/protocolgame.cpp +++ b/src/protocolgame.cpp @@ -2461,6 +2461,11 @@ void ProtocolGame::AddCreature(NetworkMessage& msg, const Creature* creature, bo } msg.addByte(player->canWalkthroughEx(creature) ? 0x00 : 0x01); + if (player->getOperatingSystem() >= CLIENTOS_OTCLIENT_LINUX) { + msg.addString(creature->getShader()); + msg.addByte(static_cast(creature->getAttachedEffectList().size())); + for (const uint16_t id : creature->getAttachedEffectList()) msg.add(id); + } } void ProtocolGame::AddPlayerStats(NetworkMessage& msg) @@ -2691,3 +2696,62 @@ void ProtocolGame::parseExtendedOpcode(NetworkMessage& msg) g_game.parsePlayerExtendedOpcode(playerID, opcode, buffer); }); } + + + + +void ProtocolGame::sendAttachedEffect(const Creature* creature, uint16_t effectId) +{ + const Player* player = creature->getPlayer(); + if (player && player->getOperatingSystem() >= CLIENTOS_OTCLIENT_LINUX) { + NetworkMessage playermsg; + playermsg.reset(); + playermsg.addByte(0x34); + playermsg.add(creature->getID()); + playermsg.add(effectId); + writeToOutputBuffer(playermsg); + } else { + NetworkMessage playermsg; + playermsg.reset(); + playermsg.addByte(0x34); + playermsg.add(creature->getID()); + playermsg.add(effectId); + writeToOutputBuffer(playermsg); + } +} + +void ProtocolGame::sendDetachEffect(const Creature* creature, uint16_t effectId) +{ + const Player* player = creature->getPlayer(); + if (player && player->getOperatingSystem() >= CLIENTOS_OTCLIENT_LINUX) { + NetworkMessage playermsg; + playermsg.reset(); + playermsg.addByte(0x35); + playermsg.add(creature->getID()); + playermsg.add(effectId); + writeToOutputBuffer(playermsg); + } +} +void ProtocolGame::sendShader(const Creature* creature, const std::string& shaderName) +{ + const Player* player = creature->getPlayer(); + if (player && player->getOperatingSystem() >= CLIENTOS_OTCLIENT_LINUX) { + NetworkMessage playermsg; + playermsg.reset(); + playermsg.addByte(0x36); + playermsg.add(creature->getID()); + playermsg.addString(shaderName); + writeToOutputBuffer(playermsg); + } +} + +void ProtocolGame::sendMapShader(const std::string& shaderName) +{ + if (player->getOperatingSystem() >= CLIENTOS_OTCLIENT_LINUX) { + NetworkMessage playermsg; + playermsg.reset(); + playermsg.addByte(0x37); + playermsg.addString(shaderName); + writeToOutputBuffer(playermsg); + } +} diff --git a/src/protocolgame.h b/src/protocolgame.h index e610aa9..5331a29 100644 --- a/src/protocolgame.h +++ b/src/protocolgame.h @@ -254,6 +254,10 @@ class ProtocolGame final : public Protocol // otclient void parseExtendedOpcode(NetworkMessage& msg); + void sendAttachedEffect(const Creature* creature, uint16_t effectId); + void sendDetachEffect(const Creature* creature, uint16_t effectId); + void sendShader(const Creature* creature, const std::string& shaderName); + void sendMapShader(const std::string& shaderName); friend class Player; diff --git a/src/spawn.cpp b/src/spawn.cpp index 0df7134..67dbea9 100644 --- a/src/spawn.cpp +++ b/src/spawn.cpp @@ -335,6 +335,19 @@ bool Spawn::spawnMonster(uint32_t spawnId, MonsterType* mType, const Position& p monster->setSpawn(this); monster->setMasterPos(pos); monster->incrementReferenceCounter(); + if (monster->rayosEffect() != 0) { + monster->attachEffectById(monster->rayosEffect()); + } + if (monster->wignsEffect() != 0) { + monster->attachEffectById(monster->wignsEffect()); + } + if (monster->auraEffect() != 0) { + monster->attachEffectById(monster->auraEffect()); + } + if (monster->shaderEffect() != "") { + monster->setShader(monster->shaderEffect()); + g_game.updateCreatureShader(monster); + } spawnedMap.insert({spawnId, monster}); spawnMap[spawnId].lastSpawn = OTSYS_TIME(); diff --git a/vc17/theforgottenserver.vcxproj b/vc17/theforgottenserver.vcxproj index 2466076..8b11a29 100644 --- a/vc17/theforgottenserver.vcxproj +++ b/vc17/theforgottenserver.vcxproj @@ -87,6 +87,9 @@ $(ProjectName)-$(Platform) $(VC_IncludePath);$(WindowsSDK_IncludePath); + + true + _CONSOLE;$(PREPROCESSOR_DEFS);%(PreprocessorDefinitions) @@ -365,4 +368,4 @@ - + \ No newline at end of file diff --git a/vc17/theforgottenserver.vcxproj.filters b/vc17/theforgottenserver.vcxproj.filters index 1b72106..f306c2a 100644 --- a/vc17/theforgottenserver.vcxproj.filters +++ b/vc17/theforgottenserver.vcxproj.filters @@ -74,6 +74,7 @@ + @@ -217,7 +218,6 @@ - @@ -262,6 +262,7 @@ + @@ -271,4 +272,4 @@ {9156d8f4-e8e6-4a03-bbf7-dcc7e7357a85} - + \ No newline at end of file