From 965c528f973c5469e2eceee252b4f5270285ed5e Mon Sep 17 00:00:00 2001 From: Marco Date: Tue, 20 Feb 2024 09:42:50 -0300 Subject: [PATCH 1/6] chore: activating new mounts and style adjustments (#2251) --- data/XML/familiars.xml | 20 +++++++------------- data/XML/mounts.xml | 6 ++++-- data/XML/outfits.xml | 6 +++--- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/data/XML/familiars.xml b/data/XML/familiars.xml index 3c446167b5b..a73f5394fc2 100644 --- a/data/XML/familiars.xml +++ b/data/XML/familiars.xml @@ -1,32 +1,26 @@ - + - - - + + - - - + + - - - + + - - - diff --git a/data/XML/mounts.xml b/data/XML/mounts.xml index 31e8c8068b5..b8decc87a59 100644 --- a/data/XML/mounts.xml +++ b/data/XML/mounts.xml @@ -218,7 +218,9 @@ - + + + diff --git a/data/XML/outfits.xml b/data/XML/outfits.xml index 7178a5d6908..e18d48e865b 100644 --- a/data/XML/outfits.xml +++ b/data/XML/outfits.xml @@ -1,6 +1,6 @@ - + @@ -89,7 +89,7 @@ - + @@ -117,7 +117,7 @@ - + From 7356b7d37de70582d10d6c8143039ab47483cae0 Mon Sep 17 00:00:00 2001 From: Marco Date: Tue, 20 Feb 2024 13:45:27 -0300 Subject: [PATCH 2/6] chore: remove unused custom script (#2274) --- config.lua.dist | 4 - .../scripts/globalevents/customs/rain.lua | 50 -- .../world_changes/spawns_npc_by_time.lua | 4 +- data/events/scripts/monster.lua | 19 - data/events/scripts/scheduler/example.lua | 25 - data/global.lua | 9 - data/libs/functions/player.lua | 34 -- src/config/config_enums.hpp | 42 +- src/config/configmanager.cpp | 549 ++++++++---------- 9 files changed, 271 insertions(+), 465 deletions(-) delete mode 100644 data-otservbr-global/scripts/globalevents/customs/rain.lua delete mode 100644 data/events/scripts/scheduler/example.lua diff --git a/config.lua.dist b/config.lua.dist index f446679911c..3ba98113b19 100644 --- a/config.lua.dist +++ b/config.lua.dist @@ -224,8 +224,6 @@ tibiadromeConcoctionTickType = "online" -- "online" | "experience" onlyPremiumAccount = false -- Customs --- NOTE: weatherRain = true, activates weather raining effects --- NOTE: thunderEffect = true, activates thunder effects -- NOTE: stashMoving = true, stow an container inside your stash -- NOTE: depotChest, the non-stackable items will be moved to the selected depot chest(I - XVIII). -- NOTE: autoBank = true, the dropped coins from monsters will be automatically deposited to your bank account. @@ -239,8 +237,6 @@ onlyPremiumAccount = false -- NOTE: toggleReceiveReward = true, will enable players to choose one of reward exercise weapon by command !reward -- NOTE: randomMonsterSpawn = true, will enable monsters from the same spawn to be randomized between them, thus making a variable hunt -- NOTE: enablePlayerPutItemInAmmoSlot = true, will enable players to put any items on ammo slot, more used in custom shopping system -weatherRain = false -thunderEffect = false stashMoving = false depotChest = 4 autoLoot = false diff --git a/data-otservbr-global/scripts/globalevents/customs/rain.lua b/data-otservbr-global/scripts/globalevents/customs/rain.lua deleted file mode 100644 index f2520d880ee..00000000000 --- a/data-otservbr-global/scripts/globalevents/customs/rain.lua +++ /dev/null @@ -1,50 +0,0 @@ -if configManager.getBoolean(configKeys.WEATHER_RAIN) then - local weatherStartup = GlobalEvent("WeatherStartup") - - function weatherStartup.onStartup() - local rain = math.random(100) - if rain > 95 then - Game.setStorageValue("Weather", 1) - else - Game.setStorageValue("Weather", 0) - end - return true - end - - weatherStartup:register() - - local weather = GlobalEvent("Weather") - - function weather.onThink(interval, lastExecution) - local rain = math.random(100) - if rain > 95 then - Game.setStorageValue("Weather", 1) - else - Game.setStorageValue("Weather", 0) - end - return true - end - - weather:interval(200000) -- how often to randomize rain / weather - weather:register() - - local weatherRain = GlobalEvent("WeatherRain") - - function weatherRain.onThink(interval, lastExecution) - if Game.getStorageValue("Weather") == 1 then - local players = Game.getPlayers() - if #players == 0 then - return true - end - local player - for i = 1, #players do - player = players[i] - player:sendWeatherEffect(weatherConfig.groundEffect, weatherConfig.fallEffect, weatherConfig.thunderEffect) - end - end - return true - end - - weatherRain:interval(50) -- less rain = greater value - weatherRain:register() -end diff --git a/data-otservbr-global/scripts/world_changes/spawns_npc_by_time.lua b/data-otservbr-global/scripts/world_changes/spawns_npc_by_time.lua index 5323f90cc85..4793055f8a0 100644 --- a/data-otservbr-global/scripts/world_changes/spawns_npc_by_time.lua +++ b/data-otservbr-global/scripts/world_changes/spawns_npc_by_time.lua @@ -12,15 +12,13 @@ function spawnsNpcByTime.onPeriodChange(period) local spawnNpc = Game.createNpc(npcSpawn.name, npcSpawn.position) if spawnNpc then spawnNpc:setMasterPos(npcSpawn.position) - npcSpawn.position:sendMagicEffect(CONST_ME_TELEPORT) - logger.info("[NPC Spawn] {} has spawned", npcSpawn.name) + spawnNpc:getPosition():sendMagicEffect(CONST_ME_TELEPORT) end elseif npcSpawn.despawnPeriod == period then local despawnNpc = Npc(npcSpawn.name) if despawnNpc then despawnNpc:getPosition():sendMagicEffect(CONST_ME_TELEPORT) despawnNpc:remove() - logger.info("[NPC Despawn] {} has despawned", npcSpawn.name) end end end diff --git a/data/events/scripts/monster.lua b/data/events/scripts/monster.lua index ea991672854..e69de29bb2d 100644 --- a/data/events/scripts/monster.lua +++ b/data/events/scripts/monster.lua @@ -1,19 +0,0 @@ -local function calculateBonus(bonus) - local bonusCount = math.floor(bonus / 100) - local remainder = bonus % 100 - if remainder > 0 then - local probability = math.random(0, 100) - bonusCount = bonusCount + (probability < remainder and 1 or 0) - end - - return bonusCount -end - -local function checkItemType(itemId) - local itemType = ItemType(itemId):getType() - -- Based on enum ItemTypes_t - if (itemType > 0 and itemType < 4) or itemType == 7 or itemType == 8 or itemType == 11 or itemType == 13 or (itemType > 15 and itemType < 22) then - return true - end - return false -end diff --git a/data/events/scripts/scheduler/example.lua b/data/events/scripts/scheduler/example.lua deleted file mode 100644 index d095ed1064f..00000000000 --- a/data/events/scripts/scheduler/example.lua +++ /dev/null @@ -1,25 +0,0 @@ --- [OtServerBr] --- Event scheduler lua scripts, on this file is possible to load any kind --- of global values, create functions or create and register GlobalEvents using the revscript system. --- For example you can load a 'local Example = GlobalEvent("example")' and register it with 'Example:register()', --- adding the 'Example.onStartup()' or 'Example.onThink(interval)' with 'Example:interval(time)'. --- With 'onStartup()' you can load any raid, for example loading a entire map/hunt and the choseen spawns. - --- Examples: --- Loading map: Game.loadMap(DATA_DIRECTORY.. '/world/myMapFolder/myMapFile.otbm') --- Loading spawn: addEvent(function() Game.loadSpawnFile(DATA_DIRECTORY.. '/world/mySpawnFolder/mySpawnFile.xml) end, 30 * 1000) - -local Example_One = GlobalEvent("Example one") -function Example_One.onStartup() - return true -end - -Example_One:register() - -local Example_Two = GlobalEvent("Example two") -function Example_Two.onThink(interval) - return true -end - -Example_Two:interval(10000) -- 10 seconds interval -Example_Two:register() diff --git a/data/global.lua b/data/global.lua index 2d5ffc31cf0..1491987ffad 100644 --- a/data/global.lua +++ b/data/global.lua @@ -56,15 +56,6 @@ AUTH_TYPE = configManager.getString(configKeys.AUTH_TYPE) GLOBAL_CHARM_GUT = 120 -- 20% more chance to get creature products from looting GLOBAL_CHARM_SCAVENGE = 125 -- 25% more chance to get creature products from skinning ---WEATHER -weatherConfig = { - groundEffect = CONST_ME_LOSEENERGY, - fallEffect = CONST_ANI_SMALLICE, - thunderEffect = configManager.getBoolean(configKeys.WEATHER_THUNDER), - minDMG = 1, - maxDMG = 5, -} - -- Event Schedule SCHEDULE_LOOT_RATE = 100 SCHEDULE_EXP_RATE = 100 diff --git a/data/libs/functions/player.lua b/data/libs/functions/player.lua index 810b72c0002..2662db60d11 100644 --- a/data/libs/functions/player.lua +++ b/data/libs/functions/player.lua @@ -316,40 +316,6 @@ function Player.getMarriageDescription(thing) return descr end -function Player.sendWeatherEffect(self, groundEffect, fallEffect, thunderEffect) - local position, random = self:getPosition(), math.random - position.x = position.x + random(-7, 7) - position.y = position.y + random(-5, 5) - local fromPosition = Position(position.x + 1, position.y, position.z) - fromPosition.x = position.x - 7 - fromPosition.y = position.y - 5 - local tile, getGround - for Z = 1, 7 do - fromPosition.z = Z - position.z = Z - tile = Tile(position) - if tile then - -- If there is a tile, stop checking floors - fromPosition:sendDistanceEffect(position, fallEffect) - position:sendMagicEffect(groundEffect, self) - getGround = tile:getGround() - if getGround and ItemType(getGround:getId()):getFluidSource() == 1 then - position:sendMagicEffect(CONST_ME_LOSEENERGY, self) - end - break - end - end - if thunderEffect and tile and not tile:hasFlag(TILESTATE_PROTECTIONZONE) then - if random(2) == 1 then - local topCreature = tile:getTopCreature() - if topCreature and topCreature:isPlayer() and topCreature:getAccountType() < ACCOUNT_TYPE_SENIORTUTOR then - position:sendMagicEffect(CONST_ME_BIGCLOUDS, self) - doTargetCombatHealth(0, self, COMBAT_ENERGYDAMAGE, -weatherConfig.minDMG, -weatherConfig.maxDMG, CONST_ME_NONE) - end - end - end -end - function Player:getFamiliarName() local vocation = FAMILIAR_ID[self:getVocation():getBaseId()] local familiarName diff --git a/src/config/config_enums.hpp b/src/config/config_enums.hpp index a6a3d7c24c0..8c21bdfe1ac 100644 --- a/src/config/config_enums.hpp +++ b/src/config/config_enums.hpp @@ -27,9 +27,9 @@ enum ConfigKey_t : uint16_t { BOOSTED_BOSS_KILL_BONUS, BOOSTED_BOSS_LOOT_BONUS, BOOSTED_BOSS_SLOT, - BOSSTIARY_KILL_MULTIPLIER, BOSS_DEFAULT_TIME_TO_DEFEAT, BOSS_DEFAULT_TIME_TO_FIGHT_AGAIN, + BOSSTIARY_KILL_MULTIPLIER, BUY_AOL_COMMAND_FEE, BUY_BLESS_COMMAND_FEE, CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES, @@ -46,8 +46,8 @@ enum ConfigKey_t : uint16_t { DEFAULT_DESPAWNRADIUS, DEFAULT_DESPAWNRANGE, DEFAULT_PRIORITY, - DEPOTCHEST, DEPOT_BOXES, + DEPOTCHEST, DISABLE_LEGACY_RAIDS, DISABLE_MONSTER_ARMOR, DISCORD_SEND_FOOTER, @@ -55,23 +55,22 @@ enum ConfigKey_t : uint16_t { DISCORD_WEBHOOK_URL, EMOTE_SPELLS, ENABLE_PLAYER_PUT_ITEM_IN_AMMO_SLOT, - EXPERIENCE_FROM_PLAYERS, - EXP_FROM_PLAYERS_LEVEL_RANGE, EX_ACTIONS_DELAY_INTERVAL, + EXP_FROM_PLAYERS_LEVEL_RANGE, + EXPERIENCE_FROM_PLAYERS, FAMILIAR_TIME, FORCE_MONSTERTYPE_LOAD, FORGE_AMOUNT_MULTIPLIER, FORGE_BASE_SUCCESS_RATE, FORGE_BONUS_SUCCESS_RATE, - FORGE_FUSION_DUST_COST, FORGE_CONVERGENCE_FUSION_DUST_COST, - FORGE_TRANSFER_DUST_COST, FORGE_CONVERGENCE_TRANSFER_DUST_COST, FORGE_CORE_COST, FORGE_COST_ONE_SLIVER, FORGE_FIENDISH_CREATURES_LIMIT, FORGE_FIENDISH_INTERVAL_TIME, FORGE_FIENDISH_INTERVAL_TYPE, + FORGE_FUSION_DUST_COST, FORGE_INFLUENCED_CREATURES_LIMIT, FORGE_MAX_DUST, FORGE_MAX_ITEM_TIER, @@ -79,6 +78,7 @@ enum ConfigKey_t : uint16_t { FORGE_MIN_SLIVERS, FORGE_SLIVER_AMOUNT, FORGE_TIER_LOSS_REDUCTION, + FORGE_TRANSFER_DUST_COST, FRAG_TIME, FREE_DEPOT_LIMIT, FREE_PREMIUM, @@ -117,12 +117,14 @@ enum ConfigKey_t : uint16_t { LOCATION, LOGIN_PORT, LOGLEVEL, + LOOTPOUCH_MAXLIMIT, LOW_LEVEL_BONUS_EXP, LOYALTY_BONUS_PERCENTAGE_MULTIPLIER, LOYALTY_ENABLED, LOYALTY_POINTS_PER_CREATION_DAY, LOYALTY_POINTS_PER_PREMIUM_DAY_PURCHASED, LOYALTY_POINTS_PER_PREMIUM_DAY_SPENT, + M_CONST, MAINTAIN_MODE_MESSAGE, MAP_AUTHOR, MAP_CUSTOM_AUTHOR, @@ -132,16 +134,16 @@ enum ConfigKey_t : uint16_t { MARKET_OFFER_DURATION, MARKET_PREMIUM, MAX_ALLOWED_ON_A_DUMMY, - MAX_CONTAINER, MAX_CONTAINER_ITEM, + MAX_CONTAINER, MAX_DAMAGE_REFLECTION, MAX_ELEMENTAL_RESISTANCE, MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER, MAX_MESSAGEBUFFER, MAX_PACKETS_PER_SECOND, - MAX_PLAYERS, MAX_PLAYERS_OUTSIDE_PZ_PER_ACCOUNT, MAX_PLAYERS_PER_ACCOUNT, + MAX_PLAYERS, MAX_SPEED_ATTACKONFIST, METRICS_ENABLE_OSTREAM, METRICS_ENABLE_PROMETHEUS, @@ -159,7 +161,6 @@ enum ConfigKey_t : uint16_t { MYSQL_PASS, MYSQL_SOCK, MYSQL_USER, - M_CONST, OLD_PROTOCOL, ONE_PLAYER_ON_ACCOUNT, ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS, @@ -174,8 +175,8 @@ enum ConfigKey_t : uint16_t { PARALLELISM, PARTY_AUTO_SHARE_EXPERIENCE, PARTY_LIST_MAX_DISTANCE, - PARTY_SHARE_LOOT_BOOSTS, PARTY_SHARE_LOOT_BOOSTS_DIMINISHING_FACTOR, + PARTY_SHARE_LOOT_BOOSTS, PREMIUM_DEPOT_LIMIT, PREY_BONUS_REROLL_PRICE, PREY_BONUS_TIME, @@ -199,13 +200,13 @@ enum ConfigKey_t : uint16_t { RATE_BOSS_HEALTH, RATE_EXERCISE_TRAINING_SPEED, RATE_EXPERIENCE, - RATE_HEALTH_REGEN, RATE_HEALTH_REGEN_SPEED, + RATE_HEALTH_REGEN, RATE_KILLING_IN_THE_NAME_OF_POINTS, RATE_LOOT, RATE_MAGIC, - RATE_MANA_REGEN, RATE_MANA_REGEN_SPEED, + RATE_MANA_REGEN, RATE_MONSTER_ATTACK, RATE_MONSTER_DEFENSE, RATE_MONSTER_HEALTH, @@ -214,8 +215,8 @@ enum ConfigKey_t : uint16_t { RATE_NPC_HEALTH, RATE_OFFLINE_TRAINING_SPEED, RATE_SKILL, - RATE_SOUL_REGEN, RATE_SOUL_REGEN_SPEED, + RATE_SOUL_REGEN, RATE_SPAWN, RATE_SPELL_COOLDOWN, RATE_USE_STAGES, @@ -244,18 +245,20 @@ enum ConfigKey_t : uint16_t { STAIRHOP_DELAY, STAMINA_GREEN_DELAY, STAMINA_ORANGE_DELAY, - STAMINA_PZ, STAMINA_PZ_GAIN, + STAMINA_PZ, STAMINA_SYSTEM, - STAMINA_TRAINER, STAMINA_TRAINER_DELAY, STAMINA_TRAINER_GAIN, + STAMINA_TRAINER, STASH_ITEMS, STASH_MOVING, - STATUSQUERY_TIMEOUT, STATUS_PORT, + STATUSQUERY_TIMEOUT, STORE_COIN_PACKET, STORE_IMAGES_URL, + STOREINBOX_MAXLIMIT, + T_CONST, TASK_HUNTING_BONUS_REROLL_PRICE, TASK_HUNTING_ENABLED, TASK_HUNTING_FREE_REROLL_TIME, @@ -281,8 +284,8 @@ enum ConfigKey_t : uint16_t { TOGGLE_MAP_CUSTOM, TOGGLE_MOUNT_IN_PZ, TOGGLE_RECEIVE_REWARD, - TOGGLE_SAVE_INTERVAL, TOGGLE_SAVE_INTERVAL_CLEAN_MAP, + TOGGLE_SAVE_INTERVAL, TOGGLE_SERVER_IS_RETRO, TOGGLE_TRAVELS_FREE, TOGGLE_WHEELSYSTEM, @@ -290,7 +293,6 @@ enum ConfigKey_t : uint16_t { TRANSCENDANCE_CHANCE_FORMULA_A, TRANSCENDANCE_CHANCE_FORMULA_B, TRANSCENDANCE_CHANCE_FORMULA_C, - T_CONST, URL, USE_ANY_DATAPACK_FOLDER, VIP_AUTOLOOT_VIP_ONLY, @@ -302,8 +304,6 @@ enum ConfigKey_t : uint16_t { VIP_STAY_ONLINE, VIP_SYSTEM_ENABLED, WARN_UNSAFE_SCRIPTS, - WEATHER_RAIN, - WEATHER_THUNDER, WEEK_KILLS_TO_RED, WHEEL_ATELIER_REVEAL_GREATER_COST, WHEEL_ATELIER_REVEAL_LESSER_COST, @@ -315,6 +315,4 @@ enum ConfigKey_t : uint16_t { WHITE_SKULL_TIME, WORLD_TYPE, XP_DISPLAY_MODE, - STOREINBOX_MAXLIMIT, - LOOTPOUCH_MAXLIMIT, }; diff --git a/src/config/configmanager.cpp b/src/config/configmanager.cpp index ec8ee7a4b82..96c48ae2f69 100644 --- a/src/config/configmanager.cpp +++ b/src/config/configmanager.cpp @@ -46,364 +46,315 @@ bool ConfigManager::load() { // Info that must be loaded one time (unless we reset the modules involved) if (!loaded) { loadBoolConfig(L, BIND_ONLY_GLOBAL_ADDRESS, "bindOnlyGlobalAddress", false); + loadBoolConfig(L, DISABLE_LEGACY_RAIDS, "disableLegacyRaids", false); + loadBoolConfig(L, OLD_PROTOCOL, "allowOldProtocol", true); loadBoolConfig(L, OPTIMIZE_DATABASE, "startupDatabaseOptimization", true); - loadBoolConfig(L, TOGGLE_MAP_CUSTOM, "toggleMapCustom", true); - loadBoolConfig(L, TOGGLE_MAINTAIN_MODE, "toggleMaintainMode", false); loadBoolConfig(L, RANDOM_MONSTER_SPAWN, "randomMonsterSpawn", false); - loadStringConfig(L, MAINTAIN_MODE_MESSAGE, "maintainModeMessage", ""); - - loadStringConfig(L, IP, "ip", "127.0.0.1"); - loadStringConfig(L, MAP_NAME, "mapName", "canary"); - loadStringConfig(L, MAP_DOWNLOAD_URL, "mapDownloadUrl", ""); - loadStringConfig(L, MAP_AUTHOR, "mapAuthor", "Eduardo Dantas"); - - loadStringConfig(L, MAP_CUSTOM_NAME, "mapCustomName", ""); - loadStringConfig(L, MAP_CUSTOM_AUTHOR, "mapCustomAuthor", "OTServBR"); + loadBoolConfig(L, RESET_SESSIONS_ON_STARTUP, "resetSessionsOnStartup", false); + loadBoolConfig(L, TOGGLE_MAINTAIN_MODE, "toggleMaintainMode", false); + loadBoolConfig(L, TOGGLE_MAP_CUSTOM, "toggleMapCustom", true); - loadStringConfig(L, HOUSE_RENT_PERIOD, "houseRentPeriod", "never"); loadFloatConfig(L, HOUSE_PRICE_RENT_MULTIPLIER, "housePriceRentMultiplier", 1.0); loadFloatConfig(L, HOUSE_RENT_RATE, "houseRentRate", 1.0); - loadStringConfig(L, MYSQL_HOST, "mysqlHost", "127.0.0.1"); - loadStringConfig(L, MYSQL_USER, "mysqlUser", "root"); - loadStringConfig(L, MYSQL_PASS, "mysqlPass", ""); - loadStringConfig(L, MYSQL_DB, "mysqlDatabase", "canary"); - loadStringConfig(L, MYSQL_SOCK, "mysqlSock", ""); - loadStringConfig(L, AUTH_TYPE, "authType", "password"); - loadBoolConfig(L, RESET_SESSIONS_ON_STARTUP, "resetSessionsOnStartup", false); - - loadIntConfig(L, SQL_PORT, "mysqlPort", 3306); + loadIntConfig(L, DEPOT_BOXES, "depotBoxes", 20); + loadIntConfig(L, FREE_DEPOT_LIMIT, "freeDepotLimit", 2000); loadIntConfig(L, GAME_PORT, "gameProtocolPort", 7172); loadIntConfig(L, LOGIN_PORT, "loginProtocolPort", 7171); - loadIntConfig(L, STATUS_PORT, "statusProtocolPort", 7171); - loadIntConfig(L, MARKET_OFFER_DURATION, "marketOfferDuration", 30 * 24 * 60 * 60); - - loadIntConfig(L, FREE_DEPOT_LIMIT, "freeDepotLimit", 2000); loadIntConfig(L, PREMIUM_DEPOT_LIMIT, "premiumDepotLimit", 8000); - loadIntConfig(L, DEPOT_BOXES, "depotBoxes", 20); + loadIntConfig(L, SQL_PORT, "mysqlPort", 3306); loadIntConfig(L, STASH_ITEMS, "stashItemCount", 5000); + loadIntConfig(L, STATUS_PORT, "statusProtocolPort", 7171); - loadBoolConfig(L, OLD_PROTOCOL, "allowOldProtocol", true); - loadBoolConfig(L, DISABLE_LEGACY_RAIDS, "disableLegacyRaids", false); + loadStringConfig(L, AUTH_TYPE, "authType", "password"); + loadStringConfig(L, HOUSE_RENT_PERIOD, "houseRentPeriod", "never"); + loadStringConfig(L, IP, "ip", "127.0.0.1"); + loadStringConfig(L, MAINTAIN_MODE_MESSAGE, "maintainModeMessage", ""); + loadStringConfig(L, MAP_AUTHOR, "mapAuthor", "Eduardo Dantas"); + loadStringConfig(L, MAP_CUSTOM_AUTHOR, "mapCustomAuthor", "OTServBR"); + loadStringConfig(L, MAP_CUSTOM_NAME, "mapCustomName", ""); + loadStringConfig(L, MAP_DOWNLOAD_URL, "mapDownloadUrl", ""); + loadStringConfig(L, MAP_NAME, "mapName", "canary"); + loadStringConfig(L, MYSQL_DB, "mysqlDatabase", "canary"); + loadStringConfig(L, MYSQL_HOST, "mysqlHost", "127.0.0.1"); + loadStringConfig(L, MYSQL_PASS, "mysqlPass", ""); + loadStringConfig(L, MYSQL_SOCK, "mysqlSock", ""); + loadStringConfig(L, MYSQL_USER, "mysqlUser", "root"); } - loadBoolConfig(L, ALLOW_CHANGEOUTFIT, "allowChangeOutfit", true); - loadIntConfig(L, MAX_PLAYERS_PER_ACCOUNT, "maxPlayersOnlinePerAccount", 1); - loadIntConfig(L, MAX_PLAYERS_OUTSIDE_PZ_PER_ACCOUNT, "maxPlayersOutsidePZPerAccount", 1); loadBoolConfig(L, AIMBOT_HOTKEY_ENABLED, "hotkeyAimbotEnabled", true); - loadBoolConfig(L, REMOVE_RUNE_CHARGES, "removeChargesFromRunes", true); - loadBoolConfig(L, EXPERIENCE_FROM_PLAYERS, "experienceByKillingPlayers", false); - loadBoolConfig(L, FREE_PREMIUM, "freePremium", false); - loadBoolConfig(L, REPLACE_KICK_ON_LOGIN, "replaceKickOnLogin", true); - loadBoolConfig(L, MARKET_PREMIUM, "premiumToCreateMarketOffer", true); - loadBoolConfig(L, EMOTE_SPELLS, "emoteSpells", false); - loadBoolConfig(L, STAMINA_SYSTEM, "staminaSystem", true); - loadBoolConfig(L, WARN_UNSAFE_SCRIPTS, "warnUnsafeScripts", true); - loadBoolConfig(L, CONVERT_UNSAFE_SCRIPTS, "convertUnsafeScripts", true); + loadBoolConfig(L, ALLOW_BLOCK_SPAWN, "allowBlockSpawn", true); + loadBoolConfig(L, ALLOW_CHANGEOUTFIT, "allowChangeOutfit", true); + loadBoolConfig(L, ALLOW_RELOAD, "allowReload", false); + loadBoolConfig(L, AUTOBANK, "autoBank", false); + loadBoolConfig(L, AUTOLOOT, "autoLoot", false); + loadBoolConfig(L, BOOSTED_BOSS_SLOT, "boostedBossSlot", true); loadBoolConfig(L, CLASSIC_ATTACK_SPEED, "classicAttackSpeed", false); - loadBoolConfig(L, TOGGLE_ATTACK_SPEED_ONFIST, "toggleAttackSpeedOnFist", false); + loadBoolConfig(L, CLEAN_PROTECTION_ZONES, "cleanProtectionZones", false); + loadBoolConfig(L, CONVERT_UNSAFE_SCRIPTS, "convertUnsafeScripts", true); loadBoolConfig(L, DISABLE_MONSTER_ARMOR, "disableMonsterArmor", false); - loadIntConfig(L, MULTIPLIER_ATTACKONFIST, "multiplierSpeedOnFist", 5); - loadIntConfig(L, MAX_SPEED_ATTACKONFIST, "maxSpeedOnFist", 500); - loadBoolConfig(L, SCRIPTS_CONSOLE_LOGS, "showScriptsLogInConsole", true); - loadBoolConfig(L, STASH_MOVING, "stashMoving", false); - loadBoolConfig(L, ALLOW_BLOCK_SPAWN, "allowBlockSpawn", true); - loadBoolConfig(L, REMOVE_WEAPON_AMMO, "removeWeaponAmmunition", true); - loadBoolConfig(L, REMOVE_WEAPON_CHARGES, "removeWeaponCharges", true); - loadBoolConfig(L, REMOVE_BEGINNING_WEAPON_AMMO, "removeBeginningWeaponAmmunition", true); - loadBoolConfig(L, REFUND_BEGINNING_WEAPON_MANA, "refundBeginningWeaponMana", false); - loadBoolConfig(L, REMOVE_POTION_CHARGES, "removeChargesFromPotions", true); - loadBoolConfig(L, GLOBAL_SERVER_SAVE_NOTIFY_MESSAGE, "globalServerSaveNotifyMessage", true); + loadBoolConfig(L, DISCORD_SEND_FOOTER, "discordSendFooter", true); + loadBoolConfig(L, EMOTE_SPELLS, "emoteSpells", false); + loadBoolConfig(L, ENABLE_PLAYER_PUT_ITEM_IN_AMMO_SLOT, "enablePlayerPutItemInAmmoSlot", false); + loadBoolConfig(L, EXPERIENCE_FROM_PLAYERS, "experienceByKillingPlayers", false); + loadBoolConfig(L, FORCE_MONSTERTYPE_LOAD, "forceMonsterTypesOnLoad", true); + loadBoolConfig(L, FREE_PREMIUM, "freePremium", false); loadBoolConfig(L, GLOBAL_SERVER_SAVE_CLEAN_MAP, "globalServerSaveCleanMap", false); loadBoolConfig(L, GLOBAL_SERVER_SAVE_CLOSE, "globalServerSaveClose", false); - loadBoolConfig(L, FORCE_MONSTERTYPE_LOAD, "forceMonsterTypesOnLoad", true); - loadBoolConfig(L, HOUSE_OWNED_BY_ACCOUNT, "houseOwnedByAccount", false); - loadBoolConfig(L, CLEAN_PROTECTION_ZONES, "cleanProtectionZones", false); + loadBoolConfig(L, GLOBAL_SERVER_SAVE_NOTIFY_MESSAGE, "globalServerSaveNotifyMessage", true); loadBoolConfig(L, GLOBAL_SERVER_SAVE_SHUTDOWN, "globalServerSaveShutdown", true); + loadBoolConfig(L, HOUSE_OWNED_BY_ACCOUNT, "houseOwnedByAccount", false); + loadBoolConfig(L, HOUSE_PURSHASED_SHOW_PRICE, "housePurchasedShowPrice", false); + loadBoolConfig(L, INVENTORY_GLOW, "inventoryGlowOnFiveBless", false); + loadBoolConfig(L, LOYALTY_ENABLED, "loyaltyEnabled", true); + loadBoolConfig(L, MARKET_PREMIUM, "premiumToCreateMarketOffer", true); + loadBoolConfig(L, METRICS_ENABLE_OSTREAM, "metricsEnableOstream", false); + loadBoolConfig(L, METRICS_ENABLE_PROMETHEUS, "metricsEnablePrometheus", false); + loadBoolConfig(L, ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS, "onlyInvitedCanMoveHouseItems", true); + loadBoolConfig(L, ONLY_PREMIUM_ACCOUNT, "onlyPremiumAccount", false); + loadBoolConfig(L, PARTY_AUTO_SHARE_EXPERIENCE, "partyAutoShareExperience", true); + loadBoolConfig(L, PARTY_SHARE_LOOT_BOOSTS, "partyShareLootBoosts", true); + loadBoolConfig(L, PREY_ENABLED, "preySystemEnabled", true); + loadBoolConfig(L, PREY_FREE_THIRD_SLOT, "preyFreeThirdSlot", false); loadBoolConfig(L, PUSH_WHEN_ATTACKING, "pushWhenAttacking", false); - loadIntConfig(L, MIN_DELAY_BETWEEN_CONDITIONS, "minDelayBetweenConditions", 0); - - loadBoolConfig(L, WEATHER_RAIN, "weatherRain", false); - loadBoolConfig(L, WEATHER_THUNDER, "thunderEffect", false); - loadBoolConfig(L, TOGGLE_FREE_QUEST, "toggleFreeQuest", true); - loadBoolConfig(L, AUTOLOOT, "autoLoot", false); - loadBoolConfig(L, AUTOBANK, "autoBank", false); - loadBoolConfig(L, STAMINA_TRAINER, "staminaTrainer", false); - loadBoolConfig(L, STAMINA_PZ, "staminaPz", false); + loadBoolConfig(L, RATE_USE_STAGES, "rateUseStages", false); + loadBoolConfig(L, REFUND_BEGINNING_WEAPON_MANA, "refundBeginningWeaponMana", false); + loadBoolConfig(L, REMOVE_BEGINNING_WEAPON_AMMO, "removeBeginningWeaponAmmunition", true); + loadBoolConfig(L, REMOVE_POTION_CHARGES, "removeChargesFromPotions", true); + loadBoolConfig(L, REMOVE_RUNE_CHARGES, "removeChargesFromRunes", true); + loadBoolConfig(L, REMOVE_WEAPON_AMMO, "removeWeaponAmmunition", true); + loadBoolConfig(L, REMOVE_WEAPON_CHARGES, "removeWeaponCharges", true); + loadBoolConfig(L, REPLACE_KICK_ON_LOGIN, "replaceKickOnLogin", true); + loadBoolConfig(L, REWARD_CHEST_COLLECT_ENABLED, "rewardChestCollectEnabled", true); + loadBoolConfig(L, SCRIPTS_CONSOLE_LOGS, "showScriptsLogInConsole", true); + loadBoolConfig(L, SKULLED_DEATH_LOSE_STORE_ITEM, "skulledDeathLoseStoreItem", false); loadBoolConfig(L, SORT_LOOT_BY_CHANCE, "sortLootByChance", false); - loadBoolConfig(L, TOGGLE_SAVE_INTERVAL, "toggleSaveInterval", false); - loadBoolConfig(L, TOGGLE_SAVE_INTERVAL_CLEAN_MAP, "toggleSaveIntervalCleanMap", false); + loadBoolConfig(L, STAMINA_PZ, "staminaPz", false); + loadBoolConfig(L, STAMINA_SYSTEM, "staminaSystem", true); + loadBoolConfig(L, STAMINA_TRAINER, "staminaTrainer", false); + loadBoolConfig(L, STASH_MOVING, "stashMoving", false); + loadBoolConfig(L, TASK_HUNTING_ENABLED, "taskHuntingSystemEnabled", true); + loadBoolConfig(L, TASK_HUNTING_FREE_THIRD_SLOT, "taskHuntingFreeThirdSlot", false); + loadBoolConfig(L, TELEPORT_PLAYER_TO_VOCATION_ROOM, "teleportPlayerToVocationRoom", true); loadBoolConfig(L, TELEPORT_SUMMONS, "teleportSummons", false); - loadBoolConfig(L, ALLOW_RELOAD, "allowReload", false); - - loadBoolConfig(L, ONLY_PREMIUM_ACCOUNT, "onlyPremiumAccount", false); - loadBoolConfig(L, RATE_USE_STAGES, "rateUseStages", false); - loadBoolConfig(L, TOGGLE_IMBUEMENT_SHRINE_STORAGE, "toggleImbuementShrineStorage", true); - loadBoolConfig(L, TOGGLE_IMBUEMENT_NON_AGGRESSIVE_FIGHT_ONLY, "toggleImbuementNonAggressiveFightOnly", false); - + loadBoolConfig(L, TOGGLE_ATTACK_SPEED_ONFIST, "toggleAttackSpeedOnFist", false); loadBoolConfig(L, TOGGLE_DOWNLOAD_MAP, "toggleDownloadMap", false); + loadBoolConfig(L, TOGGLE_FREE_QUEST, "toggleFreeQuest", true); + loadBoolConfig(L, TOGGLE_GOLD_POUCH_ALLOW_ANYTHING, "toggleGoldPouchAllowAnything", false); + loadBoolConfig(L, TOGGLE_GOLD_POUCH_QUICKLOOT_ONLY, "toggleGoldPouchQuickLootOnly", false); + loadBoolConfig(L, TOGGLE_HAZARDSYSTEM, "toogleHazardSystem", true); + loadBoolConfig(L, TOGGLE_HOUSE_TRANSFER_ON_SERVER_RESTART, "togglehouseTransferOnRestart", false); + loadBoolConfig(L, TOGGLE_IMBUEMENT_NON_AGGRESSIVE_FIGHT_ONLY, "toggleImbuementNonAggressiveFightOnly", false); + loadBoolConfig(L, TOGGLE_IMBUEMENT_SHRINE_STORAGE, "toggleImbuementShrineStorage", true); + loadBoolConfig(L, TOGGLE_MOUNT_IN_PZ, "toggleMountInProtectionZone", false); + loadBoolConfig(L, TOGGLE_RECEIVE_REWARD, "toggleReceiveReward", false); + loadBoolConfig(L, TOGGLE_SAVE_INTERVAL_CLEAN_MAP, "toggleSaveIntervalCleanMap", false); + loadBoolConfig(L, TOGGLE_SAVE_INTERVAL, "toggleSaveInterval", false); + loadBoolConfig(L, TOGGLE_SERVER_IS_RETRO, "toggleServerIsRetroPVP", false); + loadBoolConfig(L, TOGGLE_TRAVELS_FREE, "toggleTravelsFree", false); + loadBoolConfig(L, TOGGLE_WHEELSYSTEM, "wheelSystemEnabled", true); loadBoolConfig(L, USE_ANY_DATAPACK_FOLDER, "useAnyDatapackFolder", false); - loadBoolConfig(L, INVENTORY_GLOW, "inventoryGlowOnFiveBless", false); + loadBoolConfig(L, VIP_AUTOLOOT_VIP_ONLY, "vipAutoLootVipOnly", false); + loadBoolConfig(L, VIP_KEEP_HOUSE, "vipKeepHouse", false); + loadBoolConfig(L, VIP_STAY_ONLINE, "vipStayOnline", false); + loadBoolConfig(L, VIP_SYSTEM_ENABLED, "vipSystemEnabled", false); + loadBoolConfig(L, WARN_UNSAFE_SCRIPTS, "warnUnsafeScripts", true); loadBoolConfig(L, XP_DISPLAY_MODE, "experienceDisplayRates", true); - loadStringConfig(L, DEFAULT_PRIORITY, "defaultPriority", "high"); - loadStringConfig(L, SERVER_NAME, "serverName", ""); - loadStringConfig(L, SERVER_MOTD, "serverMotd", ""); - loadStringConfig(L, OWNER_NAME, "ownerName", ""); - loadStringConfig(L, OWNER_EMAIL, "ownerEmail", ""); - loadStringConfig(L, URL, "url", ""); - loadStringConfig(L, LOCATION, "location", ""); - loadStringConfig(L, WORLD_TYPE, "worldType", "pvp"); - loadStringConfig(L, STORE_IMAGES_URL, "coinImagesURL", ""); - loadStringConfig(L, DISCORD_WEBHOOK_URL, "discordWebhookURL", ""); - loadBoolConfig(L, DISCORD_SEND_FOOTER, "discordSendFooter", true); - loadStringConfig(L, SAVE_INTERVAL_TYPE, "saveIntervalType", ""); - loadStringConfig(L, GLOBAL_SERVER_SAVE_TIME, "globalServerSaveTime", "06:00"); - loadStringConfig(L, DATA_DIRECTORY, "dataPackDirectory", "data-otservbr-global"); - loadStringConfig(L, CORE_DIRECTORY, "coreDirectory", "data"); - - loadStringConfig(L, FORGE_FIENDISH_INTERVAL_TYPE, "forgeFiendishIntervalType", "hour"); - loadStringConfig(L, FORGE_FIENDISH_INTERVAL_TIME, "forgeFiendishIntervalTime", "1"); - - loadIntConfig(L, MAX_PLAYERS, "maxPlayers", 0); - loadIntConfig(L, PZ_LOCKED, "pzLocked", 60000); - loadIntConfig(L, DEFAULT_DESPAWNRANGE, "deSpawnRange", 2); - loadIntConfig(L, DEFAULT_DESPAWNRADIUS, "deSpawnRadius", 50); - loadIntConfig(L, RATE_EXPERIENCE, "rateExp", 1); - loadIntConfig(L, RATE_SKILL, "rateSkill", 1); - loadIntConfig(L, RATE_LOOT, "rateLoot", 1); - loadIntConfig(L, RATE_MAGIC, "rateMagic", 1); - loadIntConfig(L, RATE_SPAWN, "rateSpawn", 1); - loadIntConfig(L, RATE_KILLING_IN_THE_NAME_OF_POINTS, "rateKillingInTheNameOfPoints", 1); - - loadIntConfig(L, HOUSE_PRICE_PER_SQM, "housePriceEachSQM", 1000); - loadIntConfig(L, HOUSE_BUY_LEVEL, "houseBuyLevel", 0); - loadIntConfig(L, HOUSE_LOSE_AFTER_INACTIVITY, "houseLoseAfterInactivity", 0); - loadBoolConfig(L, HOUSE_PURSHASED_SHOW_PRICE, "housePurchasedShowPrice", false); - loadBoolConfig(L, ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS, "onlyInvitedCanMoveHouseItems", true); - - loadIntConfig(L, ACTIONS_DELAY_INTERVAL, "timeBetweenActions", 200); - loadIntConfig(L, EX_ACTIONS_DELAY_INTERVAL, "timeBetweenExActions", 1000); - loadIntConfig(L, MAX_MESSAGEBUFFER, "maxMessageBuffer", 4); - loadIntConfig(L, KICK_AFTER_MINUTES, "kickIdlePlayerAfterMinutes", 15); - loadIntConfig(L, PROTECTION_LEVEL, "protectionLevel", 1); - loadIntConfig(L, DEATH_LOSE_PERCENT, "deathLosePercent", -1); - loadIntConfig(L, STATUSQUERY_TIMEOUT, "statusTimeout", 5000); - loadIntConfig(L, FRAG_TIME, "timeToDecreaseFrags", 24 * 60 * 60 * 1000); - loadIntConfig(L, WHITE_SKULL_TIME, "whiteSkullTime", 15 * 60 * 1000); - loadIntConfig(L, STAIRHOP_DELAY, "stairJumpExhaustion", 2000); - loadIntConfig(L, MAX_CONTAINER, "maxContainer", 500); - loadIntConfig(L, MAX_CONTAINER_ITEM, "maxItem", 5000); - loadIntConfig(L, EXP_FROM_PLAYERS_LEVEL_RANGE, "expFromPlayersLevelRange", 75); - loadIntConfig(L, CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES, "checkExpiredMarketOffersEachMinutes", 60); - loadIntConfig(L, MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER, "maxMarketOffersAtATimePerPlayer", 100); - loadIntConfig(L, MAX_PACKETS_PER_SECOND, "maxPacketsPerSecond", 25); - loadIntConfig(L, COMPRESSION_LEVEL, "packetCompressionLevel", 6); - loadIntConfig(L, STORE_COIN_PACKET, "coinPacketSize", 25); - loadIntConfig(L, DAY_KILLS_TO_RED, "dayKillsToRedSkull", 3); - loadIntConfig(L, WEEK_KILLS_TO_RED, "weekKillsToRedSkull", 5); - loadIntConfig(L, MONTH_KILLS_TO_RED, "monthKillsToRedSkull", 10); - loadIntConfig(L, RED_SKULL_DURATION, "redSkullDuration", 30); - loadIntConfig(L, BLACK_SKULL_DURATION, "blackSkullDuration", 45); - loadIntConfig(L, ORANGE_SKULL_DURATION, "orangeSkullDuration", 7); - loadIntConfig(L, GLOBAL_SERVER_SAVE_NOTIFY_DURATION, "globalServerSaveNotifyDuration", 5); - - loadIntConfig(L, PARTY_LIST_MAX_DISTANCE, "partyListMaxDistance", 0); - - loadIntConfig(L, PUSH_DELAY, "pushDelay", 1000); - loadIntConfig(L, PUSH_DISTANCE_DELAY, "pushDistanceDelay", 1500); - - loadIntConfig(L, STAMINA_ORANGE_DELAY, "staminaOrangeDelay", 1); - loadIntConfig(L, STAMINA_GREEN_DELAY, "staminaGreenDelay", 5); - loadIntConfig(L, STAMINA_PZ_GAIN, "staminaPzGain", 1); - loadIntConfig(L, STAMINA_TRAINER_DELAY, "staminaTrainerDelay", 5); - loadIntConfig(L, STAMINA_TRAINER_GAIN, "staminaTrainerGain", 1); - loadIntConfig(L, SAVE_INTERVAL_TIME, "saveIntervalTime", 1); - loadIntConfig(L, MAX_ALLOWED_ON_A_DUMMY, "maxAllowedOnADummy", 1); - loadIntConfig(L, FREE_QUEST_STAGE, "freeQuestStage", 1); - loadIntConfig(L, DEPOTCHEST, "depotChest", 4); - loadIntConfig(L, CRITICALCHANCE, "criticalChance", 10); - - loadIntConfig(L, ADVENTURERSBLESSING_LEVEL, "adventurersBlessingLevel", 21); - loadBoolConfig(L, SKULLED_DEATH_LOSE_STORE_ITEM, "skulledDeathLoseStoreItem", false); - loadIntConfig(L, FORGE_MAX_ITEM_TIER, "forgeMaxItemTier", 10); - loadIntConfig(L, FORGE_COST_ONE_SLIVER, "forgeCostOneSliver", 20); - loadIntConfig(L, FORGE_SLIVER_AMOUNT, "forgeSliverAmount", 3); - loadIntConfig(L, FORGE_CORE_COST, "forgeCoreCost", 50); - loadIntConfig(L, FORGE_MAX_DUST, "forgeMaxDust", 225); - loadIntConfig(L, FORGE_FUSION_DUST_COST, "forgeFusionDustCost", 100); - loadIntConfig(L, FORGE_CONVERGENCE_FUSION_DUST_COST, "forgeConvergenceFusionCost", 130); - loadIntConfig(L, FORGE_TRANSFER_DUST_COST, "forgeTransferDustCost", 100); - loadIntConfig(L, FORGE_CONVERGENCE_TRANSFER_DUST_COST, "forgeConvergenceTransferCost", 160); - loadIntConfig(L, FORGE_BASE_SUCCESS_RATE, "forgeBaseSuccessRate", 50); - loadIntConfig(L, FORGE_BONUS_SUCCESS_RATE, "forgeBonusSuccessRate", 15); - loadIntConfig(L, FORGE_TIER_LOSS_REDUCTION, "forgeTierLossReduction", 50); - loadFloatConfig(L, FORGE_AMOUNT_MULTIPLIER, "forgeAmountMultiplier", 3.0); - loadIntConfig(L, FORGE_MIN_SLIVERS, "forgeMinSlivers", 3); - loadIntConfig(L, FORGE_MAX_SLIVERS, "forgeMaxSlivers", 7); - loadIntConfig(L, FORGE_INFLUENCED_CREATURES_LIMIT, "forgeInfluencedLimit", 300); - loadIntConfig(L, FORGE_FIENDISH_CREATURES_LIMIT, "forgeFiendishLimit", 3); - - loadFloatConfig(L, RUSE_CHANCE_FORMULA_A, "ruseChanceFormulaA", 0.0307576); - loadFloatConfig(L, RUSE_CHANCE_FORMULA_B, "ruseChanceFormulaB", 0.440697); - loadFloatConfig(L, RUSE_CHANCE_FORMULA_C, "ruseChanceFormulaC", 0.026); - - loadFloatConfig(L, ONSLAUGHT_CHANCE_FORMULA_A, "onslaughtChanceFormulaA", 0.05); - loadFloatConfig(L, ONSLAUGHT_CHANCE_FORMULA_B, "onslaughtChanceFormulaB", 0.4); - loadFloatConfig(L, ONSLAUGHT_CHANCE_FORMULA_C, "onslaughtChanceFormulaC", 0.05); - - loadFloatConfig(L, MOMENTUM_CHANCE_FORMULA_A, "momentumChanceFormulaA", 0.05); - loadFloatConfig(L, MOMENTUM_CHANCE_FORMULA_B, "momentumChanceFormulaB", 1.9); - loadFloatConfig(L, MOMENTUM_CHANCE_FORMULA_C, "momentumChanceFormulaC", 0.05); - - loadFloatConfig(L, TRANSCENDANCE_CHANCE_FORMULA_A, "transcendanceChanceFormulaA", 0.0127); - loadFloatConfig(L, TRANSCENDANCE_CHANCE_FORMULA_B, "transcendanceChanceFormulaB", 0.1070); - loadFloatConfig(L, TRANSCENDANCE_CHANCE_FORMULA_C, "transcendanceChanceFormulaC", 0.0073); - - loadIntConfig(L, TRANSCENDANCE_AVATAR_DURATION, "transcendanceAvatarDuration", 7000); - - loadIntConfig(L, DISCORD_WEBHOOK_DELAY_MS, "discordWebhookDelayMs", Webhook::DEFAULT_DELAY_MS); - loadFloatConfig(L, BESTIARY_RATE_CHARM_SHOP_PRICE, "bestiaryRateCharmShopPrice", 1.0); - loadFloatConfig(L, RATE_HEALTH_REGEN, "rateHealthRegen", 1.0); - loadFloatConfig(L, RATE_HEALTH_REGEN_SPEED, "rateHealthRegenSpeed", 1.0); - loadFloatConfig(L, RATE_MANA_REGEN, "rateManaRegen", 1.0); - loadFloatConfig(L, RATE_MANA_REGEN_SPEED, "rateManaRegenSpeed", 1.0); - loadFloatConfig(L, RATE_SOUL_REGEN, "rateSoulRegen", 1.0); - loadFloatConfig(L, RATE_SOUL_REGEN_SPEED, "rateSoulRegenSpeed", 1.0); - loadFloatConfig(L, RATE_SPELL_COOLDOWN, "rateSpellCooldown", 1.0); + loadFloatConfig(L, FORGE_AMOUNT_MULTIPLIER, "forgeAmountMultiplier", 3.0); + loadFloatConfig(L, HAZARD_EXP_BONUS_MULTIPLIER, "hazardExpBonusMultiplier", 2.0); + loadFloatConfig(L, LOYALTY_BONUS_PERCENTAGE_MULTIPLIER, "loyaltyBonusPercentageMultiplier", 1.0); + loadFloatConfig(L, MOMENTUM_CHANCE_FORMULA_A, "momentumChanceFormulaA", 0.05); + loadFloatConfig(L, MOMENTUM_CHANCE_FORMULA_B, "momentumChanceFormulaB", 1.9); + loadFloatConfig(L, MOMENTUM_CHANCE_FORMULA_C, "momentumChanceFormulaC", 0.05); + loadFloatConfig(L, ONSLAUGHT_CHANCE_FORMULA_A, "onslaughtChanceFormulaA", 0.05); + loadFloatConfig(L, ONSLAUGHT_CHANCE_FORMULA_B, "onslaughtChanceFormulaB", 0.4); + loadFloatConfig(L, ONSLAUGHT_CHANCE_FORMULA_C, "onslaughtChanceFormulaC", 0.05); + loadFloatConfig(L, PARTY_SHARE_LOOT_BOOSTS_DIMINISHING_FACTOR, "partyShareLootBoostsDimishingFactor", 0.7f); + loadFloatConfig(L, PVP_RATE_DAMAGE_REDUCTION_PER_LEVEL, "pvpRateDamageReductionPerLevel", 0.0); + loadFloatConfig(L, PVP_RATE_DAMAGE_TAKEN_PER_LEVEL, "pvpRateDamageTakenPerLevel", 0.0); loadFloatConfig(L, RATE_ATTACK_SPEED, "rateAttackSpeed", 1.0); - loadFloatConfig(L, RATE_OFFLINE_TRAINING_SPEED, "rateOfflineTrainingSpeed", 1.0); + loadFloatConfig(L, RATE_BOSS_ATTACK, "rateBossAttack", 1.0); + loadFloatConfig(L, RATE_BOSS_DEFENSE, "rateBossDefense", 1.0); + loadFloatConfig(L, RATE_BOSS_HEALTH, "rateBossHealth", 1.0); loadFloatConfig(L, RATE_EXERCISE_TRAINING_SPEED, "rateExerciseTrainingSpeed", 1.0); - loadIntConfig(L, COMBAT_CHAIN_DELAY, "combatChainDelay", 50); - - loadFloatConfig(L, RATE_MONSTER_HEALTH, "rateMonsterHealth", 1.0); + loadFloatConfig(L, RATE_HEALTH_REGEN_SPEED, "rateHealthRegenSpeed", 1.0); + loadFloatConfig(L, RATE_HEALTH_REGEN, "rateHealthRegen", 1.0); + loadFloatConfig(L, RATE_MANA_REGEN_SPEED, "rateManaRegenSpeed", 1.0); + loadFloatConfig(L, RATE_MANA_REGEN, "rateManaRegen", 1.0); loadFloatConfig(L, RATE_MONSTER_ATTACK, "rateMonsterAttack", 1.0); loadFloatConfig(L, RATE_MONSTER_DEFENSE, "rateMonsterDefense", 1.0); - loadFloatConfig(L, RATE_BOSS_HEALTH, "rateBossHealth", 1.0); - loadFloatConfig(L, RATE_BOSS_ATTACK, "rateBossAttack", 1.0); - loadFloatConfig(L, RATE_BOSS_DEFENSE, "rateBossDefense", 1.0); - loadIntConfig(L, BOSS_DEFAULT_TIME_TO_FIGHT_AGAIN, "bossDefaultTimeToFightAgain", 20 * 60 * 60); - loadIntConfig(L, BOSS_DEFAULT_TIME_TO_DEFEAT, "bossDefaultTimeToDefeat", 20 * 60); - - loadIntConfig(L, MIN_ELEMENTAL_RESISTANCE, "minElementalResistance", -200); - loadIntConfig(L, MAX_ELEMENTAL_RESISTANCE, "maxElementalResistance", 200); - loadIntConfig(L, MAX_DAMAGE_REFLECTION, "maxDamageReflection", 200); - - loadFloatConfig(L, RATE_NPC_HEALTH, "rateNpcHealth", 1.0); + loadFloatConfig(L, RATE_MONSTER_HEALTH, "rateMonsterHealth", 1.0); loadFloatConfig(L, RATE_NPC_ATTACK, "rateNpcAttack", 1.0); loadFloatConfig(L, RATE_NPC_DEFENSE, "rateNpcDefense", 1.0); + loadFloatConfig(L, RATE_NPC_HEALTH, "rateNpcHealth", 1.0); + loadFloatConfig(L, RATE_OFFLINE_TRAINING_SPEED, "rateOfflineTrainingSpeed", 1.0); + loadFloatConfig(L, RATE_SOUL_REGEN_SPEED, "rateSoulRegenSpeed", 1.0); + loadFloatConfig(L, RATE_SOUL_REGEN, "rateSoulRegen", 1.0); + loadFloatConfig(L, RATE_SPELL_COOLDOWN, "rateSpellCooldown", 1.0); + loadFloatConfig(L, RUSE_CHANCE_FORMULA_A, "ruseChanceFormulaA", 0.0307576); + loadFloatConfig(L, RUSE_CHANCE_FORMULA_B, "ruseChanceFormulaB", 0.440697); + loadFloatConfig(L, RUSE_CHANCE_FORMULA_C, "ruseChanceFormulaC", 0.026); + loadFloatConfig(L, TRANSCENDANCE_CHANCE_FORMULA_A, "transcendanceChanceFormulaA", 0.0127); + loadFloatConfig(L, TRANSCENDANCE_CHANCE_FORMULA_B, "transcendanceChanceFormulaB", 0.1070); + loadFloatConfig(L, TRANSCENDANCE_CHANCE_FORMULA_C, "transcendanceChanceFormulaC", 0.0073); - loadBoolConfig(L, PREY_ENABLED, "preySystemEnabled", true); - loadBoolConfig(L, PREY_FREE_THIRD_SLOT, "preyFreeThirdSlot", false); - loadIntConfig(L, PREY_REROLL_PRICE_LEVEL, "preyRerollPricePerLevel", 200); - loadIntConfig(L, PREY_SELECTION_LIST_PRICE, "preySelectListPrice", 5); - loadIntConfig(L, PREY_BONUS_TIME, "preyBonusTime", 7200); - loadIntConfig(L, PREY_BONUS_REROLL_PRICE, "preyBonusRerollPrice", 1); - loadIntConfig(L, PREY_FREE_REROLL_TIME, "preyFreeRerollTime", 72000); - - loadBoolConfig(L, TASK_HUNTING_ENABLED, "taskHuntingSystemEnabled", true); - loadBoolConfig(L, TASK_HUNTING_FREE_THIRD_SLOT, "taskHuntingFreeThirdSlot", false); - loadIntConfig(L, TASK_HUNTING_LIMIT_EXHAUST, "taskHuntingLimitedTasksExhaust", 72000); - loadIntConfig(L, TASK_HUNTING_REROLL_PRICE_LEVEL, "taskHuntingRerollPricePerLevel", 200); - loadIntConfig(L, TASK_HUNTING_SELECTION_LIST_PRICE, "taskHuntingSelectListPrice", 5); - loadIntConfig(L, TASK_HUNTING_BONUS_REROLL_PRICE, "taskHuntingBonusRerollPrice", 1); - loadIntConfig(L, TASK_HUNTING_FREE_REROLL_TIME, "taskHuntingFreeRerollTime", 72000); - + loadIntConfig(L, ACTIONS_DELAY_INTERVAL, "timeBetweenActions", 200); + loadIntConfig(L, ADVENTURERSBLESSING_LEVEL, "adventurersBlessingLevel", 21); loadIntConfig(L, BESTIARY_KILL_MULTIPLIER, "bestiaryKillMultiplier", 1); - loadIntConfig(L, BOSSTIARY_KILL_MULTIPLIER, "bosstiaryKillMultiplier", 1); - loadBoolConfig(L, BOOSTED_BOSS_SLOT, "boostedBossSlot", true); - loadIntConfig(L, BOOSTED_BOSS_LOOT_BONUS, "boostedBossLootBonus", 250); + loadIntConfig(L, BLACK_SKULL_DURATION, "blackSkullDuration", 45); loadIntConfig(L, BOOSTED_BOSS_KILL_BONUS, "boostedBossKillBonus", 3); - - loadIntConfig(L, FAMILIAR_TIME, "familiarTime", 30); - - loadBoolConfig(L, TOGGLE_GOLD_POUCH_ALLOW_ANYTHING, "toggleGoldPouchAllowAnything", false); - loadBoolConfig(L, TOGGLE_GOLD_POUCH_QUICKLOOT_ONLY, "toggleGoldPouchQuickLootOnly", false); - loadBoolConfig(L, TOGGLE_SERVER_IS_RETRO, "toggleServerIsRetroPVP", false); - loadBoolConfig(L, TOGGLE_TRAVELS_FREE, "toggleTravelsFree", false); + loadIntConfig(L, BOOSTED_BOSS_LOOT_BONUS, "boostedBossLootBonus", 250); + loadIntConfig(L, BOSS_DEFAULT_TIME_TO_DEFEAT, "bossDefaultTimeToDefeat", 20 * 60); + loadIntConfig(L, BOSS_DEFAULT_TIME_TO_FIGHT_AGAIN, "bossDefaultTimeToFightAgain", 20 * 60 * 60); + loadIntConfig(L, BOSSTIARY_KILL_MULTIPLIER, "bosstiaryKillMultiplier", 1); loadIntConfig(L, BUY_AOL_COMMAND_FEE, "buyAolCommandFee", 0); loadIntConfig(L, BUY_BLESS_COMMAND_FEE, "buyBlessCommandFee", 0); - loadBoolConfig(L, TELEPORT_PLAYER_TO_VOCATION_ROOM, "teleportPlayerToVocationRoom", true); - loadBoolConfig(L, ENABLE_PLAYER_PUT_ITEM_IN_AMMO_SLOT, "enablePlayerPutItemInAmmoSlot", false); - - loadBoolConfig(L, TOGGLE_HAZARDSYSTEM, "toogleHazardSystem", true); - loadIntConfig(L, HAZARD_CRITICAL_INTERVAL, "hazardCriticalInterval", 2000); + loadIntConfig(L, CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES, "checkExpiredMarketOffersEachMinutes", 60); + loadIntConfig(L, COMBAT_CHAIN_DELAY, "combatChainDelay", 50); + loadIntConfig(L, COMPRESSION_LEVEL, "packetCompressionLevel", 6); + loadIntConfig(L, CRITICALCHANCE, "criticalChance", 10); + loadIntConfig(L, DAY_KILLS_TO_RED, "dayKillsToRedSkull", 3); + loadIntConfig(L, DEATH_LOSE_PERCENT, "deathLosePercent", -1); + loadIntConfig(L, DEFAULT_DESPAWNRADIUS, "deSpawnRadius", 50); + loadIntConfig(L, DEFAULT_DESPAWNRANGE, "deSpawnRange", 2); + loadIntConfig(L, DEPOTCHEST, "depotChest", 4); + loadIntConfig(L, DISCORD_WEBHOOK_DELAY_MS, "discordWebhookDelayMs", Webhook::DEFAULT_DELAY_MS); + loadIntConfig(L, EX_ACTIONS_DELAY_INTERVAL, "timeBetweenExActions", 1000); + loadIntConfig(L, EXP_FROM_PLAYERS_LEVEL_RANGE, "expFromPlayersLevelRange", 75); + loadIntConfig(L, FAMILIAR_TIME, "familiarTime", 30); + loadIntConfig(L, FORGE_BASE_SUCCESS_RATE, "forgeBaseSuccessRate", 50); + loadIntConfig(L, FORGE_BONUS_SUCCESS_RATE, "forgeBonusSuccessRate", 15); + loadIntConfig(L, FORGE_CONVERGENCE_FUSION_DUST_COST, "forgeConvergenceFusionCost", 130); + loadIntConfig(L, FORGE_CONVERGENCE_TRANSFER_DUST_COST, "forgeConvergenceTransferCost", 160); + loadIntConfig(L, FORGE_CORE_COST, "forgeCoreCost", 50); + loadIntConfig(L, FORGE_COST_ONE_SLIVER, "forgeCostOneSliver", 20); + loadIntConfig(L, FORGE_FIENDISH_CREATURES_LIMIT, "forgeFiendishLimit", 3); + loadIntConfig(L, FORGE_FUSION_DUST_COST, "forgeFusionDustCost", 100); + loadIntConfig(L, FORGE_INFLUENCED_CREATURES_LIMIT, "forgeInfluencedLimit", 300); + loadIntConfig(L, FORGE_MAX_DUST, "forgeMaxDust", 225); + loadIntConfig(L, FORGE_MAX_ITEM_TIER, "forgeMaxItemTier", 10); + loadIntConfig(L, FORGE_MAX_SLIVERS, "forgeMaxSlivers", 7); + loadIntConfig(L, FORGE_MIN_SLIVERS, "forgeMinSlivers", 3); + loadIntConfig(L, FORGE_SLIVER_AMOUNT, "forgeSliverAmount", 3); + loadIntConfig(L, FORGE_TIER_LOSS_REDUCTION, "forgeTierLossReduction", 50); + loadIntConfig(L, FORGE_TRANSFER_DUST_COST, "forgeTransferDustCost", 100); + loadIntConfig(L, FRAG_TIME, "timeToDecreaseFrags", 24 * 60 * 60 * 1000); + loadIntConfig(L, FREE_QUEST_STAGE, "freeQuestStage", 1); + loadIntConfig(L, GLOBAL_SERVER_SAVE_NOTIFY_DURATION, "globalServerSaveNotifyDuration", 5); loadIntConfig(L, HAZARD_CRITICAL_CHANCE, "hazardCriticalChance", 750); + loadIntConfig(L, HAZARD_CRITICAL_INTERVAL, "hazardCriticalInterval", 2000); loadIntConfig(L, HAZARD_CRITICAL_MULTIPLIER, "hazardCriticalMultiplier", 25); loadIntConfig(L, HAZARD_DAMAGE_MULTIPLIER, "hazardDamageMultiplier", 200); loadIntConfig(L, HAZARD_DEFENSE_MULTIPLIER, "hazardDefenseMultiplier", 0); loadIntConfig(L, HAZARD_DODGE_MULTIPLIER, "hazardDodgeMultiplier", 85); + loadIntConfig(L, HAZARD_LOOT_BONUS_MULTIPLIER, "hazardLootBonusMultiplier", 2); + loadIntConfig(L, HAZARD_PODS_DAMAGE, "hazardPodsDamage", 5); loadIntConfig(L, HAZARD_PODS_DROP_MULTIPLIER, "hazardPodsDropMultiplier", 87); loadIntConfig(L, HAZARD_PODS_TIME_TO_DAMAGE, "hazardPodsTimeToDamage", 2000); loadIntConfig(L, HAZARD_PODS_TIME_TO_SPAWN, "hazardPodsTimeToSpawn", 4000); - loadFloatConfig(L, HAZARD_EXP_BONUS_MULTIPLIER, "hazardExpBonusMultiplier", 2.0); - loadIntConfig(L, HAZARD_LOOT_BONUS_MULTIPLIER, "hazardLootBonusMultiplier", 2); - loadIntConfig(L, HAZARD_PODS_DAMAGE, "hazardPodsDamage", 5); loadIntConfig(L, HAZARD_SPAWN_PLUNDER_MULTIPLIER, "hazardSpawnPlunderMultiplier", 25); + loadIntConfig(L, HOUSE_BUY_LEVEL, "houseBuyLevel", 0); + loadIntConfig(L, HOUSE_LOSE_AFTER_INACTIVITY, "houseLoseAfterInactivity", 0); + loadIntConfig(L, HOUSE_PRICE_PER_SQM, "housePriceEachSQM", 1000); + loadIntConfig(L, KICK_AFTER_MINUTES, "kickIdlePlayerAfterMinutes", 15); + loadIntConfig(L, LOOTPOUCH_MAXLIMIT, "lootPouchMaxLimit", 2000); loadIntConfig(L, LOW_LEVEL_BONUS_EXP, "lowLevelBonusExp", 50); - - loadBoolConfig(L, LOYALTY_ENABLED, "loyaltyEnabled", true); loadIntConfig(L, LOYALTY_POINTS_PER_CREATION_DAY, "loyaltyPointsPerCreationDay", 1); - loadIntConfig(L, LOYALTY_POINTS_PER_PREMIUM_DAY_SPENT, "loyaltyPointsPerPremiumDaySpent", 0); loadIntConfig(L, LOYALTY_POINTS_PER_PREMIUM_DAY_PURCHASED, "loyaltyPointsPerPremiumDayPurchased", 0); - loadFloatConfig(L, LOYALTY_BONUS_PERCENTAGE_MULTIPLIER, "loyaltyBonusPercentageMultiplier", 1.0); - - loadBoolConfig(L, TOGGLE_WHEELSYSTEM, "wheelSystemEnabled", true); - loadIntConfig(L, WHEEL_POINTS_PER_LEVEL, "wheelPointsPerLevel", 1); - - loadIntConfig(L, WHEEL_ATELIER_ROTATE_LESSER_COST, "wheelAtelierRotateLesserCost", 125000); - loadIntConfig(L, WHEEL_ATELIER_ROTATE_REGULAR_COST, "wheelAtelierRotateRegularCost", 250000); - loadIntConfig(L, WHEEL_ATELIER_ROTATE_GREATER_COST, "wheelAtelierRotateGreaterCost", 500000); - - loadIntConfig(L, WHEEL_ATELIER_REVEAL_LESSER_COST, "wheelAtelierRevealLesserCost", 125000); - loadIntConfig(L, WHEEL_ATELIER_REVEAL_REGULAR_COST, "wheelAtelierRevealRegularCost", 1000000); - loadIntConfig(L, WHEEL_ATELIER_REVEAL_GREATER_COST, "wheelAtelierRevealGreaterCost", 6000000); - - loadBoolConfig(L, PARTY_AUTO_SHARE_EXPERIENCE, "partyAutoShareExperience", true); - loadBoolConfig(L, PARTY_SHARE_LOOT_BOOSTS, "partyShareLootBoosts", true); - loadFloatConfig(L, PARTY_SHARE_LOOT_BOOSTS_DIMINISHING_FACTOR, "partyShareLootBoostsDimishingFactor", 0.7f); + loadIntConfig(L, LOYALTY_POINTS_PER_PREMIUM_DAY_SPENT, "loyaltyPointsPerPremiumDaySpent", 0); + loadIntConfig(L, MAX_ALLOWED_ON_A_DUMMY, "maxAllowedOnADummy", 1); + loadIntConfig(L, MAX_CONTAINER_ITEM, "maxItem", 5000); + loadIntConfig(L, MAX_CONTAINER, "maxContainer", 500); + loadIntConfig(L, MAX_DAMAGE_REFLECTION, "maxDamageReflection", 200); + loadIntConfig(L, MAX_ELEMENTAL_RESISTANCE, "maxElementalResistance", 200); + loadIntConfig(L, MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER, "maxMarketOffersAtATimePerPlayer", 100); + loadIntConfig(L, MAX_MESSAGEBUFFER, "maxMessageBuffer", 4); + loadIntConfig(L, MAX_PACKETS_PER_SECOND, "maxPacketsPerSecond", 25); + loadIntConfig(L, MAX_PLAYERS_OUTSIDE_PZ_PER_ACCOUNT, "maxPlayersOutsidePZPerAccount", 1); + loadIntConfig(L, MAX_PLAYERS_PER_ACCOUNT, "maxPlayersOnlinePerAccount", 1); + loadIntConfig(L, MAX_PLAYERS, "maxPlayers", 0); + loadIntConfig(L, MAX_SPEED_ATTACKONFIST, "maxSpeedOnFist", 500); + loadIntConfig(L, METRICS_OSTREAM_INTERVAL, "metricsOstreamInterval", 1000); + loadIntConfig(L, MIN_DELAY_BETWEEN_CONDITIONS, "minDelayBetweenConditions", 0); + loadIntConfig(L, MIN_ELEMENTAL_RESISTANCE, "minElementalResistance", -200); + loadIntConfig(L, MONTH_KILLS_TO_RED, "monthKillsToRedSkull", 10); + loadIntConfig(L, MULTIPLIER_ATTACKONFIST, "multiplierSpeedOnFist", 5); + loadIntConfig(L, ORANGE_SKULL_DURATION, "orangeSkullDuration", 7); + loadIntConfig(L, PARALLELISM, "parallelism", 2); + loadIntConfig(L, PARTY_LIST_MAX_DISTANCE, "partyListMaxDistance", 0); + loadIntConfig(L, PREY_BONUS_REROLL_PRICE, "preyBonusRerollPrice", 1); + loadIntConfig(L, PREY_BONUS_TIME, "preyBonusTime", 7200); + loadIntConfig(L, PREY_FREE_REROLL_TIME, "preyFreeRerollTime", 72000); + loadIntConfig(L, PREY_REROLL_PRICE_LEVEL, "preyRerollPricePerLevel", 200); + loadIntConfig(L, PREY_SELECTION_LIST_PRICE, "preySelectListPrice", 5); + loadIntConfig(L, PROTECTION_LEVEL, "protectionLevel", 1); + loadIntConfig(L, PUSH_DELAY, "pushDelay", 1000); + loadIntConfig(L, PUSH_DISTANCE_DELAY, "pushDistanceDelay", 1500); + loadIntConfig(L, PVP_MAX_LEVEL_DIFFERENCE, "pvpMaxLevelDifference", 0); + loadIntConfig(L, PZ_LOCKED, "pzLocked", 60000); + loadIntConfig(L, RATE_EXPERIENCE, "rateExp", 1); + loadIntConfig(L, RATE_KILLING_IN_THE_NAME_OF_POINTS, "rateKillingInTheNameOfPoints", 1); + loadIntConfig(L, RATE_LOOT, "rateLoot", 1); + loadIntConfig(L, RATE_MAGIC, "rateMagic", 1); + loadIntConfig(L, RATE_SKILL, "rateSkill", 1); + loadIntConfig(L, RATE_SPAWN, "rateSpawn", 1); + loadIntConfig(L, RED_SKULL_DURATION, "redSkullDuration", 30); + loadIntConfig(L, REWARD_CHEST_MAX_COLLECT_ITEMS, "rewardChestMaxCollectItems", 200); + loadIntConfig(L, SAVE_INTERVAL_TIME, "saveIntervalTime", 1); + loadIntConfig(L, STAIRHOP_DELAY, "stairJumpExhaustion", 2000); + loadIntConfig(L, STAMINA_GREEN_DELAY, "staminaGreenDelay", 5); + loadIntConfig(L, STAMINA_ORANGE_DELAY, "staminaOrangeDelay", 1); + loadIntConfig(L, STAMINA_PZ_GAIN, "staminaPzGain", 1); + loadIntConfig(L, STAMINA_TRAINER_DELAY, "staminaTrainerDelay", 5); + loadIntConfig(L, STAMINA_TRAINER_GAIN, "staminaTrainerGain", 1); + loadIntConfig(L, STATUSQUERY_TIMEOUT, "statusTimeout", 5000); + loadIntConfig(L, STORE_COIN_PACKET, "coinPacketSize", 25); + loadIntConfig(L, STOREINBOX_MAXLIMIT, "storeInboxMaxLimit", 2000); + loadIntConfig(L, T_CONST, "temporaryConst", 2); + loadIntConfig(L, TASK_HUNTING_BONUS_REROLL_PRICE, "taskHuntingBonusRerollPrice", 1); + loadIntConfig(L, TASK_HUNTING_FREE_REROLL_TIME, "taskHuntingFreeRerollTime", 72000); + loadIntConfig(L, TASK_HUNTING_LIMIT_EXHAUST, "taskHuntingLimitedTasksExhaust", 72000); + loadIntConfig(L, TASK_HUNTING_REROLL_PRICE_LEVEL, "taskHuntingRerollPricePerLevel", 200); + loadIntConfig(L, TASK_HUNTING_SELECTION_LIST_PRICE, "taskHuntingSelectListPrice", 5); loadIntConfig(L, TIBIADROME_CONCOCTION_COOLDOWN, "tibiadromeConcoctionCooldown", 24 * 60 * 60); loadIntConfig(L, TIBIADROME_CONCOCTION_DURATION, "tibiadromeConcoctionDuration", 1 * 60 * 60); - loadStringConfig(L, TIBIADROME_CONCOCTION_TICK_TYPE, "tibiadromeConcoctionTickType", "online"); - - loadStringConfig(L, M_CONST, "memoryConst", "1<<16"); - loadIntConfig(L, T_CONST, "temporaryConst", 2); - loadIntConfig(L, PARALLELISM, "parallelism", 2); - - // Vip System - loadBoolConfig(L, VIP_SYSTEM_ENABLED, "vipSystemEnabled", false); + loadIntConfig(L, TRANSCENDANCE_AVATAR_DURATION, "transcendanceAvatarDuration", 7000); loadIntConfig(L, VIP_BONUS_EXP, "vipBonusExp", 0); loadIntConfig(L, VIP_BONUS_LOOT, "vipBonusLoot", 0); loadIntConfig(L, VIP_BONUS_SKILL, "vipBonusSkill", 0); - loadBoolConfig(L, VIP_AUTOLOOT_VIP_ONLY, "vipAutoLootVipOnly", false); - loadBoolConfig(L, VIP_KEEP_HOUSE, "vipKeepHouse", false); - loadBoolConfig(L, VIP_STAY_ONLINE, "vipStayOnline", false); loadIntConfig(L, VIP_FAMILIAR_TIME_COOLDOWN_REDUCTION, "vipFamiliarTimeCooldownReduction", 0); + loadIntConfig(L, WEEK_KILLS_TO_RED, "weekKillsToRedSkull", 5); + loadIntConfig(L, WHEEL_ATELIER_REVEAL_GREATER_COST, "wheelAtelierRevealGreaterCost", 6000000); + loadIntConfig(L, WHEEL_ATELIER_REVEAL_LESSER_COST, "wheelAtelierRevealLesserCost", 125000); + loadIntConfig(L, WHEEL_ATELIER_REVEAL_REGULAR_COST, "wheelAtelierRevealRegularCost", 1000000); + loadIntConfig(L, WHEEL_ATELIER_ROTATE_GREATER_COST, "wheelAtelierRotateGreaterCost", 500000); + loadIntConfig(L, WHEEL_ATELIER_ROTATE_LESSER_COST, "wheelAtelierRotateLesserCost", 125000); + loadIntConfig(L, WHEEL_ATELIER_ROTATE_REGULAR_COST, "wheelAtelierRotateRegularCost", 250000); + loadIntConfig(L, WHEEL_POINTS_PER_LEVEL, "wheelPointsPerLevel", 1); + loadIntConfig(L, WHITE_SKULL_TIME, "whiteSkullTime", 15 * 60 * 1000); - loadBoolConfig(L, REWARD_CHEST_COLLECT_ENABLED, "rewardChestCollectEnabled", true); - loadIntConfig(L, REWARD_CHEST_MAX_COLLECT_ITEMS, "rewardChestMaxCollectItems", 200); - - // PVP System - loadFloatConfig(L, PVP_RATE_DAMAGE_TAKEN_PER_LEVEL, "pvpRateDamageTakenPerLevel", 0.0); - loadFloatConfig(L, PVP_RATE_DAMAGE_REDUCTION_PER_LEVEL, "pvpRateDamageReductionPerLevel", 0.0); - loadIntConfig(L, PVP_MAX_LEVEL_DIFFERENCE, "pvpMaxLevelDifference", 0); - - loadBoolConfig(L, TOGGLE_MOUNT_IN_PZ, "toggleMountInProtectionZone", false); - - loadBoolConfig(L, TOGGLE_HOUSE_TRANSFER_ON_SERVER_RESTART, "togglehouseTransferOnRestart", false); - - loadBoolConfig(L, TOGGLE_RECEIVE_REWARD, "toggleReceiveReward", false); - - loadBoolConfig(L, METRICS_ENABLE_PROMETHEUS, "metricsEnablePrometheus", false); + loadStringConfig(L, CORE_DIRECTORY, "coreDirectory", "data"); + loadStringConfig(L, DATA_DIRECTORY, "dataPackDirectory", "data-otservbr-global"); + loadStringConfig(L, DEFAULT_PRIORITY, "defaultPriority", "high"); + loadStringConfig(L, DISCORD_WEBHOOK_URL, "discordWebhookURL", ""); + loadStringConfig(L, FORGE_FIENDISH_INTERVAL_TIME, "forgeFiendishIntervalTime", "1"); + loadStringConfig(L, FORGE_FIENDISH_INTERVAL_TYPE, "forgeFiendishIntervalType", "hour"); + loadStringConfig(L, GLOBAL_SERVER_SAVE_TIME, "globalServerSaveTime", "06:00"); + loadStringConfig(L, LOCATION, "location", ""); + loadStringConfig(L, M_CONST, "memoryConst", "1<<16"); loadStringConfig(L, METRICS_PROMETHEUS_ADDRESS, "metricsPrometheusAddress", "localhost:9464"); - - loadBoolConfig(L, METRICS_ENABLE_OSTREAM, "metricsEnableOstream", false); - loadIntConfig(L, METRICS_OSTREAM_INTERVAL, "metricsOstreamInterval", 1000); - - loadIntConfig(L, STOREINBOX_MAXLIMIT, "storeInboxMaxLimit", 2000); - loadIntConfig(L, LOOTPOUCH_MAXLIMIT, "lootPouchMaxLimit", 2000); + loadStringConfig(L, OWNER_EMAIL, "ownerEmail", ""); + loadStringConfig(L, OWNER_NAME, "ownerName", ""); + loadStringConfig(L, SAVE_INTERVAL_TYPE, "saveIntervalType", ""); + loadStringConfig(L, SERVER_MOTD, "serverMotd", ""); + loadStringConfig(L, SERVER_NAME, "serverName", ""); + loadStringConfig(L, STORE_IMAGES_URL, "coinImagesURL", ""); + loadStringConfig(L, TIBIADROME_CONCOCTION_TICK_TYPE, "tibiadromeConcoctionTickType", "online"); + loadStringConfig(L, URL, "url", ""); + loadStringConfig(L, WORLD_TYPE, "worldType", "pvp"); loaded = true; lua_close(L); From d5f826f12cdfc62a1f201ba8b9f26b3231bbe63e Mon Sep 17 00:00:00 2001 From: Marco Date: Tue, 20 Feb 2024 13:47:16 -0300 Subject: [PATCH 3/6] chore: change name lock to core (#2277) --- .../scripts/creaturescripts/player/name_lock.lua | 1 + 1 file changed, 1 insertion(+) rename data-otservbr-global/scripts/creaturescripts/players/namelock.lua => data/scripts/creaturescripts/player/name_lock.lua (99%) diff --git a/data-otservbr-global/scripts/creaturescripts/players/namelock.lua b/data/scripts/creaturescripts/player/name_lock.lua similarity index 99% rename from data-otservbr-global/scripts/creaturescripts/players/namelock.lua rename to data/scripts/creaturescripts/player/name_lock.lua index c34eab6f181..322e8d135b8 100644 --- a/data-otservbr-global/scripts/creaturescripts/players/namelock.lua +++ b/data/scripts/creaturescripts/player/name_lock.lua @@ -3,6 +3,7 @@ function CheckNamelock(player) if not namelockReason then return true end + player:setMoveLocked(true) player:teleportTo(player:getTown():getTemplePosition()) player:sendTextMessage(MESSAGE_ADMINISTRADOR, "Your name has been locked for the following reason: " .. namelockReason .. ".") From 4db58094b860e30ce004fba11d10d65701af990c Mon Sep 17 00:00:00 2001 From: Marco Date: Tue, 20 Feb 2024 13:47:58 -0300 Subject: [PATCH 4/6] chore: change offline training to core (#2276) --- .../actions/other/offline_training.lua | 31 -------- .../others/offline_training.lua | 76 ------------------- .../objects}/offline_training_book.lua | 0 .../actions/objects}/skill_trainer.lua | 0 .../others}/offline_training.lua | 3 +- 5 files changed, 1 insertion(+), 109 deletions(-) delete mode 100644 data-otservbr-global/scripts/actions/other/offline_training.lua delete mode 100644 data-otservbr-global/scripts/creaturescripts/others/offline_training.lua rename {data-otservbr-global/scripts/actions/other => data/scripts/actions/objects}/offline_training_book.lua (100%) rename {data-canary/scripts/actions/other => data/scripts/actions/objects}/skill_trainer.lua (100%) rename {data-canary/scripts/creaturescripts => data/scripts/creaturescripts/others}/offline_training.lua (97%) diff --git a/data-otservbr-global/scripts/actions/other/offline_training.lua b/data-otservbr-global/scripts/actions/other/offline_training.lua deleted file mode 100644 index d205feb6b2f..00000000000 --- a/data-otservbr-global/scripts/actions/other/offline_training.lua +++ /dev/null @@ -1,31 +0,0 @@ -local statues = { - [16198] = SKILL_SWORD, - [16199] = SKILL_AXE, - [16200] = SKILL_CLUB, - [16201] = SKILL_DISTANCE, - [16202] = SKILL_MAGLEVEL, -} - -local offlineTraining = Action() - -function offlineTraining.onUse(player, item, fromPosition, target, toPosition, isHotkey) - local skill = statues[item:getId()] - if not player:isPremium() then - player:sendCancelMessage(RETURNVALUE_YOUNEEDPREMIUMACCOUNT) - return true - end - - if player:isPzLocked() then - return false - end - - player:setOfflineTrainingSkill(skill) - player:remove(false) - return true -end - -for index, value in pairs(statues) do - offlineTraining:id(index) -end - -offlineTraining:register() diff --git a/data-otservbr-global/scripts/creaturescripts/others/offline_training.lua b/data-otservbr-global/scripts/creaturescripts/others/offline_training.lua deleted file mode 100644 index afe28e82134..00000000000 --- a/data-otservbr-global/scripts/creaturescripts/others/offline_training.lua +++ /dev/null @@ -1,76 +0,0 @@ -local offlineTraining = CreatureEvent("OfflineTraining") -function offlineTraining.onLogin(player) - local lastLogout = player:getLastLogout() - local offlineTime = lastLogout ~= 0 and math.min(os.time() - lastLogout, 86400 * 21) or 0 - local offlineTrainingSkill = player:getOfflineTrainingSkill() - if offlineTrainingSkill == SKILL_NONE then - player:addOfflineTrainingTime(offlineTime * 1000) - return true - end - - player:setOfflineTrainingSkill(SKILL_NONE) - - if offlineTime < 600 then - player:sendTextMessage(MESSAGE_OFFLINE_TRAINING, "You must be logged out for more than 10 minutes to start offline training.") - return true - end - - local trainingTime = math.max(0, math.min(offlineTime, math.min(43200, player:getOfflineTrainingTime() / 1000))) - player:removeOfflineTrainingTime(trainingTime * 1000) - - local remainder = offlineTime - trainingTime - if remainder > 0 then - player:addOfflineTrainingTime(remainder * 1000) - end - - if trainingTime < 60 then - return true - end - - local text = "During your absence you trained for" - local hours = math.floor(trainingTime / 3600) - if hours > 1 then - text = string.format("%s %d hours", text, hours) - elseif hours == 1 then - text = string.format("%s 1 hour", text) - end - - local minutes = math.floor((trainingTime % 3600) / 60) - if minutes ~= 0 then - if hours ~= 0 then - text = string.format("%s and", text) - end - - if minutes > 1 then - text = string.format("%s %d minutes", text, minutes) - else - text = string.format("%s 1 minute", text) - end - end - text = string.format("%s.", text) - player:sendTextMessage(MESSAGE_OFFLINE_TRAINING, text) - - local vocation = player:getVocation() - local promotion = vocation:getPromotion() - local topVocation = not promotion and vocation or promotion - - local updateSkill = false - if table.contains({ SKILL_CLUB, SKILL_SWORD, SKILL_AXE, SKILL_DISTANCE }, offlineTrainingSkill) then - local modifier = topVocation:getBaseAttackSpeed() / 1000 / configManager.getFloat(configKeys.RATE_OFFLINE_TRAINING_SPEED) - updateSkill = player:addOfflineTrainingTries(offlineTrainingSkill, (trainingTime / modifier) / (offlineTrainingSkill == SKILL_DISTANCE and 4 or 2)) - elseif offlineTrainingSkill == SKILL_MAGLEVEL then - local gainTicks = (topVocation:getManaGainTicks() / 1000) * 2 - if gainTicks == 0 then - gainTicks = 1 - end - - updateSkill = player:addOfflineTrainingTries(SKILL_MAGLEVEL, trainingTime * (vocation:getManaGainAmount() / gainTicks)) - end - - if updateSkill then - player:addOfflineTrainingTries(SKILL_SHIELD, trainingTime / 4) - end - return true -end - -offlineTraining:register() diff --git a/data-otservbr-global/scripts/actions/other/offline_training_book.lua b/data/scripts/actions/objects/offline_training_book.lua similarity index 100% rename from data-otservbr-global/scripts/actions/other/offline_training_book.lua rename to data/scripts/actions/objects/offline_training_book.lua diff --git a/data-canary/scripts/actions/other/skill_trainer.lua b/data/scripts/actions/objects/skill_trainer.lua similarity index 100% rename from data-canary/scripts/actions/other/skill_trainer.lua rename to data/scripts/actions/objects/skill_trainer.lua diff --git a/data-canary/scripts/creaturescripts/offline_training.lua b/data/scripts/creaturescripts/others/offline_training.lua similarity index 97% rename from data-canary/scripts/creaturescripts/offline_training.lua rename to data/scripts/creaturescripts/others/offline_training.lua index e6ada9880d1..abfb0b94b3d 100644 --- a/data-canary/scripts/creaturescripts/offline_training.lua +++ b/data/scripts/creaturescripts/others/offline_training.lua @@ -1,4 +1,4 @@ -local offlineTraining = CreatureEvent("Offline Training") +local offlineTraining = CreatureEvent("OfflineTraining") function offlineTraining.onLogin(player) local lastLogout = player:getLastLogout() @@ -72,7 +72,6 @@ function offlineTraining.onLogin(player) if updateSkills then player:addOfflineTrainingTries(SKILL_SHIELD, trainingTime / 4) end - return true end From bfaf30dd8f98ee3115946f695d31669c04670355 Mon Sep 17 00:00:00 2001 From: Marco Date: Tue, 20 Feb 2024 13:48:44 -0300 Subject: [PATCH 5/6] improve: glooth bag (#2275) Script moved to core and adjusted chances of getting rewards (based on tibia wiki) --- .../scripts/actions/other/glooth_bag.lua | 47 ------------------- data/scripts/actions/items/glooth_bag.lua | 40 ++++++++++++++++ 2 files changed, 40 insertions(+), 47 deletions(-) delete mode 100644 data-otservbr-global/scripts/actions/other/glooth_bag.lua create mode 100644 data/scripts/actions/items/glooth_bag.lua diff --git a/data-otservbr-global/scripts/actions/other/glooth_bag.lua b/data-otservbr-global/scripts/actions/other/glooth_bag.lua deleted file mode 100644 index 382aa5ad447..00000000000 --- a/data-otservbr-global/scripts/actions/other/glooth_bag.lua +++ /dev/null @@ -1,47 +0,0 @@ -local items = { - glooth_spears = 21158, - glooth_amulet = 21183, - glooth_club = 21178, - glooth_axe = 21180, - glooth_blade = 21179, - glooth_backpack = 21295, - glooth_sandwiches = 21143, - glooth_soup = 21144, - glooth_steaks = 21146, - control_unit = 21186, -} - -local gloothBag = Action() - -function gloothBag.onUse(player, item, fromPosition, target, toPosition, isHotkey) - local rand = math.random(1, 100) - - if rand <= 15 then - player:addItem(items.glooth_spears, 2) - elseif rand >= 16 and rand <= 23 then - player:addItem(items.glooth_amulet, 1) - elseif rand >= 24 and rand <= 32 then - player:addItem(items.glooth_club, 1) - elseif rand >= 33 and rand <= 50 then - player:addItem(items.glooth_axe, 1) - elseif rand >= 51 and rand <= 64 then - player:addItem(items.glooth_blade, 1) - elseif rand >= 65 and rand <= 75 then - player:addItem(items.glooth_backpack, 1) - elseif rand >= 76 and rand <= 86 then - player:addItem(items.glooth_sandwiches, 10) - elseif rand >= 87 and rand <= 96 then - player:addItem(items.glooth_soup, 10) - elseif rand >= 97 and rand <= 99 then - player:addItem(items.control_unit, 1) - elseif rand == 100 then - player:addItem(items.glooth_steaks, 10) - end - - item:remove(1) - - return true -end - -gloothBag:id(21203) -gloothBag:register() diff --git a/data/scripts/actions/items/glooth_bag.lua b/data/scripts/actions/items/glooth_bag.lua new file mode 100644 index 00000000000..a3703ea08dc --- /dev/null +++ b/data/scripts/actions/items/glooth_bag.lua @@ -0,0 +1,40 @@ +local config = { + { chanceFrom = 0, chanceTo = 1875, itemId = 21158, count = 2 }, -- glooth spear + { chanceFrom = 1876, chanceTo = 3418, itemId = 21183 }, -- glooth amulet + { chanceFrom = 3419, chanceTo = 4933, itemId = 21178 }, -- glooth club + { chanceFrom = 4934, chanceTo = 6397, itemId = 21180 }, -- glooth axe + { chanceFrom = 6398, chanceTo = 7829, itemId = 21179 }, -- glooth blade + { chanceFrom = 7830, chanceTo = 8462, itemId = 21295 }, -- glooth backpack + { chanceFrom = 8463, chanceTo = 8975, itemId = 21143, count = 10 }, -- glooth sandwich + { chanceFrom = 8976, chanceTo = 9469, itemId = 21144, count = 10 }, -- bowl of glooth soup + { chanceFrom = 9470, chanceTo = 9922, itemId = 21146, count = 10 }, -- glooth steak + { chanceFrom = 9923, chanceTo = 10000, itemId = 21186 }, -- control unit +} + +local gloothBag = Action() + +function gloothBag.onUse(player, item, fromPosition, target, toPosition, isHotkey) + local chance = math.random(0, 10000) + for i = 1, #config do + local randomItem = config[i] + if chance >= randomItem.chanceFrom and chance <= randomItem.chanceTo then + if randomItem.itemId then + local gift = randomItem.itemId + local count = randomItem.count or 1 + if type(count) == "table" then + count = math.random(count[1], count[2]) + end + + player:addItem(gift, count) + end + + item:getPosition():sendMagicEffect(CONST_ME_HITBYPOISON) + item:remove(1) + return true + end + end + return false +end + +gloothBag:id(21203) +gloothBag:register() From b1fadd2f08592bb436481c7371dde164949ef397 Mon Sep 17 00:00:00 2001 From: Aerwix Date: Tue, 20 Feb 2024 12:56:43 -0600 Subject: [PATCH 6/6] fix: set type trashholder on swallow water (#2262) I noticed you can't throw items at water, so I added the attribute to the missing Id's --- data/items/items.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/data/items/items.xml b/data/items/items.xml index 666ee75b1f5..dddb15ad6ad 100644 --- a/data/items/items.xml +++ b/data/items/items.xml @@ -12135,6 +12135,7 @@ + @@ -12142,11 +12143,13 @@ + + @@ -12154,6 +12157,7 @@ + @@ -12161,6 +12165,7 @@ +