feat: replace all user-facing Russian strings with English

Empty Russian and Chinese locale files so English is used regardless
of client language. Translate all CustomGameEventManager error messages,
SendCustomMessage calls, and deck/card UI strings to English.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
achmad
2026-05-30 04:24:20 +07:00
parent e3534c4002
commit 6d95836d11
11 changed files with 48 additions and 10239 deletions
+12 -12
View File
@@ -923,7 +923,7 @@ function BattlePassServer.prototype.claimQuest(self, playerId, steamId, questId)
____print(nil, ("[BattlePassServer] ⚠️ Квест " .. questId) .. " не найден в локальном состоянии")
local player = PlayerResource:GetPlayer(playerId)
if player then
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_quest_claim_result", {success = false, error = "Задание не найдено"})
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_quest_claim_result", {success = false, error = "Quest not found"})
end
return
end
@@ -938,7 +938,7 @@ function BattlePassServer.prototype.claimQuest(self, playerId, steamId, questId)
)
local player = PlayerResource:GetPlayer(playerId)
if player then
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_quest_claim_result", {success = false, error = "Задание не выполнено или уже забрано"})
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_quest_claim_result", {success = false, error = "Quest not completed or already claimed"})
end
return
end
@@ -1007,7 +1007,7 @@ function BattlePassServer.prototype.claimQuest(self, playerId, steamId, questId)
end
end
else
local errorMsg = "Ошибка: " .. tostring(result.StatusCode)
local errorMsg = "Error: " .. tostring(result.StatusCode)
____print(
nil,
"[BattlePassServer] Ошибка клейма квеста: StatusCode=" .. tostring(result.StatusCode)
@@ -1132,7 +1132,7 @@ function BattlePassServer.prototype.loadBattlePassData(self, playerId, steamId)
)
local player = PlayerResource:GetPlayer(playerId)
if player then
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_data", {error = "Ошибка обработки данных"})
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_data", {error = "Data processing error"})
end
end
local ____try, ____hasReturned, ____returnValue = pcall(function()
@@ -1142,7 +1142,7 @@ function BattlePassServer.prototype.loadBattlePassData(self, playerId, steamId)
end
if result.StatusCode == 0 then
____print(nil, "[BattlePassServer] Сервер недоступен (StatusCode=0)")
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_data", {error = "Сервер недоступен"})
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_data", {error = "Server unavailable"})
return true
end
if result.StatusCode >= 200 and result.StatusCode < 300 then
@@ -1152,7 +1152,7 @@ function BattlePassServer.prototype.loadBattlePassData(self, playerId, steamId)
nil,
"[BattlePassServer] Ошибка парсинга JSON: " .. tostring(e)
)
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_data", {error = "Ошибка парсинга данных"})
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_data", {error = "Data parsing error"})
end
local ____try, ____hasReturned = pcall(function()
local responseData = {json.decode(result.Body)}
@@ -1232,7 +1232,7 @@ function BattlePassServer.prototype.loadBattlePassData(self, playerId, steamId)
CustomGameEventManager:Send_ServerToPlayer(
player,
"battle_pass_data",
{error = "Ошибка сервера: " .. tostring(result.StatusCode)}
{error = "Server error: " .. tostring(result.StatusCode)}
)
end
end)
@@ -1288,7 +1288,7 @@ function BattlePassServer.prototype.createBattlePass(self, playerId, steamId, af
CustomGameEventManager:Send_ServerToPlayer(
player,
"battle_pass_data",
{error = "Ошибка создания Battle Pass: " .. tostring(result.StatusCode)}
{error = "Failed to create Battle Pass: " .. tostring(result.StatusCode)}
)
if afterCreate then
afterCreate(nil, false)
@@ -1354,7 +1354,7 @@ function BattlePassServer.prototype.claimReward(self, playerId, steamId, level,
self:grantRewardInGame(playerId, level, isPremium)
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_claim_result", {success = true, level = level, is_premium = isPremium and 1 or 0})
else
local errorMsg = "Ошибка: " .. tostring(result.StatusCode)
local errorMsg = "Error: " .. tostring(result.StatusCode)
do
pcall(function()
local body = {json.decode(result.Body)}
@@ -1737,7 +1737,7 @@ function BattlePassServer.prototype.claimAllRewards(self, playerId, steamId)
nil,
"[BattlePassServer] Ошибка парсинга claim-all: " .. tostring(e)
)
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_claim_result", {success = false, error = "Ошибка обработки данных"})
CustomGameEventManager:Send_ServerToPlayer(player, "battle_pass_claim_result", {success = false, error = "Data processing error"})
end
local ____try, ____hasReturned = pcall(function()
local decoded = {json.decode(result.Body)}
@@ -1825,7 +1825,7 @@ function BattlePassServer.prototype.claimAllRewards(self, playerId, steamId)
end
end
else
local errorMsg = "Ошибка: " .. tostring(result.StatusCode)
local errorMsg = "Error: " .. tostring(result.StatusCode)
do
pcall(function()
local body = {json.decode(result.Body)}
@@ -1857,7 +1857,7 @@ function BattlePassServer.prototype.buyPremium(self, playerId, steamId)
self:loadBattlePassData(playerId, steamId)
else
local code = result.StatusCode
local errorMsg = "Ошибка: " .. tostring(code)
local errorMsg = "Error: " .. tostring(code)
local ____tostring_37 = tostring
local ____result_Body_36 = result.Body
if ____result_Body_36 == nil then
+4 -4
View File
@@ -844,15 +844,15 @@ end
function ____exports.getDeckBuilderUnlockRequiredMessage(self, unlockCardId)
local id = math.floor(__TS__Number(unlockCardId))
if id == ____exports.FROSTMOURNE_CARD_ID then
return "Нужна купленная карта «Фростморн»"
return "Requires purchased Frostmourne card"
end
if id == ____exports.WISH_CARD_ID then
return "Нужна купленная карта «Карта желания»"
return "Requires purchased Wish card"
end
if id == ____exports.MANA_SURGE_CARD_ID then
return "Нужна купленная карта «Буйство маны»"
return "Requires purchased Mana Surge card"
end
return "Нужна купленная родительская карта"
return "Requires purchased parent card"
end
function ____exports.isFrostmourneShardCardId(self, cardId)
local id = math.floor(__TS__Number(cardId))
+8 -8
View File
@@ -2472,7 +2472,7 @@ function CardSystem.prototype.CraftOrUpgradeCard(self, cardId, _allowDebris)
return
end
if cardData.canupgrade == false then
self:sendCardUpgradeResult(false, "Эту карту нельзя улучшать")
self:sendCardUpgradeResult(false, "This card cannot be upgraded")
return
end
local key = tostring(normalizedCardId)
@@ -2524,7 +2524,7 @@ function CardSystem.prototype.CraftOrUpgradeCard(self, cardId, _allowDebris)
if not isDefaultCard and not hasPurchasedCard then
self:sendCardUpgradeResult(
false,
unlockCardId > 0 and cardData.deck_builder_non_deckable == true and getDeckBuilderUnlockRequiredMessage(nil, unlockCardId) or "Нельзя улучшить некупленную карту"
unlockCardId > 0 and cardData.deck_builder_non_deckable == true and getDeckBuilderUnlockRequiredMessage(nil, unlockCardId) or "Cannot upgrade an unpurchased card"
)
return
end
@@ -2835,9 +2835,9 @@ function CardSystem.prototype.SaveDeckToServer(self, index, cards, deckName)
else
local deckData = self.decks[tostring(index)]
if deckData and type(deckData) == "table" and deckData.name ~= nil then
finalDeckName = deckData.name or "Колода " .. tostring(index)
finalDeckName = deckData.name or "Deck " .. tostring(index)
else
finalDeckName = "Колода " .. tostring(index)
finalDeckName = "Deck " .. tostring(index)
end
end
local request = CreateHTTPRequestScriptVM(
@@ -2914,14 +2914,14 @@ function CardSystem.prototype.UpdateActiveDeckOnServer(self)
deckName = deckData[1]
deckCards = __TS__ArraySlice(deckData, 1)
elseif deckData and type(deckData) == "table" and deckData.name ~= nil then
deckName = deckData.name or "Колода " .. tostring(index)
deckName = deckData.name or "Deck " .. tostring(index)
deckCards = deckData.cards or ({})
else
local keys = __TS__ArraySort(
__TS__ObjectKeys(deckData),
function(____, a, b) return __TS__ParseInt(a) - __TS__ParseInt(b) end
)
deckName = deckData[keys[1]] or "Колода " .. tostring(index)
deckName = deckData[keys[1]] or "Deck " .. tostring(index)
deckCards = __TS__ArrayFilter(
__TS__ArrayMap(
__TS__ArraySlice(keys, 1),
@@ -3030,7 +3030,7 @@ function CardSystem.prototype.resolveDeckName(self, rawName, index)
end
end
end
return "Колода " .. tostring(index)
return "Deck " .. tostring(index)
end
function CardSystem.prototype.getDeckCardsList(self, deckData)
if not deckData then
@@ -3308,7 +3308,7 @@ function CardSystem.prototype.SyncDecks(self)
deckName = deckData[1]
cardCount = #deckData - 1
else
deckName = deckData.name or "Колода " .. deckIndex
deckName = deckData.name or "Deck " .. deckIndex
local cards = deckData.cards
cardCount = cards ~= nil and cards ~= nil and __TS__ArrayIsArray(cards) and #cards or 0
end
+2 -2
View File
@@ -361,11 +361,11 @@ function CookingSystem.prototype.onCookingStart(self, event)
end
local recipe = RECIPES[recipeIndex + 1]
if recipe.locked and not isRecipeUnlockedForResult(nil, recipe.result) then
CustomGameEventManager:Send_ServerToPlayer(player, "cooking_result", {success = false, error = "Рецепт закрыт"})
CustomGameEventManager:Send_ServerToPlayer(player, "cooking_result", {success = false, error = "Recipe locked"})
return
end
if not self:canCook(hero, recipe.ingredients) then
CustomGameEventManager:Send_ServerToPlayer(player, "cooking_result", {success = false, error = "Недостаточно ингредиентов"})
CustomGameEventManager:Send_ServerToPlayer(player, "cooking_result", {success = false, error = "Not enough ingredients"})
return
end
local data = self.campfires:get(event.campfireIndex)
+2 -2
View File
@@ -1360,7 +1360,7 @@ function GameMode.prototype.OnChatWheelSelect(self, data)
if not isCurrentSoundBlocking then
local player = PlayerResource:GetPlayer(data.PlayerID)
if player ~= nil and player ~= nil then
CustomGameEventManager:Send_ServerToPlayer(player, "create_error_message", {message = "Сейчас играет другой звук, подождите"})
CustomGameEventManager:Send_ServerToPlayer(player, "create_error_message", {message = "Another sound is playing, please wait"})
end
____print(
nil,
@@ -1382,7 +1382,7 @@ function GameMode.prototype.OnChatWheelSelect(self, data)
else
timeText = tostring(math.ceil(remaining)) .. " сек"
end
CustomGameEventManager:Send_ServerToPlayer(player, "create_error_message", {message = "Звук на кулдауне. Осталось: " .. timeText})
CustomGameEventManager:Send_ServerToPlayer(player, "create_error_message", {message = "Sound on cooldown. Remaining: " .. timeText})
SoundSystemManager:getInstance():updateSoundCooldownInNetTables(data.PlayerID, soundIdForConfig, remaining)
end
____print(
+5 -5
View File
@@ -49,7 +49,7 @@ function LeaderboardServer.prototype.loadLeaderboardFromServer(self, playerId, l
local function ____catch(____error)
local player = PlayerResource:GetPlayer(playerId)
if player then
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Ошибка обработки данных"})
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Data processing error"})
end
end
local ____try, ____hasReturned, ____returnValue = pcall(function()
@@ -58,13 +58,13 @@ function LeaderboardServer.prototype.loadLeaderboardFromServer(self, playerId, l
return true
end
if result.StatusCode == 0 then
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Сервер недоступен"})
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Server unavailable"})
return true
end
if result.StatusCode >= 200 and result.StatusCode < 300 then
do
local function ____catch(decodeError)
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Ошибка парсинга JSON"})
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "JSON parsing error"})
end
local ____try, ____hasReturned = pcall(function()
local responseData = {json.decode(result.Body)}
@@ -89,7 +89,7 @@ function LeaderboardServer.prototype.loadLeaderboardFromServer(self, playerId, l
elseif __TS__ArrayIsArray(data) then
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {success = true, leaderboard = data, total = #data, board = board})
else
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Ошибка декодирования данных: leaderboard не найден"})
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Data decode error: leaderboard not found"})
end
else
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Ошибка декодирования данных: данные пусты"})
@@ -103,7 +103,7 @@ function LeaderboardServer.prototype.loadLeaderboardFromServer(self, playerId, l
CustomGameEventManager:Send_ServerToPlayer(
player,
"leaderboard_data",
{error = "Ошибка сервера: " .. tostring(result.StatusCode)}
{error = "Server error: " .. tostring(result.StatusCode)}
)
end
end)
+10 -10
View File
@@ -148,7 +148,7 @@ function MiniProfileServer.prototype.setupEventListeners(self)
local rowId = tonumber(tostring(event.row_id or 0)) or 0
local steamId = tostring(event.steam_id or "")
if matchId <= 0 then
CustomGameEventManager:Send_ServerToPlayer(requestingPlayer, "match_players_data", {error = "Некорректный ID матча", match_id = 0, players = {}})
CustomGameEventManager:Send_ServerToPlayer(requestingPlayer, "match_players_data", {error = "Invalid match ID", match_id = 0, players = {}})
return
end
self:loadMatchPlayersFromServer(requestingPlayer, matchId, rowId, steamId)
@@ -214,7 +214,7 @@ function MiniProfileServer.prototype.createPlayerProfile(self, playerId, steamId
end
self:loadPlayerProfileFromServer(playerId, steamId, playerName)
else
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Не удалось создать профиль", steam_id = steamId, player_name = playerName})
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Failed to create profile", steam_id = steamId, player_name = playerName})
end
end)
end
@@ -238,7 +238,7 @@ function MiniProfileServer.prototype.loadPlayerProfileFromServer(self, playerId,
local function ____catch(____error)
local player = PlayerResource:GetPlayer(playerId)
if player then
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Ошибка обработки данных", steam_id = steamId, player_name = playerName})
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Data processing error", steam_id = steamId, player_name = playerName})
end
end
local ____try, ____hasReturned, ____returnValue = pcall(function()
@@ -247,7 +247,7 @@ function MiniProfileServer.prototype.loadPlayerProfileFromServer(self, playerId,
return true
end
if result.StatusCode == 0 then
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Сервер недоступен", steam_id = steamId, player_name = playerName})
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Server unavailable", steam_id = steamId, player_name = playerName})
return true
end
if result.StatusCode >= 200 and result.StatusCode < 300 then
@@ -257,7 +257,7 @@ function MiniProfileServer.prototype.loadPlayerProfileFromServer(self, playerId,
nil,
"[MiniProfileServer] Ошибка обработки данных профиля: " .. tostring(e)
)
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Ошибка обработки данных профиля", steam_id = steamId, player_name = playerName})
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Profile data processing error", steam_id = steamId, player_name = playerName})
end
local ____try, ____hasReturned, ____returnValue = pcall(function()
local responseBodyStr = tostring(result.Body or "")
@@ -269,7 +269,7 @@ function MiniProfileServer.prototype.loadPlayerProfileFromServer(self, playerId,
nil,
"[MiniProfileServer] Ошибка JSON профиля: body_length=" .. tostring(string.len(responseBodyStr))
)
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Ошибка парсинга JSON", steam_id = steamId, player_name = playerName})
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "JSON parsing error", steam_id = steamId, player_name = playerName})
return true
end
local responseDataAny = responseData
@@ -415,7 +415,7 @@ function MiniProfileServer.prototype.loadPlayerProfileFromServer(self, playerId,
____print(nil, "[MiniProfileServer] Using object directly as data")
else
____print(nil, "[MiniProfileServer] Failed to decode response")
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Ошибка декодирования данных", steam_id = steamId, player_name = playerName})
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Data decode error", steam_id = steamId, player_name = playerName})
return true
end
if data then
@@ -439,7 +439,7 @@ function MiniProfileServer.prototype.loadPlayerProfileFromServer(self, playerId,
end
if not data or type(data) ~= "table" then
____print(nil, "[MiniProfileServer] ❌ Некорректный формат данных профиля (data is not object)")
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Некорректный формат данных профиля", steam_id = steamId, player_name = playerName})
CustomGameEventManager:Send_ServerToPlayer(player, "player_profile_data", {error = "Invalid profile data format", steam_id = steamId, player_name = playerName})
return true
end
____print(
@@ -720,7 +720,7 @@ function MiniProfileServer.prototype.loadPlayerProfileFromServer(self, playerId,
player,
"player_profile_data",
{
error = "Ошибка сервера: " .. tostring(result.StatusCode),
error = "Server error: " .. tostring(result.StatusCode),
steam_id = steamId,
player_name = playerName
}
@@ -1554,7 +1554,7 @@ function MiniProfileServer.prototype.loadMatchPlayersFromServer(self, player, ma
local tryRequest
tryRequest = function(____, index)
if index >= #endpoints then
CustomGameEventManager:Send_ServerToPlayer(player, "match_players_data", {error = "Не удалось загрузить участников матча", match_id = matchId, players = {}})
CustomGameEventManager:Send_ServerToPlayer(player, "match_players_data", {error = "Failed to load match participants", match_id = matchId, players = {}})
return
end
local request = CreateHTTPRequestScriptVM("GET", endpoints[index + 1])
+1 -1
View File
@@ -1605,7 +1605,7 @@ function StoreManager.prototype.handlePurchase(self, playerId, itemId, itemData,
end
local cardId = math.floor(parsedCardId)
if CARD_PURCHASABLE_BY_ID[cardId] == false then
self:sendPurchaseResult(playerId, false, "Эту карту нельзя купить")
self:sendPurchaseResult(playerId, false, "This card cannot be purchased")
return true
end
local maxCopies = self:getCardMaxCopies(cardId)
+1 -1
View File
@@ -1184,7 +1184,7 @@ function WaveManager.prototype.SpawnBossOnEnd(self, endSpawn, spawnPoints, homeP
if selectedBossUnit ~= "" then
CustomGameEventManager:Send_ServerToAllClients("boss_spawned", {bossName = selectedBossName, bossUnitName = selectedBossUnit})
____print(nil, ((((LOG_PREFIX .. " 👑 Выбран случайный босс: ") .. selectedBossUnit) .. " (") .. selectedBossName) .. ")")
GameRules:SendCustomMessage("<font color='#FF3333'>Босс вышел!</font>", 0, 0)
GameRules:SendCustomMessage("<font color='#FF3333'>Boss spawned!</font>", 0, 0)
end
do
local i = 0