From 4a08ee40be5f1b493f3e31cf557cca48a495910c Mon Sep 17 00:00:00 2001 From: Ctone Cheng Date: Sun, 3 Apr 2022 23:56:02 +0800 Subject: [PATCH 001/274] Update chinese.json First edition. There may be some errors. --- locale/chinese.json | 738 +++++++++++++++++++++++--------------------- 1 file changed, 391 insertions(+), 347 deletions(-) diff --git a/locale/chinese.json b/locale/chinese.json index 57eab3d4..8619d09e 100644 --- a/locale/chinese.json +++ b/locale/chinese.json @@ -1,395 +1,439 @@ { - "TranslationProvidedBy": "Renzuka Ctone", - "LocaleEnglishName": "Chinese", - "LocaleNativeName": "Chinese", - "LocaleOffer": "This server is available in English. Use {1} to use it.", - "LocaleChanged1": "Your language is now set to {1}", - "LocaleChanged2": "The server will now display messages in {1}", - "LocaleChangedNote": "This does not change messages from other players", - "AccentsListHeader": "Accents", - "HeaderHelpMainList": "Help Categories", - "AccentNotFound": "Accent not found", - "AccentSet": "You set your accent to {1}", - "AnimationNotFound": "That animation doesn't exist", - "AnimationCommandTip": "Use {1} to see a list of valid animations", - "AnimationInvalidDistance": "The distance must be between 0 and 3", - "AnimationStopCommandTip": "Use {1} to stop your animation", - "CantBanClient": "You cannot ban this person", - "PlayerAccountBanned": "{1} has been account banned", - "ClanNotFound": "Clan not found", - "ClanNameTaken": "A clan with that name already exists", - "PlayerNotFound": "Player not found", - "ClanCantRemoveRanks": "You can't remove clan ranks", - "ClanCantAddRanks": "You can't add clan ranks", - "ClanRankNotFound": "Clan rank not found", - "ClanCantChangeMemberTag": "You can not change clan member's tags", - "ClanPlayerNotInSameClan": "That player is not in your clan", - "ClanCantChangeRankLevel": "You can not change clan rank's level", - "ClanCantChangeRankTag": "You can not change clan rank's tags", - "NameNotRegistered": "Your name is not registered! Use {1} to make an account.", - "AutomaticLoginIPToggle": "Automatic login by IP is now {1}", - "CouldNotRegisterAccount": "There was a problem creating your account. Please contact an admin.", - "RandomTipsToggle": "Random tips are now {1}", - "ActionTipsToggle": "Action tips are now {1}", - "AutoSpawnLastCharToggle": "Automatic spawn as last used character is {1}", - "AccountGUISettingToggle": "GUI is now {1}", - "On": "On", - "Off": "Off", - "Yes": "Yes", - "No": "No", - "True": "True", - "False": "False", - "Locked": "Locked", - "Unlocked": "Unlocked", - "PasswordNotGoodEnough": "The new password must meet the requirements!", - "PasswordNeedsBase": "Passwords must have at least {1}", - "PasswordNeedsCapitals": "{1} capital letters", - "PasswordNeedsNumbers": "{1} numbers", - "PasswordNeedsSymbols": "{1} symbols", - "PasswordsDontMatch": "The new password and confirm new password aren't the same!", - "PasswordChanged": "Your password has been changed!", - "AutoLoggedInIP": "You have been automatically logged in by IP!", - "WelcomeBack": "Welcome back to {1}, {2}! Please {3} to continue.", - "WelcomeNewPlayer": "Welcome to {1}, {2}! Please {3} to play.", - "InvalidPlayer": "Player not found!", - "InvalidBusiness": "Business not found!", - "InvalidHouse": "House not found!", - "InvalidVehicle": "Vehicle not found!", - "InvalidClan": "Clan not found!", - "InvalidClanRank": "Clan rank not found!", - "InvalidJob": "Job not found!", - "InvalidItem": "Item not found!", - "InvalidItemType": "Item type not found!", - "InvalidRadioStation": "Radio station not found!", - "InvalidGate": "Gate not found!", - "EntersProperty": "opens the door and enters the {1}", - "ExitsProperty": "opens the door and exits the {1}", - "EnterExitPropertyDoorLocked": "tries to open the {1} door but fails because it's locked", - "PropertyNoInterior": "This {1} does not have an interior, but you can still use commands at the door icon.", - "NoBusinessWithItemType": "There is no business with that item available", - "HeaderKeyBinds": "Key Binds", - "HeaderAccountHelp": "Account Help", - "HeaderVehicleHelp": "Vehicle Help", - "HeaderVehicleDealershipHelp": "Vehicle Dealership Help", - "HeaderJobHelp": "Job Help", - "HeaderChatHelp": "Chat Help", - "HeaderServerRules": "Server Rules", - "HeaderWebsiteInfo": "Website", + "TranslationProvidedBy": "Renzuka_Ctone", + "LocaleEnglishName": "Simplified Chinese", + "LocaleNativeName": "简体中文", + "LocaleOffer": "本服务器有可用的中文翻译版本,使用 {1} 以启用。", + "LocaleChanged1": "语言已设定为 {1}", + "LocaleChanged2": "服务器现在将以 {1} 显示消息。", + "LocaleChangedNote": "这将不会影响到来自其他玩家的消息", + "AccentsListHeader": "口音", + "HeaderHelpMainList": "帮助类别", + "AccentNotFound": "口音不存在", + "AccentSet": " 口音已设置为 {1}", + "AnimationNotFound": "该动作不存在", + "AnimationCommandTip": "使用 {1} 以查看可用动作列表", + "AnimationInvalidDistance": "范围必须在 0 到 3 之间", + "AnimationStopCommandTip": "使用 {1} 以停止当前动作", + "CantBanClient": "你无法封禁该玩家", + "PlayerAccountBanned": "{1} 的账号已被封禁", + "ClanNotFound": "帮派不存在", + "ClanNameTaken": "该帮派名称已被占用", + "PlayerNotFound": "玩家不存在", + "ClanCantRemoveRanks": "无法清除帮派等级", + "ClanCantAddRanks": "无法增加帮派等级", + "ClanRankNotFound": "帮派等级不存在", + "ClanCantChangeMemberTag": "你无法更改帮派成员的标签", + "ClanPlayerNotInSameClan": "该玩家并不属于你的帮派", + "ClanCantChangeRankLevel": "你无法改变帮派等级", + "ClanCantChangeRankTag": "你无法改变帮派标签", + "NameNotRegistered": "你的游戏名尚未注册!使用 {1} 以创建一个新账户。", + "AutomaticLoginIPToggle": "通过 IP 自动登录功能 现已 {1}", + "CouldNotRegisterAccount": "在创建你的账户时遇到一些问题,请与管理员联系。", + "RandomTipsToggle": "随机提示信息现已 {1}", + "ActionTipsToggle": "操作帮助现已 {1}", + "AutoSpawnLastCharToggle": "上次使用的角色 {1} 已自动复活。", + "AccountGUISettingToggle": "GUI 现已 {1}", + "On": "开启", + "Off": "关闭", + "Yes": "是", + "No": "否", + "True": "真", + "False": "假", + "Locked": "锁定", + "Unlocked": "未锁定", + "PasswordNotGoodEnough": "新密码必须符合要求!", + "PasswordNeedsBase": "密码至少需要 {1}", + "PasswordNeedsCapitals": "{1} 大写字母", + "PasswordNeedsNumbers": "{1} 数字", + "PasswordNeedsSymbols": "{1} 符号", + "PasswordsDontMatch": "新密码和确认密码不一致!", + "PasswordChanged": "已成功更改你的密码!", + "AutoLoggedInIP": "已通过 IP 自动登录!", + "WelcomeBack": "欢迎回到 {1}, {2}! 请 {3} 以继续。", + "WelcomeNewPlayer": "欢迎来到 {1}, {2}! 请 {3} 以开始游戏。", + "InvalidPlayer": "玩家不存在!", + "InvalidBusiness": "企业不存在!", + "InvalidHouse": "住宅不存在!", + "InvalidVehicle": "载具不存在!", + "InvalidClan": "帮派不存在!", + "InvalidClanRank": "帮派等级不存在!", + "InvalidJob": "职业不存在", + "InvalidItem": "物品不存在!", + "InvalidItemType": "物品种类不存在!", + "InvalidRadioStation": "电台不存在!", + "InvalidGate": "大门不存在!", + "EntersProperty": "开门并进入 {1}", + "ExitsProperty": "开门并退出 {1}", + "EnterExitPropertyDoorLocked": "试图打开 {1} 之门,却发现已上锁。", + "PropertyNoInterior": "{1} 暂无内部场景,但你仍可以在大门图标上使用相关指令。", + "NoBusinessWithItemType": "暂无可用项目的企业", + "HeaderKeyBinds": "快捷键设置", + "HeaderAccountHelp": "账户帮助", + "HeaderVehicleHelp": "载具帮助", + "HeaderVehicleDealershipHelp": "汽车经销商帮助 ", + "HeaderJobHelp": "职业帮助", + "HeaderChatHelp": "聊天帮助", + "HeaderServerRules": "服务器规则", + "HeaderWebsiteInfo": "官网", "HeaderDiscordInfo": "Discord", - "HeaderAnimationsList": "Animation List", - "HeaderPayAndSprayHelp": "Pay and Spray Help", - "HeaderAmmunationHelp": "Ammunation Help", - "HeaderVehicleTuneupHelp": "Vehicle Tune Help", - "HeaderBindableKeysHelp": "Bindable Keys", - "HeaderSkinHelp": "Clothes/Skin Help", - "HeaderBusinessHelp": "Business Help", - "HeaderClanHelp": "Clan Help", - "HeaderPlayerVehiclesList": "Player Vehicles ({1})", - "HeaderPlayerBusinessesList": "Player Businesses ({1})", - "HeaderClansList": "Clan List", - "HeaderAdminsList": "Admin List", - "HeaderBadgeInfo": "Badge Information", - "HeaderAccentsList": "Accent List", - "HeaderPlayerInfo": "Player Information ({1})", - "HeaderWealthandTaxHelp": "Wealth and Tax Information", - "HeaderCommandInfo": "Command Information ({1})", - "HeaderRadioHelp": "Radio Help", - "HeaderRadioStationsList": "Radio Stations", - "HeaderKeyBindsList": "Key Binds List", - "RadioVolumeChanged": "{1} You changed your streaming radio volume to {2}%", - "VolumeLevelNotNumber": "The volume level must be a number", - "RadioStationLocationInvalid": "You must be in a vehicle, house, or business or have a personal device to change the station!", - "ActionBusinessRadioStationChange": "changes the business radio station to {1} ({2})", - "ActionHouseRadioStationChange": "changes the house radio station to {1} ({2})", - "ActionVehicleRadioStationChange": "changes the vehicle radio station to {1} ({2})", - "ActionItemRadioStationChange": "changes the {1}'s station to {2} ({3})", - "RandomVehicleCommandsDisabled": "This is a random traffic vehicle and commands can't be used for it.", - "HouseDoorLock": "House {1} {2}!", - "BusinessDoorLock": "Business {1} {2}!", - "ServerGameModeRestarting": "The server game mode is restarting!", - "HeaderSelfItemList": "Your Inventory", - "HeaderPlayerItemList": "Player Inventory ({1})", - "HeaderHouseItemList": "House Inventory", - "HeaderBusinessFloorItemList": "Business Inventory (For Sale)", - "HeaderBusinessStorageItemList": "Business Inventory (Storage)", - "HeaderItemItemList": "{1}'s Inventory", - "ItemSlotNotNumber": "The item slot must be a number", - "ItemSlotMustBeBetween": "The item slot must be between {1} and {2}!", - "UseItemBugged": "The item you're trying to use is bugged. A bug report has been sent to the server developers.", - "PickupItemBugged": "The item you're trying to pickup is bugged. A bug report has been sent to the server developers.", - "DropItemBugged": "The item you're trying to drop is bugged. A bug report has been sent to the server developers.", - "HandsBusy": "Your hands are busy", - "CantUseItemInSkinChange": "You can't use an item while customizing your appearance", - "CantDropItemInSkinChange": "You can't drop an item while customizing your appearance", - "CantPickupItemInSkinChange": "You can't pickup an item while customizing your appearance", - "CantSwitchItemInSkinChange": "You can't switch an item while customizing your appearance", - "CantGiveItemInSkinChange": "You can't give an item while customizing your appearance", - "CantTakeItemInSkinChange": "You can't take an item while customizing your appearance", - "ItemUnequippableNoAmmo": "The {1} in slot {2} has no ammo, and can't be equipped!", - "NoSpaceSelfInventory": "You don't have any more space in your inventory", - "Business": "business", - "House": "house", - "Clan": "clan", - "Vehicle": "vehicle", - "Item": "item", - "ItemType": "item type", - "Gate": "gate", - "Door": "door", - "ClanRank": "clan rank", - "JobRank": "job rank", - "RadioStation": "radio station", + "HeaderAnimationsList": "动作列表", + "HeaderPayAndSprayHelp": "有偿喷漆帮助", + "HeaderAmmunationHelp": "弹药帮助", + "HeaderVehicleTuneupHelp": "载具改装帮助", + "HeaderBindableKeysHelp": "可绑定的按键", + "HeaderSkinHelp": "服装/皮肤帮助", + "HeaderBusinessHelp": "企业帮助", + "HeaderClanHelp": "帮派帮助", + "HeaderPlayerVehiclesList": "玩家载具 ({1})", + "HeaderPlayerBusinessesList": "玩家企业 ({1})", + "HeaderClansList": "帮派列表", + "HeaderAdminsList": "管理员列表", + "HeaderBadgeInfo": "荣誉信息", + "HeaderAccentsList": "口音列表", + "HeaderPlayerInfo": "玩家信息 ({1})", + "HeaderWealthandTaxHelp": "资产与税收帮助", + "HeaderCommandInfo": "指令帮助 ({1})", + "HeaderRadioHelp": "电台帮助", + "HeaderRadioStationsList": "电台", + "HeaderKeyBindsList": "按键绑定列表", + "RadioVolumeChanged": "{1} 已将电台音量调整为 {2}%", + "VolumeLevelNotNumber": "确保输入的音量大小为有效数值", + "RadioStationLocationInvalid": "你必须在车辆、住宅或企业中,或拥有个人设备才能更改电台!", + "ActionBusinessRadioStationChange": "企业电台已设置为 {1} ({2})", + "ActionHouseRadioStationChange": "住宅电台已设置为 {1} ({2})", + "ActionVehicleRadioStationChange": "载具电台已设置为 {1} ({2})", + "ActionItemRadioStationChange": "{1} 的电台已设置为 {2} ({3})", + "RandomVehicleCommandsDisabled": "这是一辆随机刷出的街车,无法对其使用指令。", + "HouseDoorLock": "住宅 {1} {2}!", + "BusinessDoorLock": "企业 {1} {2}!", + "ServerGameModeRestarting": "游戏模式正在重启!", + "HeaderSelfItemList": "你的库存", + "HeaderPlayerItemList": "玩家库存 ({1})", + "HeaderHouseItemList": "住宅库存", + "HeaderBusinessFloorItemList": "企业库存 (供售)", + "HeaderBusinessStorageItemList": "企业库存 (暂存)", + "HeaderItemItemList": "{1} 的库存", + "ItemSlotNotNumber": "物体槽位必须为整数", + "ItemSlotMustBeBetween": "物体槽位应在 {1} 与 {2} 之间!", + "UseItemBugged": "尝试操作的物品出现错误!错误报告已发送给服务器开发人员。", + "PickupItemBugged": "尝试拾取的物品出现错误!错误报告已发送给服务器开发人员。", + "DropItemBugged": "尝试丢弃的物品出现错误!错误报告已发送给服务器开发人员。", + "HandsBusy": "操作繁忙", + "CantUseItemInSkinChange": "自定义外观时无法使用该物品", + "CantDropItemInSkinChange": "自定义外观时无法丢弃该物品", + "CantPickupItemInSkinChange": "自定义外观时无法拾取物品", + "CantSwitchItemInSkinChange": "自定义外观时无法切换物品", + "CantGiveItemInSkinChange": "自定义外观时无法赠送物品", + "CantTakeItemInSkinChange": "自定义外观时无法取出物品", + "ItemUnequippableNoAmmo": "槽位 {2} 中 {1} 弹药耗尽,无法装备!", + "NoSpaceSelfInventory": "库存已无更多空间", + "Business": "企业", + "House": "住宅", + "Clan": "帮派", + "Vehicle": "载具", + "Item": "物品", + "ItemType": "物品种类", + "Gate": "大门", + "Door": "门", + "ClanRank": "帮派等级", + "JobRank": "职业等级", + "RadioStation": "电台", "Months": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" + "一月", + "二月", + "三月", + "四月", + "五月", + "六月", + "七月", + "八月", + "九月", + "十月", + "十一月", + "十二月" ], "WeekDays": [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" + "周日", + "周一", + "周二", + "周三", + "周四", + "周五", + "周六" ], "CardinalDirections": [ - "North", - "Northeast", - "East", - "Southeast", - "South", - "Southwest", - "West", - "Northwest" + "北", + "东北", + "东", + "东南", + "南", + "西南", + "西", + "西北" ], "NewPlayerReadyToPlay": [ - "You have been given some cash. Use {1} to find places to buy items.", - "If you need money, jobs are the yellow dots on the radar.", - "For a car, visit the car dealership. You can also use a rental vehicle near spawn or take the train", - "Be sure to read the {1} and use {2} for info." + "你得到了一些现金,使用 {1} 以找到买东西的地方。", + "赚钱靠劳动,求职请前往雷达上的小黄点。", + "买车可以到汽车经销店,你也可以在出生点附近租车或者直接乘火车。", + "确保已阅读 {1},使用 {2} 以获取相关信息。" ], - "YourCurrentVehicleDeleted": "The vehicle you were in was deleted.", - "Distance": "Distance", - "Meters": "Meters", - "Feet": "Feet", - "Kilometers": "Kilometers", - "Miles": "Miles", - "MustBeVehicleDriver": "You must be the driver of the vehicle!", - "PlayerJoinedServer": "{1} has joined the game from {1}!", - "PlayerLeftServer": "{1} has left the game! ({1})", + "YourCurrentVehicleDeleted": "你当前乘坐的车辆已被删除。", + "Distance": "距离", + "Meters": "米", + "Feet": "英尺", + "Kilometers": "公里", + "Miles": "英里", + "MustBeVehicleDriver": "你并不是主驾驶!", + "PlayerJoinedServer": "{1} 加入游戏。来自:{1}", + "PlayerLeftServer": "{1} 退出游戏! ({1})", "DisconnectReasons": [ - "Lost Connection", - "Disconnected", - "Unsupported Client", - "Wrong Game", - "Incorrect Password", - "Unsupported Executable", - "Disconnected", - "Banned", - "Failed", - "Invalid Name", - "Crashed" + "失去连接", + "断开连接", + "不支持的客户端", + "游戏错误", + "密码错误", + "不支持的游戏主程序", + "断开连接", + "已被封禁", + "连接失败", + "无效的游戏名", + "客户端崩溃" ], - "TakeItemFromHouse": "takes a {1} from the house", - "TakeItemFromBusinessStorage": "takes a {1} from the business storage", - "TakeItemFromBusiness": "takes a {1} from the business", - "TakeItemFromItem": "takes a {1} from the {2}", - "TakeItemFromVehicleTrunk": "takes a {1} from the trunk", - "TakeItemFromVehicleDash": "takes a {1} from the glove compartment", - "JobEquipmentInventoryKeyBindTip": "The job equipment is in your inventory. Press {1} to see them.", - "JobEquipmentInventoryCommandTip": "The job equipment is in your inventory. Use {1} to see them.", + "TakeItemFromHouse": "从住宅处拿到 {1}", + "TakeItemFromBusinessStorage": "从企业仓库拿到 {1}", + "TakeItemFromBusiness": "从企业处拿到 {1}", + "TakeItemFromItem": "从 {2} 处拿到 {1}", + "TakeItemFromVehicleTrunk": "从后备箱中取出 {1}", + "TakeItemFromVehicleDash": "从杂物箱中取出 {1}", + "JobEquipmentInventoryKeyBindTip": "工作设备在你的仓库里,按下 {1} 以查看。", + "JobEquipmentInventoryCommandTip": "工作设备在你的仓库里,使用 {1} 以查看。", "AccountHelp": [ - "Do NOT share your password with anybody else. {1} staff will never ask you for your password", - "Use {1} to change your password, and {2} if you forgot it", - "Some settings you can use: {1}" + "请不要将密码分享给任何人,且{1} 工作人员不会询问你的密码。", + "使用 {1} 以更改密码,若遗忘密码请使用 {2} 。", + "可用设定:{1}" ], "VehicleHelp": [ - "Your personal vehicles will save wherever you or somebody else leaves them!", - "Visit dealerships to buy new vehicles (Use {1} for more information)", - "Some commands: {1}", - "Visit a mechanic garage to repair, colour, and tune up your car! {1} for info" + "你的私人车辆将会在离开车辆时自动保存!", + "前往汽车经销商购买新车 (使用 {1} 获取更多信息)", + "相关指令:{1}", + "去修理厂修理、喷漆和改装你的汽车! 使用 {1} 获取相关信息。" ], "VehicleDealershipHelp": [ - "Visit a vehicle dealer to buy new vehicles. Use {1} to find one.", - "At the dealer, enter a car you want to buy, and the price will be shown to you", - "If you want to buy the vehicle, use {1} and you will be given keys to test drive it around the parking lot.", - "Drive away from the dealership with the new vehicle to confirm the purchase." + "前往汽车经销商购买新车,使用 {1} 可以找一家。", + "在经销商处进入你希望购买的车辆,对应价格将会自动显示。", + "确定车辆后使用 {1},即可开始试驾。", + "驾驶车辆离开经销商以确认购买。" ], "JobHelp": [ - "Visit job locations to get a job and earn money. Look for yellow spots on the map", - "At a job location, use {1} to get the job. Use {2} to quit your job", - "Use {1} to begin working. You can also get a job {2} and {3}", - "Most job vehicles are locked. Use {1} near one to enter it.", - "When entering a job vehicle, information on how to do the job will be shown to you." + "地图上的黄点为求职处,你可以在那里找工作挣大钱。", + "在求职处使用 {1} 以获得工作,不想干了就使用 {2} 跑路。", + "使用 {1} 即开始工作,你也可以在 {2} 与 {3} 中获得工作。", + "工作专用车一般都是锁着的,在其旁边使用 {1} 即可进入。", + "进入专用车时,将向您显示有关如何执行工作的信息。" ], "ChatHelp": [ - "There are two main types of chat: out-of-character (OOC) and in-character (IC)", - "Mixing these two types is not proper roleplay. See {1} for info.", - "Some chat commands: {1}", - "Some have shorter names available ({1} to talk, {2} to shout, etc)" + "聊天方式主要有两种:本我意识 (OOC 即 out-of-character) 和 角色意识 (IC 即 in-character)", + "在玩角色扮演的时候最好不要混用两种聊天方式,查看 {1} 以获取更多信息。", + "聊天指令:{1}", + "某些玩家有可用的更简短的名称 ({1} 用以正常交流, {2} 用以喊话等)" ], "ServerRulesHelp": [ - "Unrealistic actions (powergaming) are not allowed. You aren't superman.", - "No terrorist or terrorism roleplay is allowed.", - "Always follow instructions given by moderators and admins.", - "Do not mix the chats (metagaming). You can't use info in IC that was received OOC", - "Keep English in main chats. If you aren't good at English, use {1}" + "不允许不切实际的行为 (powergaming),你拯救不了世界。", + "不允许恐怖分子或恐怖主义式角色扮演。", + "请始终遵循版主和管理员的指示。", + "不建议混合式聊天 (metagaming), 你不能在IC中使用收到OOC的信息。", + "请使用英语与其他玩家进行交流,不大擅长英语的话可以试试 {1}" ], "AnimationHelp": [ - "Animations allow you to enhance roleplay with visual actions", - "Use {1} or {2} with a name to use an animation.", - "To see a list of animations, use {1}" + "做出虚拟动作可以提升你角色扮演的游戏体验。", + "使用 {1} 或 {2} + 动作名称 以做出一个动作。", + "要查看动作列表,使用 {1}" ], "WeaponHelp": [ - "Visit an gun store to buy weapons. Use {1} to find one.", - "Buying a weapon requires a weapon license.", - "Weapon licenses are managed by the police department. Apply there to get one.", - "Weapons can also be purchased illegally from some businesses, weapon dealers, and clans." + "前往枪店购买武器,使用 {1} 可以找一家。", + "购买武器是需要武器许可证的。", + "而武器许可证由警察局管理,在那里申请就可以办到一张。", + "武器也可以从一些企业、武器经销商和帮派那里非法购买。" ], "SkinHelp": [ - "At a clothing store, use {1} to purchase clothes", - "When you have a clothing item, equip and use it like any other item to show the skin selection (check {1} to learn how to use items)", - "Some skins are restricted to jobs, clans, or for other reasons." + "在服装店里使用 {1} 即可买到衣服", + "当你拥有可穿戴式物品时,像其它物品一样直接装备即可。(查看 {1} 以了解如何使用物品)", + "某些服装将因工作、帮派或其它原因而受到限制。" ], "KeyBindHelp": [ - "You can set your own key binds. Use {1} to see your binded keys.", - "Use {1} to add a new keybind and {2} to remove one.", - "Default keys are: {1} for vehicle engine, {1} for lights, and {3} for lock/unlock", - "Press {1} to see your items and {2} to equip an item or {3} to unequip all.", - "Press {1} to use the item you're holding, press {2} to drop it, or press {3} to pickup an item from the ground." + "你可以自定义快捷键,使用 {1} 以查看已绑定的按键。", + "使用 {1} 以新增快捷键,{2} 以移除。", + "默认按键如下: {1} 发动引擎,{2} 车灯开关,{3} 锁车/解锁", + "按下 {1} 查看你的物品,{2} 装备选定物品,{3} 卸下所有物品", + "按下 {1} 使用当前物品,{2} 丢弃当前物品,{3} 拾取地面物品" ], "BusinessHelp": [ - "Use {1} to purchase items or {2} to see a list of what's for sale at any business", - "Businesses are shown with blue names above the icon at their entrance.", - "Business owner commands: {1}", - "A new car for sale will appear when you drive away from the dealer." + "使用 {1} 以购买物品,或者使用 {2} 以查看任意企业的待售物品列表。", + "企业名称以蓝色字体显示在图标上方。", + "企业主可用的指令:{1}", + "一辆待售的新车会在你开车离开经销商(即确认购买)后出现。" ], "ClanHelp": [ - "Ask an administrator to create a clan (Similar to factions/groups/families)", - "Clan owners have full control over their clan once it's created", - "Clan commands: {1}", - "More clan commands: {1}" + "请求管理员以创建一个属于你自己的帮派 (类似于派系/团体/家庭)", + "帮派创建成功后,帮主将拥有其所有控制权。", + "帮派指令:{1}", + "更多帮派指令:{1}" ], "RadioStationHelp": [ - "Use {1} to set the station for your vehicle, house, or business", - "Use {2} to see a list of stations", - "You can change your radio streaming volume using {1} with 0-100 as the percent" + "使用 {1} 为你的车辆/住宅/企业设置电台", + "使用 {2} 以查看电台列表", + "你可以使用 {1} 来改变电台音量大小。(0-100%)" ], "WealthAndTaxHelp": [ - "Your taxes on payday are {1} percent of your calculated wealth.", - "Your calculated wealth is a total sum based on how many vehicles, houses, and businesses you have.", - "Each vehicle is {1}, each house is {2}, and each business is {3}", - "Use {1} to see your current wealth, and {2} to see how much you'll pay in tax each payday" + "发薪日那天需要缴税,而税款是你计算财富的 {1}%.", + "计算财富是基于你所拥有的车辆、住宅和企业的总和。", + "{1} 每辆车,{2} 每栋房,{3} 每个企业。", + "使用 {1} 以查看你的当前财富,{2} 以查看发薪日当天你应当缴纳的税款。" ], - "MustBeInAVehicle": "You need to be in a vehicle!", - "MustBeInOrNearVehicle": "You need to be in or near a vehicle!", - "MustBeInVehicleFrontSeat": "You need to be in the vehicle front seats!", - "MustBeInVehicleDriverSeat": "You need to be the driver!", - "DontHaveVehicleKey": "You don't have a key for this vehicle!", - "NoGateAccess": "You don't have access to this gate!", - "GateBroken": "This gate is broken!", - "GateHacked": "The gate does not respond!", - "RadioJammed": "You hear only static from the radio.", - "VehicleNotForSale": "This vehicle is not for sale!", - "VehicleNotForRent": "This vehicle is not for rent!", - "BusinessNotForSale": "This business is not for sale!", - "BusinessNotForRent": "This business is not for rent!", - "HouseNotForSale": "This house is not for sale!", - "HouseNotForRent": "This house is not for rent!", - "DealershipPurchaseTestDrive": "Drive the vehicle away from the dealership to buy it, or get out to cancel.", - "DealershipPurchaseExitedVehicle": "You canceled the vehicle purchase by exiting the vehicle!", - "VehiclePurchaseComplete": "This vehicle is now yours! It will save wherever you leave it.", - "VehiclePurchaseNotEnoughMoney": "You don't have enough money to buy this vehicle!", - "HousePurchaseNotEnoughMoney": "You don't have enough money to buy this house!", - "BusinessPurchaseNotEnoughMoney": "You don't have enough money to buy this business!", + "MustBeInAVehicle": "你必须先坐在一辆车上!", + "MustBeInOrNearVehicle": "必须要有辆车在你旁边,或者你坐上那辆车!", + "MustBeInVehicleFrontSeat": "你必须坐在车辆前排座椅上!", + "MustBeInVehicleDriverSeat": "你必须是车辆主驾驶!", + "DontHaveVehicleKey": "你并没有这车的钥匙!", + "NoGateAccess": "你无法进入这个大门。", + "GateBroken": "这门已是破烂不堪。", + "GateHacked": "大门没什么反应。", + "RadioJammed": "电台似是被干扰了。", + "VehicleNotForSale": "本车不出售!", + "VehicleNotForRent": "本车不出租!", + "BusinessNotForSale": "本企业不出售!", + "BusinessNotForRent": "本企业不出租!", + "HouseNotForSale": "这房子不给卖!", + "HouseNotForRent": "这房子不给租!", + "DealershipPurchaseTestDrive": "将车辆驶离经销商处以确认购买,下车取消。", + "DealershipPurchaseExitedVehicle": "已取消车辆购买。", + "VehiclePurchaseComplete": "这辆车现在是你的了!不管它在哪里都会自动保存。", + "VehiclePurchaseNotEnoughMoney": "你没有足够的钱买这辆车!", + "HousePurchaseNotEnoughMoney": "你没有足够的钱买这所房子!", + "BusinessPurchaseNotEnoughMoney": "你没有足够的钱来买这家企业!", "Locales": { - "English": "English", - "Russian": "Russian", - "Spanish": "Spanish", - "German": "German", - "Dutch": "Dutch", - "Polish": "Polish" + "English": "英文", + "Russian": "俄文", + "Spanish": "西班牙文", + "German": "德文", + "Dutch": "荷兰文", + "Polish": "波兰文", + "Chinese": "中文" }, "ADDED-21JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.", - "HeaderPlayerHousesList": "Player Houses ({1})", - "HeaderPlayerStaffFlagsList": "Player Staff Flags ({1})", - "HeaderStaffFlagsList": "Staff Flags", - "NonRPName": "Non-RP name! Choose a new one:", - "InvalidStaffFlag": "Staff flag not found!", - "InvalidClanFlag": "Clan flag not found!", - "InvalidLocale": "Language not found!", - "HeaderJobUniformList": "Job Uniforms ({1})", - "HeaderJobEquipmentList": "Job Equipment ({1})", - "InvalidJobUniform": "Job uniform not found!", - "InvalidJobEquipment": "Job equipment not found!", - "HeaderVehiclesInRangeList": "Vehicles within {1}", - "NoVehiclesWithInRange": "There are no vehicles within {1}", - "AmountNotNumber": "The amount must be a number!", - "NeedToBeWorking": "You need to be working! Use {1} at a job location or near a job vehicle.", - "NeedToBeOnJobRoute": "You need to be doing a job route! Use {1} in a job vehicle", - "CurrentJobRouteDeleted": "The job route you were on has been deleted by an admin", - "CurrentJobRouteVehicleColoursChanged": "Your job route's vehicle colours were changed by an admin", - "NotYourJob": "This is not your job!", - "JobPoints": "You can get a job by going the yellow points on the map.", - "QuitJobToTakeAnother": "If you want this job, use {1} to quit your current job.", - "NotAJobVehicle": "This is not a job vehicle!", - "NotYourJobVehicle": "This is not your job's vehicle!", - "JobRouteDisabled": "The job route you were on has been disabled by an admin", - "HeaderPickupTypes": "Pickup Types", - "HeaderBlipTypes": "Map Icon Types", - "InvalidGPSLocation": "There are no locations with that name or type", - "HeaderBusinessList": "Businesses", - "VehicleForSale": "This {1} is buyable for {2}! Use {3} if you want to buy it", - "VehicleForRent": "This {1} is rentable for {2}! Use {3} if you want to rent it", + "HeaderPlayerHousesList": "玩家住宅 ({1})", + "HeaderPlayerStaffFlagsList": "玩家信号旗 ({1})", + "HeaderStaffFlagsList": "信号旗", + "NonRPName": "非角色扮演名称!请选择新的名称:", + "InvalidStaffFlag": "信号旗帜不存在!", + "InvalidClanFlag": "帮派旗帜不存在!", + "InvalidLocale": "语言不存在!", + "HeaderJobUniformList": "工作制服 ({1})", + "HeaderJobEquipmentList": "工作设备 ({1})", + "InvalidJobUniform": "工作制服不存在!", + "InvalidJobEquipment": "工作设备不存在!", + "HeaderVehiclesInRangeList": "{1} 内的车辆", + "NoVehiclesWithInRange": "{1} 内无任何车辆。", + "AmountNotNumber": "请输入有效数字!", + "NeedToBeWorking": "你得去工作!在求职处或工作专用车旁使用 {1} 。", + "NeedToBeOnJobRoute": "你需要进行一个工作路线!请在工作专用车内使用 {1} 。", + "CurrentJobRouteDeleted": "管理员已删除你所在的工作路线", + "CurrentJobRouteVehicleColoursChanged": "管理员已更改你的工作路线的车辆颜色", + "NotYourJob": "这不是你的工作!", + "JobPoints": "前往地图上的黄点找到工作。", + "QuitJobToTakeAnother": "要是想干这行,先使用 {1} 离开当前工作。", + "NotAJobVehicle": "这并不是辆工作专用车!", + "NotYourJobVehicle": "这不是你工作用的车!", + "JobRouteDisabled": "管理员已禁用你的工作路线", + "HeaderPickupTypes": "拾取物类型", + "HeaderBlipTypes": "地图图标类型", + "InvalidGPSLocation": "没有具有该名称或类型的位置", + "HeaderBusinessList": "企业", + "VehicleForSale": "此 {1} 可被 {2} 购买到!购买请使用 {3}", + "VehicleForRent": "此 {1} 可被 {2} 租用!租用请使用 {3}", "ADDED-31JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.", - "LoginFailedInvalidPassword": "Invalid password! {1} attempts remaining", - "LoginFailedNoPassword": "You must enter a password! ! {1} attempts remaining", - "RegistrationFailedNoPassword": "You must enter a password!", - "RegistrationFailedNoPasswordConfirm": "You must confirm the password!", - "RegistrationFailedNoEmail": "You must enter an email!", - "AccountNameAlreadyRegistered": "Your name is already registered!", - "AlreadyLoggedIn": "You are already logged in!", - "RegistrationFailedInvalidEmail": "That email is invalid!", - "RegistrationFailedPasswordMismatch": "The passwords don't match!", - "RegistrationFailedCreateError": "Your account couldn't be created!", - "RegistrationSuccess": "Your account has been created!", - "RegistrationEmailVerifyReminder": "Don't forget to verify your email! A verification code has been sent to you.", - "RegistrationCreateCharReminder": "To play on the server, you will need to make a character.", - "NoCharactersGUIMessage": "You have no characters. Would you like to make one?", - "NoCharactersGUIWindowTitle": "No characters", - "NoCharactersChatMessage": "You have no characters. Use {1} to make one.", - "NeedEmailFor2FA": "You need to add your email to your account to use two-factor authentication.", - "NeedEmailVerifiedFor2FA": "You need to verify your email to use two-factor authentication.", - "SetEmailHelpTip": "Use {1} to set your email.", - "VerifyEmailHelpTip": "Use {1} to verify your email.", - + "LoginFailedInvalidPassword": "密码错误!还有 {1} 次尝试机会。", + "LoginFailedNoPassword": "密码不能为空!还有 {1} 次尝试机会。", + "RegistrationFailedNoPassword": "密码不能为空!", + "RegistrationFailedNoPasswordConfirm": "确认密码不能为空!", + "RegistrationFailedNoEmail": "电子邮件不能为空!", + "AccountNameAlreadyRegistered": "该游戏名已被注册。", + "AlreadyLoggedIn": "您已登录过账号!", + "RegistrationFailedInvalidEmail": "该电子邮件无效!", + "RegistrationFailedPasswordMismatch": "密码不匹配!", + "RegistrationFailedCreateError": "无法创建您的帐户!", + "RegistrationSuccess": "账号创建成功!", + "RegistrationEmailVerifyReminder": "验证码已发送至您的电子邮件,请前往进行验证。", + "RegistrationCreateCharReminder": "在正式游玩之前,您需要创建一个角色。", + "NoCharactersGUIMessage": "暂无角色。要创建一个吗?", + "NoCharactersGUIWindowTitle": "无角色", + "NoCharactersChatMessage": "暂无角色。使用 {1} 新建一个角色。", + "NeedEmailFor2FA": "开启双重验证前,请先添加您的电子邮件。", + "NeedEmailVerifiedFor2FA": "开启双重验证前,请先验证您的电子邮件。", + "SetEmailHelpTip": "使用 {1} 以设置您的电子邮件。", + "VerifyEmailHelpTip": "使用 {1} 以验证您的电子邮件。", + "ADDED-13FEB2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.", - "NearbyRadio": "Nearby radio", - "FromRadio": "From radio", - "ToRadio": "To radio", - "NeedToEnterPropertyCommand": "You need to enter the {1} first! Use {2} to enter and exit", - "NeedToEnterPropertyKeyPress": "You need to enter the {1} first! Press {2} to enter and exit", - "InventoryFullCantCarry": "You don't have any space to carry this (full inventory)!", - "NotEnoughCashNeedAmountMore": "You don't have enough money! You need {1} more!", - "AmountMustBeMoreThan": "The amount must be more than {1}!", - "WeaponBanned": "You are not allowed to buy or use weapons!", - "TimeNotNumber": "The time must be a number", - "HeaderDefaultBusinessItemTypes": "Business Item Templates", - "FixingStuck": "Fixing your position and virtual world ...", - "CantUseCommandYet": "You must wait before you can use this command again!", - "NotATester": "You are not a tester!", - "AccessDenied": "AccessDenied", - "InvalidSkin": "That skin is invalid!", - "HeaderInteriorTypes": "Interiors" + "NearbyRadio": "附近电台", + "FromRadio": "起始电台", + "ToRadio": "终止电台", + "NeedToEnterPropertyCommand": "你得先进入 {1} !使用 {2} 以进入或退出。", + "NeedToEnterPropertyKeyPress": "你得先进入 {1} !使用 {2} 以进入或退出。", + "InventoryFullCantCarry": "库存已满!", + "NotEnoughCashNeedAmountMore": "没有足够现金!你需要多加 {1} !", + "AmountMustBeMoreThan": "数额必须大于 {1}!", + "WeaponBanned": "你已被禁止购买及使用武器!", + "TimeNotNumber": "设定的时间非有效数值", + "HeaderDefaultBusinessItemTypes": "企业项目模板", + "FixingStuck": "修复你当前的位置和虚拟世界 ...", + "CantUseCommandYet": "稍后才能再次使用该指令!", + "NotATester": "非测试者", + "AccessDenied": "拒绝访问", + "InvalidSkin": "该皮肤无效!", + "HeaderInteriorTypes": "内部场景列表", + "ViewInventoryKeyPressTip": "按下 {1} 以查看你的全部物品", + "ViewInventoryCommandTip": "使用 {1} 以查看你的全部物品", + "GUIAccountSettingToggle": "已切换至 {1} GUI", + + "ADDED-23MAR2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations", + "CarCommandHelp": "前往汽车经销商购买新车,使用 {1} 以获取更多信息。", + "SkinCommandHelp": "前往服装店购买新衣服,使用 {1} 以获取更多信息。", + "BusinessVehiclesRespawned": "管理员已重置所有企业车辆!", + "JobVehiclesRespawned": "管理员已重置所有工作车辆!", + "PlayerVehiclesRespawned": "管理员已重置所有玩家车辆!", + "ClanVehiclesRespawned": "管理员已重置所有帮派车辆!", + "PublicVehiclesRespawned": "管理员已重置所有公众!", + "EmptyVehiclesRespawned": "管理员已重置所有空闲车辆!", + "AllVehiclesRespawned": "管理员已重置所有车辆!", + "AllVehiclesReloaded": "管理员已重载所有车辆!", + "YourVehicleRespawned": "你的车辆已重生!", + "PlayerIPBanned": "{1} 被封禁 IP!", + "PlayerCharacterBanned": "{1} 被封禁角色!", + "PlayerSubNetBanned": "{1} 被封禁网段!", + "CantModifyBusiness": "你无法操作或修改这个企业!", + "CantModifyHouse": "你无法操作或修改此住宅!", + "ServerTimeSet": "{1} 已将时间设定为 {2}", + "ServerWeatherSet": "{1} 已将天气设定为 {2}", + "ServerSnowSet": "{1} 已调整:落雪-{2},积雪-{3}", + "AllJobsReloaded": "管理员已重置所有职业!", + "ServerLogoSet": "{1} 已设定:服务器 LOGO 状态-{2}", + "ServerGUISet": "{1} 已设定:服务器 GUI 状态-{2}", + "ServerBusinessBlipsSet": "{1} 已设定:服务器企业图例显示状态-{2}", + "ServerHouseBlipsSet": "{1} 已设定:服务器住宅图例显示状态-{2}", + "ServerJobBlipsSet": "{1} 已设定:服务器职业图例显示状态-{2}", + "ServerBusinessPickupsSet": "{1} 已设定:服务器企业拾取物状态-{2}", + "ServerHousePickupsSet": "{1} 已设定:服务器住宅拾取物状态-{2}", + "ServerJobPickupsSet": "{1} 已设定:服务器职业拾取物状态-{2}", + "BusinessBuyItemsLabel": "使用 {1} 以购买物品", + "PropertyEnterCommandLabel": "使用 {1} 以进入", + "PropertyEnterKeyPressLabel": "按下 {1} 以进入", + "PropertyForSaleLabel": "售价:${1}", + "PropertyForRentLabel": "租价:每个发薪日需 ${1}", + "RemainingTaxPaidInMoney": "你以 ${1} 现金支付了剩下的税款", + "LostMoneyFromTaxes": "你应缴纳的税款超过了你的薪水!", + "NextPaycheckRepossessionWarning": "若无足够的现金来支付下一份薪水的税款,你将失去一些资产!", + "NotEnoughMoneyForTax": "没有足够的现金来支付税款", + "AssetsRepossessedForTax": "因未缴纳税款,你已失去 {1} 辆车,{2} 处住宅,{3} 处企业!" } From 50a24badbe86d197517c08cfc5e1d784f1a8cd48 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 16 Apr 2022 22:50:44 -0500 Subject: [PATCH 002/274] More locale strings --- locale/arabic.json | 21 ++++++++++++++++++++- locale/chinese.json | 21 ++++++++++++++++++++- locale/english.json | 21 ++++++++++++++++++++- locale/polish.json | 21 ++++++++++++++++++++- locale/russian.json | 21 ++++++++++++++++++++- locale/slovak.json | 21 ++++++++++++++++++++- locale/spanish.json | 21 ++++++++++++++++++++- 7 files changed, 140 insertions(+), 7 deletions(-) diff --git a/locale/arabic.json b/locale/arabic.json index ab858570..5b766339 100644 --- a/locale/arabic.json +++ b/locale/arabic.json @@ -454,5 +454,24 @@ "SetVehicleClanConfirmTitle": "Warning!", "SetItemPriceBelowOrderPriceMessage": "Are you sure you want to set the item price below it's order price? You will lose ${1} every purchase!", "SetItemPriceBelowOrderPriceTitle": "Warning!", - "MustOwnVehicle": "You don't own this vehicle!" + "MustOwnVehicle": "You don't own this vehicle!", + "RandomTips": [ + "Look for yellow dots on your map for job locations", + "You can set custom key binds. Use {1} for details", + "Use {1} if you don't want to see tips and extra information", + "You can edit your keybinds using {1} and {2}", + "Press ℹ️ to see your inventory, and use number keys to select an item", + "Use {1} at a business to purchase items", + "Found a bug? Report it with {1}", + "Have an idea or suggestion for the server? Let the devs know using {1}", + "Want to buy a business? Use {1} at one for sale", + "Want to buy a house? Use {1} at one for sale", + "Want to buy a vehicle? Visit a dealership and enter one for info on how to buy it!", + "Switch to any of your characters with {1}", + "Use {1} to automatically login when connecting with the same IP", + "Use {1} to turn on/off the lights in your house or business", + "Use {1} to play an internet radio station in your car, house, or business", + "Want to make a clan? Use {1} for details", + "Legal weapons can be purchased at any ammunation" + ] } diff --git a/locale/chinese.json b/locale/chinese.json index 16a6dff3..517fbc2d 100644 --- a/locale/chinese.json +++ b/locale/chinese.json @@ -454,5 +454,24 @@ "SetVehicleClanConfirmTitle": "Warning!", "SetItemPriceBelowOrderPriceMessage": "Are you sure you want to set the item price below it's order price? You will lose ${1} every purchase!", "SetItemPriceBelowOrderPriceTitle": "Warning!", - "MustOwnVehicle": "You don't own this vehicle!" + "MustOwnVehicle": "You don't own this vehicle!", + "RandomTips": [ + "Look for yellow dots on your map for job locations", + "You can set custom key binds. Use {1} for details", + "Use {1} if you don't want to see tips and extra information", + "You can edit your keybinds using {1} and {2}", + "Press ℹ️ to see your inventory, and use number keys to select an item", + "Use {1} at a business to purchase items", + "Found a bug? Report it with {1}", + "Have an idea or suggestion for the server? Let the devs know using {1}", + "Want to buy a business? Use {1} at one for sale", + "Want to buy a house? Use {1} at one for sale", + "Want to buy a vehicle? Visit a dealership and enter one for info on how to buy it!", + "Switch to any of your characters with {1}", + "Use {1} to automatically login when connecting with the same IP", + "Use {1} to turn on/off the lights in your house or business", + "Use {1} to play an internet radio station in your car, house, or business", + "Want to make a clan? Use {1} for details", + "Legal weapons can be purchased at any ammunation" + ] } \ No newline at end of file diff --git a/locale/english.json b/locale/english.json index d6509979..58eaf1c5 100644 --- a/locale/english.json +++ b/locale/english.json @@ -454,5 +454,24 @@ "SetVehicleClanConfirmTitle": "Warning!", "SetItemPriceBelowOrderPriceMessage": "Are you sure you want to set the item price below it's order price? You will lose ${1} every purchase!", "SetItemPriceBelowOrderPriceTitle": "Warning!", - "MustOwnVehicle": "You don't own this vehicle!" + "MustOwnVehicle": "You don't own this vehicle!", + "RandomTips": [ + "Look for yellow dots on your map for job locations", + "You can set custom key binds. Use {1} for details", + "Use {1} if you don't want to see tips and extra information", + "You can edit your keybinds using {1} and {2}", + "Press ℹ️ to see your inventory, and use number keys to select an item", + "Use {1} at a business to purchase items", + "Found a bug? Report it with {1}", + "Have an idea or suggestion for the server? Let the devs know using {1}", + "Want to buy a business? Use {1} at one for sale", + "Want to buy a house? Use {1} at one for sale", + "Want to buy a vehicle? Visit a dealership and enter one for info on how to buy it!", + "Switch to any of your characters with {1}", + "Use {1} to automatically login when connecting with the same IP", + "Use {1} to turn on/off the lights in your house or business", + "Use {1} to play an internet radio station in your car, house, or business", + "Want to make a clan? Use {1} for details", + "Legal weapons can be purchased at any ammunation" + ] } \ No newline at end of file diff --git a/locale/polish.json b/locale/polish.json index 08eb8985..b72fcbf5 100644 --- a/locale/polish.json +++ b/locale/polish.json @@ -454,5 +454,24 @@ "SetVehicleClanConfirmTitle": "Warning!", "SetItemPriceBelowOrderPriceMessage": "Are you sure you want to set the item price below it's order price? You will lose ${1} every purchase!", "SetItemPriceBelowOrderPriceTitle": "Warning!", - "MustOwnVehicle": "You don't own this vehicle!" + "MustOwnVehicle": "You don't own this vehicle!", + "RandomTips": [ + "Look for yellow dots on your map for job locations", + "You can set custom key binds. Use {1} for details", + "Use {1} if you don't want to see tips and extra information", + "You can edit your keybinds using {1} and {2}", + "Press ℹ️ to see your inventory, and use number keys to select an item", + "Use {1} at a business to purchase items", + "Found a bug? Report it with {1}", + "Have an idea or suggestion for the server? Let the devs know using {1}", + "Want to buy a business? Use {1} at one for sale", + "Want to buy a house? Use {1} at one for sale", + "Want to buy a vehicle? Visit a dealership and enter one for info on how to buy it!", + "Switch to any of your characters with {1}", + "Use {1} to automatically login when connecting with the same IP", + "Use {1} to turn on/off the lights in your house or business", + "Use {1} to play an internet radio station in your car, house, or business", + "Want to make a clan? Use {1} for details", + "Legal weapons can be purchased at any ammunation" + ] } diff --git a/locale/russian.json b/locale/russian.json index 2792287a..02eac330 100644 --- a/locale/russian.json +++ b/locale/russian.json @@ -453,5 +453,24 @@ "SetVehicleClanConfirmTitle": "Warning!", "SetItemPriceBelowOrderPriceMessage": "Are you sure you want to set the item price below it's order price? You will lose ${1} every purchase!", "SetItemPriceBelowOrderPriceTitle": "Warning!", - "MustOwnVehicle": "You don't own this vehicle!" + "MustOwnVehicle": "You don't own this vehicle!", + "RandomTips": [ + "Look for yellow dots on your map for job locations", + "You can set custom key binds. Use {1} for details", + "Use {1} if you don't want to see tips and extra information", + "You can edit your keybinds using {1} and {2}", + "Press ℹ️ to see your inventory, and use number keys to select an item", + "Use {1} at a business to purchase items", + "Found a bug? Report it with {1}", + "Have an idea or suggestion for the server? Let the devs know using {1}", + "Want to buy a business? Use {1} at one for sale", + "Want to buy a house? Use {1} at one for sale", + "Want to buy a vehicle? Visit a dealership and enter one for info on how to buy it!", + "Switch to any of your characters with {1}", + "Use {1} to automatically login when connecting with the same IP", + "Use {1} to turn on/off the lights in your house or business", + "Use {1} to play an internet radio station in your car, house, or business", + "Want to make a clan? Use {1} for details", + "Legal weapons can be purchased at any ammunation" + ] } diff --git a/locale/slovak.json b/locale/slovak.json index fc3621ad..0ef13927 100644 --- a/locale/slovak.json +++ b/locale/slovak.json @@ -454,5 +454,24 @@ "SetVehicleClanConfirmTitle": "Warning!", "SetItemPriceBelowOrderPriceMessage": "Are you sure you want to set the item price below it's order price? You will lose ${1} every purchase!", "SetItemPriceBelowOrderPriceTitle": "Warning!", - "MustOwnVehicle": "You don't own this vehicle!" + "MustOwnVehicle": "You don't own this vehicle!", + "RandomTips": [ + "Look for yellow dots on your map for job locations", + "You can set custom key binds. Use {1} for details", + "Use {1} if you don't want to see tips and extra information", + "You can edit your keybinds using {1} and {2}", + "Press ℹ️ to see your inventory, and use number keys to select an item", + "Use {1} at a business to purchase items", + "Found a bug? Report it with {1}", + "Have an idea or suggestion for the server? Let the devs know using {1}", + "Want to buy a business? Use /bizbuy at one for sale", + "Want to buy a house? Use /housebuy at one for sale", + "Want to buy a vehicle? Visit a dealership and enter one for info on how to buy it!", + "Switch to any of your characters with {1}", + "Use {1} to automatically login when connecting with the same IP", + "Use {1} to turn on/off the lights in your house or business", + "Use {1} to play an internet radio station in your car, house, or business", + "Want to make a clan? Use {1} for details", + "Legal weapons can be purchased at any ammunation" + ] } \ No newline at end of file diff --git a/locale/spanish.json b/locale/spanish.json index 71aee871..51a2a0cb 100644 --- a/locale/spanish.json +++ b/locale/spanish.json @@ -458,5 +458,24 @@ "SetVehicleClanConfirmTitle": "Warning!", "SetItemPriceBelowOrderPriceMessage": "Are you sure you want to set the item price below it's order price? You will lose ${1} every purchase!", "SetItemPriceBelowOrderPriceTitle": "Warning!", - "MustOwnVehicle": "You don't own this vehicle!" + "MustOwnVehicle": "You don't own this vehicle!", + "RandomTips": [ + "Look for yellow dots on your map for job locations", + "You can set custom key binds. Use {1} for details", + "Use {1} if you don't want to see tips and extra information", + "You can edit your keybinds using {1} and {2}", + "Press ℹ️ to see your inventory, and use number keys to select an item", + "Use {1} at a business to purchase items", + "Found a bug? Report it with {1}", + "Have an idea or suggestion for the server? Let the devs know using {1}", + "Want to buy a business? Use {1} at one for sale", + "Want to buy a house? Use {1} at one for sale", + "Want to buy a vehicle? Visit a dealership and enter one for info on how to buy it!", + "Switch to any of your characters with {1}", + "Use {1} to automatically login when connecting with the same IP", + "Use {1} to turn on/off the lights in your house or business", + "Use {1} to play an internet radio station in your car, house, or business", + "Want to make a clan? Use {1} for details", + "Legal weapons can be purchased at any ammunation" + ] } From 5ef6b4fe29b135662ac65183e25ead744d3fb40f Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 18 Apr 2022 20:57:35 -0500 Subject: [PATCH 003/274] More locale strings --- locale/arabic.json | 3 ++- locale/chinese.json | 3 ++- locale/english.json | 3 ++- locale/polish.json | 3 ++- locale/russian.json | 3 ++- locale/slovak.json | 3 ++- locale/spanish.json | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/locale/arabic.json b/locale/arabic.json index 5b766339..bcba6e72 100644 --- a/locale/arabic.json +++ b/locale/arabic.json @@ -473,5 +473,6 @@ "Use {1} to play an internet radio station in your car, house, or business", "Want to make a clan? Use {1} for details", "Legal weapons can be purchased at any ammunation" - ] + ], + "PromptResponseTip": "Use {1} to accept or {2} to decline" } diff --git a/locale/chinese.json b/locale/chinese.json index 517fbc2d..3b51d7e4 100644 --- a/locale/chinese.json +++ b/locale/chinese.json @@ -473,5 +473,6 @@ "Use {1} to play an internet radio station in your car, house, or business", "Want to make a clan? Use {1} for details", "Legal weapons can be purchased at any ammunation" - ] + ], + "PromptResponseTip": "Use {1} to accept or {2} to decline" } \ No newline at end of file diff --git a/locale/english.json b/locale/english.json index 58eaf1c5..2ec94b2b 100644 --- a/locale/english.json +++ b/locale/english.json @@ -473,5 +473,6 @@ "Use {1} to play an internet radio station in your car, house, or business", "Want to make a clan? Use {1} for details", "Legal weapons can be purchased at any ammunation" - ] + ], + "PromptResponseTip": "Use {1} to accept or {2} to decline" } \ No newline at end of file diff --git a/locale/polish.json b/locale/polish.json index b72fcbf5..d916c763 100644 --- a/locale/polish.json +++ b/locale/polish.json @@ -473,5 +473,6 @@ "Use {1} to play an internet radio station in your car, house, or business", "Want to make a clan? Use {1} for details", "Legal weapons can be purchased at any ammunation" - ] + ], + "PromptResponseTip": "Use {1} to accept or {2} to decline" } diff --git a/locale/russian.json b/locale/russian.json index 02eac330..d206d574 100644 --- a/locale/russian.json +++ b/locale/russian.json @@ -472,5 +472,6 @@ "Use {1} to play an internet radio station in your car, house, or business", "Want to make a clan? Use {1} for details", "Legal weapons can be purchased at any ammunation" - ] + ], + "PromptResponseTip": "Use {1} to accept or {2} to decline" } diff --git a/locale/slovak.json b/locale/slovak.json index 0ef13927..907ae1ba 100644 --- a/locale/slovak.json +++ b/locale/slovak.json @@ -473,5 +473,6 @@ "Use {1} to play an internet radio station in your car, house, or business", "Want to make a clan? Use {1} for details", "Legal weapons can be purchased at any ammunation" - ] + ], + "PromptResponseTip": "Use {1} to accept or {2} to decline" } \ No newline at end of file diff --git a/locale/spanish.json b/locale/spanish.json index 51a2a0cb..65b5f40d 100644 --- a/locale/spanish.json +++ b/locale/spanish.json @@ -477,5 +477,6 @@ "Use {1} to play an internet radio station in your car, house, or business", "Want to make a clan? Use {1} for details", "Legal weapons can be purchased at any ammunation" - ] + ], + "PromptResponseTip": "Use {1} to accept or {2} to decline" } From 55b2c9e22c3edb7a80cba39f402cf4129f48de7a Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 18 Apr 2022 20:58:04 -0500 Subject: [PATCH 004/274] Use new prompt util (in case GUI is disabled) --- scripts/server/account.js | 4 ++-- scripts/server/client.js | 2 +- scripts/server/vehicle.js | 38 +------------------------------------- 3 files changed, 4 insertions(+), 40 deletions(-) diff --git a/scripts/server/account.js b/scripts/server/account.js index 9d52dafd..97a117f2 100644 --- a/scripts/server/account.js +++ b/scripts/server/account.js @@ -607,7 +607,7 @@ function loginSuccess(client) { if(getPlayerData(client).subAccounts.length == 0) { if(doesServerHaveGUIEnabled() && doesPlayerHaveGUIEnabled(client)) { - showPlayerPromptGUI(client, getLocaleString(client, "NoCharactersGUIMessage"), getLocaleString(client, "NoCharactersGUIWindowTitle"), getLocaleString(client, "Yes"), getLocaleString(client, "No")); + showPlayerPrompt(client, getLocaleString(client, "NoCharactersGUIMessage"), getLocaleString(client, "NoCharactersGUIWindowTitle"), getLocaleString(client, "Yes"), getLocaleString(client, "No")); getPlayerData(client).promptType = VRR_PROMPT_CREATEFIRSTCHAR; logToConsole(LOG_DEBUG, `[VRR.Account] ${getPlayerDisplayForConsole(client)} is being shown the no characters prompt GUI`); } else { @@ -990,7 +990,7 @@ function checkRegistration(client, password, confirmPassword = "", emailAddress if(doesServerHaveGUIEnabled() && doesPlayerHaveGUIEnabled(client)) { showPlayerRegistrationSuccessGUI(client); - showPlayerPromptGUI(client, getLocaleString(client, "NoCharactersMessage"), getLocaleString(client, "NoCharactersWindowTitle"), getLocaleString(client, "Yes"), getLocaleString(client, "No")); + showPlayerPrompt(client, getLocaleString(client, "NoCharactersMessage"), getLocaleString(client, "NoCharactersWindowTitle"), getLocaleString(client, "Yes"), getLocaleString(client, "No")); getPlayerData(client).promptType = VRR_PROMPT_CREATEFIRSTCHAR; } else { messagePlayerAlert(client, getLocaleString(client, "NoCharactersChatMessage"), `{ALTCOLOUR}/newchar{MAINCOLOUR}`); diff --git a/scripts/server/client.js b/scripts/server/client.js index 1c6e6f79..774fe143 100644 --- a/scripts/server/client.js +++ b/scripts/server/client.js @@ -381,7 +381,7 @@ function showPlayerCharacterSelectFailedGUI(client) { // =========================================================================== -function showPlayerPromptGUI(client, promptMessage, promptTitle, yesButtonText, noButtonText) { +function showPlayerPrompt(client, promptMessage, promptTitle, yesButtonText, noButtonText) { logToConsole(LOG_DEBUG, `[VRR.Client] Sending show prompt GUI signal to ${getPlayerDisplayForConsole(client)} (Title: ${promptTitle}, Message: ${promptMessage})`); sendNetworkEventToPlayer("vrr.showPrompt", client, promptMessage, promptTitle, yesButtonText, noButtonText); } diff --git a/scripts/server/vehicle.js b/scripts/server/vehicle.js index 9cbe7653..b92fcb5c 100644 --- a/scripts/server/vehicle.js +++ b/scripts/server/vehicle.js @@ -265,42 +265,6 @@ function getNearbyVehiclesCommand(command, params, client) { // =========================================================================== -function vehicleLockCommand(command, params, client) { - let vehicle = getClosestVehicle(getPlayerPosition(client)); - - if(!getPlayerVehicle(client) && getDistance(getVehiclePosition(vehicle), getPlayerPosition(client)) > getGlobalConfig().vehicleLockDistance) { - messagePlayerError(client, getLocaleString(client, "MustBeInOrNearVehicle")); - return false; - } - - if(!getVehicleData(vehicle)) { - messagePlayerError(client, getLocaleString(client, "RandomVehicleCommandsDisabled")); - return false; - } - - if(isPlayerInAnyVehicle(client)) { - vehicle = getPlayerVehicle(client); - if(!isPlayerInFrontVehicleSeat(client)) { - messagePlayerError(client, getLocaleString(client, "MustBeInVehicleFrontSeat")); - return false; - } - } else { - if(!doesPlayerHaveVehicleKeys(client, vehicle)) { - messagePlayerError(client, getLocaleString(client, "DontHaveVehicleKey")); - return false; - } - } - - getVehicleData(vehicle).locked = !getVehicleData(vehicle).locked; - vehicle.locked = getVehicleData(vehicle).locked; - - getVehicleData(vehicle).needsSaved = true; - - meActionToNearbyPlayers(client, `${toLowerCase(getLockedUnlockedFromBool(getVehicleData(vehicle).locked))} the ${getVehicleName(vehicle)}`); -} - -// =========================================================================== - function vehicleTrunkCommand(command, params, client) { let vehicle = getClosestVehicle(getPlayerPosition(client)); @@ -814,7 +778,7 @@ function setVehicleClanCommand(command, params, client) { return false; } - showPlayerPromptGUI(client, getLocaleString(client, "SetVehicleClanConfirmMessage"), getLocaleString(client, "SetVehicleClanConfirm"), getLocaleString(client, "Yes"), getLocaleString(client, "No")); + showPlayerPrompt(client, getLocaleString(client, "SetVehicleClanConfirmMessage"), getLocaleString(client, "SetVehicleClanConfirm"), getLocaleString(client, "Yes"), getLocaleString(client, "No")); getPlayerData(client).promptType = VRR_PROMPT_GIVEVEHTOCLAN; getVehicleData(vehicle).needsSaved = true; From c1d27f7fb6badbd21d543ac8a0c00942ab94d7a6 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 18 Apr 2022 20:58:23 -0500 Subject: [PATCH 005/274] New universal lock command --- scripts/server/business.js | 35 --------- scripts/server/command.js | 12 +-- scripts/server/house.js | 33 -------- scripts/server/misc.js | 151 ++++++++++++++++++++++++++++++++++++- 4 files changed, 154 insertions(+), 77 deletions(-) diff --git a/scripts/server/business.js b/scripts/server/business.js index 343c09c1..8fe5d1dc 100644 --- a/scripts/server/business.js +++ b/scripts/server/business.js @@ -622,41 +622,6 @@ function removeBusinessOwnerCommand(command, params, client) { // =========================================================================== -/** - * This is a command handler function. - * - * @param {string} command - The command name used by the player - * @param {string} params - The parameters/args string used with the command by the player - * @param {Client} client - The client/player that used the command - * @return {bool} Whether or not the command was successful - * - */ -function lockUnlockBusinessCommand(command, params, client) { - let businessId = getPlayerBusiness(client); - - if(!areParamsEmpty(params)) { - businessId = getBusinessFromParams(params); - } - - if(!getBusinessData(businessId)) { - messagePlayerError(client, getLocaleString(client, "InvalidBusiness")); - return false; - } - - if(!canPlayerManageBusiness(client, businessId)) { - messagePlayerError(client, getLocaleString(client, "CantModifyBusiness")); - return false; - } - - getBusinessData(businessId).locked = !getBusinessData(businessId).locked; - setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.locked", getBusinessData(businessId).locked, true); - - getBusinessData(businessId).needsSaved = true; - messagePlayerSuccess(client, `${getLockedUnlockedEmojiFromBool((getBusinessData(businessId).locked))} Business {businessBlue}${getBusinessData(businessId).name} {MAINCOLOUR}${getLockedUnlockedFromBool((getBusinessData(businessId).locked))}!`); -} - -// =========================================================================== - /** * This is a command handler function. * diff --git a/scripts/server/command.js b/scripts/server/command.js index 7f90d0e6..dc8ce87f 100644 --- a/scripts/server/command.js +++ b/scripts/server/command.js @@ -75,8 +75,8 @@ function loadCommands() { //new CommandData("delbizloc", deleteBusinessLocationCommand, "[id]", getStaffFlagValue("ManageBusinesses"), true, false), new CommandData("bizreloadall", reloadAllBusinessesCommand, "", getStaffFlagValue("ManageBusinesses"), true, false, "Reloads all businesses from the database"), - new CommandData("bizlock", lockUnlockBusinessCommand, "", getStaffFlagValue("None"), true, true, "Locks a business"), - new CommandData("bizlights", toggleBusinessInteriorLightsCommand, "", getStaffFlagValue("None"), true, true, "Turns on/off a business's interior lights"), + //new CommandData("bizlock", lockUnlockBusinessCommand, "", getStaffFlagValue("None"), true, true, "Locks a business"), + //new CommandData("bizlights", toggleBusinessInteriorLightsCommand, "", getStaffFlagValue("None"), true, true, "Turns on/off a business's interior lights"), new CommandData("bizbuy", buyBusinessCommand, "", getStaffFlagValue("None"), true, true, "Purchases a business"), new CommandData("bizfee", setBusinessEntranceFeeCommand, "", getStaffFlagValue("None"), true, true, "Sets a fee to charge players when they enter the business."), new CommandData("biztill", viewBusinessTillAmountCommand, "", getStaffFlagValue("None"), true, true, "Shows the business's till (cash register) amount"), @@ -250,8 +250,8 @@ function loadCommands() { new CommandData("housebuy", buyHouseCommand, "", getStaffFlagValue("None"), true, false, "Purchases a house"), new CommandData("houseclan", setHouseClanCommand, "", getStaffFlagValue("None"), true, false, "Gives a house to your clan"), new CommandData("housedesc", setHouseDescriptionCommand, "", getStaffFlagValue("ManageHouses"), true, false, "Sets a house's description"), - new CommandData("houselock", lockUnlockHouseCommand, "", getStaffFlagValue("None"), true, false, "Locks/unlocks a house door"), - new CommandData("houselights", toggleHouseInteriorLightsCommand, "", getStaffFlagValue("None"), true, false, "Turns on and off the lights inside a house"), + //new CommandData("houselock", lockUnlockHouseCommand, "", getStaffFlagValue("None"), true, false, "Locks/unlocks a house door"), + //new CommandData("houselights", toggleHouseInteriorLightsCommand, "", getStaffFlagValue("None"), true, false, "Turns on and off the lights inside a house"), new CommandData("houseowner", setHouseOwnerCommand, "", getStaffFlagValue("None"), true, false, "Gives a house to a player"), new CommandData("housebuyprice", setHouseBuyPriceCommand, "", getStaffFlagValue("None"), true, false, "Sets the purchase price of a house so people can buy it"), new CommandData("houserentprice", setHouseRentPriceCommand, "", getStaffFlagValue("None"), true, false, "Sets the rent price of a house so people can rent it"), @@ -384,6 +384,8 @@ function loadCommands() { new CommandData("stuck", stuckPlayerCommand, "", getStaffFlagValue("None"), true, false, "Fixes your position and virtual world if bugged"), new CommandData("gps", gpsCommand, "[item or place name]", getStaffFlagValue("None"), true, false, "Shows you locations for special places or where to buy items"), new CommandData("speak", playerPedSpeakCommand, "", getStaffFlagValue("None"), true, false, "Makes your ped say something in their game voice (IV only)"), + new CommandData("lock", lockCommand, "", getStaffFlagValue("None"), true, false, "Locks and unlocks your vehicle, house, or business"), + new CommandData("lights", lightsCommand, "", getStaffFlagValue("None"), true, false, "Turns on and off the lights for your vehicle, house, or business"), ], npc: [ new CommandData("addnpc", createNPCCommand, "", getStaffFlagValue("ManageNPCs"), true, false, "Creates an NPC with the specified skin"), @@ -492,11 +494,9 @@ function loadCommands() { new CommandData("oldcar", getLastVehicleInfoCommand, "", getStaffFlagValue("None"), true, false), new CommandData("lastcar", getLastVehicleInfoCommand, "", getStaffFlagValue("None"), true, false), - new CommandData("lock", vehicleLockCommand, "", getStaffFlagValue("None"), true, false), new CommandData("unlock", vehicleLockCommand, "", getStaffFlagValue("None"), true, false), new CommandData("engine", vehicleEngineCommand, "", getStaffFlagValue("None"), true, false), new CommandData("siren", vehicleSirenCommand, "", getStaffFlagValue("None"), true, false), - new CommandData("lights", vehicleLightsCommand, "", getStaffFlagValue("None"), true, false), new CommandData("vehowner", setVehicleOwnerCommand, "", getStaffFlagValue("ManageVehicles"), true, true), new CommandData("vehpublic", setVehiclePublicCommand, "", getStaffFlagValue("ManageVehicles"), true, true), diff --git a/scripts/server/house.js b/scripts/server/house.js index ca155d04..9b94e15f 100644 --- a/scripts/server/house.js +++ b/scripts/server/house.js @@ -99,39 +99,6 @@ function createHouseCommand(command, params, client) { // =========================================================================== -/** - * This is a command handler function. - * - * @param {string} command - The command name used by the player - * @param {string} params - The parameters/args string used with the command by the player - * @param {Client} client - The client/player that used the command - * @return {bool} Whether or not the command was successful - * - */ -function lockUnlockHouseCommand(command, params, client) { - let houseId = getPlayerHouse(client); - - if(!getHouseData(houseId)) { - messagePlayerError(client, getLocaleString(client, "InvalidHouse")); - return false; - } - - getHouseData(houseId).locked = !getHouseData(houseId).locked; - - //for(let i in getHouseData(houseId).locations) { - // if(getHouseData(houseId).locations[i].type == VRR_HOUSE_LOC_DOOR) { - // setEntityData(getHouseData(houseId).locations[i].entrancePickup, "vrr.label.locked", getHouseData(houseId).locked, true); - // } - //} - - setEntityData(getHouseData(houseId).entrancePickup, "vrr.label.locked", getHouseData(houseId).locked, true); - getHouseData(houseId).needsSaved = true; - - messagePlayerSuccess(client, `House {houseGreen}${getHouseData(houseId).description} {MAINCOLOUR}${getLockedUnlockedFromBool((getHouseData(houseId).locked))}!`); -} - -// =========================================================================== - /** * This is a command handler function. * diff --git a/scripts/server/misc.js b/scripts/server/misc.js index 4f54b189..08b6214b 100644 --- a/scripts/server/misc.js +++ b/scripts/server/misc.js @@ -348,7 +348,7 @@ function checkPlayerSpawning() { // =========================================================================== -function showPlayerPrompt(client, promptType, promptMessage, promptTitle) { +function showPlayerPrompt(client, promptType, promptMessage, promptTitle, yesButtonText, noButtonText) { if(promptType == VRR_PROMPT_NONE) { return false; } @@ -356,15 +356,24 @@ function showPlayerPrompt(client, promptType, promptMessage, promptTitle) { getPlayerData(client).promptType = promptType; if(canPlayerUseGUI(client)) { - showPlayerPromptGUI(client, promptMessage, promptTitle); + showPlayerPromptGUI(client, promptMessage, promptTitle, yesButtonText, noButtonText); } else { messagePlayerNormal(client, `❓ ${promptMessage}`); - messagePlayerInfo(client, `{MAINCOLOUR}Use {ALTCOLOUR}/yes or {ALTCOLOUR}/no`); + messagePlayerInfo(client, getLocaleString(client, "PromptResponseTip", `{ALTCOLOUR}/yes{MAINCOLOUR}`, `{ALTCOLOUR}/no{MAINCOLOUR}`)); } } // =========================================================================== +/** + * This is a command handler function. + * + * @param {string} command - The command name used by the player + * @param {string} params - The parameters/args string used with the command by the player + * @param {Client} client - The client/player that used the command + * @return {bool} Whether or not the command was successful + * + */ function updateServerGameTime() { if(isTimeSupported()) { game.time.hour = getServerConfig().hour; @@ -374,6 +383,15 @@ function updateServerGameTime() { // =========================================================================== +/** + * This is a command handler function. + * + * @param {string} command - The command name used by the player + * @param {string} params - The parameters/args string used with the command by the player + * @param {Client} client - The client/player that used the command + * @return {bool} Whether or not the command was successful + * + */ function listOnlineAdminsCommand(command, params, client) { //== Admins =================================== messagePlayerNormal(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderAdminsList"))); @@ -398,6 +416,15 @@ function listOnlineAdminsCommand(command, params, client) { // =========================================================================== +/** + * This is a command handler function. + * + * @param {string} command - The command name used by the player + * @param {string} params - The parameters/args string used with the command by the player + * @param {Client} client - The client/player that used the command + * @return {bool} Whether or not the command was successful + * + */ function gpsCommand(command, params, client) { messagePlayerNormal(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderBusinessList"))); @@ -528,6 +555,15 @@ function gpsCommand(command, params, client) { // =========================================================================== +/** + * This is a command handler function. + * + * @param {string} command - The command name used by the player + * @param {string} params - The parameters/args string used with the command by the player + * @param {Client} client - The client/player that used the command + * @return {bool} Whether or not the command was successful + * + */ function stuckPlayerCommand(command, params, client) { if((getCurrentUnixTimestamp()-getPlayerData(client).lastStuckCommand) < getGlobalConfig().stuckCommandInterval) { messagePlayerError(client, "CantUseCommandYet"); @@ -598,6 +634,15 @@ function stuckPlayerCommand(command, params, client) { // =========================================================================== +/** + * This is a command handler function. + * + * @param {string} command - The command name used by the player + * @param {string} params - The parameters/args string used with the command by the player + * @param {Client} client - The client/player that used the command + * @return {bool} Whether or not the command was successful + * + */ function playerPedSpeakCommand(command, params, client) { if(areParamsEmpty(params)) { messagePlayerSyntax(client, getCommandSyntaxText(command)); @@ -607,4 +652,104 @@ function playerPedSpeakCommand(command, params, client) { makePlayerPedSpeak(client, params); } +// =========================================================================== + +/** + * This is a command handler function. + * + * @param {string} command - The command name used by the player + * @param {string} params - The parameters/args string used with the command by the player + * @param {Client} client - The client/player that used the command + * @return {bool} Whether or not the command was successful + * + */ +function lockCommand(command, params, client) { + if(isPlayerInAnyVehicle(client)) { + let vehicle = getPlayerVehicle(client); + + if(!getVehicleData(vehicle)) { + messagePlayerError(client, getLocaleString(client, "RandomVehicleCommandsDisabled")); + return false; + } + + if(isPlayerInAnyVehicle(client)) { + vehicle = getPlayerVehicle(client); + if(!isPlayerInFrontVehicleSeat(client)) { + messagePlayerError(client, getLocaleString(client, "MustBeInVehicleFrontSeat")); + return false; + } + } else { + if(!doesPlayerHaveVehicleKeys(client, vehicle)) { + messagePlayerError(client, getLocaleString(client, "DontHaveVehicleKey")); + return false; + } + } + + getVehicleData(vehicle).locked = !getVehicleData(vehicle).locked; + vehicle.locked = getVehicleData(vehicle).locked; + getVehicleData(vehicle).needsSaved = true; + + meActionToNearbyPlayers(client, `${toLowerCase(getLockedUnlockedFromBool(getVehicleData(vehicle).locked))} the ${getVehicleName(vehicle)}`); + } else { + let businessId = getPlayerBusiness(client); + if(businessId != false) { + if(!canPlayerManageBusiness(client, businessId)) { + messagePlayerError(client, getLocaleString(client, "CantModifyBusiness")); + return false; + } + + getBusinessData(businessId).locked = !getBusinessData(businessId).locked; + updateBusinessPickupLabelData(businessId); + getBusinessData(businessId).needsSaved = true; + + messagePlayerSuccess(client, `${getLockedUnlockedEmojiFromBool((getBusinessData(businessId).locked))} Business {businessBlue}${getBusinessData(businessId).name} {MAINCOLOUR}${getLockedUnlockedFromBool((getBusinessData(businessId).locked))}!`); + return true; + } + + let houseId = getPlayerHouse(client); + if(houseId != false) { + if(!canPlayerManageHouse(client, houseId)) { + messagePlayerError(client, getLocaleString(client, "CantModifyHouse")); + return false; + } + + getHouseData(houseId).locked = !getHouseData(houseId).locked; + updateHousePickupLabelData(houseId); + getHouseData(houseId).needsSaved = true; + + messagePlayerSuccess(client, `House {houseGreen}${getHouseData(houseId).description} {MAINCOLOUR}${getLockedUnlockedFromBool((getHouseData(houseId).locked))}!`); + return true; + } + + let vehicle = getClosestVehicle(getPlayerPosition(client)); + if(getDistance(getPlayerPosition(client), getVehiclePosition(vehicle) <= getGlobalConfig().vehicleLockDistance)) { + if(!getVehicleData(vehicle)) { + messagePlayerError(client, getLocaleString(client, "RandomVehicleCommandsDisabled")); + return false; + } + + if(isPlayerInAnyVehicle(client)) { + vehicle = getPlayerVehicle(client); + if(!isPlayerInFrontVehicleSeat(client)) { + messagePlayerError(client, getLocaleString(client, "MustBeInVehicleFrontSeat")); + return false; + } + } else { + if(!doesPlayerHaveVehicleKeys(client, vehicle)) { + messagePlayerError(client, getLocaleString(client, "DontHaveVehicleKey")); + return false; + } + } + + getVehicleData(vehicle).locked = !getVehicleData(vehicle).locked; + vehicle.locked = getVehicleData(vehicle).locked; + getVehicleData(vehicle).needsSaved = true; + + meActionToNearbyPlayers(client, `${toLowerCase(getLockedUnlockedFromBool(getVehicleData(vehicle).locked))} the ${getVehicleName(vehicle)}`); + + return false; + } + } +} + // =========================================================================== \ No newline at end of file From b35c8259e16b951575ec268c46fbd2ec9dc8d5bb Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 18 Apr 2022 20:58:35 -0500 Subject: [PATCH 006/274] Fix announce locale parsing --- scripts/server/messaging.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/server/messaging.js b/scripts/server/messaging.js index dfc6688a..69206846 100644 --- a/scripts/server/messaging.js +++ b/scripts/server/messaging.js @@ -17,7 +17,9 @@ function initMessagingScript() { function announceAdminAction(localeString, ...args) { let clients = getClients(); for(let i in clients) { - let messageText = getLocaleString.apply(null, [clients[i], localeString, args]); + let argsArray = [clients[i], localeString]; + argsArray = argsArray.concat(args); + let messageText = getLocaleString.apply(null, argsArray); messagePlayerNormal(clients[i], `⚠️ ${messageText}`, getColourByName("orange")); } From 48b82b78deb9fd1c7ecdb820ab2fd74aa0d4be8d Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Tue, 19 Apr 2022 07:29:13 -0500 Subject: [PATCH 007/274] Add race script to meta.xml --- meta.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta.xml b/meta.xml index 19f4a33d..3072d297 100644 --- a/meta.xml +++ b/meta.xml @@ -44,7 +44,8 @@