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
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+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