diff --git a/project/assets/database/locales/server/en.json b/project/assets/database/locales/server/en.json index 444e5398..26ddcf7b 100644 --- a/project/assets/database/locales/server/en.json +++ b/project/assets/database/locales/server/en.json @@ -46,6 +46,9 @@ "bot-weapons_required_slot_missing_item": "Required slot '{{modSlot}}' on {{modName}} {{slotId}} was empty on {{botRole}}", "bot-item_missing_props_property": "Item {{itemTpl}} {{name}} is missing a _props property", "bot-unable_to_fill_camora_slot_mod_pool_empty": "Unable to fill weapon camora slot for {{weaponId}} {{weaponName}} mod pool for item was empty", + "bot-unable_to_edit_limits_of_unknown_map": "Unable to edit bot limits of map: %s as it cannot be found", + "bot-unable_to_find_loot_n_value_for_bot": "Unable to find loot N value for bot: %s, using scav n value instead", + "bot-unable_to_find_bot_in_cache": "Unable to find bot in cache with name: %s", "client_request": "[Client Request] %s", "customisation-item_already_purchased": "Clothing item {{itemId}} {{itemName}} already purchased", "customisation-unable_to_find_suit_by_id": "Unable to find trader suit offer with id: %s", @@ -93,6 +96,8 @@ "inventory-return_default_size": "Defaulting item %s to size 1x1", "inventory-item_missing_props_property": "Item tpl: {{itemTpl}} name: {{itemName}} is missing a props property, a size for it cannot be acquired", "inventory-get_item_size_item_not_found_by_tpl": "getSizeByInventoryItemHash() Item with tpl: %s not found", + "inventory-item_to_toggle_missing_upd": "Inventory item with _id: %s is missing a upd object, adding", + "inventory-unable_to_toggle_item_not_found": "Unable to toggle inventory item with id: %s, item not found", "item-durability_value_invalid_use_default": "getRepairableItemQualityValue() weapon tpl: %s durability value is invalid, defaulting to 1", "linux_use_priviledged_port_non_root": "Non-root processes cannot bind to ports below 1024", "location-containers_generated_success": "A total of %s static containers generated", @@ -104,7 +109,9 @@ "location-spawn_point_count_requested_vs_found": "{{requested}} spawnpoints were requested while {{found}} are available {{mapName}}", "location-unable_to_reparent_item": "createItem() failed, unable to reparent {{tpl}}, parentId: {{parentId}}", "location-unable_to_find_airdrop_drop_config_of_type": "Unable to find airdrop config settings for type: %s, falling back to drop type: mixed ", + "location-unable_to_fix_broken_waves_missing_base": "%s lacks a base json, skipping map wave fixes", "loot-item_missing_parentid": "Item: %s lacks a parentId value, unable to use item as loot", + "loot-non_item_picked_as_sealed_weapon_crate_reward": "Invalid weapon: %s, was picked as reward for sealed weapon crate, unable to create loot", "mod-send_bundle_url": "[BUNDLE]: %s", "modloader-checked": "checked", "modloader-checking_mod": "checking: %s", @@ -143,6 +150,7 @@ "port_already_in_use": "Port %s is already in use, check if the server is already running", "profile_saved": "Profile changes saved", "profile_save_callback_error": "Error while executing onBeforeSaveCallback: {{callback}}, {{error}}", + "profile-unable_to_find_profile_by_id_cannot_delete": "Unable to delete profile with id: %s, no profile with id found", "quest-compare_operator_unhandled": "loyaltyRequirementCheck() operator %s not handled, defaulting to false", "quest-item_not_found_in_inventory": "changeItemStack() Item with _id: %s not found in inventory", "quest-no_skill_found": "Skill %s not found", @@ -163,6 +171,11 @@ "ragfair-unable_to_purchase_0_count_item": "Unable to purchase item: %s with a count of 0", "ragfair-unable_to_place_offer_with_no_requirements": "Unable to place offer with no requirements", "ragfair-unable_to_find_locale_by_key": "Unable to find EFT locale with key: %s", + "ragfair-unable_to_adjust_stack_count_assort_not_found": "Trader: {traderId} flea offer: {{offerId}} could not have its stack count adjusted to match traders assort value (assort not found)", + "ragfair-unable_to_remove_offer_not_found_in_profile": "Unable to find offer: {{offerId}} in profile: {{profileId}} as offers is undefined, creating", + "ragfair-unable_to_find_item_price_for_item_in_flea_handbook": "Unable to find live-flea or handbook price for {{tplId}}, defaulting to 1, if this is a modded item contact the mod author", + "ragfair-unable_to_find_preset_with_id": "Unable to find preset with id: %s, using existing price of existing weapon base", + "ragfair-unable_to_remove_offer_doesnt_exist": "Unable to remove offer with id: %s as it cannot be found in flea market", "repeatable-accepted_repeatable_quest_not_found_in_active_quests": "Accepted a repeatable quest: %s which could not be found in the activeQuests array. Please report this bug", "repeatable-completion_quest_whitelist_too_small_or_blacklist_too_restrictive": "Generate Completion Quest: No items remain. Either Whitelist is too small or Blacklist too restrictive", "repeatable-difficulty_was_nan": "Repeatable Reward Generation: Difficulty was NaN. Setting to 1.", @@ -491,6 +504,7 @@ "pmcresponse-killer_plead_10": "Typical {{playerSide}} behaviour", "pmcresponse-killer_plead_11": "i need to kill {{playerSide}}, i hope you understand", "pmcresponse-killer_plead_12": "Does nobody in this stupid game have a gas analyser", + "pmcresponse-unable_to_find_key": "Unable to find PMC response pool, none exist for key: %s", "launcher-profile_standard": "Same as live, basic stash size (10x28), 500,000 roubles", "launcher-profile_leftbehind": "Same as Standard plus; larger stash size (10x38), extra equipment/items, 500 dollars", "launcher-profile_preparetoescape": "Same as Left Behind plus; larger stash size (10x48), extra equipment/items, higher starting reputation with traders, 250 euros", diff --git a/project/src/callbacks/MatchCallbacks.ts b/project/src/callbacks/MatchCallbacks.ts index 88b71f60..bd03757f 100644 --- a/project/src/callbacks/MatchCallbacks.ts +++ b/project/src/callbacks/MatchCallbacks.ts @@ -129,7 +129,7 @@ export class MatchCallbacks if (output === false) { - return this.httpResponse.getBody(null, 420, "Please play as PMC and go through the offline settings screen before pressing ready."); + return this.httpResponse.getBody(null, 420, "Please play as PMC and go through the offline settings screen before pressing ready"); } return this.httpResponse.getBody(output); diff --git a/project/src/controllers/GameController.ts b/project/src/controllers/GameController.ts index 154a5f1a..e3a7473e 100644 --- a/project/src/controllers/GameController.ts +++ b/project/src/controllers/GameController.ts @@ -186,7 +186,7 @@ export class GameController const map: ILocationData = mapsDb[mapId]; if (!map) { - this.logger.warning(`Unable to edit bot limits of map: ${mapId} as it cannot be found`); + this.logger.warning(this.localisationService.getText("bot-unable_to_edit_limits_of_unknown_map", mapId)); } for (const botToLimit of this.locationConfig.botTypeLimits[mapId]) @@ -428,7 +428,7 @@ export class GameController const location: ILocationData = this.databaseServer.getTables().locations[locationKey]; if (!location.base) { - this.logger.warning(`Map ${locationKey} lacks a base json, skipping map wave fixes`); + this.logger.warning(this.localisationService.getText("location-unable_to_fix_broken_waves_missing_base", locationKey)); continue; } diff --git a/project/src/controllers/InventoryController.ts b/project/src/controllers/InventoryController.ts index 14cf5ce6..995e8125 100644 --- a/project/src/controllers/InventoryController.ts +++ b/project/src/controllers/InventoryController.ts @@ -421,7 +421,7 @@ export class InventoryController { if (!itemToToggle.upd) { - this.logger.warning(`Item with _id: ${itemToToggle._id} is missing a upd object, adding`); + this.logger.warning(this.localisationService.getText("inventory-item_to_toggle_missing_upd", itemToToggle._id)); itemToToggle.upd = {}; } @@ -431,7 +431,7 @@ export class InventoryController } else { - this.logger.warning(`Unable to find inventory item with _id to toggle: ${body.item}`); + this.logger.warning(this.localisationService.getText("inventory-unable_to_toggle_item_not_found", body.item)); } return { diff --git a/project/src/controllers/ProfileController.ts b/project/src/controllers/ProfileController.ts index 8ac8961f..2d9e7a52 100644 --- a/project/src/controllers/ProfileController.ts +++ b/project/src/controllers/ProfileController.ts @@ -27,6 +27,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { EventOutputHolder } from "../routers/EventOutputHolder"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { HashUtil } from "../utils/HashUtil"; import { TimeUtil } from "../utils/TimeUtil"; @@ -42,6 +43,7 @@ export class ProfileController @inject("DatabaseServer") protected databaseServer: DatabaseServer, @inject("ItemHelper") protected itemHelper: ItemHelper, @inject("ProfileFixerService") protected profileFixerService: ProfileFixerService, + @inject("LocalisationService") protected localisationService: LocalisationService, @inject("PlayerScavGenerator") protected playerScavGenerator: PlayerScavGenerator, @inject("EventOutputHolder") protected eventOutputHolder: EventOutputHolder, @inject("TraderHelper") protected traderHelper: TraderHelper, @@ -210,7 +212,7 @@ export class ProfileController } else { - this.logger.warning(`Unable to delete profile with id: ${sessionID}, no profile with that id found`); + this.logger.warning(this.localisationService.getText("profile-unable_to_find_profile_by_id_cannot_delete", sessionID)); } } diff --git a/project/src/controllers/RagfairController.ts b/project/src/controllers/RagfairController.ts index bb89da3b..a4cd1714 100644 --- a/project/src/controllers/RagfairController.ts +++ b/project/src/controllers/RagfairController.ts @@ -257,7 +257,8 @@ export class RagfairController const assortPurchased = traderAssorts.find(x => x._id === offer._id); if (!assortPurchased) { - this.logger.warning(`Flea offer ${offer._id} could not have its stack count adjusted to match trader ${offer.user.id} value`); + this.logger.warning(this.localisationService.getText("ragfair-unable_to_adjust_stack_count_assort_not_found", {offerId: offer._id, traderId: offer.user.id})); + return; } @@ -551,13 +552,15 @@ export class RagfairController const offers = this.saveServer.getProfile(sessionID).characters.pmc.RagfairInfo.offers; if (!offers) { - this.logger.warning(`No offers found in profile ${sessionID}, unable to remove offer ${offerId}`); + this.logger.warning(this.localisationService.getText("ragfair-unable_to_remove_offer_not_found_in_profile", {profileId: sessionID, offerId: offerId})); + + this.saveServer.getProfile(sessionID).characters.pmc.RagfairInfo.offers = []; } const index = offers.findIndex(offer => offer._id === offerId); if (index === -1) { - this.logger.warning(this.localisationService.getText("ragfair-offer_not_found_in_profile", {offerId: offerId})); + this.logger.error(this.localisationService.getText("ragfair-offer_not_found_in_profile", {offerId: offerId})); return this.httpResponse.appendErrorToOutput(this.eventOutputHolder.getOutput(sessionID), this.localisationService.getText("ragfair-offer_not_found_in_profile_short")); } diff --git a/project/src/controllers/RepeatableQuestController.ts b/project/src/controllers/RepeatableQuestController.ts index f15d9d16..eed0df16 100644 --- a/project/src/controllers/RepeatableQuestController.ts +++ b/project/src/controllers/RepeatableQuestController.ts @@ -202,7 +202,7 @@ export class RepeatableQuestController lifeline++; if (lifeline > 10) { - this.logger.debug("We were stuck in repeatable quest generation. This should never happen. Please report."); + this.logger.debug("We were stuck in repeatable quest generation. This should never happen. Please report"); break; } } @@ -1233,7 +1233,7 @@ export class RepeatableQuestController lifeline++; if (lifeline > 10) { - this.logger.debug("We were stuck in repeatable quest generation. This should never happen. Please report."); + this.logger.debug("We were stuck in repeatable quest generation. This should never happen. Please report"); break; } } diff --git a/project/src/generators/BotLootGenerator.ts b/project/src/generators/BotLootGenerator.ts index 329ddcde..eecb6ebf 100644 --- a/project/src/generators/BotLootGenerator.ts +++ b/project/src/generators/BotLootGenerator.ts @@ -332,7 +332,7 @@ export class BotLootGenerator const result = this.botConfig.lootNValue[botRole]; if (!result) { - this.logger.warning(`Bot ${botRole} loot n value missing, using scav value instead`); + this.logger.warning(this.localisationService.getText("bot-unable_to_find_loot_n_value_for_bot", botRole)); return this.botConfig.lootNValue["scav"]; } diff --git a/project/src/generators/LootGenerator.ts b/project/src/generators/LootGenerator.ts index 14c1ca37..8b4b763c 100644 --- a/project/src/generators/LootGenerator.ts +++ b/project/src/generators/LootGenerator.ts @@ -273,7 +273,7 @@ export class LootGenerator const weaponDetailsDb = this.itemHelper.getItem(chosenWeaponTpl); if (!weaponDetailsDb[0]) { - this.logger.warning(`Non-item was picked as reward ${chosenWeaponTpl}, unable to continue`); + this.logger.error(this.localisationService.getText("loot-non_item_picked_as_sealed_weapon_crate_reward", chosenWeaponTpl)); return itemsToReturn; } diff --git a/project/src/helpers/RagfairOfferHelper.ts b/project/src/helpers/RagfairOfferHelper.ts index 0fcec77f..ca9eb755 100644 --- a/project/src/helpers/RagfairOfferHelper.ts +++ b/project/src/helpers/RagfairOfferHelper.ts @@ -187,7 +187,7 @@ export class RagfairOfferHelper // No trader assort data if (!assortData) { - this.logger.warning(`Unable to find trader ${offer.user.nickname} assort for item ${this.itemHelper.getItemName(offer.items[0]._tpl)} ${offer.items[0]._tpl}`); + this.logger.warning(`Unable to find trader: ${offer.user.nickname} assort for item: ${this.itemHelper.getItemName(offer.items[0]._tpl)} ${offer.items[0]._tpl}, cannot check if buy restriction reached`); return false; } diff --git a/project/src/services/MatchBotDetailsCacheService.ts b/project/src/services/MatchBotDetailsCacheService.ts index db05a241..9f0b4fc7 100644 --- a/project/src/services/MatchBotDetailsCacheService.ts +++ b/project/src/services/MatchBotDetailsCacheService.ts @@ -2,6 +2,7 @@ import { inject, injectable } from "tsyringe"; import { IBotBase } from "../models/eft/common/tables/IBotBase"; import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "./LocalisationService"; /** Cache bots in a dictionary, keyed by the bots name, keying by name isnt idea as its not unique but this is used by the post-raid system which doesnt have any bot ids, only name */ @@ -11,7 +12,8 @@ export class MatchBotDetailsCacheService protected botDetailsCache: Record = {}; constructor( - @inject("WinstonLogger") protected logger: ILogger + @inject("WinstonLogger") protected logger: ILogger, + @inject("LocalisationService") protected localisationService: LocalisationService ) {} @@ -42,7 +44,7 @@ export class MatchBotDetailsCacheService const botInCache = this.botDetailsCache[botName]; if (!botInCache) { - this.logger.warning(`Bot not found in cache with name ${botName}`); + this.logger.warning(this.localisationService.getText("", botName)); } return botInCache; diff --git a/project/src/services/PmcChatResponseService.ts b/project/src/services/PmcChatResponseService.ts index c7d68884..ed53481b 100644 --- a/project/src/services/PmcChatResponseService.ts +++ b/project/src/services/PmcChatResponseService.ts @@ -121,7 +121,7 @@ export class PmcChatResponseService const possibleResponseLocaleKeys = this.getResponseLocaleKeys(responseType, isVictim); if (possibleResponseLocaleKeys.length === 0) { - this.logger.warning(`No pmc response keys found for type: ${responseType}`); + this.logger.warning(this.localisationService.getText("pmcresponse-unable_to_find_key", responseType)); return undefined; } diff --git a/project/src/services/ProfileFixerService.ts b/project/src/services/ProfileFixerService.ts index 1d0043a7..4428807f 100644 --- a/project/src/services/ProfileFixerService.ts +++ b/project/src/services/ProfileFixerService.ts @@ -206,7 +206,7 @@ export class ProfileFixerService const trader = pmcProfile.TradersInfo[traderId]; if (trader && trader.salesSum === null) { - this.logger.warning(`trader ${traderId} has a null salesSum value, resetting to 0.`); + this.logger.warning(`trader ${traderId} has a null salesSum value, resetting to 0`); trader.salesSum = 0; } } diff --git a/project/src/services/RagfairOfferService.ts b/project/src/services/RagfairOfferService.ts index 2dfcc459..e2b9a218 100644 --- a/project/src/services/RagfairOfferService.ts +++ b/project/src/services/RagfairOfferService.ts @@ -118,7 +118,7 @@ export class RagfairOfferService const offer = this.ragfairOfferHandler.getOfferById(offerId); if (!offer) { - this.logger.warning(`Unable to remove offer with offer id: ${offerId} as it cannot be found in flea market`); + this.logger.warning(this.localisationService.getText("ragfair-unable_to_remove_offer_doesnt_exist", offerId)); return; } diff --git a/project/src/services/RagfairPriceService.ts b/project/src/services/RagfairPriceService.ts index b0fe9551..315efcc5 100644 --- a/project/src/services/RagfairPriceService.ts +++ b/project/src/services/RagfairPriceService.ts @@ -16,6 +16,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { RandomUtil } from "../utils/RandomUtil"; +import { LocalisationService } from "./LocalisationService"; /** * Stores flea prices for items as well as methods to interact with them @@ -40,6 +41,7 @@ export class RagfairPriceService implements OnLoad @inject("PresetHelper") protected presetHelper: PresetHelper, @inject("TraderHelper") protected traderHelper: TraderHelper, @inject("RandomUtil") protected randomUtil: RandomUtil, + @inject("LocalisationService") protected localisationService: LocalisationService, @inject("ConfigServer") protected configServer: ConfigServer ) { @@ -123,7 +125,7 @@ export class RagfairPriceService implements OnLoad let itemPrice = this.getDynamicPriceForItem(tplId) || this.getStaticPriceForItem(tplId); if (!itemPrice) { - this.logger.warning(`Missing live flea or handbook item price for ${tplId}, defaulting to 1, if this is a modded item contact the mods author`); + this.logger.warning(this.localisationService.getText("ragfair-unable_to_find_item_price_for_item_in_flea_handbook", tplId)); } // If no price in dynamic/static, set to 1 @@ -327,7 +329,7 @@ export class RagfairPriceService implements OnLoad * @param item base weapon * @param items weapon plus mods * @param existingPrice price of existing base weapon - * @returns + * @returns price of weapon in roubles */ protected getWeaponPresetPrice(item: Item, items: Item[], existingPrice: number): number { @@ -336,7 +338,7 @@ export class RagfairPriceService implements OnLoad const presets = this.presetHelper.getPresets(item._tpl); if (!presets || presets.length === 0) { - this.logger.warning(`Item Id: ${item._tpl} has no presets`); + this.logger.warning(this.localisationService.getText("ragfair-unable_to_find_preset_with_id", item._tpl)); return existingPrice; }