diff --git a/docs/Fixed-or-Improved-Logics.md b/docs/Fixed-or-Improved-Logics.md index f4bc3102c3..31ac43a9d0 100644 --- a/docs/Fixed-or-Improved-Logics.md +++ b/docs/Fixed-or-Improved-Logics.md @@ -803,18 +803,11 @@ ExcludeFromMultipleFactoryBonus=false ; boolean ### Gates connecting with Walls -- It is possible to add new gates which can be connected with any Walls by specifing them as `EWGates` and `NSGates` like `xxGateOne` and `xxGateTwo` do. - - In the in-game orientation, north points to the upper right, so `NSGates` correspond to buildings with `Foundation=1x3`, and `EWGates` correspond to buildings with `Foundation=3x1`. - -![image](_static/images/ewgates.gif) +![image](_static/images/ewgates.gif) *A Gate EW is built onto the Concrete Walls in [Fantasy ADVENTURE](https://www.moddb.com/mods/fantasy-adventure)* -In `rulesmd.ini`: -```ini -[AI] -NSGates= ; List of BuildingTypes, vanilla tag -ESGates= ; List of BuildingTypes, vanilla tag -``` +- It is possible to add new gates which can be connected with any Walls by specifing them as `[AI] -> EWGates` and `[AI] -> NSGates` like `xxGateOne` and `xxGateTwo` do. + - In the in-game orientation, north points to the upper right, so `NSGates` correspond to buildings with `Foundation=1x3`, and `EWGates` correspond to buildings with `Foundation=3x1`. ### Unit repair customization diff --git a/docs/locale/zh_CN/LC_MESSAGES/AI-Scripting-and-Mapping.po b/docs/locale/zh_CN/LC_MESSAGES/AI-Scripting-and-Mapping.po index a6c8e5c700..2aaaa2398d 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/AI-Scripting-and-Mapping.po +++ b/docs/locale/zh_CN/LC_MESSAGES/AI-Scripting-and-Mapping.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Phobos \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-16 01:51+0800\n" +"POT-Creation-Date: 2026-06-30 21:43+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,21 +17,17 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.16.0\n" -#: ../../AI-Scripting-and-Mapping.md:1 msgid "AI Scripting and Mapping" msgstr "AI 脚本与触发" -#: ../../AI-Scripting-and-Mapping.md:3 msgid "" "This page describes all AI scripting and mapping related additions and " "changes introduced by Phobos." msgstr "此页面列出了所有 Phobos 引入的 AI 脚本与地图触发相关的修改。" -#: ../../AI-Scripting-and-Mapping.md:5 msgid "Bugfixes and Miscellanous" msgstr "Bug 修复与杂项" -#: ../../AI-Scripting-and-Mapping.md:7 msgid "" "Script action `Move to cell` now obeys YR cell calculation now. Using " "`1000 * Y + X` as its cell value. (was `128 * Y + X` as it's a RA1 " @@ -40,11 +36,9 @@ msgstr "" "脚本动作 `移动到单元格` 现在遵守 YR 的单元格计算规则。使用 `1000 * Y + X` 获取单元格值。(先前使用遗留自 RA1 的 " "`128 * Y + X`)" -#: ../../AI-Scripting-and-Mapping.md:8 msgid "The game now can reads waypoints ranges in [0, 2147483647]. (was [0,701])" msgstr "现在游戏可以读取的路径点范围拓展到了 [0, 2147483647]。(先前为 [0,701])" -#: ../../AI-Scripting-and-Mapping.md:9 msgid "" "Map trigger action `41 Play Animation At...` can now create 'non-inert' " "animations which can play sounds, deal damage and apply " @@ -54,7 +48,6 @@ msgstr "" "地图触发结果 `41 播放动画在...` 现在可以更完善地创建可以播放音效、造成杀伤以及使用设置了 `TiberiumChainReaction`" " 参数的动画(需要[修改 `FAData.ini`](Whats-New.md#for-map-editor-final-alert-2))。" -#: ../../AI-Scripting-and-Mapping.md:10 msgid "" "Map trigger action `125 Build At...` can now play buildup anim and " "becomes singleplayer-AI-repairable optionally (needs [following changes " @@ -63,7 +56,6 @@ msgstr "" "地图触发结果 `125 将建筑建于...` 现在可以设置是否播放建造动画(需要[修改 `FAData.ini`](Whats-New.md" "#for-map-editor-final-alert-2))。" -#: ../../AI-Scripting-and-Mapping.md:11 msgid "" "Both Global Variables (`VariableNames` in `rulesmd.ini`) and Local " "Variables (`VariableNames` in map) are now unlimited." @@ -71,27 +63,22 @@ msgstr "" "全局变量(`rulesmd.ini` 中的 `VariableNames`)和局部变量(地图中的 " "`VariableNames`)现在都没有数量限制了。" -#: ../../AI-Scripting-and-Mapping.md:12 msgid "" "Script action `Deploy` now has vehicles with `DeploysInto` searching for " "free space to deploy at if failing to do so at initial location, instead " "of simply getting stuck." msgstr "脚本动作 `部署` 现在会让拥有 `DeploysInto` 的载具自动寻找空地以进行部署,而不再是直接呆住。" -#: ../../AI-Scripting-and-Mapping.md:13 msgid "" "Teams spawned by trigger action 7,80,107 can use IFV and opentopped logic" " normally." -msgstr "" -"由触发结果 7、80、107 生成的小队现在可以正常使用 IFV 和 OpenTopped 逻辑。" +msgstr "由触发结果 7、80、107 生成的小队现在可以正常使用 IFV 和 OpenTopped 逻辑。" -#: ../../AI-Scripting-and-Mapping.md:14 msgid "" "If a pre-placed building has a `NaturalParticleSystem`, it used to always" " be created when the game starts. This has been removed." msgstr "如果预先放置了拥有 `NaturalParticleSystem` 的建筑,它总是在游戏开始时被创建。这一行为已被移除。" -#: ../../AI-Scripting-and-Mapping.md:15 msgid "" "Superweapons used by AI for script actions `56 Chronoshift to Building`, " "`57 Chronoshift to a Target Type` and `10104 Chronoshift to Enemy Base` " @@ -108,21 +95,17 @@ msgstr "" " 来获取关联的超级武器。如果也没有设置那么会分别使用 `[SuperWeaponTypes]` 列表中最后一个 " "`Type=ChronoSphere` 和 `Type=ChronoWarp` 的超级武器。" -#: ../../AI-Scripting-and-Mapping.md:17 msgid "Singleplayer Mission Maps" msgstr "单人任务地图" -#: ../../AI-Scripting-and-Mapping.md:19 msgid "Base node repairing" msgstr "基地节点修复" -#: ../../AI-Scripting-and-Mapping.md:21 msgid "" "In singleplayer campaign missions you can now decide whether AI can " "repair the base nodes / buildings delivered by SW *(Ares feature)*." msgstr "在单人战役中你可以决定 AI 是否修复由 Deliver 超武(*Ares 功能*)提供的基地节点/建筑。" -#: ../../AI-Scripting-and-Mapping.md:22 msgid "" "You can control it globally by setting `[Basic] -> RepairBaseNodes`, or " "locally by setting the flag with same name in `[Some House]` in certain " @@ -131,43 +114,32 @@ msgstr "" "你可以通过设置 `[Basic] -> RepairBaseNodes` 来全局控制,或者在特定地图文件的 `[Some House]` " "中设置同名标签。局部标签会覆盖全局。" -#: ../../AI-Scripting-and-Mapping.md:24 ../../AI-Scripting-and-Mapping.md:102 -#: ../../AI-Scripting-and-Mapping.md:204 ../../AI-Scripting-and-Mapping.md:425 msgid "In `rulesmd.ini`:" msgstr "在 `rulesmd.ini`:" -#: ../../AI-Scripting-and-Mapping.md:30 ../../AI-Scripting-and-Mapping.md:60 -#: ../../AI-Scripting-and-Mapping.md:95 msgid "In map file:" msgstr "在地图文件:" -#: ../../AI-Scripting-and-Mapping.md:36 msgid "Default loading screen and briefing offsets" msgstr "默认载入图与简报位置" -#: ../../AI-Scripting-and-Mapping.md:38 msgid "" "It is now possible to set defaults for singleplayer map loading screen " "briefing pixel offsets and the loading screen images and palette that are" " used if there are no values defined for the map itself." msgstr "现在可以为单人战役地图的载入图像素偏移值和载入图图像以及色盘设置默认值,如果地图自身没有定义这些那么会将其作为默认值使用。" -#: ../../AI-Scripting-and-Mapping.md:40 ../../AI-Scripting-and-Mapping.md:70 -#: ../../AI-Scripting-and-Mapping.md:88 msgid "In `missionmd.ini`:" msgstr "在 `missionmd.ini`:" -#: ../../AI-Scripting-and-Mapping.md:53 msgid "" "Despite the key name being `DefaultLS800BkgdPal`, this applies to both " "shapes just like the original scenario-specific `LS800BkgdPal` does." msgstr "尽管标签名为 `DefaultLS800BkgdPal`,但实际上就像原本游戏中的 `LS800BkgdPal` 那样适用于两种情况。" -#: ../../AI-Scripting-and-Mapping.md:56 msgid "MCV redeploying" msgstr "基地车重新部署" -#: ../../AI-Scripting-and-Mapping.md:58 msgid "" "You can now decide whether MCV can redeploy in singleplayer campaign " "missions by setting `[Basic] -> MCVRedeploys`. Overrides " @@ -177,11 +149,9 @@ msgstr "" "现在你可以通过设置 `[Basic] -> MCVRedeploys` 来决定单人战役中的基地车能否重部署。这会覆盖 " "`[MultiplayerDialogSettings] -> MCVRedeploys` 但仅生效于单人战役地图中。" -#: ../../AI-Scripting-and-Mapping.md:66 msgid "Set par times and related string labels in missionmd.ini" msgstr "在 missionmd.ini 中设置最佳时间和相关字符串条目" -#: ../../AI-Scripting-and-Mapping.md:68 msgid "" "By default the singleplayer mission par times and message strings are " "defined in `[Ranking]` section of the map file itself. These can now also" @@ -191,11 +161,9 @@ msgstr "" "默认情况下单人战役地图的最佳通关时间和消息文本是在地图文件自身的 `[Ranking]` 小节中定义的。现在也可以在 " "`missionmd.ini` 的地图文件小节中设置这些值,并且这些值会优先于地图文件中的设置,若未设置则使用地图文件中的内容为默认值。" -#: ../../AI-Scripting-and-Mapping.md:82 msgid "Show briefing dialog on startup" msgstr "启动时显示简报对话框" -#: ../../AI-Scripting-and-Mapping.md:84 msgid "" "You can now have the briefing dialog screen show up on singleplayer " "campaign mission startup by setting `ShowBriefing` to true in map file's " @@ -207,7 +175,6 @@ msgstr "" "true 来使简报对话框在单人战役地图启动时显示。用户可以通过在 `RA2MD.INI` 中设置 `ShowBriefing` 为 false " "来禁用这一功能。" -#: ../../AI-Scripting-and-Mapping.md:85 msgid "" "`BriefingTheme` (In order of precedence from highest to lowest: map file," " `missionmd.ini`, side entry in `rulesmd.ini`) can be used to define a " @@ -217,7 +184,6 @@ msgstr "" "`BriefingTheme`(按优先级从高到低的顺序为:地图文件、`missionmd.ini`、`rulesmd.ini` " "中的阵营条目)可以用来定义在简报界面播放的自定义主题。若未设置则载入图主题会一直播放直至游戏场景实际开始。" -#: ../../AI-Scripting-and-Mapping.md:86 msgid "" "String labels for the startup briefing dialog screen's resume button as " "well as the button's status bar text can be customized by setting " @@ -229,27 +195,21 @@ msgstr "" "`ShowBriefingResumeButtonStatusLabel` " "来自定义启动简报对话框界面恢复按钮的字符串标签以及按钮的状态文本。它们默认为在其他情况下打开简报对话框界面时使用相同的标签" -#: ../../AI-Scripting-and-Mapping.md:108 msgid "In `uimd.ini`:" msgstr "在 `uimd.ini`:" -#: ../../AI-Scripting-and-Mapping.md:115 msgid "In `RA2MD.INI`:" msgstr "在 `RA2MD.INI`:" -#: ../../AI-Scripting-and-Mapping.md:121 msgid "Script Actions" msgstr "脚本动作" -#: ../../AI-Scripting-and-Mapping.md:123 msgid "`10000-10999` Ingame Actions" msgstr "`10000-10999` 游戏内行为" -#: ../../AI-Scripting-and-Mapping.md:125 msgid "`10000-10049` Attack Actions" msgstr "`10000-10049` 攻击行为" -#: ../../AI-Scripting-and-Mapping.md:127 msgid "" "These actions instruct the TeamType to use the TaskForce to approach and " "attack the target specified by the second parameter which is an index of " @@ -258,7 +218,6 @@ msgid "" "value)." msgstr "这些行为通过第二个参数指示小队类型使用特遣部队接近并攻击目标,该参数是一个通用预定义组的索引。请参阅下表以了解可能的行为(第一个参数)和参量(第二个参数值)。" -#: ../../AI-Scripting-and-Mapping.md:128 msgid "" "For threat-based attack actions `TargetSpecialThreatCoefficientDefault` " "and `EnemyHouseThreatBonus` tags from `rulesmd.ini` are accounted." @@ -266,14 +225,12 @@ msgstr "" "基于威胁值的攻击行为会考虑 `rulesmd.ini` 中的 `TargetSpecialThreatCoefficientDefault` 和 " "`EnemyHouseThreatBonus` 标签。" -#: ../../AI-Scripting-and-Mapping.md:129 msgid "" "All aircraft that attack other air units will end the script. This " "behavior is intentional because without it aircraft had some bugs that " "weren't fixable at the time of developing the feature." msgstr "所有攻击其他空中单位的战机在执行此脚本时会直接将其结束。由于如果没有这一效果那么战机类在开发此功能时存在一些无法修复的 Bug 因此这种行为是故意的" -#: ../../AI-Scripting-and-Mapping.md:130 msgid "" "`AITargetTypes` actions instruct the TeamType to use the TaskForce to " "approach and attack the target specified by the second parameter which is" @@ -284,161 +241,113 @@ msgstr "" "`AITargetTypes` 动作通过第二个参数指示小队类型使用特遣部队接近并攻击目标,该参数是 `AITargetTypes` 中一个由 " "modder 自行定义的组的索引。请参阅下表以了解可能的行为(第一个参数)和参量(第二个参数值)。" -#: ../../AI-Scripting-and-Mapping.md:132 ../../AI-Scripting-and-Mapping.md:216 -#: ../../AI-Scripting-and-Mapping.md:243 ../../AI-Scripting-and-Mapping.md:253 -#: ../../AI-Scripting-and-Mapping.md:263 ../../AI-Scripting-and-Mapping.md:273 -#: ../../AI-Scripting-and-Mapping.md:283 ../../AI-Scripting-and-Mapping.md:295 -#: ../../AI-Scripting-and-Mapping.md:305 ../../AI-Scripting-and-Mapping.md:315 -#: ../../AI-Scripting-and-Mapping.md:335 ../../AI-Scripting-and-Mapping.md:345 -#: ../../AI-Scripting-and-Mapping.md:355 ../../AI-Scripting-and-Mapping.md:365 -#: ../../AI-Scripting-and-Mapping.md:377 ../../AI-Scripting-and-Mapping.md:387 -#: ../../AI-Scripting-and-Mapping.md:397 ../../AI-Scripting-and-Mapping.md:407 -#: ../../AI-Scripting-and-Mapping.md:417 ../../AI-Scripting-and-Mapping.md:437 -#: ../../AI-Scripting-and-Mapping.md:451 ../../AI-Scripting-and-Mapping.md:462 -#: ../../AI-Scripting-and-Mapping.md:473 msgid "In `aimd.ini`:" msgstr "在 `aimd.ini`:" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "*Action*" msgstr "*行为*" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "*Argument*" msgstr "*参数*" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "*Repeats*" msgstr "*重复*" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "*Target Priority*" msgstr "*目标优先级*" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 -#: ../../AI-Scripting-and-Mapping.md:721 msgid "*Description*" msgstr "*描述*" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10000" msgstr "10000" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Target Type#" msgstr "目标类型 #" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "Yes" msgstr "是" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Closer" msgstr "较近的" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10001" msgstr "10001" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "No" msgstr "否" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Ends when a team member kill the designated target" msgstr "当一个小队成员击杀指定目标时结束" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10002" msgstr "10002" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "`AITargetTypes` index#" msgstr "`AITargetTypes` 索引 #" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10003" msgstr "10003" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10004" msgstr "10004" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Picks 1 random target from the list" msgstr "从列表中选取 1 个随机目标" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10005" msgstr "10005" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Farther" msgstr "较远的" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10006" msgstr "10006" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10007" msgstr "10007" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10008" msgstr "10008" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10009" msgstr "10009" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10010" msgstr "10010" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Closer, higher threat" msgstr "较近且威胁较高" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10011" msgstr "10011" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10012" msgstr "10012" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10013" msgstr "10013" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10014" msgstr "10014" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Farther, higher threat" msgstr "较远且威胁较高" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10015" msgstr "10015" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10016" msgstr "10016" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10017" msgstr "10017" -#: ../../AI-Scripting-and-Mapping.md:159 msgid "" "The following values are the *Target Type#* which can be used as second " "parameter of the new attack script actions:" msgstr "下列值为可用于新攻击脚本动作第二个参数的 **目标类型 #** 参数:" -#: ../../AI-Scripting-and-Mapping.md:160 msgid "" "'Buildings considered as vehicles' means buildings with both " "`UndeploysInto` set & `Foundation=1x1` and `ConsideredVehicle` not set or" @@ -447,49 +356,38 @@ msgstr "" "「被视为载具的建筑」意为那些同时设置了 `UndeploysInto` 和 `Foundation=1x1` 且没有设置 " "`ConsideredVehicle` 或者设置了 `ConsideredVehicle=true` 的建筑。" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "*Value*" msgstr "*值*" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "*Target Type*" msgstr "*目标类型*" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "1" msgstr "1" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Anything" msgstr "任何事物" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy `VehicleTypes`, `AircraftTypes`, `InfantryTypes` and " "`BuildingTypes`" msgstr "任何敌方 `载具类型`、`战机类型`、`步兵类型` 和 `建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "2" msgstr "2" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Structures" msgstr "建筑" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` that are not considered as vehicles" msgstr "任何敌方不被视为载具的 `建筑类型`。" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "3" msgstr "3" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Ore Miners" msgstr "矿车" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy `VehicleTypes` with `Harvester=yes` or `ResourceGatherer=yes`, " "`BuildingTypes` with `ResourceGatherer=yes`" @@ -497,117 +395,86 @@ msgstr "" "任何敌方拥有 `Harvester=yes` 或 `ResourceGatherer=yes` 的`载具类型`、拥有 " "`ResourceGatherer=yes` 的`建筑类型`。" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "4" msgstr "4" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Infantry" msgstr "步兵" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `InfantryTypes`" msgstr "任何地方`步兵类型`" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "5" msgstr "5" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Vehicles" msgstr "载具" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `VehicleTypes` or buildings considered as vehicles" msgstr "任何敌方`载具类型`或被视为载具的建筑" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "6" msgstr "6" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Factories" msgstr "工厂" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with a `Factory=` setting" msgstr "任何敌方拥有 `Factory=` 设置的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "7" msgstr "7" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Base Defenses" msgstr "基地防御" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with `IsBaseDefense=yes`" msgstr "任何敌方拥有 `IsBaseDefense=yes` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "8" msgstr "8" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "House Threats" msgstr "所属方威胁" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any object that targets anything of the Team's House or any enemy that is" " near to the Team Leader" msgstr "任何瞄准小队所属方单位或任何接近小队队长的敌人。" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "9" msgstr "9" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Power Plants" msgstr "电厂" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with positive `Power=` values" msgstr "任何敌方拥有正值 `Power=` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "10" msgstr "10" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Occupied" msgstr "驻营" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any `BuildingTypes` with garrisoned infantry" msgstr "任何敌方拥有步兵驻扎的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "11" msgstr "11" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Tech Buildings" msgstr "科技建筑" -#: ../../AI-Scripting-and-Mapping.md:52 -msgid "" -"Any `BuildingTypes` with `Unsellable=yes`, `Capturable=yes`, negative " -"`TechLevel=` values or appears in `[AI] -> NeutralTechBuildings=` list" -msgstr "" -"任何拥有 `Unsellable=yes`、`Capturable=yes`、负值 `TechLevel=` 或位于 `[AI] -> " -"NeutralTechBuildings=` 列表中的`建筑类型`" +msgid "Any `BuildingTypes` with `Capturable=yes` and `NeedsEngineer=yes`" +msgstr "任何拥有 `Capturable=yes` 和 `NeedsEngineer=yes` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "12" msgstr "12" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Refinery" msgstr "矿场" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy `BuildingTypes` with `Refinery=yes` or `ResourceGatherer=yes`, " "`VehicleTypes` with `ResourceGatherer=yes` & `Harvester=no` (i.e. Slave " @@ -616,58 +483,46 @@ msgstr "" "任何敌方拥有 `Refinery=yes` 或 `ResourceGatherer=yes` 的`建筑类型`、拥有 " "`ResourceGatherer=yes` 且 `Harvester=no` 的`载具类型`(即奴隶矿车)" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "13" msgstr "13" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Mind Controller" msgstr "心灵控制者" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Anything `VehicleTypes`, `AircraftTypes`, `InfantryTypes` and " "`BuildingTypes` with `MindControl=yes` in the weapons Warheads" msgstr "任何武器使用 `MindControl=yes` 弹头的`载具类型`、`战机类型`、`步兵类型`和`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "14" msgstr "14" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Air Units (incl. landed)" msgstr "空中单位(包括降落的)" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy, `AircraftTypes` and `Jumpjet=yes` `VehicleTypes` or " "`InfantryTypes`, including landed ones as well as any other currently " "airborne units" msgstr "任何敌方`战机类型`和拥有 `Jumpjet=yes` 的`载具类型`或`步兵类型`,包括已经降落的和任何其他当前仍在空中的单位" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "15" msgstr "15" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Naval" msgstr "海军" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy `BuildingTypes` and `VehicleTypes` with a `Naval=yes`, any " "enemy `VehicleTypes`, `AircraftTypes`, `InfantryTypes` in a water cell" msgstr "任何敌方拥有 `Naval=yes` 的`建筑类型`和`载具类型`,以及任何在水上单元格的`载具类型`、`战机类型`、`步兵类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "16" msgstr "16" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Disruptors" msgstr "阻扰者" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy objects with positive `InhibitorRange=` values, positive " "`RadarJamRadius=` values, `CloakGenerator=yes` or `GapGenerator=yes`" @@ -675,29 +530,23 @@ msgstr "" "任何敌方拥有正值 `InhibitorRange=`、正值 `RadarJamRadius=`、`CloakGenerator=yes` 或 " "`GapGenerator=yes` 的对象" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "17" msgstr "17" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Ground Vehicles" msgstr "地面载具" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy `VehicleTypes` without `Naval=yes`, landed `AircraftTypes` or " "buildings considered as vehicles" msgstr "任何敌方没有 `Naval=yes` 的`载具类型`、降落的`战机类型`或被视为载具的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "18" msgstr "18" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Economy" msgstr "经济相关" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy `VehicleTypes` with `Harvester=yes` or `ResourceGatherer=yes`, " "`BuildingTypes` with `Refinery=yes`, `ResourceGatherer=yes` or " @@ -706,240 +555,194 @@ msgstr "" "任何敌方拥有 `Harvester=yes` 或 `ResourceGatherer=yes` 的`载具类型`、拥有 " "`Refinery=yes`、`ResourceGatherer=yes` 或 `OrePurifier=yes` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "19" msgstr "19" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Infantry Factory" msgstr "兵营" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with `Factory=InfantryType`" msgstr "任何敌方拥有 `Factory=InfantryType` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "20" msgstr "20" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Vehicle Factory" msgstr "重工" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with with `Naval=no` and `Factory=UnitType`" msgstr "任何敌方拥有 `Naval=no` 和 `Factory=UnitType` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "21" msgstr "21" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Aircraft Factory" msgstr "机场" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with `Factory=AircraftType`" msgstr "任何敌方拥有 `Factory=AircraftType` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "22" msgstr "22" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Radar" msgstr "雷达" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with `Radar=yes` or `SpySat=yes`" msgstr "任何敌方拥有 `Radar=yes` 或 `SpySat=yes` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "23" msgstr "23" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Tech Lab" msgstr "高科" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` in `[AI]>BuildTech=` list" msgstr "任何敌方位于 `[AI]>BuildTech=` 列表中的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "24" msgstr "24" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Naval Factory" msgstr "船坞" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with `Naval=yes` and `Factory=UnitType`" msgstr "任何敌方拥有 `Naval=yes` 和 `Factory=UnitType` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "25" msgstr "25" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Super Weapon" msgstr "超武" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy `BuildingTypes` with `SuperWeapon=`, `SuperWeapon2=` or " "`SuperWeapons=`" msgstr "任何敌方拥有 `SuperWeapon=`、`SuperWeapon2=` 或 `SuperWeapons=` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "26" msgstr "26" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Construction Yard" msgstr "建造厂" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy `BuildingTypes` with `ConstructionYard=yes` and " "`Factory=BuildingType`" msgstr "任何敌方拥有 `ConstructionYard=yes` 和 `Factory=BuildingType` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "27" msgstr "27" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Neutrals" msgstr "中立" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any neutral object (Civilian)" msgstr "任何中立(平民)对象" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "28" msgstr "28" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Generators" msgstr "发生器" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with `CloakGenerator=yes` or `GapGenerator=yes`" msgstr "任何敌方拥有 `CloakGenerator=yes` 或 `GapGenerator=yes` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "29" msgstr "29" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Radar Jammer" msgstr "雷达干扰器" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy objects with positive `RadarJamRadius=` values" msgstr "任何敌方拥有正值 `RadarJamRadius=` 的对象" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "30" msgstr "30" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Inhibitors" msgstr "抑制者" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy objects with positive `InhibitorRange=` values" msgstr "任何敌方拥有正值 `InhibitorRange=` 的对象" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "31" msgstr "31" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Naval Units" msgstr "海军单位" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any enemy `VehicleTypes` with a `Naval=yes` or any enemy `VehicleTypes`, " "`AircraftTypes`, `InfantryTypes` in a water cell" msgstr "任何敌方拥有 `Naval=yes` 的`载具类型`或任何在水上单元格的`载具类型`、`战机类型`、`步兵类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "32" msgstr "32" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Mobile Units" msgstr "机动单位" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Anything `VehicleTypes`, `AircraftTypes` and `InfantryTypes`" msgstr "任何`载具类型`、`战机类型`和`步兵类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "33" msgstr "33" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Capturable" msgstr "可占领" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "" "Any `BuildingTypes` with `Capturable=yes` or any `BuildingTypes` with " -"`BridgeRepairHut=yes` and `Repairable=yes`" +"`BridgeRepairHut=yes` that are linked to broken bridges" msgstr "" -"任何拥有 `Capturable=yes` 的建筑或任何拥有 `BridgeRepairHut=yes` 和 `Repairable=yes` " -"的建筑" +"任何拥有 `Capturable=yes` 的建筑或任何拥有 `BridgeRepairHut=yes` 且与断桥关联的建筑" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "34" msgstr "34" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Area Threats" msgstr "区域威胁" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy object that is inside of the Team Leader's Guard Area" msgstr "任何敌方处于小队队长警戒区域内的对象" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "35" msgstr "35" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Vehicle & Naval Factory" msgstr "重工与船坞" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with `Factory=UnitType`" msgstr "任何敌方拥有 `Factory=UnitType` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "36" msgstr "36" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Non-defensive Structures" msgstr "非防御建筑" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Any enemy `BuildingTypes` with `IsBaseDefense=no`" msgstr "任何敌方拥有 `IsBaseDefense=no` 的`建筑类型`" -#: ../../AI-Scripting-and-Mapping.md:201 +msgid "37" +msgstr "37" + +msgid "Bridge Repair Huts" +msgstr "桥梁维修小屋" + +msgid "" +"Any `BuildingTypes`with `BridgeRepairHut=yes` that are linked to broken " +"bridges" +msgstr "任何拥有 `BridgeRepairHut=yes` 且与断桥关联的建筑" + msgid "" "The second parameter with a 0-based index for the `AITargetTypes` section" " specifies the list of possible `VehicleTypes`, `AircraftTypes`, " "`InfantryTypes` and `BuildingTypes` that can be evaluated." msgstr "第二个参数是 `AITargetTypes` 小节中从 0 开始的索引用于指定可选的`载具类型`、`战机类型`、`步兵类型`和`建筑类型`。" -#: ../../AI-Scripting-and-Mapping.md:202 msgid "" "The *`AITargetTypes` index#* values are obtained in the new " "`AITargetTypes` section that must be declared in `rulesmd.ini`:" @@ -947,94 +750,72 @@ msgstr "" "**`AITargetTypes` 索引 #** 值在新的 `AITargetTypes` 小节中获取,该小节必须在 `rulesmd.ini` " "中声明:" -#: ../../AI-Scripting-and-Mapping.md:212 msgid "`10050-10099` Move Team to Techno Location actions" msgstr "`10050-10099` 移动小队至科技类型位置行为" -#: ../../AI-Scripting-and-Mapping.md:214 msgid "" "These actions instructs the TeamType to use the TaskForce to approach the" " target specified by the second parameter. Look at the tables below for " "the possible actions (first parameter value)." msgstr "这些行为通过第二个参数指示小队类型使用特遣部队接近由其指定的目标。请参阅下表以了解可能的行为(第一个参数值)。" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "*Target Owner*" msgstr "*目标所属*" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10050" msgstr "10050" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Enemy" msgstr "敌方" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10051" msgstr "10051" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "`[AITargetType]` index#" msgstr "`[AITargetType]` 索引 #" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10052" msgstr "10052" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Picks 1 random target from the selected list" msgstr "在选中列表中选取 1 个随机目标" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10053" msgstr "10053" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Friendly" msgstr "友方" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10054" msgstr "10054" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10055" msgstr "10055" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10056" msgstr "10056" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10057" msgstr "10057" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10058" msgstr "10058" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10059" msgstr "10059" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10060" msgstr "10060" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "10061" msgstr "10061" -#: ../../AI-Scripting-and-Mapping.md:237 msgid "`10100-10999` General Purpose" msgstr "`10100-10999` 一般用途" -#: ../../AI-Scripting-and-Mapping.md:239 msgid "`10100` Timed Area Guard" msgstr "`10100` 时效性区域警戒" -#: ../../AI-Scripting-and-Mapping.md:241 msgid "" "Puts the TaskForce into Area Guard mode for the given units of time. " "Unlike the original timed Guard script action (`5,n`) that just stays in " @@ -1042,21 +823,17 @@ msgid "" "attacking nearby invaders or defending units that needs protection." msgstr "可以让特遣部队中的单位一定时间内进入区域警戒模式。与原本只能待在运抵进行基本的警戒命令(`5,n`)不同:它可以更主动地攻击入侵附近区域的目标或保护需要保护的单位。" -#: ../../AI-Scripting-and-Mapping.md:249 msgid "`10101` Wait Until Ammo is Full" msgstr "`10101` 等待弹药满载" -#: ../../AI-Scripting-and-Mapping.md:251 msgid "" "If the TaskForce contains unit(s) that use ammo then the the script will " "not continue until all these units have fully refilled the ammo." msgstr "如果特遣部队中包含使用弹药的单位那么在这些单位弹药满载前脚本不会继续。" -#: ../../AI-Scripting-and-Mapping.md:259 msgid "`10102` Regroup Temporarily Around the Team Leader" msgstr "`10102` 向小队队长集结" -#: ../../AI-Scripting-and-Mapping.md:261 msgid "" "Puts the TaskForce into Area Guard mode for the given amount of time " "around the Team Leader (this unit remains almost immobile until the " @@ -1066,11 +843,9 @@ msgstr "" "将特遣部队围绕小队队长(该单位在此期间几乎保持不动)进入区域警戒模式给定的事件值。默认的半径是 `[General] -> " "CloseEnough` 且单位不会离开此区域。" -#: ../../AI-Scripting-and-Mapping.md:269 msgid "`10103` Load onto Transports" msgstr "`10103` 装载入运输载具" -#: ../../AI-Scripting-and-Mapping.md:271 msgid "" "If the TaskForce contains unit(s) that can be carried by the transports " "of the same TaskForce then this action will make the units enter the " @@ -1078,11 +853,9 @@ msgid "" "until fully loaded\" (`43,0`) or the script will not continue." msgstr "如果特遣部队中包含可以被同一特遣部队的运输工具装载的单位,那么该行为会让这些单位进入运输工具。在单人任务地图中,下一个操作必须是等待到满载(`43,0`)否则脚本将不会继续执行。" -#: ../../AI-Scripting-and-Mapping.md:279 msgid "`10104` Chronoshift to Enemy Base" msgstr "`10104` 超时空传送至敌方基地" -#: ../../AI-Scripting-and-Mapping.md:281 msgid "" "Chronoshifts the members of the TeamType using first available " "`Type=ChronoSphere` superweapon to a location within `[General] -> " @@ -1095,15 +868,12 @@ msgstr "" "AISafeDistance`(加上参数中定义的可为负值的额外距离)格的位置。超级武器必须先加载到 `[General] -> " "AIMinorSuperReadyPercent` 所指定百分比才能被此行为考虑。" -#: ../../AI-Scripting-and-Mapping.md:289 msgid "`12000-12999` Suplementary/Setup Pre-actions" msgstr "`12000-12999` 补充/设定预设动作。" -#: ../../AI-Scripting-and-Mapping.md:291 msgid "`12000` Wait if No Target Found" msgstr "`12000` 无目标情况下等待" -#: ../../AI-Scripting-and-Mapping.md:293 msgid "" "When executed before a new Attack ScriptType actions like `Generic Target" " Type Attack` actions and `AITargetTypes Attack` actions the TeamType " @@ -1116,11 +886,9 @@ msgstr "" "当在例如新的 `通用目标类型攻击` 动作和 `AITargetTypes 攻击` 脚本动作执行前小队类型会考虑如果未选择目标则必须等待 1 " "秒。第二个参数是一个用于指定未找到目标时充实多少次然后才放弃新的攻击脚本动作并跳转到下一行的参数。默认值 `0` 表示无限次重试。" -#: ../../AI-Scripting-and-Mapping.md:301 msgid "`12001` Modify Target Distance" msgstr "`12001` 修改目标距离" -#: ../../AI-Scripting-and-Mapping.md:303 msgid "" "By default `Move Team to Techno Location` actions ends when the Team " "Leader reaches a distance declared in `rulesmd.ini` called `CloseEnough`." @@ -1132,50 +900,39 @@ msgstr "" "距离时结束。当该行为在`移动小队至科技类型位置`前执行时会覆盖 `CloseEnough` " "值。这一行为仅对接下来的第一次执行效果有影响而之后再下一次移动时仍会继续使用 `CloseEnough`。" -#: ../../AI-Scripting-and-Mapping.md:311 msgid "`12002` Set Move Action End Mode" msgstr "`12002` 设置移动结束参数" -#: ../../AI-Scripting-and-Mapping.md:313 msgid "" "Sets how the Movement actions ends and jumps to the next line. This " "action works only the first time and `CloseEnough` will be used again the" " next Movement action." msgstr "设置移动动作结束并跳转到下一行的方式。此操作仅在第一次执行时有效,下次移动时仍会恢复使用 `CloseEnough`。" -#: ../../AI-Scripting-and-Mapping.md:321 msgid "The possible argument values are:" msgstr "可选参数有:" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "*Action ends when...*" msgstr "*动作结束于...*" -#: ../../AI-Scripting-and-Mapping.md:52 ../../AI-Scripting-and-Mapping.md:489 msgid "0" msgstr "0" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "Team Leader reaches the minimum distance" msgstr "小队队长抵达最小距离" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "One unit reaches the minimum distance" msgstr "一个单位抵达最小距离" -#: ../../AI-Scripting-and-Mapping.md:52 msgid "All team members reached the minimum distance" msgstr "所有小队成员抵达最小距离" -#: ../../AI-Scripting-and-Mapping.md:329 msgid "`14000-14999` Utility Actions" msgstr "`14000-14999` 工具行为" -#: ../../AI-Scripting-and-Mapping.md:331 msgid "`14000` Team's Trigger Weight Reward" msgstr "`14000` 设置小队权重奖励" -#: ../../AI-Scripting-and-Mapping.md:333 msgid "" "When executed before a new Attack ScriptType actions like `Generic Target" " Type Attack` actions and `AITargetTypes Attack` actions the TeamType " @@ -1189,11 +946,9 @@ msgstr "" "脚本动作执行前小队类型会考虑如果小队目标被小队成员杀死则必须奖励增加 AI " "触发的当前权重。当前权重不会超过AI触发最小权重和最大权重的限制。第二个参数是一个正整数。" -#: ../../AI-Scripting-and-Mapping.md:341 msgid "`14001` Increase AI Trigger Current Weight" msgstr "`14001` 增加AI触发权重" -#: ../../AI-Scripting-and-Mapping.md:343 msgid "" "When executed this increases the current weight of the AI Trigger. The " "current weight will never surprass the minimum weight and maximum weight " @@ -1209,64 +964,51 @@ msgstr "" "AI 触发当前权重。第二个参数是一个正整数。注意原版游戏在 AI 触发周期结束时会使用两个小队中的第一个来计算 AI " "触发当前权重,此行为不检查小队是 AI 触发中的第一个还是第二个并在执行行为时计算当前权重。" -#: ../../AI-Scripting-and-Mapping.md:351 msgid "`14002` Decrease AI Trigger Current Weight" msgstr "`14002` 降低AI触发权重" -#: ../../AI-Scripting-and-Mapping.md:353 msgid "" "When executed this decreases the current weight of the AI Trigger. " "Details same as above." msgstr "当执行此行为时减少 AI 触发的当前权重。细则同上。" -#: ../../AI-Scripting-and-Mapping.md:361 msgid "`14003` Unregister Team Success" msgstr "`14003` 撤销小队成功" -#: ../../AI-Scripting-and-Mapping.md:363 msgid "" "Is just the opposite effect of the script action `49,0`. Like if the Team" " failed." msgstr "与脚本动作 `49,0` 相反的效果。类似小队失败。" -#: ../../AI-Scripting-and-Mapping.md:371 msgid "`16000-16999` Flow Control" msgstr "`16000-16999` 流程控制" -#: ../../AI-Scripting-and-Mapping.md:373 msgid "`16000` Start a Timed Jump to the Same Line" msgstr "`16000` 定时跳转至同一行" -#: ../../AI-Scripting-and-Mapping.md:375 msgid "" "When the timer ends the current script action ends and start again the " "same script action. The timer jump repeats again (infinite loop) until is" " stopped with action `16002` or the team is destroyed." msgstr "当计时器结束时当前脚本动作结束并重新开始同一动作。计时器会会一直重复跳转(无限循环)直到被 `16002` 号结果打断或小队被摧毁。" -#: ../../AI-Scripting-and-Mapping.md:383 msgid "`16001` Start a Timed Jump to the Next Line" msgstr "`16001` 定时跳转至下一行" -#: ../../AI-Scripting-and-Mapping.md:385 msgid "" "When the timer ends the current script action ends and start the next one" " in the script type list." msgstr "当计时器结束时当前脚本动作结束并开始脚本类型列表中下一个动作。" -#: ../../AI-Scripting-and-Mapping.md:393 msgid "`16002` Stop the Timed Jumps" msgstr "`16002` 停止定时跳转" -#: ../../AI-Scripting-and-Mapping.md:395 msgid "If the Timed Jumps were activated this action stop the process." msgstr "如果激活了定时跳转则该动作将停止进程。" -#: ../../AI-Scripting-and-Mapping.md:403 msgid "`16003` Randomly Skip Next Action" msgstr "`16003` 随机跳过下一行" -#: ../../AI-Scripting-and-Mapping.md:405 msgid "" "When executed this action picks a random value between 1 and 100. If the " "value is equal or below the second parameter then the next action will be" @@ -1276,18 +1018,15 @@ msgstr "" "执行该动作时会挑选一个在 1 和 100 之间的随机数,如果数值小于等于第二个参数则跳过下一个动作。第二个参数为 0 表示永远不会跳过下一个动作而" " 100 表示永远跳过下一个动作。" -#: ../../AI-Scripting-and-Mapping.md:413 msgid "`16004` Pick a Random Script" msgstr "`16004` 随机选取脚本" -#: ../../AI-Scripting-and-Mapping.md:415 msgid "" "When executed this action picks a random Script Type and replaces the " "current script by the new picked one. The second parameter is a 0-based " "index from the new section `AIScriptsList` explained below." msgstr "当执行此行为时会随机选取一个新的脚本类型并替换当前脚本。第二个参数是新的 `AIScriptsList` 小节下从 0 开始的索引。" -#: ../../AI-Scripting-and-Mapping.md:423 msgid "" "The second parameter is a 0-based index for the `AIScriptsList` section " "that specifies the list of possible `ScriptTypes` that can be evaluated. " @@ -1295,95 +1034,76 @@ msgid "" "making this script work:" msgstr "第二个参数是 `AIScriptsList` 小节下从 0 开始的索引,该小节必须在 `rulesmd.ini` 中声明才能使此脚本生效:" -#: ../../AI-Scripting-and-Mapping.md:433 msgid "`16005` Jump Back To Previous Script" msgstr "`16005` 跳回上一个脚本" -#: ../../AI-Scripting-and-Mapping.md:435 msgid "" "Used in a Random Script picked by action `94`. It can jump back to the " "previous script, and continue in the line after `x=94,n`." msgstr "在由 `94` 号动作选择的随机脚本中使用可以使其跳回到上一个脚本,并继续执行 `x=94,n` 之后的行。" -#: ../../AI-Scripting-and-Mapping.md:443 msgid "`18000-18999` Variable Manipulation" msgstr "`18000-18999` 变量操作" -#: ../../AI-Scripting-and-Mapping.md:445 msgid "`18000-18023` Edit Variable" msgstr "`18000-18023` 编辑变量" -#: ../../AI-Scripting-and-Mapping.md:447 ../../AI-Scripting-and-Mapping.md:507 msgid "Operate a variable's value." msgstr "计算一个变量值。" -#: ../../AI-Scripting-and-Mapping.md:448 msgid "" "The variable's value type is int16 instead of int32 in trigger actions " "for some reason, which means it ranges from -2^15 to 2^15-1." msgstr "变量值由于某些原因在触发行为中值类型为 int16 而非 int32,这表示它的范围是从 -2^15 到 2^15-1。" -#: ../../AI-Scripting-and-Mapping.md:449 ../../AI-Scripting-and-Mapping.md:509 msgid "**Any numbers exceeding this limit will lead to unexpected results!**" msgstr "**任何超出此范围限制的数值都可能导致无法预测的结果!**" -#: ../../AI-Scripting-and-Mapping.md:457 msgid "`18024 - 18047` Edit Variable using Local Variable" msgstr "`18024 - 18047` 使用局部变量编辑变量" -#: ../../AI-Scripting-and-Mapping.md:459 msgid "Operate a variable's value using a local variable's value." msgstr "使用局部变量的值来操作变量的值。" -#: ../../AI-Scripting-and-Mapping.md:460 msgid "" "Similar to `18000-18023`, but the number to operate the value is being " "read from a local variable." msgstr "类似于 `18000-18023`,但用于操作值的数字是从局部变量中读取的。" -#: ../../AI-Scripting-and-Mapping.md:468 msgid "`18000 - 18071` Edit Variable using Global Variable" msgstr "`18000 - 18071` 使用全局变量编辑变量" -#: ../../AI-Scripting-and-Mapping.md:470 msgid "Operate a variable's value using a global variable's value." msgstr "使用全局变量的值来操作变量的值。" -#: ../../AI-Scripting-and-Mapping.md:471 msgid "" "Similar to `18000-18023`, but the number to operate the value is being " "read from a global variable." msgstr "类似于 `18000-18023`,但用于操作值的数字是从全局变量中读取的。" -#: ../../AI-Scripting-and-Mapping.md:479 msgid "`19000-19999` Miscellanous/Uncategorized" msgstr "`19000-19999` 杂项/未分类" -#: ../../AI-Scripting-and-Mapping.md:481 msgid "This category is empty for now." msgstr "此类别目前为空。" -#: ../../AI-Scripting-and-Mapping.md:483 msgid "Trigger Actions" msgstr "触发结果" -#: ../../AI-Scripting-and-Mapping.md:485 msgid "`500` Save Game" msgstr "`500` 单人任务存档" -#: ../../AI-Scripting-and-Mapping.md:487 msgid "Save the current game immediately." msgstr "立即保存当前游戏。" -#: ../../AI-Scripting-and-Mapping.md:490 msgid "" "For this action to work in multiplayer - you need to use a version of " "[YRpp spawner](https://github.com/CnCNet/yrpp-spawner) with multiplayer " "saves support." msgstr "" -"要让此结果用于多人游戏,你必须使用支持多人存档后的 [YRpp spawner](https://github.com/CnCNet/yrpp-spawner) 版本。" +"要让此结果用于多人游戏,你必须使用支持多人存档后的 [YRpp spawner](https://github.com/CnCNet/yrpp-" +"spawner) 版本。" -#: ../../AI-Scripting-and-Mapping.md:493 msgid "" "These vanilla CSF entries will be used: `TXT_SAVING_GAME`, " "`TXT_GAME_WAS_SAVED` and `TXT_ERROR_SAVING_GAME`." @@ -1391,479 +1111,359 @@ msgstr "" "这些原有 CSF 条目将会被使用:`TXT_SAVING_GAME`、`TXT_GAME_WAS_SAVED` 和 " "`TXT_ERROR_SAVING_GAME`。" -#: ../../AI-Scripting-and-Mapping.md:494 msgid "The save's description will look like `MapDescName - CSFText`." msgstr "存档描述将会类似 `地图描述名称 - CSF文本`。" -#: ../../AI-Scripting-and-Mapping.md:495 msgid "For example: `Allied Mission 25: Esther's Money - Money Stolen`." msgstr "例如:`盟军战役25: 僵僵の钱 - 钱全被偷光了!`。" -#: ../../AI-Scripting-and-Mapping.md:497 ../../AI-Scripting-and-Mapping.md:511 -#: ../../AI-Scripting-and-Mapping.md:538 ../../AI-Scripting-and-Mapping.md:550 -#: ../../AI-Scripting-and-Mapping.md:563 ../../AI-Scripting-and-Mapping.md:589 -#: ../../AI-Scripting-and-Mapping.md:602 ../../AI-Scripting-and-Mapping.md:614 -#: ../../AI-Scripting-and-Mapping.md:628 ../../AI-Scripting-and-Mapping.md:655 -#: ../../AI-Scripting-and-Mapping.md:682 ../../AI-Scripting-and-Mapping.md:707 -#: ../../AI-Scripting-and-Mapping.md:725 ../../AI-Scripting-and-Mapping.md:739 msgid "In `mycampaign.map`:" msgstr "在 `mycampaign.map`:" -#: ../../AI-Scripting-and-Mapping.md:505 msgid "`501` Edit Variable" msgstr "`501` 编辑变量" -#: ../../AI-Scripting-and-Mapping.md:508 msgid "" "The variable's value type is int32, which means it ranges from -2^31 to " "2^31-1." msgstr "变量值为 int32,这表示它的范围是从 -2^31 到 2^31-1。" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "*Operation*" msgstr "*操作*" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = Number" msgstr "当前值 = 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = CurrentValue + Number" msgstr "当前值 = 当前值 + 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = CurrentValue - Number" msgstr "当前值 = 当前值 - 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = CurrentValue * Number" msgstr "当前值 = 当前值 * 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = CurrentValue / Number" msgstr "当前值 = 当前值/数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = CurrentValue % Number" msgstr "当前值 = 当前值 % 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = CurrentValue leftshift Number" msgstr "当前值 = 当前值 左移 数字 位" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = CurrentValue rightshift Number" msgstr "当前值 = 当前值 右移 数字 位" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = ~CurrentValue" msgstr "当前值 = 当前值 按位取反" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = CurrentValue xor Number" msgstr "当前值 = 当前值 异或 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = CurrentValue or Number" msgstr "当前值 = 当前值 位或 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = CurrentValue and Number" msgstr "当前值 = 当前值 位与 数字" -#: ../../AI-Scripting-and-Mapping.md:534 msgid "`502` Generate random number" msgstr "`502` 生成随机数" -#: ../../AI-Scripting-and-Mapping.md:536 msgid "" "Generate a random integer ranged in [Min, Max] and store it in a given " "variable." msgstr "在 [Min, Max] 范围内生成一个随机整数并存入给定变量。" -#: ../../AI-Scripting-and-Mapping.md:546 msgid "`503` Print variable value" msgstr "`503` 输出变量的值" -#: ../../AI-Scripting-and-Mapping.md:548 msgid "Print a variable value to the message list." msgstr "输出变量值至消息列表。" -#: ../../AI-Scripting-and-Mapping.md:558 msgid "`504` Binary Operation" msgstr "`504` 变量间计算" -#: ../../AI-Scripting-and-Mapping.md:560 msgid "Operate a variable's value with another variable's value." msgstr "将两个变量的值进行计算。" -#: ../../AI-Scripting-and-Mapping.md:561 msgid "Similar to `501`, but the operation number is read from another variable." msgstr "类似 `501`,但计算数值读取自另一变量。" -#: ../../AI-Scripting-and-Mapping.md:571 msgid "`Operation` can be looked up at action `501`." msgstr "`Operation` 可以见上 `501` 号动作。" -#: ../../AI-Scripting-and-Mapping.md:573 msgid "`505` Fire Super Weapon at specified location" msgstr "`505` 在坐标释放超级武器" -#: ../../AI-Scripting-and-Mapping.md:575 ../../AI-Scripting-and-Mapping.md:599 msgid "**Use with caution**" msgstr "**谨慎使用**" -#: ../../AI-Scripting-and-Mapping.md:576 msgid "" "Launch a Super Weapon from `[SuperWeaponTypes]` list at a specified " "location." msgstr "在指定位置发射 `[SuperWeaponTypes]` 列表中的超级武器。" -#: ../../AI-Scripting-and-Mapping.md:577 msgid "`HouseIndex` can take various values:" msgstr "`HouseIndex` 可取以下值:" -#: ../../AI-Scripting-and-Mapping.md:489 ../../AI-Scripting-and-Mapping.md:721 msgid "*House Index*" msgstr "*所属方索引*" -#: ../../AI-Scripting-and-Mapping.md:489 ../../AI-Scripting-and-Mapping.md:721 msgid ">= 0" msgstr ">= 0" -#: ../../AI-Scripting-and-Mapping.md:489 ../../AI-Scripting-and-Mapping.md:721 msgid "The index of the current House in the map" msgstr "地图上当前所属方的索引" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "4475-4482" msgstr "4475-4482" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "Like in the index range 0-7" msgstr "类似范围 0-7 的索引" -#: ../../AI-Scripting-and-Mapping.md:489 ../../AI-Scripting-and-Mapping.md:721 msgid "-1" msgstr "-1" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "Pick a random House that isn't Neutral" msgstr "选择一个非中立的随机所属方" -#: ../../AI-Scripting-and-Mapping.md:489 ../../AI-Scripting-and-Mapping.md:721 msgid "-2" msgstr "-2" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "Pick the first Neutral House" msgstr "选择第一个中立所属方" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "-3" msgstr "-3" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "Pick a random Human Player" msgstr "选择随机人类玩家" -#: ../../AI-Scripting-and-Mapping.md:587 msgid "" "Coordinates X & Y can take possitive values or -1, in which case these " "values can take a random value from the visible map area." msgstr "坐标的 X 和 Y 可以使用正数值或使用 -1 来表示在可视区域内随机。" -#: ../../AI-Scripting-and-Mapping.md:597 msgid "`506` Fire Super Weapon at specified Waypoint" msgstr "`506` 在路径点释放超级武器" -#: ../../AI-Scripting-and-Mapping.md:600 msgid "" "Launch a Super Weapon from `[SuperWeaponTypes]` list at a specified " "waypoint." msgstr "在指定路径点发射 `[SuperWeaponTypes]` 列表中的超级武器。" -#: ../../AI-Scripting-and-Mapping.md:610 msgid "`510` Toggle MCV redeployablility" msgstr "`510` 切换基地重新部署设定" -#: ../../AI-Scripting-and-Mapping.md:612 msgid "Force MCV's redeployablility by setting the third parameter." msgstr "通过设置第三个参数强制基地车能否重部署。" -#: ../../AI-Scripting-and-Mapping.md:622 msgid "Trigger events" msgstr "触发条件" -#: ../../AI-Scripting-and-Mapping.md:624 msgid "`500-511` Variable comparation" msgstr "`500-511` 变量比较" -#: ../../AI-Scripting-and-Mapping.md:626 msgid "Compares the variable's value with given number." msgstr "比较变量值与给定值。" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "*Event ID*" msgstr "*条件 ID*" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "*Global*" msgstr "全局" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "500" msgstr "500" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue > Number" msgstr "当前值 > 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "501" msgstr "501" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue < Number" msgstr "当前值 < 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "502" msgstr "502" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "503" msgstr "503" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue >= Number" msgstr "当前值 >= 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "504" msgstr "504" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue <= Number" msgstr "当前值 <= 数字" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "505" msgstr "505" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue & Number" msgstr "当前值 & 数字 != 0" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "506" msgstr "506" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "507" msgstr "507" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "508" msgstr "508" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "509" msgstr "509" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "510" msgstr "510" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "511" msgstr "511" -#: ../../AI-Scripting-and-Mapping.md:651 msgid "`512-523` Variable comparation with local variable" msgstr "`512-523` 变量与局部变量比较" -#: ../../AI-Scripting-and-Mapping.md:653 msgid "Compares the variable's value with given local variable value." msgstr "比较变量值与给定局部变量值。" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "512" msgstr "512" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue > LocalVariableValue" msgstr "当前值 > 局部变量值" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "513" msgstr "513" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue < LocalVariableValue" msgstr "当前值 < 局部变量值" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "514" msgstr "514" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = LocalVariableValue" msgstr "当前值 = 局部变量值" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "515" msgstr "515" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue >= LocalVariableValue" msgstr "当前值 >= 局部变量值" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "516" msgstr "516" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue <= LocalVariableValue" msgstr "当前值 <= 局部变量值" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "517" msgstr "517" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue & LocalVariableValue" msgstr "当前值 & 局部变量值 != 0" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "518" msgstr "518" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "519" msgstr "519" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "520" msgstr "520" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "521" msgstr "521" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "522" msgstr "522" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "523" msgstr "523" -#: ../../AI-Scripting-and-Mapping.md:678 msgid "`524-535` Variable comparation with global variable" msgstr "`524-535` 变量与全局变量比较" -#: ../../AI-Scripting-and-Mapping.md:680 msgid "Compares the variable's value with given global variable value." msgstr "比较变量值与给定全局变量值。" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "524" msgstr "524" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue > GlobalVariableValue" msgstr "当前值 > 全局变量值" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "525" msgstr "525" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue < GlobalVariableValue" msgstr "当前值 < 全局变量值" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "526" msgstr "526" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue = GlobalVariableValue" msgstr "当前值 = 全局变量值" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "527" msgstr "527" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue >= GlobalVariableValue" msgstr "当前值 >= 全局变量值" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "528" msgstr "528" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue <= GlobalVariableValue" msgstr "当前值 <= 全局变量值" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "529" msgstr "529" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "CurrentValue & GlobalVariableValue" msgstr "当前值 & 全局变量值 != 0" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "530" msgstr "530" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "531" msgstr "531" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "532" msgstr "532" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "533" msgstr "533" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "534" msgstr "534" -#: ../../AI-Scripting-and-Mapping.md:489 msgid "535" msgstr "535" -#: ../../AI-Scripting-and-Mapping.md:705 msgid "`600` The shield of the attached object is broken" msgstr "`600` 对象护盾被摧毁" -#: ../../AI-Scripting-and-Mapping.md:715 msgid "`601-602` House owns/doesn't own Techno Type" msgstr "`601-602` 检查所属方是否有/无科技类型" -#: ../../AI-Scripting-and-Mapping.md:717 msgid "" "`601`: Springs when specified house owns at least 1 instance of set " "TechnoType." msgstr "`601`:当指定所属方至少拥有一个设定的科技类型时触发。" -#: ../../AI-Scripting-and-Mapping.md:718 msgid "" "`602`: Springs when specified house doesn't own a single instance of set " "TechnoType." msgstr "`602`:当指定所属方没有任何一个设定的科技类型时触发。" -#: ../../AI-Scripting-and-Mapping.md:719 msgid "Multiplayer houses (indices 4475 through 4482) are supported." msgstr "多人游戏所属方(索引 4475 至 4482)支持。" -#: ../../AI-Scripting-and-Mapping.md:722 msgid "" "These events, as opposed to [events 81 & 82 from Ares](https://ares-" "developers.github.io/Ares-docs/new/triggerevents.html#house-owns-techno-" @@ -1874,31 +1474,25 @@ msgstr "" "docs/new/triggerevents.html#house-owns-techno-" "type-81-82)不同,这些使用条件中的所属方参数而不是触发的所有者。" -#: ../../AI-Scripting-and-Mapping.md:733 msgid "`604-605` Checking if a specific Techno enters in a cell" msgstr "`604-605` 检查特定科技类型进入单元格" -#: ../../AI-Scripting-and-Mapping.md:735 msgid "" "`604`: Checks if the techno that entered in the cell has the same ID " "specified in the event." msgstr "`604`:检查进入单元格的科技类型是否与条件中指定的 ID相同。" -#: ../../AI-Scripting-and-Mapping.md:736 msgid "" "`605`: Checks if the techno that entered in the cell appears in the " "selected list in `AITargetTypes`." msgstr "`605`:检查进入单元格的科技类型是否出现在选定的 `AITargetTypes` 列表中。" -#: ../../AI-Scripting-and-Mapping.md:737 msgid "`HouseIndex` can be customized to focus in a specified house." msgstr "`HouseIndex` 可以自定义为指定所属方。" -#: ../../AI-Scripting-and-Mapping.md:721 msgid "This value is ignored (any house is valid)" msgstr "该值将被忽略(任何所属方均有效)" -#: ../../AI-Scripting-and-Mapping.md:721 msgid "Pick the owner of the map trigger" msgstr "选择地图触发的所有者" diff --git a/docs/locale/zh_CN/LC_MESSAGES/CREDITS.po b/docs/locale/zh_CN/LC_MESSAGES/CREDITS.po index 7500d7c2bc..4324efcbee 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/CREDITS.po +++ b/docs/locale/zh_CN/LC_MESSAGES/CREDITS.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Phobos \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-23 22:17+0800\n" +"POT-Creation-Date: 2026-06-30 21:43+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -779,8 +779,10 @@ msgstr "围墙卖坦克 Bug 的修复" msgid "" "Fix vehicles disguised as trees incorrectly displaying veterancy insignia" " when they shouldn't" -msgstr "" -"修复了伪装成树的载具错误显示出军衔(能打人的精英树)的问题" +msgstr "修复了伪装成树的载具错误显示出军衔(能打人的精英树)的问题" + +msgid "GapGen + SpySat desync fix" +msgstr "裂缝产生器和间谍卫星的不同步修复" msgid "**Morton (MortonPL)**:" msgstr "**Morton (MortonPL)**:" @@ -1261,6 +1263,35 @@ msgid "" "death by vanish will cause tank get stuck and game will crash quickly" msgstr "修复了坦克碉堡中的载具使用 `AutoDeath.Behavior=vanish` 会导致坦克卡住并且游戏立即崩溃的 Bug" +msgid "" +"Fix the issue that power output of building on tooltip won't consider " +"power enhancer" +msgstr "修复了建筑拓展工具提示信息中的发电量数值未考虑电厂增幅器的问题" + +msgid "" +"Fix the bug that the upgrade building's power-enhancing effect depends " +"only on its parent building and is not related to the upgrade building " +"itself" +msgstr "修复了加载物建筑的电厂增幅效果仅取决于其基底建筑而非加载物建筑自身的 Bug" + +msgid "" +"Fix a bug where updating the `OpenTopped` attribute during convert did " +"not update the coordinates of passengers" +msgstr "修复了类型转换会更新 `OpenTopped` 属性却不更新乘客坐标的 Bug" + +msgid "" +"Fix the bug where passengers, when their transport unit is removed, would" +" cause incorrect `LimboTracker` counts due to either having their " +"destructor called directly (bypassing `UnInit`) or nested `UnInit` calls " +"resetting the deletion flag too early, thereby breaking auto-death and " +"superweapon auxiliary techno checks" +msgstr "" +"修复了乘客在其所在的运输工具被移除时,因被直接调用析构函数(绕过 `UnInit` )或 `UnInit` 嵌套调用导致删除标志过早重置,从而使 " +"`LimboTracker` 计数错误,进而影响自动死亡及超武辅助单位判定的 Bug" + +msgid "Fix the bug that the vanilla `SecondSpawnOffset` no longer takes effect" +msgstr "修复了原版 `SecondSpawnOffset` 不再生效的 Bug" + msgid "**Apollo** - Translucent SHP drawing patches" msgstr "**Apollo** - 半透明 SHP 绘制补丁" @@ -1665,6 +1696,9 @@ msgstr "**Dmitry Volkov** - 广泛且深入的测试" msgid "**Rise of the East community** - extensive playtesting of in-dev features" msgstr "**东方崛起社区** - 对开发功能的广泛测试" -msgid "**CnCRazer** - Wall overlay unit sell exploit fix" -msgstr "**CnCRazer** - 围墙卖坦克 Bug 的修复" +msgid "**RAZER**:" +msgstr "**RAZER**:" + +msgid "Multiplayer gamespeed fix for RealTimeTimers" +msgstr "多人联机所用游戏速度下的实时计时器修复" diff --git a/docs/locale/zh_CN/LC_MESSAGES/Contributing.po b/docs/locale/zh_CN/LC_MESSAGES/Contributing.po index 50673ff1be..78901fba0d 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/Contributing.po +++ b/docs/locale/zh_CN/LC_MESSAGES/Contributing.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Phobos \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-23 13:00+0800\n" +"POT-Creation-Date: 2026-06-30 21:43+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,445 +17,18 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.16.0\n" -#: ../../Contributing.md:1 msgid "Contributing" msgstr "贡献" -#: ../../Contributing.md:3 -msgid "" -"This page describes ways to help or contribute to Phobos and lists the " -"contributing guidelines that are used in the project." -msgstr "此页面介绍了协助或为 Phobos 项目做出贡献的方法,并列出了项目中所用的贡献指南。" - -#: ../../Contributing.md:5 -msgid "Guidelines for contributors" -msgstr "对贡献者的指导" - -#: ../../Contributing.md:7 -msgid "Project structure" -msgstr "项目结构" - -#: ../../Contributing.md:9 -msgid "" -"Assuming you've successfully cloned and built the project before getting " -"here, you should end up with the following project structure:" -msgstr "假设你已经成功克隆并构建了项目,你应当看到以下结构:" - -#: ../../Contributing.md:10 -msgid "`src/` - all the project's source code resides here." -msgstr "`src/` - 项目所有的源代码。" - -#: ../../Contributing.md:11 -msgid "" -"`Commands/` - source code for new hotkey commands. Every command is a new" -" class that inherits from `PhobosCommandClass` (defined in `Commands.h`) " -"and is defined in a separate file with a few methods and then registered " -"in `Commands.cpp`." -msgstr "" -"`Commands/` - 新快捷键命令源码。每个新的快捷键类均继承自 `PhobosCommandClass`(定义在 `Commands.h`" -" 中)并在一个单独的文件中用几种方法定义然后注册到 `Commands.cpp`中。" - -#: ../../Contributing.md:12 -msgid "`New/` - source code for new ingame classes." -msgstr "`New/` - 新增游戏内类的源码。" - -#: ../../Contributing.md:13 -msgid "" -"`Type/` - new enumerated types (types that are declared with a list " -"section in an INI, for example, radiation types) implemented in the " -"project. Every enumerated type class inherits `Enumerable` (where `T` " -"is an enum. type class) class that is defined in `Enumerable.h`." -msgstr "" -"`Type/` - 新增枚举类型(即需要在 INI 文件中通过注册表部分声明的类型,例如辐射类型)。每个枚举类型类都继承自 " -"`Enumerable.h` 中定义的 `Enumerable` 类(这里的 `T` 是枚举类型名)。" - -#: ../../Contributing.md:14 -msgid "`Entity/` - classes that represent ingame entities are located here." -msgstr "`Entity/` - 表示游戏内实体的类均在此。" - -#: ../../Contributing.md:15 -msgid "" -"`Ext/` - source code for vanilla engine class extensions. Each class " -"extension is kept in a separate folder named after vanilla engine class " -"name and contains the following:" -msgstr "`Ext/` - 原版引擎类的扩展类源码。每个扩展类都保存在一个以原版类命名的单独文件夹中,并包含以下内容:" - -#: ../../Contributing.md:16 -msgid "" -"`Body.h` and `Body.cpp` contain class and method definitions/declarations" -" and common extension hooks. Each extension class must contain the " -"following to work correctly:" -msgstr "`Body.h` 与 `Body.cpp` 包含了类和方法的定义/声明以及标准扩展钩子。每个扩展类必须包含下列内容才能正确工作:" - -#: ../../Contributing.md:17 -msgid "" -"`ExtData` - extension data class definition which inherits `Extension`" -" from `Container.h` (where `T` is the class that is being extended), " -"which is the actual class that contains new data for vanilla classes;" -msgstr "" -"`ExtData` - 继承自 `Container.h` 中 `Extension` 的扩展数据类(其中 `T` " -"是被扩展的类),这也是包含了原版类中新数据的实际类型;" - -#: ../../Contributing.md:18 -msgid "" -"`ExtContainer` - a definition of a special map class to store and look up" -" `ExtData` instances for base class instances which inherits " -"`Container` from `Container.h` (where `T` is the extension data " -"class);" -msgstr "" -"`ExtContainer` - 一个特殊的映射类的定义,用于储存和查找继承自 `Container.h` 的 `Container` " -"的基类实例的 `ExtData` 类;" - -#: ../../Contributing.md:19 -msgid "`ExtMap` - a static instance of `ExtContainer` map;" -msgstr "`ExtMap` - `ExtContainer` 的静态实例;" - -#: ../../Contributing.md:20 -msgid "" -"constructor, destructor, serialization, deserialization and (for " -"appropriate classes) INI reading hooks." -msgstr "构造函数,析构函数,序列化,反序列化以及(对于适当的类)读取 INI 的钩子。" - -#: ../../Contributing.md:21 -msgid "" -"`Hooks.cpp` and `Hooks.*.cpp` contain non-common hooks to correctly patch" -" in new custom logics." -msgstr "`Hooks.cpp` 和 `Hooks.*.cpp` 包含非标准的钩子,用于正确修补新定义逻辑。" - -#: ../../Contributing.md:22 -msgid "" -"`ExtraHeaders/` - extra header files to interact with / describe types " -"included in game binary that are not included in YRpp yet." -msgstr "`ExtraHeaders/` - 额外的头文件,用于交互/描述未包含在 YRpp 中的游戏内的类。" - -#: ../../Contributing.md:23 -msgid "" -"`Misc/` - uncategorized source code, including hooks that don't belong to" -" an extension class." -msgstr "`Misc/` - 未分类的源码,包括不属于任意扩展类的钩子。" - -#: ../../Contributing.md:24 -msgid "`Utilities/` - common code that is used across the project." -msgstr "`Utilities/` - 整个项目通用的辅助代码。" - -#: ../../Contributing.md:25 -msgid "`Phobos.cpp`/`Phobos.h` - extension bootstrapping code." -msgstr "`Phobos.cpp`/`Phobos.h` - 扩展引导代码。" - -#: ../../Contributing.md:26 -msgid "" -"`Phobos.Ext.cpp` - contains common processing code new or extended " -"classes. If you define a new or extended class you have to add your new " -"class into `MassActions` global variable type declaration in this file." -msgstr "" -"`Phobos.Ext.cpp` - 包含通用处理代码、新的或扩展的类。如果你定义了一个新的或扩展的类那么你必须将你的新类添加进全局变量 " -"`MassActions` 中进行声明。" - -#: ../../Contributing.md:27 -msgid "" -"`YRpp/` - contains the header files to interact with / describe types " -"included in game binary and also macros to write hooks using Syringe. " -"Included as a submodule." -msgstr "`YRpp/` - 包含与游戏二进制文件中所包含的类型进行交互/描述的头文件,以及用于 Syringe 编写钩子的宏。作为子模块包含在内。" - -#: ../../Contributing.md:29 -msgid "Code styleguide" -msgstr "代码样式指导" - -#: ../../Contributing.md:31 -msgid "" -"We have established a couple of code style rules to keep things " -"consistent. Some of the rules are enforced in `.editorconfig`, where " -"applicable, so you can autoformat the code by pressing `Ctrl + K, D` " -"hotkey chord in Visual studio. Still, it is advised to manually check the" -" style before submitting the code." -msgstr "" -"我们制定了代码样式规范以保持一致性。部分规则已在可用情况下通过 `.editorconfig` 文件强制执行,因此你可以在 Visual " -"Studio 中通过按下 `Ctrl + K + D` 来自动格式化代码。尽管如此,我们仍建议在提交代码前手动检查代码样式。" - -#: ../../Contributing.md:32 -msgid "We use tabs instead of spaces to indent code." -msgstr "我们使用制表符而非空格来缩进代码。" - -#: ../../Contributing.md:33 -msgid "" -"Curly braces are always to be placed on a new line ([Allman indentation " -"style](https://en.wikipedia.org/wiki/Indentation_style#Allman_style)). " -"One of the reasons for this is to clearly separate the end of the code " -"block head and body in case of multiline bodies:" -msgstr "" -"大括号始终应当放在新的一行上([Allman 缩进 " -"风格](https://en.wikipedia.org/wiki/Indentation_style#Allman_style))。这样做的一个原因是需要对于多行代码的情况清楚地区分代码块的头部和尾部:" - -#: ../../Contributing.md:42 -msgid "" -"Braceless code block bodies should be made only when both code block head" -" and body are single line, statements split into multiple lines and " -"nested braceless blocks are not allowed within braceless blocks:" -msgstr "只有代码块头部和代码块主体均为单行时才应当使用无大括号的代码块,且无大括号的块中不允许存在跨多行的语句拆分以及嵌套的无大括号块:" - -#: ../../Contributing.md:69 -msgid "" -"Only empty curly brace blocks may be left on the same line for both " -"opening and closing braces (if appropriate)." -msgstr "只有当大括号块为空时才允许左右括号放置在同一行。" - -#: ../../Contributing.md:70 -msgid "" -"If you use if-else you should either have all of the code blocks braced " -"or braceless to keep things consistent." -msgstr "如果使用了 if-else 语句,那么所有代码块应当统一使用大括号或统一不使用大括号以保持一致性。" - -#: ../../Contributing.md:71 -msgid "" -"Big conditions which span multiple lines and are hard to read otherwise " -"should be split into smaller logical parts to improve readability:" -msgstr "难以阅读的跨多行的复杂条件语句应被拆分为更小的逻辑单元以提高可读性:" - -#: ../../Contributing.md:87 -msgid "" -"Code should have empty lines to make it easier to read. Use an empty line" -" to split code into logical parts. It's mandatory to have empty lines to " -"separate:" -msgstr "代码应使用一些空行分隔逻辑部分来提升可读性。以下情况必须使用空行分隔:" - -#: ../../Contributing.md:88 -msgid "" -"`return` statements (except when there is only one line of code except " -"that statement);" -msgstr "`return` 语句(除非该句外仅有一行代码);" - -#: ../../Contributing.md:89 -msgid "" -"local variable assignments that are used in the further code (you " -"shouldn't put an empty line after one-line local variable assignments " -"that are used only in the following code block though);" -msgstr "后续代码中使用的局部变量声明(但若仅用于后续代码块的单行局部变量声明则其后无需空行);" - -#: ../../Contributing.md:90 -msgid "" -"code blocks (braceless or not) or anything using code blocks (function or" -" hook definitions, classes, namespaces etc.);" -msgstr "代码块(无论是否有花括号)以及用代码块规则的其他东西(函数,钩子定义,类,名空间等);代码块(无论是否有大括号)或任何使用代码块的结构(函数/钩子定义、类、命名空间等);" - -#: ../../Contributing.md:91 -msgid "hook register input/output." -msgstr "钩子注册的输入/输出。" - -#: ../../Contributing.md:133 -msgid "" -"`auto` may be used to hide an unnecessary type declaration if it doesn't " -"make the code harder to read. `auto` may not be used on primitive types." -msgstr "在不影响代码可读性的前提下可以使用 `auto` 来隐式声明不必要的显式类型。基础类型禁止使用 `auto`。" - -#: ../../Contributing.md:134 -msgid "A space must be put between braces of empty curly brace blocks." -msgstr "空的大括号块的括号之间必须保留空格。" - -#: ../../Contributing.md:135 -msgid "" -"To have less Git merge conflicts member initializer lists and other list-" -"like syntax structures used in frequently modified places should be split" -" per-item with item separation characters (commas, for example) placed " -"*after newline character*:" -msgstr "" -"为了减少 Git 合并冲突,在频繁修改区域的成员初始化列表及其他类似列表的语法结构中应当采用按项分行且项目分隔符(例如逗号)置于 **换行符** " -"之后的书写方式:" - -#: ../../Contributing.md:144 -msgid "" -"Local variables and function/method args are named in the `camelCase` " -"(using a `p` prefix to denote pointer type for every pointer nesting " -"level) and a descriptive name, like `pTechnoType` for a local " -"`TechnoTypeClass*` variable." -msgstr "" -"局部变量和函数/方法参数采用驼峰命名法(使用前缀 `p` 表示指针类型,每个指针嵌套级别都需添加前缀),并配以描述性名称,例如局部变量 " -"`TechnoTypeClass*` 应命名为 `pTechnoType`。" - -#: ../../Contributing.md:145 -msgid "" -"Classes, namespaces, class fields and members are always written in " -"`PascalCase`." -msgstr "类、命名空间、类字段和成员始终采用帕斯卡命名法。" - -#: ../../Contributing.md:146 -msgid "" -"Class fields that can be set via INI tags should be named exactly like " -"ini tags with dots replaced with underscores." -msgstr "可以通过 INI 标签设置的类字段必须与 INI 标签保持完全一致的命名,仅将点号替换为下划线。" - -#: ../../Contributing.md:147 -msgid "" -"Pointer type declarations always have pointer sign `*` attached to the " -"type declaration." -msgstr "指针类型声明时,`*` 必须紧贴类型声明。" - -#: ../../Contributing.md:148 -msgid "" -"Non-static class extension methods faked by declaring a static method " -"with `pThis` as a first argument are only to be placed in the extension " -"class for the class instance of which `pThis` is." -msgstr "通过声明一个以 `pThis` 作为首个参数的静态方法来伪造的非静态类扩展方法只能放置在 `pThis` 所在的类实例的扩展类中。" - -#: ../../Contributing.md:149 -msgid "" -"If it's crucial to fake `__thiscall` you may use `__fastcall` and use " -"`void*` or `void* _` as a second argument to discard value passed through" -" `EDX` register. Such methods are to be used for call replacement." -msgstr "" -"如果需要伪造 `__thiscall`,可以使用 `__fastcall` 并将 `void*` 或 `void* _` 作为第二个参数来丢弃通过" -" `EDX` 寄存器传递的值。此方法仅用于调用替换。" - -#: ../../Contributing.md:150 -msgid "" -"Hooks have to be named using a following scheme: " -"`HookedFunction_HookPurpose`, or `ClassName_HookedMethod_HookPurpose`. " -"Defined-again hooks are exempt from this scheme due to impossibility to " -"define different names for the same hook." -msgstr "" -"工作函数必须按以下规则命名:`钩上的函数_钩子的功能` 或 " -"`类名_钩上的方法_钩子的功能`。由于无法为同一钩子定义不同的名称,再次定义(DEFINE_HOOK_AGAIN)的钩子不受此方案的约束。" - -#: ../../Contributing.md:151 -msgid "" -"Return addresses should use anonymous enums to make it clear what address" -" means what, if applicable. The enum has to be placed right at the " -"function start and include all addresses that are used in this hook:" -msgstr "返回地址应在可行的情况下使用匿名枚举进行语义化标注。该枚举必须置于函数起始位置,并包含本钩子中使用的所有地址:" - -#: ../../Contributing.md:160 -msgid "" -"Even if the hook doesn't use `return 0x0` to execute the overriden " -"instructions, you still have to write correct hook size (last parameter " -"of `DEFINE_HOOK` macro) to reduce potential issues if the person editing " -"this hook decides to use `return 0x0`." -msgstr "" -"即使钩子不使用 `return 0x0` 来执行被覆盖的指令,你仍必须编写正确的钩子大小(`DEFINE_HOOK` " -"宏的最后一个参数),以减少当其他人编辑此钩子时若决定使用 `return 0x0` 可能引发的潜在问题。" - -#: ../../Contributing.md:161 -msgid "" -"New ingame \"entity\" classes are to be named with `Class` postfix (like " -"`RadTypeClass`). Extension classes are to be named with `Ext` postfix " -"instead (like `RadTypeExt`)." -msgstr "" -"新的游戏内「实体」类应当以 `Class` 后缀命名(例如 `RadTypeClass`)。扩展类应当改用 `Ext` 后缀命名(例如 " -"`RadTypeExt`)。" - -#: ../../Contributing.md:162 -msgid "Do not pollute the namespace." -msgstr "不要污染命名空间。" - -#: ../../Contributing.md:163 -msgid "" -"Avoid introducing unnecessary macros if they can be replaced by " -"equivalent `constexpr` or `__forceinline` functions." -msgstr "若能使用等效的 `constexpr` 或 `__forceinline` 函数替代就不要引入不必要的宏。" - -#: ../../Contributing.md:166 -msgid "The styleguide is not exhaustive and may be adjusted in the future." -msgstr "样式指南并不详尽,未来可能会进行调整。" - -#: ../../Contributing.md:169 -msgid "Git branching model" -msgstr "Git 分支模型" - -#: ../../Contributing.md:171 -msgid "" -"Couple of notes regarding the Git practices. We use [git-" -"flow](https://nvie.com/posts/a-successful-git-branching-model/)-like " -"workflow:" -msgstr "" -"我们使用 [git-flow](https://nvie.com/posts/a-successful-git-branching-model/)" -" 之类的工作流:" - -#: ../../Contributing.md:172 -msgid "" -"`master` is for stable releases, can have hotfixes pushed to it or " -"branched off like a feature branch with the requirement of version " -"increment and `master` being merged into `develop` after that;" -msgstr "" -"`master` 用于稳定版本发布,允许直接推送热修复补丁或像功能分支一样分离分支,但需遵循版本号递增要求,并在之后将 `master` " -"分支合并回 `develop` 分支;" - -#: ../../Contributing.md:173 -msgid "`develop` is the main development branch;" -msgstr "`develop` 是主要开发分支;" - -#: ../../Contributing.md:174 -msgid "" -"`feature/`-prefixed branches (sometimes the prefix may be different if " -"appropriate, like for big fixes or changes) are so called \"feature " -"branches\" - those are branched off `develop` for every new feature to be" -" introduced into it and then merged back. We use squash merge to merge " -"them back in case of smaller branches and sometimes merge commit in case " -"the branch is so big it would be viable to keep it as is." -msgstr "" -"带有 `feature/` 前缀的分支(有时根据实际情况可能使用不同的前缀,例如大的修复或改动)即所谓的「功能分支」——这些分支从 " -"`develop` 分离出来用于引入新的功能,完成后合并回 " -"`develop`。对于小型分支,我们使用压缩合并;若分支规模较大,则可能使用合并提交来维持提交记录的完整性;" - -#: ../../Contributing.md:175 -msgid "" -"`hotfix/`-prefixed branches may be used in a same manner as `feature/`, " -"but with `master` branch, with a requirement of `master` being merged " -"into `develop` after `hotfix/` branch was squash merged into `master`." -msgstr "" -"带有 `hotfix/` 前缀的分支使用方式类似于 `feature/`,但基于 `master` 分支创建,要求将 `hotfix/` " -"分支压缩合并到 `master` 后必须将 `master` 合并回 `develop`;" - -#: ../../Contributing.md:176 -msgid "" -"`release/`-prefixed branches are branched off `develop` when a new stable" -" release is slated to allow working on features for a next release and " -"stability improvements for this release. Those are merged with a merge " -"commit into `master` and `develop` with a stable version number increase," -" after which the stable version is released." -msgstr "" -"带有 `release/` 前缀的分支在计划发布新的稳定版本时从 `develop` " -"分离,允许同时开发下个版本的功能和改进当前版本的稳定性。这些分支通过合并提交合并到 `master` 和 " -"`develop`,并递增稳定版本的版本号,随后发布稳定版本。" - -#: ../../Contributing.md:177 -msgid "" -"When you're working with your local & remote branches use **fast-" -"forward** pulls to get the changes from remote branch to local, **don't " -"merge remote branch into local and vice versa**, this creates junk " -"commits and makes things unsquashable." -msgstr "" -"当你在处理本地与远程分支时应当使用 **拉取(快进)** " -"将远程分支的变更同步到本地,**不要将远程分支合并到本地分支**,反之亦然,否则会产生垃圾提交并使代码无法压缩整理。" - -#: ../../Contributing.md:179 -msgid "These commands will do the following for all repositories on your PC:" -msgstr "这些命令对你电脑上的所有代码仓库执行以下操作:" - -#: ../../Contributing.md:180 -msgid "remove the automatic merge upon pull and replace it with a rebase;" -msgstr "移除拉取时的自动合并行为,改用变基操作;" - -#: ../../Contributing.md:181 -msgid "" -"highlight changes consisting of moving existing lines to another location" -" with a different color." -msgstr "用特定颜色高亮显示「移动现有代码行到新位置」这类变更。" - -#: ../../Contributing.md:189 -msgid "Ways to help" -msgstr "协助方式" - -#: ../../Contributing.md:191 msgid "" "Engine modding is a complicated process which is pretty hard to pull off," " but there are also easier parts which don't require mastering the art of" " reverse-engineering or becoming a dank magician in C++." msgstr "引擎修改是一个复杂的过程,但其中也包括无需精通逆向工程或成为 C++ 大魔导师即可完成的部分。" -#: ../../Contributing.md:193 msgid "Research and reverse-engineering" msgstr "研究与逆向工程" -#: ../../Contributing.md:195 msgid "" "You can observe how the stuff works by using the engine and note which " "other stuff influences the behavior, but sooner or later you would want " @@ -471,14 +44,12 @@ msgstr "" "sre.org/))来解析二进制文件(例如 `gamemd.exe`)中的代码,以及调试器([Cheat " "Engine](https://www.cheatengine.org) 的调试器对此非常适用)来追踪二进制文件的执行流程。" -#: ../../Contributing.md:198 msgid "" "Reverse-engineering is a complex task, but don't be discouraged, if you " "want to try your hands at it ask us in the Discord channel, we will " "gladly help 😄" msgstr "逆向工程虽复杂但无需畏惧。如果你对此跃跃欲试,那么欢迎你在 Discord 频道向我们提问,我们将乐于为你提供帮助😄" -#: ../../Contributing.md:202 msgid "" "[Assembly " "language](https://www.cs.virginia.edu/~evans/cs216/guides/x86.html) and " @@ -488,11 +59,9 @@ msgstr "" "[汇编语言](https://www.cs.virginia.edu/~evans/cs216/guides/x86.html) 和 C++ " "知识、对计算机体系结构、内存结构、OOP 及编译器原理的理解对此大有裨益。" -#: ../../Contributing.md:205 msgid "Development" msgstr "开发" -#: ../../Contributing.md:207 msgid "" "When you found out how the engine works and where you need to extend the " "logic you'd need to develop the code to achieve what you want. This is " @@ -520,38 +89,46 @@ msgid "" "agents, but is also a useful read for any new contributor looking to " "understand the codebase quickly." msgstr "" -"仓库中包含一份 [Copilot 指令文件](https://github.com/Phobos-developers/Phobos/blob/develop/.github/copilot-instructions.md),作为项目的快速入门指南——包含构建、项目结构、钩子模式、补丁宏、YRpp 使用方法等内容。该文件可被 " +"仓库中包含一份 [Copilot 指令文件](https://github.com/Phobos-" +"developers/Phobos/blob/develop/.github/copilot-" +"instructions.md),作为项目的快速入门指南——包含构建、项目结构、钩子模式、补丁宏、YRpp 使用方法等内容。该文件可被 " "GitHub Copilot 和类似的 AI 代码智能体自动识别,同时也是新贡献者快速了解代码库的实用参考。" msgid "" -"We encourage contributors to try AI coding agents (such as GitHub Copilot " -"in agent mode, Cursor, or similar tools) to assist with development tasks " -"- writing hooks, reviewing code, generating documentation, and exploring " -"the disassembly via [IDA Pro MCP](https://github.com/mrexodia/ida-pro-" -"mcp). Agent skills (such as the [IDAPython skill](https://skills.sh/" -"mrexodia/ida-pro-mcp/idapython)) can further extend agent capabilities " -"with domain-specific knowledge. AI agents can significantly speed up " -"routine work." +"We encourage contributors to try AI coding agents (such as GitHub Copilot" +" in agent mode, Cursor, or similar tools) to assist with development " +"tasks - writing hooks, reviewing code, generating documentation, and " +"exploring the disassembly via [IDA Pro MCP](https://github.com/mrexodia" +"/ida-pro-mcp). Agent skills (such as the [IDAPython " +"skill](https://skills.sh/mrexodia/ida-pro-mcp/idapython)) can further " +"extend agent capabilities with domain-specific knowledge. AI agents can " +"significantly speed up routine work." msgstr "" "我们鼓励贡献者尝试使用 AI 代码智能体(如 GitHub Copilot 智能体模式、Cursor " -"或类似工具)来协助开发工作——编写钩子、审查代码、生成文档以及通过 [IDA Pro MCP](https://github.com/mrexodia/ida-" -"pro-mcp) 浏览反汇编代码。智能体技能(如 [IDAPython 技能](https://skills.sh/mrexodia/ida-pro-" +"或类似工具)来协助开发工作——编写钩子、审查代码、生成文档以及通过 [IDA Pro " +"MCP](https://github.com/mrexodia/ida-pro-mcp) 浏览反汇编代码。智能体技能(如 [IDAPython " +"技能](https://skills.sh/mrexodia/ida-pro-" "mcp/idapython))可进一步扩展智能体的特定领域知识能力。AI 智能体可显著加速例行工作。" msgid "" -"AI agents are a tool to assist development, but they are not perfect and can " -"make mistakes. Always review and test any code generated or modified by an AI " -"agent to ensure it meets the project's standards and works correctly. **You are " -"responsible for the final code**, not the tool you use to write it." +"AI agents are a tool to assist development, but they are not perfect and " +"can make mistakes. Always review and test any code generated or modified " +"by an AI agent to ensure it meets the project's standards and works " +"correctly. **You are responsible for the final code**, not the tool you " +"use to write it." msgstr "" "AI 智能体是辅助开发的工具,但并非完美无缺且可能出错。请务必审查和测试 AI " -"智能体生成或修改的任何代码,以确保其符合项目标准且正常运作。**最终代码的质量由你负责**," -"而不是你使用的工具。" +"智能体生成或修改的任何代码,以确保其符合项目标准且正常运作。**最终代码的质量由你负责**,而不是你使用的工具。" msgid "Contributing changes to the project" msgstr "向项目提交更改" -#: ../../Contributing.md:212 +msgid "" +"To ensure harmonious coexistence, developers and maintainers should first" +" read our [Project guidelines and policies](Project-guidelines-and-" +"policies.md)." +msgstr "为了确保顺畅协作,开发者和维护者应首先阅读我们的 [项目准则与政策](Project-guidelines-and-policies.md)。" + msgid "" "To contribute a feature or some sort of a change you you would need a Git" " client (I recommend [GitKraken](https://www.gitkraken.com/) personally)." @@ -562,32 +139,26 @@ msgstr "" "贡献功能或进行更改需要使用 Git 客户端(我推荐 [GitKraken](https://www.gitkraken.com/))Fork " "并克隆仓库,建议创建一个新分支,随后编辑/添加代码或进行其他修改。然后提交 -> 推送 -> 发起拉取请求 -> 等待审核或合并。" -#: ../../Contributing.md:214 msgid "If you contribute something, please make sure:" msgstr "如果你贡献了什么,请确保:" -#: ../../Contributing.md:215 msgid "you write documentation for the change;" msgstr "你编编写了相关更改的文档说明;" -#: ../../Contributing.md:216 msgid "" "you mention the change in the changelog and migration sections in the " "[what's new page](Whats-New.md);" msgstr "你在 [版本更新说明](Whats-New.md) 页的更新日志和迁移指南中提及了这些改动;" -#: ../../Contributing.md:217 msgid "you mention your contribution in the [credits page](CREDITS.md)." msgstr "你在 [鸣谢](CREDITS.md) 页面列出了你的贡献。" -#: ../../Contributing.md:219 msgid "" "If your change does not fit in standard criteria or too small that it " "doesn't need the above - add `[Minor]` to your pull request's title, so " "the CI won't yell at you for no reason." msgstr "若变更不符合标准流程或规模过小无需上述步骤,请在拉取请求标题添加 [Minor],以避免 CI 无故报错。" -#: ../../Contributing.md:222 msgid "" "Every pull request push trigger a nightly build for the latest pushed " "commit, so you can check the build status at the bottom of PR page, press" @@ -598,7 +169,6 @@ msgstr "" "每次推送至拉取请求会触发自动构建,你可以在拉取请求页面底部查看构建状态。点击 `Show all checks` 进入构建详情页,可下载包含 " "DLL 和 PDB 的压缩包(供你的测试人员使用),或从自动发布的评论中获取构建文件(需要拥有 GitHub 账号)。" -#: ../../Contributing.md:226 msgid "" "You'd benefit from C++ experience, knowledge of programming patterns, " "common techniques etc. [Basic assembly " @@ -610,11 +180,9 @@ msgstr "" "经验、编程模式及常用技术知识将有助于提升效率。[基础汇编知识](https://www.cs.virginia.edu/~evans/cs216/guides/x86.html)" " 有助于正确编写内存交互钩子。同时需掌握 Git 与 GitHub 的基本使用。" -#: ../../Contributing.md:229 msgid "Testing" msgstr "测试" -#: ../../Contributing.md:231 msgid "" "This is a job that any modder (and even sometimes player) can do. Look at" " a new feature or a change, try to think of all possible cases when it " @@ -627,7 +195,6 @@ msgstr "" "modder(甚至纯玩家)均可参与的工作。查看新的功能或改动,尽可能设想所有可能的应用场景、逻辑漏洞、边界情况及意外交互等,并加以验证。发现任何 " "Bug 请提交至本仓库的 Issue 版块。" -#: ../../Contributing.md:234 msgid "" "**General stability** can only be achieved by extensive play-testing of " "new changes, both offline and online. Most modders have beta testing " @@ -638,18 +205,15 @@ msgstr "" "**总体稳定性**仅可通过大量离线/在线游戏测试进行验证。大多 modder " "没有测试团队,若期望功能稳定,请组织测试人员参与新功能测试!下方检查清单有助于问题定位。" -#: ../../Contributing.md:237 msgid "Testing check-list" msgstr "测试检查清单" -#: ../../Contributing.md:239 msgid "" "**All possible valid use cases covered**. Try to check all of the valid " "feature use cases you can think of and verify that they work as intended " "with the feature." msgstr "**涵盖所有有效用例**:尽可能验证你所能想到的正常使用场景是否按预期工作。" -#: ../../Contributing.md:240 msgid "" "**Correct saving and loading**. Most of the additions like new INI tags " "require storing them in saved object info. Sometimes this is not done " @@ -661,7 +225,6 @@ msgstr "" "标签需存入存档中的对象信息。有时这会出现问题,尤其在复杂一些的东西上(例如辐射类型)。请确保所有改进在保存和加载前后(当然是在同一版本的 " "Phobos 环境下)都能正常工作。" -#: ../../Contributing.md:241 msgid "" "**Interaction with other features**. Try to use the feature chained or " "interacting with other features from vanilla or other libs (for example, " @@ -669,7 +232,6 @@ msgid "" " mind control from a permanently mind-controlled unit)." msgstr "**与其他功能的交互**:测试该功能与原版或其他库功能的联动(例如:最初的解除心控弹头作用于永久心控目标时会导致崩溃)。" -#: ../../Contributing.md:242 msgid "" "**Overlapping features not working correctly** (including those from " "third-party libs like Ares, HAres, CnCNet spawner DLL). Think of what " @@ -684,7 +246,6 @@ msgstr "" "等第三方库的功能)考虑哪些功能的代码可能与你当前所测试功能的代码重叠(从技术上讲;这意味着它们修改了相同代码)。由于项目的性质部分功能可能会出现冲突(例如:最初实现的低优先级框选曾导致" " Ares 的 `GroupAs` 被破坏,导致使用它的单位无法被正确按类群选)。" -#: ../../Contributing.md:243 msgid "" "**Edge cases**. Those are the cases of some specific cases usually " "induced by some extreme parameter values (for example, vanilla game " @@ -693,24 +254,20 @@ msgstr "" "**边界情况**:某些极端情况下的工作状况,通常是一些极端参数值引发的(例如:原版游戏在 `[PreviewPack]` 尺寸为 0 " "的情况不会跳过渲染而是导致崩溃)。" -#: ../../Contributing.md:244 msgid "" "**Corner cases**. Those are similar to edge cases but are hard to " "reproduce and are usually induced by a combination of extreme parameter " "values." msgstr "**角落案例**:类似边界情况,并且难以复现,通常需要多重极端参数加以组合才能引发。" -#: ../../Contributing.md:247 msgid "" "Knowledge on how to mod YR and having an inquisitive mind, being " "attentive to details would help." msgstr "熟悉 YR Mod 制作、具备探索精神以及对细节的敏感将有助于测试效率。" -#: ../../Contributing.md:250 msgid "Writing docs" msgstr "编写文档" -#: ../../Contributing.md:252 msgid "" "No explanation needed. If you fully understand how some stuff in Phobos " "works you can help by writing a detailed description in these docs, or " @@ -723,7 +280,6 @@ msgstr "" " 代码智能体同样可以用于编写和改进文档——参见上面的 [使用 AI 辅助开发的快速入门指南](#quickstart-guide-for-ai-" "assisted-development)。" -#: ../../Contributing.md:254 msgid "" "The docs are written in Markdown (which is dead simple, [learn MD in 60 " "seconds](https://commonmark.org/help/); if you need help on extended " @@ -736,7 +292,6 @@ msgstr "" "://myst-parser.readthedocs.io/))。我们使用 [Sphinx](https://sphinx-doc.org/) " "构建文档,[Read the Docs](https://readthedocs.io/) 进行托管。" -#: ../../Contributing.md:257 msgid "" "You don't need to install Python, Sphinx and modules to see changes - " "every pull request you make is being built and served by Read the Docs " @@ -744,14 +299,12 @@ msgid "" "`Show all checks` and see the built documentation in the details of a " "build run." msgstr "" -"你无需安装 Python 和 Sphinx 模块即可查看更改——你创建的每个拉取请求均会触发 Read The Docs " -"的自动生成,类似 Phobos 自动构建版本,滚动至页面底部点击 `Show all checks` 即可在构建详情中查看渲染后的文档。" +"你无需安装 Python 和 Sphinx 模块即可查看更改——你创建的每个拉取请求均会触发 Read The Docs 的自动生成,类似 " +"Phobos 自动构建版本,滚动至页面底部点击 `Show all checks` 即可在构建详情中查看渲染后的文档。" -#: ../../Contributing.md:260 msgid "There are two ways to edit the docs." msgstr "有两种方式可以编辑文档:" -#: ../../Contributing.md:261 msgid "" "**Edit from your PC**. Pretty much the same like what's described in " "[contributing changes section](contributing-changes-to-the-project); the " @@ -760,7 +313,6 @@ msgstr "" "**本地编辑**:如 [向项目提交更改](#contributing-changes-to-the-project) 中所述,文档位于 " "`docs` 文件夹。" -#: ../../Contributing.md:262 msgid "" "**Edit via online editor**. Navigate to the doc piece that you want to " "edit, press the button on the top right - and it will take you to the " @@ -773,17 +325,14 @@ msgstr "" "**在线编辑**:找到要编辑的文档,点击右上角按钮——跳转至 GitHub 文件编辑页(在右上角寻找铅笔图标)。编辑后将自动创建 fork " "仓库,你可以提交更改(建议新建分支)并向主仓库发起拉取请求。" -#: ../../Contributing.md:265 msgid "" "OK English grammar and understanding of docs structure would be enough. " "You would also need a GitHub account." msgstr "拥有足够好的英语语法与对文档结构的理解即可参与。当然你还需要拥有一个 GitHub 账号。" -#: ../../Contributing.md:268 msgid "Providing media to showcase features" msgstr "提供展示功能用的素材" -#: ../../Contributing.md:270 msgid "" "Those would be used in docs and with a link to the respective mod as a " "bonus for the mod author. To record GIFs you can use such apps as, for " @@ -792,17 +341,14 @@ msgstr "" "这些将在文档中被使用,并附有对应 mod 的链接作为对 mod 作者的鼓励。录制 GIF 推荐使用 " "[GifCam](http://blog.bahraniapps.com/gifcam/) 等工具" -#: ../../Contributing.md:273 msgid "" "Please, provide screenshots, GIFs and videos in their natural size and " "without excess stuff or length." msgstr "请提供适当尺寸的截图/GIF/视频,避免冗余内容与过长的时长。" -#: ../../Contributing.md:276 msgid "Promoting the work" msgstr "促进工作" -#: ../../Contributing.md:278 msgid "" "You can always help us by spreading the word about the project among " "people, whether you're an influential youtuber, a C&C related community " diff --git a/docs/locale/zh_CN/LC_MESSAGES/Fixed-or-Improved-Logics.po b/docs/locale/zh_CN/LC_MESSAGES/Fixed-or-Improved-Logics.po index d11063bc2d..a597683dee 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/Fixed-or-Improved-Logics.po +++ b/docs/locale/zh_CN/LC_MESSAGES/Fixed-or-Improved-Logics.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Phobos \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-23 22:17+0800\n" +"POT-Creation-Date: 2026-06-30 21:43+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1220,8 +1220,12 @@ msgstr "图像与 `Wall=true` 的覆盖物重叠的载具上不再会显示出 msgid "" "Fixed vehicles disguised as trees incorrectly displaying veterancy " "insignia when they shouldn't." -msgstr "" -"修复了伪装成树的载具错误显示出军衔(能打人的精英树)的问题。" +msgstr "修复了伪装成树的载具错误显示出军衔(能打人的精英树)的问题。" + +msgid "" +"Fixed a desync due to an inconsistent shroud state caused by " +"`GapGenerator` and `SpySat` interaction." +msgstr "修复了一个由于 `GapGenerator` 和 `SpySat` 交互导致黑幕状态不一致而引发的不同步问题。" msgid "Fixes / interactions with other extensions" msgstr "修复或与其他扩展的交互" @@ -2229,6 +2233,33 @@ msgid "" "towards `MultipleFactory` bonus." msgstr "现在可以将某个具有 `Factory` 的建筑排除在 `MultipleFactory` 之外" +msgid "Gates connecting with Walls" +msgstr "闸门连接墙体" + +msgid "" +"![image](_static/images/ewgates.gif) *A Gate EW is built onto the " +"Concrete Walls in [Fantasy ADVENTURE](https://www.moddb.com/mods/fantasy-" +"adventure)*" +msgstr "" +"![image](_static/images/ewgates.gif) *在 [幻想奇遇](https://www.moddb.com/mods" +"/fantasy-adventure) 中一座东西方向的闸门建造在混凝土墙上*" + +msgid "" +"It is possible to add new gates which can be connected with any Walls by " +"specifing them as `[AI] -> EWGates` and `[AI] -> NSGates` like " +"`xxGateOne` and `xxGateTwo` do." +msgstr "" +"现在 `[AI] -> EWGates` 和 `[AI] -> NSGates` 中指定的闸门可以像 `xxGateOne` 和 " +"`xxGateTwo` 那样正常与墙体连接。" + +msgid "" +"In the in-game orientation, north points to the upper right, so `NSGates`" +" correspond to buildings with `Foundation=1x3`, and `EWGates` correspond " +"to buildings with `Foundation=3x1`." +msgstr "" +"在游戏中,北指向右上,所以 `NSGates` 对应 `Foundation=1x3` 的建筑,而 `EWGates` 对应 " +"`Foundation=3x1` 的建筑。" + msgid "Unit repair customization" msgstr "在建筑上自定义单位维修参数" @@ -3311,7 +3342,7 @@ msgid "Vehicles" msgstr "载具类型" msgid "Custom Unit Crate Reroll Chance" -msgstr "" +msgstr "自定义单位箱子重新随机选取的概率" msgid "" "It is possible to influence weighting of units given from crates " @@ -3838,25 +3869,3 @@ msgstr "" "现在你可以通过设置 `IsSingleColor` 使激光仅使用 `LaserInnerColor` 进行绘制,就像 `IsHouseColor`" " 的激光使用玩家所属方的颜色一样。这样的激光同样尊重激光宽度。注意这在光棱塔递光武器上并不可用。" -#~ msgid "" -#~ "Setting `[AudioVisual] -> ColorAddUse8BitRGB` " -#~ "to true makes game treat values " -#~ "from `[ColorAdd]` as 8-bit RGB (0-255)" -#~ " instead of RGB565 (0-31 for red " -#~ "& blue, 0-63 for green). This " -#~ "works for `LaserTargetColor`, `IronCurtainColor`," -#~ " `BerserkColor` and `ForceShieldColor`." -#~ msgstr "" -#~ "设置 `[AudioVisual] -> ColorAddUse8BitRGB` 为 " -#~ "true 时游戏会将 `[ColorAdd]` 中的值视为 8 位 " -#~ "RGB(0-255)而不是 RGB565(红色和蓝色为 0-31,绿色为 0-63)。这适用于 " -#~ "`LaserTargetColor`、`IronCurtainColor`、`BerserkColor` 和 " -#~ "`ForceShieldColor`。(已知 KratosPP v0.1.15会抵消该逻辑)" - -#~ msgid "" -#~ "Fixed the bug that uncontrolled scatter" -#~ " when elite techno attacked by " -#~ "aircraft or some unit try crush " -#~ "it." -#~ msgstr "修复精英单位在被战机攻击或一个单位尝试碾压它时强制散开的 Bug。" - diff --git a/docs/locale/zh_CN/LC_MESSAGES/Interoperability.po b/docs/locale/zh_CN/LC_MESSAGES/Interoperability.po new file mode 100644 index 0000000000..76f4277136 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/Interoperability.po @@ -0,0 +1,476 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2026, The Phobos Contributors +# This file is distributed under the same license as the Phobos package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Phobos \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-06-20 10:13+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +msgid "Interoperability" +msgstr "互操作性" + +msgid "" +"This page documents the exported interfaces in " +"[Interop](https://github.com/Phobos-" +"developers/Phobos/tree/develop/src/Interop)." +msgstr "" +"本页面记录了 [Interop](https://github.com/Phobos-" +"developers/Phobos/tree/develop/src/Interop) 目录中导出的接口。" + +msgid "API Convention" +msgstr "API 约定" + +msgid "" +"All exported API functions return `HRESULT` to indicate success or " +"failure following COM convention:" +msgstr "所有导出的 API 函数均遵循 COM 约定返回 `HRESULT`,以指示成功或失败:" + +msgid "HRESULT" +msgstr "HRESULT" + +msgid "Meaning" +msgstr "含义" + +msgid "`S_OK`" +msgstr "`S_OK`" + +msgid "Operation completed successfully." +msgstr "操作成功完成。" + +msgid "`S_FALSE`" +msgstr "`S_FALSE`" + +msgid "" +"Operation completed but had nothing to do (e.g., no matching effects " +"found)." +msgstr "操作已完成但无需执行任何操作(例如未找到匹配的效果)。" + +msgid "`E_POINTER`" +msgstr "`E_POINTER`" + +msgid "A required pointer parameter was null." +msgstr "必需的指针参数为空。" + +msgid "`E_INVALIDARG`" +msgstr "`E_INVALIDARG`" + +msgid "One or more arguments are invalid." +msgstr "一个或多个参数无效。" + +msgid "`E_UNEXPECTED`" +msgstr "`E_UNEXPECTED`" + +msgid "An unexpected internal error occurred (e.g., extension data not found)." +msgstr "发生意外的内部错误(例如未找到扩展数据)。" + +msgid "`E_FAIL`" +msgstr "`E_FAIL`" + +msgid "The operation failed." +msgstr "操作失败。" + +msgid "" +"Functions that produce output data take an additional output pointer " +"parameter that receives the result. Use `SUCCEEDED(hr)` / `FAILED(hr)` to" +" check the return value." +msgstr "生成输出数据的函数会接受一个额外的输出指针参数来接收结果。请使用 `SUCCEEDED(hr)` / `FAILED(hr)` 检查返回值。" + +msgid "API Version Tracking" +msgstr "API 版本跟踪" + +msgid "Semantic Versioning Rules" +msgstr "语义化版本规则" + +msgid "" +"**Major (X)**: Increment for breaking changes (backward incompatible API " +"modifications). Example: Deleting an API, changing function parameters, " +"modifying data structures that break existing code. When bumped, reset " +"Minor and Patch to 0 (e.g., 1.2.3 → 2.0.0)." +msgstr "" +"**主版本号 (X)**:递增表示发生了破坏性变更(向后不兼容的 API 修改)。
示例:删除 " +"API、更改函数参数、修改数据结构导致现有代码损坏。
当此版本号递增时,次版本号和修订号重置为 0(例如 1.2.3 → 2.0.0)。" + +msgid "" +"**Minor (Y)**: Increment for backward-compatible new features. Example: " +"Adding a new API function, new parameters that don't break existing code." +" When bumped, reset Patch to 0 (e.g., 1.2.3 → 1.3.0)." +msgstr "" +"**次版本号 (Y)**:递增表示增加了向后兼容的新功能。
示例:添加新的 API " +"函数、增加不破坏现有代码的新参数。
当此版本号递增时,修订号重置为 0(例如 1.2.3 → 1.3.0)。" + +msgid "" +"**Patch (Z)**: Increment for backward-compatible miscs (no API changes). " +"Example: Fixing crashes, correcting calculations, optimizing internals " +"without changing interface (e.g., 1.2.3 → 1.2.4)." +msgstr "" +"**修订号 (Z)**:递增表示向后兼容的杂项改进(无 API 变更)。
示例:修复崩溃、更正计算、优化内部实现而不改变接口(例如 " +"1.2.3 → 1.2.4)。" + +msgid "GetInteropAPIVersion" +msgstr "GetInteropAPIVersion" + +msgid "Returns the current Interop API version via `pVersion` output parameter." +msgstr "通过 `pVersion` 输出参数返回当前的 Interop API 版本。" + +msgid "Parameters:" +msgstr "参数:" + +msgid "`pVersion`: Receives the version structure `{ major, minor, patch }`." +msgstr "`pVersion`:接收版本结构体 `{ major, minor, patch }`。" + +msgid "Returns `S_OK` on success, `E_POINTER` if `pVersion` is null." +msgstr "成功时返回 `S_OK`,若 `pVersion` 为空则返回 `E_POINTER`。" + +msgid "**Example (C# P/Invoke):**" +msgstr "**示例(C# P/Invoke):**" + +msgid "Deprecated API Handling" +msgstr "已弃用 API 的处理" + +msgid "" +"When an API is deprecated, its function stub is retained but with a fatal" +" error handler. The calling application will receive a descriptive error " +"message and must stop execution. This ensures:" +msgstr "当某个 API 被弃用时,其函数存根会保留,但会附加一个致命错误处理器。调用方将收到一条描述性错误消息,并且必须停止执行。这可以确保:" + +msgid "Broken links are immediately detected at runtime (not a silent crash)." +msgstr "断开的链接在运行时立即被检测到(而非静默崩溃)。" + +msgid "" +"Clear messaging guides developers to the replacement API and version " +"range." +msgstr "清晰的消息可引导开发者了解替代 API 和版本范围。" + +msgid "Migration timeline is documented in the error message." +msgstr "迁移时间线会记录在错误消息中。" + +msgid "**Example** (not currently in use):" +msgstr "**示例**(当前未使用):" + +msgid "Available APIs" +msgstr "可用的 API" + +msgid "Module" +msgstr "模块" + +msgid "API" +msgstr "API" + +msgid "Availability" +msgstr "可用范围" + +msgid "Status" +msgstr "状态" + +msgid "AttachEffect" +msgstr "AttachEffect" + +msgid "AE_Attach" +msgstr "AE_Attach" + +msgid "`[1.0.0, ∞)`" +msgstr "`[1.0.0, ∞)`" + +msgid "Active" +msgstr "活跃" + +msgid "AE_Detach" +msgstr "AE_Detach" + +msgid "AE_DetachByGroups" +msgstr "AE_DetachByGroups" + +msgid "AE_TransferEffects" +msgstr "AE_TransferEffects" + +msgid "BulletExt" +msgstr "BulletExt" + +msgid "Bullet_SetFirerOwner" +msgstr "Bullet_SetFirerOwner" + +msgid "EventExt" +msgstr "EventExt" + +msgid "EventExt_AddEvent" +msgstr "EventExt_AddEvent" + +msgid "TechnoExt" +msgstr "TechnoExt" + +msgid "ConvertToType_Phobos" +msgstr "ConvertToType_Phobos" + +msgid "RegisterCalculateExtraThreatCallback" +msgstr "RegisterCalculateExtraThreatCallback" + +msgid "ScenarioExt" +msgstr "ScenarioExt" + +msgid "Variables_GetLocal_Phobos" +msgstr "Variables_GetLocal_Phobos" + +msgid "`[1.1.0, ∞)`" +msgstr "`[1.1.0, ∞)`" + +msgid "Variables_SetLocal_Phobos" +msgstr "Variables_SetLocal_Phobos" + +msgid "Variables_GetGlobal_Phobos" +msgstr "Variables_GetGlobal_Phobos" + +msgid "Variables_SetGlobal_Phobos" +msgstr "Variables_SetGlobal_Phobos" + +msgid "**Availability:** `[1.0.0, ∞)`" +msgstr "**可用范围:** `[1.0.0, ∞)`" + +msgid "Attaches one or more AttachEffect types to the target." +msgstr "将一个或多个 AttachEffect 类型附加到目标上。" + +msgid "pTarget: Target unit to receive effects." +msgstr "pTarget:要接收效果的目标单位。" + +msgid "pInvokerHouse: Invoker house context." +msgstr "pInvokerHouse:调用方阵营上下文。" + +msgid "pInvoker: Invoker techno context." +msgstr "pInvoker:调用方 Techno 上下文。" + +msgid "pSource: Optional source object context." +msgstr "pSource:可选来源对象上下文。" + +msgid "effectTypeNames: Array of AttachEffect type names." +msgstr "effectTypeNames:AttachEffect 类型名称数组。" + +msgid "typeCount: Number of entries in effectTypeNames." +msgstr "typeCount:effectTypeNames 中的条目数量。" + +msgid "durationOverride: If non-zero, duration override is applied." +msgstr "durationOverride:若非零,则应用持续时间覆盖。" + +msgid "delay: If >= 0, delay override is applied." +msgstr "delay:若大于等于 0,则应用延迟覆盖。" + +msgid "initialDelay: If >= 0, initial delay override is applied." +msgstr "initialDelay:若大于等于 0,则应用初始延迟覆盖。" + +msgid "recreationDelay: If >= -1, recreation delay override is applied." +msgstr "recreationDelay:若大于等于 -1,则应用重建延迟覆盖。" + +msgid "pAttachedCount: Receives the number of effects attached." +msgstr "pAttachedCount:接收已附加的效果数量。" + +msgid "" +"Returns `S_OK` on success, `S_FALSE` if no valid effect type names were " +"found." +msgstr "成功时返回 `S_OK`,若未找到有效的效果类型名称则返回 `S_FALSE`。" + +msgid "" +"Fails with `E_POINTER` when: pTarget, effectTypeNames, or pAttachedCount " +"is null." +msgstr "当 pTarget、effectTypeNames 或 pAttachedCount 为空时,失败并返回 `E_POINTER`。" + +msgid "Fails with `E_INVALIDARG` when: typeCount <= 0." +msgstr "当 typeCount <= 0 时,失败并返回 `E_INVALIDARG`。" + +msgid "Detaches effects by explicit effect type names." +msgstr "根据显式的效果类型名称移除效果。" + +msgid "pTarget: Target unit to remove effects from." +msgstr "pTarget:要从中移除效果的目标单位。" + +msgid "effectTypeNames: Array of AttachEffect type names to remove." +msgstr "effectTypeNames:要移除的 AttachEffect 类型名称数组。" + +msgid "pRemovedCount: Receives the number of effects removed." +msgstr "pRemovedCount:接收已移除的效果数量。" + +msgid "Returns `S_OK` on success, `S_FALSE` if no matching effects were found." +msgstr "成功时返回 `S_OK`,若未找到匹配的效果则返回 `S_FALSE`。" + +msgid "" +"Fails with `E_POINTER` when: pTarget, effectTypeNames, or pRemovedCount " +"is null." +msgstr "当 pTarget、effectTypeNames 或 pRemovedCount 为空时,失败并返回 `E_POINTER`。" + +msgid "Detaches effects by AttachEffect group name." +msgstr "根据 AttachEffect 组名移除效果。" + +msgid "groupNames: Array of group names." +msgstr "groupNames:组名数组。" + +msgid "groupCount: Number of entries in groupNames." +msgstr "groupCount:groupNames 中的条目数量。" + +msgid "Returns `S_OK` on success, `S_FALSE` if no matching groups were found." +msgstr "成功时返回 `S_OK`,若未找到匹配的组则返回 `S_FALSE`。" + +msgid "" +"Fails with `E_POINTER` when: pTarget, groupNames, or pRemovedCount is " +"null." +msgstr "当 pTarget、groupNames 或 pRemovedCount 为空时,失败并返回 `E_POINTER`。" + +msgid "Fails with `E_INVALIDARG` when: groupCount <= 0." +msgstr "当 groupCount <= 0 时,失败并返回 `E_INVALIDARG`。" + +msgid "Transfers all attached effects from source to target." +msgstr "将所有附加效果从来源转移到目标。" + +msgid "pSource: Source unit." +msgstr "pSource:来源单位。" + +msgid "pTarget: Target unit." +msgstr "pTarget:目标单位。" + +msgid "Returns `S_OK` on success." +msgstr "成功时返回 `S_OK`。" + +msgid "Fails with `E_POINTER` when: pSource or pTarget is null." +msgstr "当 pSource 或 pTarget 为空时,失败并返回 `E_POINTER`。" + +msgid "Vanilla class extension" +msgstr "原版类扩展" + +msgid "Converts a FootClass instance to another TechnoType." +msgstr "将一个 FootClass 实例转换为另一种 TechnoType。" + +msgid "pThis: Unit to convert." +msgstr "pThis:要转换的单位。" + +msgid "toType: Destination TechnoType." +msgstr "toType:目标 TechnoType。" + +msgid "Returns `S_OK` if conversion succeeds." +msgstr "转换成功时返回 `S_OK`。" + +msgid "Returns `E_INVALIDARG` if types are incompatible." +msgstr "若类型不兼容则返回 `E_INVALIDARG`。" + +msgid "Notes:" +msgstr "备注:" + +msgid "This API forwards directly to TechnoExt::ConvertToType." +msgstr "此 API 直接转发至 TechnoExt::ConvertToType。" + +msgid "Registers a callback function to calculate extra threat for a unit." +msgstr "注册一个回调函数,用于计算单位的额外威胁值。" + +msgid "" +"callback: Callback function pointer that returns the calculated threat " +"modifier. Signature: `double callback(TechnoClass* pThis, ObjectClass* " +"pTarget, double originalThreat)`." +msgstr "" +"callback:回调函数指针,返回计算后的威胁修正值。签名:`double callback(TechnoClass* pThis, " +"ObjectClass* pTarget, double originalThreat)`。" + +msgid "Fails with `E_POINTER` when: callback is null." +msgstr "当 callback 为空时,失败并返回 `E_POINTER`。" + +msgid "Behavior:" +msgstr "行为:" + +msgid "If callback is non-null, it is added to the internal callback list." +msgstr "如果 callback 非空,则将其添加到内部回调列表中。" + +msgid "" +"When threat calculations occur, all registered callbacks are invoked to " +"compute additional threat contributions." +msgstr "当威胁计算发生时,所有已注册的回调都会被调用以计算额外的威胁贡献。" + +msgid "" +"Multiple callbacks can be registered and are executed in registration " +"order." +msgstr "可以注册多个回调,它们会按注册顺序执行。" + +msgid "" +"The callback invocation method is `totalThreat = cb(pThis, pTarget, " +"totalThreat)`." +msgstr "回调的调用方式为 `totalThreat = cb(pThis, pTarget, totalThreat)`。" + +msgid "Updates the recorded firer house for a bullet extension." +msgstr "更新子弹扩展中记录的发射方阵营。" + +msgid "pBullet: Bullet instance." +msgstr "pBullet:子弹实例。" + +msgid "" +"pHouse: New firer house (can be null if caller intentionally clears " +"ownership)." +msgstr "pHouse:新的发射方阵营(若调用方有意清除所有权,可为空)。" + +msgid "Returns `S_OK` if the bullet extension is found and updated." +msgstr "如果找到并更新了子弹扩展,则返回 `S_OK`。" + +msgid "Fails with `E_POINTER` when: pBullet is null." +msgstr "当 pBullet 为空时,失败并返回 `E_POINTER`。" + +msgid "Fails with `E_UNEXPECTED` when: no BulletExt entry exists for pBullet." +msgstr "当 pBullet 没有对应的 BulletExt 条目时,失败并返回 `E_UNEXPECTED`。" + +msgid "**Availability:** `[1.1.0, ∞)`" +msgstr "**可用范围:** `[1.1.0, ∞)`" + +msgid "" +"Gets the value of a local variable by index. Does not create the variable" +" if missing — pValue is set to 0 when the index is not found." +msgstr "按索引获取局部变量的值。若变量不存在则不会创建,未找到索引时 pValue 将被设为 0。" + +msgid "index: Variable index." +msgstr "index:变量索引。" + +msgid "pValue: Receives the variable value." +msgstr "pValue:接收变量的值。" + +msgid "Returns `S_OK` if the variable exists, `S_FALSE` if it does not." +msgstr "若变量存在则返回 `S_OK`,若不存在则返回 `S_FALSE`。" + +msgid "Fails with `E_POINTER` when: pValue is null." +msgstr "当 pValue 为空指针时,失败并返回 `E_POINTER`。" + +msgid "Fails with `E_FAIL` when: ScenarioExt is not initialized." +msgstr "当 ScenarioExt 未初始化时,失败并返回 `E_FAIL`。" + +msgid "" +"Sets the value of a local variable by index. Creates the variable if the " +"index does not exist." +msgstr "按索引设置局部变量的值。若索引不存在则会创建该变量。" + +msgid "value: New value for the variable." +msgstr "value:变量的新值。" + +msgid "" +"Gets the value of a global variable by index. Does not create the " +"variable if missing — pValue is set to 0 when the index is not found." +msgstr "按索引获取全局变量的值。若变量不存在则不会创建,未找到索引时 pValue 将被设为 0。" + +msgid "" +"Sets the value of a global variable by index. Creates the variable if the" +" index does not exist." +msgstr "按索引设置全局变量的值。若索引不存在则会创建该变量。" + +msgid "Invokes AddEvent on an EventExt object." +msgstr "在一个 EventExt 对象上调用 AddEvent。" + +msgid "pEventExt: Event extension instance." +msgstr "pEventExt:事件扩展实例。" + +msgid "Returns `S_OK` if AddEvent succeeds, `S_FALSE` if AddEvent returns false." +msgstr "若 AddEvent 成功则返回 `S_OK`,若 AddEvent 返回 false 则返回 `S_FALSE`。" + +msgid "Fails with `E_POINTER` when: pEventExt is null." +msgstr "当 pEventExt 为空时,失败并返回 `E_POINTER`。" + diff --git a/docs/locale/zh_CN/LC_MESSAGES/License.po b/docs/locale/zh_CN/LC_MESSAGES/License.po index c216e55710..049e617578 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/License.po +++ b/docs/locale/zh_CN/LC_MESSAGES/License.po @@ -1,9 +1,3 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2021, The Phobos Contributors -# This file is distributed under the same license as the Phobos package. -# FIRST AUTHOR , 2021. -# -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Phobos \n" @@ -17,42 +11,35 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.9.1\n" -#: ../License.md:1 msgid "License" msgstr "许可证,汉化可参阅[此处](http://www.thebigfly.com/gnu/lgpl/lgpl-v3.php)。" -#: ../../LICENSE.md:4 msgid "" "Copyright (C) 2007 Free Software Foundation, Inc. " "Everyone is permitted to copy and distribute verbatim copies of this " "license document, but changing it is not allowed." msgstr "" -#: ../../LICENSE.md:9 msgid "" "This version of the GNU Lesser General Public License incorporates the " "terms and conditions of version 3 of the GNU General Public License, " "supplemented by the additional permissions listed below." msgstr "" -#: ../../LICENSE.md:13 msgid "Additional Definitions." msgstr "" -#: ../../LICENSE.md:15 msgid "" "As used herein, \"this License\" refers to version 3 of the GNU Lesser " "General Public License, and the \"GNU GPL\" refers to version 3 of the " "GNU General Public License." msgstr "" -#: ../../LICENSE.md:19 msgid "" "\"The Library\" refers to a covered work governed by this License, other " "than an Application or a Combined Work as defined below." msgstr "" -#: ../../LICENSE.md:22 msgid "" "An \"Application\" is any work that makes use of an interface provided by" " the Library, but which is not otherwise based on the Library. Defining a" @@ -60,14 +47,12 @@ msgid "" "interface provided by the Library." msgstr "" -#: ../../LICENSE.md:27 msgid "" "A \"Combined Work\" is a work produced by combining or linking an " "Application with the Library. The particular version of the Library with" " which the Combined Work was made is also called the \"Linked Version\"." msgstr "" -#: ../../LICENSE.md:32 msgid "" "The \"Minimal Corresponding Source\" for a Combined Work means the " "Corresponding Source for the Combined Work, excluding any source code for" @@ -75,7 +60,6 @@ msgid "" "on the Application, and not on the Linked Version." msgstr "" -#: ../../LICENSE.md:37 msgid "" "The \"Corresponding Application Code\" for a Combined Work means the " "object code and/or source code for the Application, including any data " @@ -83,21 +67,17 @@ msgid "" "Application, but excluding the System Libraries of the Combined Work." msgstr "" -#: ../../LICENSE.md:42 msgid "Exception to Section 3 of the GNU GPL." msgstr "" -#: ../../LICENSE.md:44 msgid "" "You may convey a covered work under sections 3 and 4 of this License " "without being bound by section 3 of the GNU GPL." msgstr "" -#: ../../LICENSE.md:47 msgid "Conveying Modified Versions." msgstr "" -#: ../../LICENSE.md:49 msgid "" "If you modify a copy of the Library, and, in your modifications, a " "facility refers to a function or data to be supplied by an Application " @@ -105,7 +85,6 @@ msgid "" "facility is invoked), then you may convey a copy of the modified version:" msgstr "" -#: ../../LICENSE.md:55 msgid "" "a) under this License, provided that you make a good faith effort to " "ensure that, in the event an Application does not supply the function " @@ -113,17 +92,14 @@ msgid "" "its purpose remains meaningful, or" msgstr "" -#: ../../LICENSE.md:60 msgid "" "b) under the GNU GPL, with none of the additional permissions of this " "License applicable to that copy." msgstr "" -#: ../../LICENSE.md:63 msgid "Object Code Incorporating Material from Library Header Files." msgstr "" -#: ../../LICENSE.md:65 msgid "" "The object code form of an Application may incorporate material from a " "header file that is part of the Library. You may convey such object code" @@ -133,24 +109,20 @@ msgid "" "lines in length), you do both of the following:" msgstr "" -#: ../../LICENSE.md:72 msgid "" "a) Give prominent notice with each copy of the object code that the " "Library is used in it and that the Library and its use are covered by " "this License." msgstr "" -#: ../../LICENSE.md:76 msgid "" "b) Accompany the object code with a copy of the GNU GPL and this license" " document." msgstr "" -#: ../../LICENSE.md:79 msgid "Combined Works." msgstr "" -#: ../../LICENSE.md:81 msgid "" "You may convey a Combined Work under terms of your choice that, taken " "together, effectively do not restrict modification of the portions of the" @@ -158,20 +130,17 @@ msgid "" "debugging such modifications, if you also do each of the following:" msgstr "" -#: ../../LICENSE.md:87 msgid "" "a) Give prominent notice with each copy of the Combined Work that the " "Library is used in it and that the Library and its use are covered by " "this License." msgstr "" -#: ../../LICENSE.md:91 msgid "" "b) Accompany the Combined Work with a copy of the GNU GPL and this " "license document." msgstr "" -#: ../../LICENSE.md:94 msgid "" "c) For a Combined Work that displays copyright notices during " "execution, include the copyright notice for the Library among these " @@ -179,11 +148,9 @@ msgid "" "the GNU GPL and this license document." msgstr "" -#: ../../LICENSE.md:99 msgid "d) Do one of the following:" msgstr "" -#: ../../LICENSE.md:116 msgid "" "e) Provide Installation Information, but only if you would otherwise " "be required to provide such information under section 6 of the GNU " @@ -197,11 +164,9 @@ msgid "" "section 6 of the GNU GPL for conveying Corresponding Source.)" msgstr "" -#: ../../LICENSE.md:128 msgid "Combined Libraries." msgstr "" -#: ../../LICENSE.md:130 msgid "" "You may place library facilities that are a work based on the Library " "side by side in a single library together with other library facilities " @@ -210,25 +175,21 @@ msgid "" "the following:" msgstr "" -#: ../../LICENSE.md:136 msgid "" "a) Accompany the combined library with a copy of the same work based " "on the Library, uncombined with any other library facilities, conveyed" " under the terms of this License." msgstr "" -#: ../../LICENSE.md:140 msgid "" "b) Give prominent notice with the combined library that part of it is " "a work based on the Library, and explaining where to find the " "accompanying uncombined form of the same work." msgstr "" -#: ../../LICENSE.md:144 msgid "Revised Versions of the GNU Lesser General Public License." msgstr "" -#: ../../LICENSE.md:146 msgid "" "The Free Software Foundation may publish revised and/or new versions of " "the GNU Lesser General Public License from time to time. Such new " @@ -236,7 +197,6 @@ msgid "" " in detail to address new problems or concerns." msgstr "" -#: ../../LICENSE.md:151 msgid "" "Each version is given a distinguishing version number. If the Library as " "you received it specifies that a certain numbered version of the GNU " @@ -249,7 +209,6 @@ msgid "" "Free Software Foundation." msgstr "" -#: ../../LICENSE.md:161 msgid "" "If the Library as you received it specifies that a proxy can decide " "whether future versions of the GNU Lesser General Public License shall " diff --git a/docs/locale/zh_CN/LC_MESSAGES/Project-guidelines-and-policies.po b/docs/locale/zh_CN/LC_MESSAGES/Project-guidelines-and-policies.po new file mode 100644 index 0000000000..505f93f88c --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/Project-guidelines-and-policies.po @@ -0,0 +1,705 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2025, The Phobos Contributors +# This file is distributed under the same license as the Phobos package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Phobos \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-06-30 21:43+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +msgid "Project guidelines and policies" +msgstr "项目准则与政策" + +msgid "Phobos maintenance crew structure" +msgstr "Phobos 维护团队结构" + +msgid "" +"Due to the size of the project and varying complexity of the codebase, we" +" have established a maintenance crew structure to help with the project's" +" development and maintenance. The structure is as follows:" +msgstr "由于项目规则和代码库的复杂性不同,我们建立了下述维护团队结构以协助项目开发和维护:" + +msgid "" +"**Leads** (or `T3` maintainers) - primary decision makers, define where " +"the project is headed and have the final say in case of disputes. They " +"are responsible for the project's vision and direction, and are the main " +"point of contact for the community." +msgstr "**`T3` 维护者**:**负责人**,主要决策者,决定项目方向,在争议中拥有最终决定权。他们负责项目的愿景和方向,是社区的主要连接点。" + +msgid "**`T2` maintainers** - assigned to more complex PRs, can make releases." +msgstr "**`T2` 维护者**:负责处理较复杂的拉取请求,可以发布版本。" + +msgid "**`T1` maintainers** - assigned to less complex PRs." +msgstr "**`T1` 维护者**:负责处理较简单的拉取请求。" + +msgid "" +"**Triages** - help triage/label/assign PRs, issues, discussions, help " +"with communication with the community." +msgstr "**分类员**:协助分类/标记/分配拉取请求、问题和讨论,协助与社区沟通。" + +msgid "" +"Those roles are assigned based on the complexity of the PRs and the " +"experience of the contributors. The roles are not fixed and can change " +"based on the contributor's experience and the complexity of the PRs they " +"are working on. Also only the commonly occured roles are established in " +"the list, in case of need - individual permissions can be assigned to " +"contributors by leads (for example, to help with documentation " +"translations)." +msgstr "这些角色根据拉取请求的复杂性和贡献者的经验进行分配,并非一成不变。此外这里只列出了常用的角色,在必要情况下负责人可为贡献者单独分配权限。" + +msgid "Suggested reviewing amount" +msgstr "关于审查工作量的建议" + +#, python-format +msgid "" +"The amount of code that maintainers should review should be roughly the " +"same as the amount of code in the PRs they submit themselves. However, " +"considering that we already have a large backlog of PRs at present, we " +"suggest that maintainers review more code than they submit (f.ex., " +"125%-150% of they submit). Only in this way can we continuously reduce " +"the number of backlogged PRs." +msgstr "" +"维护者审查的代码量应大致与其自身提交的 PR 代码量相当。然而,考虑到目前已有大量 PR " +"积压,我们建议维护者审查的代码量应超过其提交量(例如,达到其提交量的 125% 至 150%)。唯有如此,我们才能持续减少积压的 PR 数量。" + +msgid "" +"At present this is not a hard rule, but we hope that each maintainer can " +"try their best to achieve this." +msgstr "目前这并非硬性规定,但我们希望每位维护者都能尽力遵循这一建议。" + +msgid "Types of contributions" +msgstr "贡献类型" + +msgid "" +"To distribute the workload and make the project more manageable, we have " +"established several commonly occuring types of contributions that can be " +"made to the project. These types are as follows:" +msgstr "为分担工作量并使项目更易于管理,我们定义了以下常见的贡献类型:" + +msgid "" +"Phobos bugfixes, including reconnection error (desync), crash (fatal " +"error) fixes, and documentation fixes" +msgstr "Phobos 修复,包括不同步(Reconnection Error)、崩溃(Fatal Error)和文档修复" + +msgid "`T1` complexity by default" +msgstr "默认复杂度:`T1`" + +msgid "Vanilla bugfixes" +msgstr "原版 Bug 修复" + +msgid "" +"Unhardcodings/customizations - contributions that only make something " +"customizable through the INI or other way (by the modder usually), " +"without adding too much code to handle the customization" +msgstr "去硬编码/自定义功能——仅通过 Modder 可用的 INI 或其他方式使得某些功能得以自定义而不增加过多代码。" + +msgid "" +"Restored featues (from TS, RA2 etc.), assuming no extra changes or " +"additions apart from the ones necessary to function in YR with extensions" +" (the reviewer has to verify that)" +msgstr "" +"复原功能(来自 TS、RA2 等),要求 **除** 在 YR 中与扩展共同工作所 **必须** 的更改外 **未** " +"进行其他添改(需审查人员验证该情况)" + +msgid "New features" +msgstr "新功能" + +msgid "" +"Extensions of existing systems - add logic to existing systems, doesn't " +"warrant it's own entity or type classes generally, but may introduce new " +"hooks" +msgstr "现有系统扩展——为现有系统添加逻辑,通常无需独立实体或类型类,但可能引入新钩子" + +msgid "" +"Examples: feedback weapon logic, superweapon launch warhead logic, a new " +"type of trajectory that uses existing custom trajectory framework, etc." +msgstr "示例:反馈武器、弹头发射超级武器、使用现有的自定义弹道框架的新弹道类型等" + +msgid "" +"`T1` or `T2` complexity by default, depending on judgement of the one who" +" assigns the PR" +msgstr "默认复杂度:`T1` 或 `T2`(由拉取请求分配者判断)" + +msgid "" +"New systems - generally with their own classes that don't extend game " +"classes/logics (or have such amount of code that should be separated into" +" separate classes)" +msgstr "新系统——通常拥有自己的类,这些类不扩展游戏类/逻辑(或者代码量过大,应分离到单独的类中)" + +msgid "" +"Examples: custom trajectories framework, interceptor logic, shield logic," +" etc." +msgstr "示例:自定义弹道框架、抛射体拦截、护盾逻辑等" + +msgid "`T2` complexity by default" +msgstr "默认复杂度:`T2`" + +msgid "" +"Contributions to project infrastructure - changes to the project's build " +"system, CI, documentation, etc." +msgstr "项目基础设施建设——对项目构建系统的更改、CI、文档更改等" + +msgid "" +"Project policy changes - changes to the project's guidelines, " +"contributing guidelines, etc." +msgstr "项目政策更改——对项目指南、贡献指南等的更改" + +msgid "`T3` complexity by default (has to be reviewed by leads)" +msgstr "默认复杂度:`T3`(必须由负责人审查)" + +msgid "" +"Modders are highly encouraged to submit feedback on reusability of added " +"features (preferably most important takeaways should be tracked in pull " +"requests, discussions and issues) in order to not bloat the project with " +"one-off features." +msgstr "" +"强烈建议 Modder 们提交新增功能可复用性的反馈(重要内容应通过仓库页面 Pull Requests、Discussions 或 Issue " +"来跟踪),以避免项目充斥不可复用的一次性功能。" + +msgid "" +"The list is not exhaustive, you are welcome to propose/submit changes to " +"it (or to any project policies in order to improve how the project is " +"maintained)." +msgstr "列表并不详尽,欢迎提出修改(或调整任何改进维护方式的项目政策)建议。" + +msgid "In absence of a fitting category - a lead should review it." +msgstr "如果没有对应的类别——它应当由负责人审查。" + +msgid "" +"What can make any PR more controversial and requiring a higher level " +"maintainer's assignment:" +msgstr "可能导致拉取请求更受争议并需要更高级别维护者处理的情况:" + +msgid "Modifying/breaking previous (or vanilla) behavior" +msgstr "修改/破坏了原有(或原版)行为" + +msgid "Requiring migration" +msgstr "需要迁移操作" + +msgid "Mixing contribution types" +msgstr "混合的贡献类型" + +msgid "" +"Current level of maintainers not being sure about whether they can judge " +"this PR" +msgstr "当前维护者不确定能否准确评估该拉取请求" + +msgid "Contribution process" +msgstr "" +"贡献流程" + +msgid "" +"To ensure your contribution goes smoothly, please stick to the following " +"process when contributing to the project:" +msgstr "" +"为了确保您的贡献顺利加入,请在为项目做出贡献时遵循以下流程:" + +msgid "" +"**Check whether there is already an open Pull Request** for whatever you " +"want to contribute. If there is - comment on it and see if you can help " +"with it instead of starting your own first. We hate to discard otherwise " +"valid work just because it's a duplicate." +msgstr "" +"**检查是否存在** 与您打算贡献的内容相关的 **已打开的拉取请求**。如果存在——请对其发表评论,看看您是否能够提供帮助,而不是直接打开你自己的拉取请求。" +"我们并不希望 **您的有效工作** 仅仅因为重复而 **被放弃**。" + +msgid "" +"If all is clear - you should **get in touch with maintainers** of level " +"respective to the complexity of your PR (see [Types of contributions" +"](#types-of-contributions)) to review/merge your upcoming PR and **talk " +"with them about key design aspects before you even submit a " +"contribution**." +msgstr "" +"如果确认不会重复,您应当 **与** 和您 PR 复杂程度(见 [贡献类型](#types-of-contributions))相匹配的 **维护者取得联系**,以便他们审查/合并您即将提交的 PR 以" +"及 **在您提交贡献前进行关键设计方面的讨论**。" + +msgid "" +"This is *especially* important for bigger and more fundamental " +"improvements, when you're learning and when you're exploring \"uncharted " +"territories\". Staying engaged in communication with the maintainers will" +" help you to avoid unnecessary wasted effort and reworks later on and " +"make sure that your contribution is aligned with how we do things. Not " +"only that, but it also allows you to essentially get early reviews on " +"important things and faster merges (which is especially important in " +"light of our large amount of PRs) with higher level of confidence." +msgstr "" +"对于较大、较根本性的更改,当您还在学习阶段以及当您正在探索“未知领域”时这 *尤其* 重要。" +"与维护者保持沟通有助于您避免不必要的精力浪费和返工以及确保您的贡献符合我们的工作方式。" +"不仅如此,这还可以使您在重要事项上尽早得到审查以及以更高的信心尽快得到合并(考虑到我们" +"已有大量 PR,这点尤为重要)" + +msgid "" +"Currently the Phobos channel on Discord is the best place to brainstorm " +"things like that, as it's the most accessible place to reach out to " +"maintainers and discuss your ideas (or if there's nobody around - try " +"messaging experienced maintainers privately)." +msgstr "" +"目前 Discord 上的 Phobos 频道是进行此类讨论的最佳场所,因为这是联系维护者和讨论您想法最便捷的场所" +"(如果无人回应,可以尝试私信联系经验丰富的维护者)。" + +msgid "" +"GitHub issues, discussions and draft PRs (with not a lot of work done " +"yet) are also OK to discuss things, but they are not as fast as Discord " +"and are better used for persistent storage of info, and usually it's " +"easier to grab someone's attention if you approach them personally in " +"chat." +msgstr "" +"GitHub 的议题、讨论模块以及(尚未完成大量工作的)PR 草稿也同样可以用来讨论,但它们不如 Discord 那样迅捷" +"并且更适合用于长期存储信息,而且通常在即时聊天中直接与某人沟通更容易引起他们的注意。" + +msgid "" +"It's also a good thing to get opinions of multiple maintainers and not " +"always consult specific one or a separate part of them. We should try to " +"stay interconnected with each other, even if initially divided by " +"language or habitually." +msgstr "" +"向多位维护者寻求意见也是一个很好的做法——不要总是咨询特定某一位或者某一部分维护者。" +"即便起初由于语言或习惯有所隔阂,我们也应当努力保持彼此之间的相互联系。" + +msgid "" +"When we all have a clear idea of the plan you have in mind - all that is " +"left to do is to finalize the design and implementation in the PR, and " +"we'll review the minor things left and merge it." +msgstr "" +"当我们都对您所想的计划有了清晰的想法后,剩下的就是完成拉取请求中的设计和实现,我们将审查剩余的小问题,然后合并它。" + +msgid "Project structure" +msgstr "项目结构" + +msgid "" +"Assuming you've successfully cloned and built the project before getting " +"here, you should end up with the following project structure:" +msgstr "假设你已经成功克隆并构建了项目,你应当看到以下结构:" + +msgid "`src/` - all the project's source code resides here." +msgstr "`src/` - 项目所有的源代码。" + +msgid "" +"`Commands/` - source code for new hotkey commands. Every command is a new" +" class that inherits from `PhobosCommandClass` (defined in `Commands.h`) " +"and is defined in a separate file with a few methods and then registered " +"in `Commands.cpp`." +msgstr "" +"`Commands/` - 新快捷键命令源码。每个新的快捷键类均继承自 `PhobosCommandClass`(定义在 `Commands.h`" +" 中)并在一个单独的文件中用几种方法定义然后注册到 `Commands.cpp`中。" + +msgid "`New/` - source code for new ingame classes." +msgstr "`New/` - 新增游戏内类的源码。" + +msgid "" +"`Type/` - new enumerated types (types that are declared with a list " +"section in an INI, for example, radiation types) implemented in the " +"project. Every enumerated type class inherits `Enumerable` (where `T` " +"is an enum. type class) class that is defined in `Enumerable.h`." +msgstr "" +"`Type/` - 新增枚举类型(即需要在 INI 文件中通过注册表部分声明的类型,例如辐射类型)。每个枚举类型类都继承自 " +"`Enumerable.h` 中定义的 `Enumerable` 类(这里的 `T` 是枚举类型名)。" + +msgid "`Entity/` - classes that represent ingame entities are located here." +msgstr "`Entity/` - 表示游戏内实体的类均在此。" + +msgid "" +"`Ext/` - source code for vanilla engine class extensions. Each class " +"extension is kept in a separate folder named after vanilla engine class " +"name and contains the following:" +msgstr "`Ext/` - 原版引擎类的扩展类源码。每个扩展类都保存在一个以原版类命名的单独文件夹中,并包含以下内容:" + +msgid "" +"`Body.h` and `Body.cpp` contain class and method definitions/declarations" +" and common extension hooks. Each extension class must contain the " +"following to work correctly:" +msgstr "`Body.h` 与 `Body.cpp` 包含了类和方法的定义/声明以及标准扩展钩子。每个扩展类必须包含下列内容才能正确工作:" + +msgid "" +"`ExtData` - extension data class definition which inherits `Extension`" +" from `Container.h` (where `T` is the class that is being extended), " +"which is the actual class that contains new data for vanilla classes;" +msgstr "" +"`ExtData` - 继承自 `Container.h` 中 `Extension` 的扩展数据类(其中 `T` " +"是被扩展的类),这也是包含了原版类中新数据的实际类型;" + +msgid "" +"`ExtContainer` - a definition of a special map class to store and look up" +" `ExtData` instances for base class instances which inherits " +"`Container` from `Container.h` (where `T` is the extension data " +"class);" +msgstr "" +"`ExtContainer` - 一个特殊的映射类的定义,用于储存和查找继承自 `Container.h` 的 `Container` " +"的基类实例的 `ExtData` 类;" + +msgid "`ExtMap` - a static instance of `ExtContainer` map;" +msgstr "`ExtMap` - `ExtContainer` 的静态实例;" + +msgid "" +"constructor, destructor, serialization, deserialization and (for " +"appropriate classes) INI reading hooks." +msgstr "构造函数,析构函数,序列化,反序列化以及(对于适当的类)读取 INI 的钩子。" + +msgid "" +"`Hooks.cpp` and `Hooks.*.cpp` contain non-common hooks to correctly patch" +" in new custom logics." +msgstr "`Hooks.cpp` 和 `Hooks.*.cpp` 包含非标准的钩子,用于正确修补新定义逻辑。" + +msgid "" +"`ExtraHeaders/` - extra header files to interact with / describe types " +"included in game binary that are not included in YRpp yet." +msgstr "`ExtraHeaders/` - 额外的头文件,用于交互/描述未包含在 YRpp 中的游戏内的类。" + +msgid "" +"`Misc/` - uncategorized source code, including hooks that don't belong to" +" an extension class." +msgstr "`Misc/` - 未分类的源码,包括不属于任意扩展类的钩子。" + +msgid "`Utilities/` - common code that is used across the project." +msgstr "`Utilities/` - 整个项目通用的辅助代码。" + +msgid "`Phobos.cpp`/`Phobos.h` - extension bootstrapping code." +msgstr "`Phobos.cpp`/`Phobos.h` - 扩展引导代码。" + +msgid "" +"`Phobos.Ext.cpp` - contains common processing code new or extended " +"classes. If you define a new or extended class you have to add your new " +"class into `MassActions` global variable type declaration in this file." +msgstr "" +"`Phobos.Ext.cpp` - 包含通用处理代码、新的或扩展的类。如果你定义了一个新的或扩展的类那么你必须将你的新类添加进全局变量 " +"`MassActions` 中进行声明。" + +msgid "" +"`YRpp/` - contains the header files to interact with / describe types " +"included in game binary and also macros to write hooks using Syringe. " +"Included as a submodule." +msgstr "`YRpp/` - 包含与游戏二进制文件中所包含的类型进行交互/描述的头文件,以及用于 Syringe 编写钩子的宏。作为子模块包含在内。" + +msgid "Code styleguide" +msgstr "代码样式指导" + +msgid "" +"We have established a couple of code style rules to keep things " +"consistent. Some of the rules are enforced in `.editorconfig`, where " +"applicable, so you can autoformat the code by pressing `Ctrl + K, D` " +"hotkey chord in Visual studio. Still, it is advised to manually check the" +" style before submitting the code." +msgstr "" +"我们制定了代码样式规范以保持一致性。部分规则已在可用情况下通过 `.editorconfig` 文件强制执行,因此你可以在 Visual " +"Studio 中通过按下 `Ctrl + K + D` 来自动格式化代码。尽管如此,我们仍建议在提交代码前手动检查代码样式。" + +msgid "We use tabs instead of spaces to indent code." +msgstr "我们使用制表符而非空格来缩进代码。" + +msgid "" +"Curly braces are always to be placed on a new line ([Allman indentation " +"style](https://en.wikipedia.org/wiki/Indentation_style#Allman_style)). " +"One of the reasons for this is to clearly separate the end of the code " +"block head and body in case of multiline bodies:" +msgstr "" +"大括号始终应当放在新的一行上([Allman 缩进 " +"风格](https://en.wikipedia.org/wiki/Indentation_style#Allman_style))。这样做的一个原因是需要对于多行代码的情况清楚地区分代码块的头部和尾部:" + +msgid "" +"Braceless code block bodies should be made only when both code block head" +" and body are single line, statements split into multiple lines and " +"nested braceless blocks are not allowed within braceless blocks:" +msgstr "只有代码块头部和代码块主体均为单行时才应当使用无大括号的代码块,且无大括号的块中不允许存在跨多行的语句拆分以及嵌套的无大括号块:" + +msgid "" +"Only empty curly brace blocks may be left on the same line for both " +"opening and closing braces (if appropriate)." +msgstr "只有当大括号块为空时才允许左右括号放置在同一行。" + +msgid "" +"If you use if-else you should either have all of the code blocks braced " +"or braceless to keep things consistent." +msgstr "如果使用了 if-else 语句,那么所有代码块应当统一使用大括号或统一不使用大括号以保持一致性。" + +msgid "" +"Big conditions which span multiple lines and are hard to read otherwise " +"should be split into smaller logical parts to improve readability:" +msgstr "难以阅读的跨多行的复杂条件语句应被拆分为更小的逻辑单元以提高可读性:" + +msgid "" +"Code should have empty lines to make it easier to read. Use an empty line" +" to split code into logical parts. It's mandatory to have empty lines to " +"separate:" +msgstr "代码应使用一些空行分隔逻辑部分来提升可读性。以下情况必须使用空行分隔:" + +msgid "" +"`return` statements (except when there is only one line of code except " +"that statement);" +msgstr "`return` 语句(除非该句外仅有一行代码);" + +msgid "" +"local variable assignments that are used in the further code (you " +"shouldn't put an empty line after one-line local variable assignments " +"that are used only in the following code block though);" +msgstr "后续代码中使用的局部变量声明(但若仅用于后续代码块的单行局部变量声明则其后无需空行);" + +msgid "" +"code blocks (braceless or not) or anything using code blocks (function or" +" hook definitions, classes, namespaces etc.);" +msgstr "代码块(无论是否有花括号)以及用代码块规则的其他东西(函数,钩子定义,类,名空间等);代码块(无论是否有大括号)或任何使用代码块的结构(函数/钩子定义、类、命名空间等);" + +msgid "hook register input/output." +msgstr "钩子注册的输入/输出。" + +msgid "" +"`auto` may be used to hide an unnecessary type declaration if it doesn't " +"make the code harder to read. `auto` may not be used on primitive types." +msgstr "在不影响代码可读性的前提下可以使用 `auto` 来隐式声明不必要的显式类型。基础类型禁止使用 `auto`。" + +msgid "A space must be put between braces of empty curly brace blocks." +msgstr "空的大括号块的括号之间必须保留空格。" + +msgid "" +"To have less Git merge conflicts member initializer lists and other list-" +"like syntax structures used in frequently modified places should be split" +" per-item with item separation characters (commas, for example) placed " +"*after newline character*:" +msgstr "" +"为了减少 Git 合并冲突,在频繁修改区域的成员初始化列表及其他类似列表的语法结构中应当采用按项分行且项目分隔符(例如逗号)置于 **换行符** " +"之后的书写方式:" + +msgid "" +"Local variables and function/method args are named in the `camelCase` " +"(using a `p` prefix to denote pointer type for every pointer nesting " +"level) and a descriptive name, like `pTechnoType` for a local " +"`TechnoTypeClass*` variable." +msgstr "" +"局部变量和函数/方法参数采用驼峰命名法(使用前缀 `p` 表示指针类型,每个指针嵌套级别都需添加前缀),并配以描述性名称,例如局部变量 " +"`TechnoTypeClass*` 应命名为 `pTechnoType`。" + +msgid "" +"Classes, namespaces, class fields and members are always written in " +"`PascalCase`." +msgstr "类、命名空间、类字段和成员始终采用帕斯卡命名法。" + +msgid "" +"Class fields that can be set via INI tags should be named exactly like " +"ini tags with dots replaced with underscores." +msgstr "可以通过 INI 标签设置的类字段必须与 INI 标签保持完全一致的命名,仅将点号替换为下划线。" + +msgid "" +"Pointer type declarations always have pointer sign `*` attached to the " +"type declaration." +msgstr "指针类型声明时,`*` 必须紧贴类型声明。" + +msgid "" +"Non-static class extension methods faked by declaring a static method " +"with `pThis` as a first argument are only to be placed in the extension " +"class for the class instance of which `pThis` is." +msgstr "通过声明一个以 `pThis` 作为首个参数的静态方法来伪造的非静态类扩展方法只能放置在 `pThis` 所在的类实例的扩展类中。" + +msgid "" +"If it's crucial to fake `__thiscall` you may use `__fastcall` and use " +"`void*` or `void* _` as a second argument to discard value passed through" +" `EDX` register. Such methods are to be used for call replacement." +msgstr "" +"如果需要伪造 `__thiscall`,可以使用 `__fastcall` 并将 `void*` 或 `void* _` 作为第二个参数来丢弃通过" +" `EDX` 寄存器传递的值。此方法仅用于调用替换。" + +msgid "" +"Hooks have to be named using a following scheme: " +"`HookedFunction_HookPurpose`, or `ClassName_HookedMethod_HookPurpose`. " +"Defined-again hooks are exempt from this scheme due to impossibility to " +"define different names for the same hook." +msgstr "" +"工作函数必须按以下规则命名:`钩上的函数_钩子的功能` 或 " +"`类名_钩上的方法_钩子的功能`。由于无法为同一钩子定义不同的名称,再次定义(DEFINE_HOOK_AGAIN)的钩子不受此方案的约束。" + +msgid "" +"Return addresses should use anonymous enums to make it clear what address" +" means what, if applicable. The enum has to be placed right at the " +"function start and include all addresses that are used in this hook:" +msgstr "返回地址应在可行的情况下使用匿名枚举进行语义化标注。该枚举必须置于函数起始位置,并包含本钩子中使用的所有地址:" + +msgid "" +"Even if the hook doesn't use `return 0x0` to execute the overriden " +"instructions, you still have to write correct hook size (last parameter " +"of `DEFINE_HOOK` macro) to reduce potential issues if the person editing " +"this hook decides to use `return 0x0`." +msgstr "" +"即使钩子不使用 `return 0x0` 来执行被覆盖的指令,你仍必须编写正确的钩子大小(`DEFINE_HOOK` " +"宏的最后一个参数),以减少当其他人编辑此钩子时若决定使用 `return 0x0` 可能引发的潜在问题。" + +msgid "" +"New ingame \"entity\" classes are to be named with `Class` postfix (like " +"`RadTypeClass`). Extension classes are to be named with `Ext` postfix " +"instead (like `RadTypeExt`)." +msgstr "" +"新的游戏内「实体」类应当以 `Class` 后缀命名(例如 `RadTypeClass`)。扩展类应当改用 `Ext` 后缀命名(例如 " +"`RadTypeExt`)。" + +msgid "Do not pollute the namespace." +msgstr "不要污染命名空间。" + +msgid "" +"Avoid introducing unnecessary macros if they can be replaced by " +"equivalent `constexpr` or `__forceinline` functions." +msgstr "若能使用等效的 `constexpr` 或 `__forceinline` 函数替代就不要引入不必要的宏。" + +msgid "The styleguide is not exhaustive and may be adjusted in the future." +msgstr "样式指南并不详尽,未来可能会进行调整。" + +msgid "Git branching model" +msgstr "Git 分支模型" + +msgid "" +"Couple of notes regarding the Git practices. We use [git-" +"flow](https://nvie.com/posts/a-successful-git-branching-model/)-like " +"workflow:" +msgstr "" +"我们使用 [git-flow](https://nvie.com/posts/a-successful-git-branching-model/)" +" 之类的工作流:" + +msgid "" +"`master` is for stable releases, can have hotfixes pushed to it or " +"branched off like a feature branch with the requirement of version " +"increment and `master` being merged into `develop` after that;" +msgstr "" +"`master` 用于稳定版本发布,允许直接推送热修复补丁或像功能分支一样分离分支,但需遵循版本号递增要求,并在之后将 `master` " +"分支合并回 `develop` 分支;" + +msgid "`develop` is the main development branch;" +msgstr "`develop` 是主要开发分支;" + +msgid "" +"`feature/`-prefixed branches (sometimes the prefix may be different if " +"appropriate, like for big fixes or changes) are so called \"feature " +"branches\" - those are branched off `develop` for every new feature to be" +" introduced into it and then merged back. We use squash merge to merge " +"them back in case of smaller branches and sometimes merge commit in case " +"the branch is so big it would be viable to keep it as is." +msgstr "" +"带有 `feature/` 前缀的分支(有时根据实际情况可能使用不同的前缀,例如大的修复或改动)即所谓的「功能分支」——这些分支从 " +"`develop` 分离出来用于引入新的功能,完成后合并回 " +"`develop`。对于小型分支,我们使用压缩合并;若分支规模较大,则可能使用合并提交来维持提交记录的完整性;" + +msgid "" +"`hotfix/`-prefixed branches may be used in a same manner as `feature/`, " +"but with `master` branch, with a requirement of `master` being merged " +"into `develop` after `hotfix/` branch was squash merged into `master`." +msgstr "" +"带有 `hotfix/` 前缀的分支使用方式类似于 `feature/`,但基于 `master` 分支创建,要求将 `hotfix/` " +"分支压缩合并到 `master` 后必须将 `master` 合并回 `develop`;" + +msgid "" +"`release/`-prefixed branches are branched off `develop` when a new stable" +" release is slated to allow working on features for a next release and " +"stability improvements for this release. Those are merged with a merge " +"commit into `master` and `develop` with a stable version number increase," +" after which the stable version is released." +msgstr "" +"带有 `release/` 前缀的分支在计划发布新的稳定版本时从 `develop` " +"分离,允许同时开发下个版本的功能和改进当前版本的稳定性。这些分支通过合并提交合并到 `master` 和 " +"`develop`,并递增稳定版本的版本号,随后发布稳定版本。" + +msgid "" +"When you're working with your local & remote branches use **fast-" +"forward** pulls to get the changes from remote branch to local, **don't " +"merge remote branch into local and vice versa**, this creates junk " +"commits and makes things unsquashable." +msgstr "" +"当你在处理本地与远程分支时应当使用 **拉取(快进)** " +"将远程分支的变更同步到本地,**不要将远程分支合并到本地分支**,反之亦然,否则会产生垃圾提交并使代码无法压缩整理。" + +msgid "These commands will do the following for all repositories on your PC:" +msgstr "这些命令对你电脑上的所有代码仓库执行以下操作:" + +msgid "remove the automatic merge upon pull and replace it with a rebase;" +msgstr "移除拉取时的自动合并行为,改用变基操作;" + +msgid "" +"highlight changes consisting of moving existing lines to another location" +" with a different color." +msgstr "用特定颜色高亮显示「移动现有代码行到新位置」这类变更。" + +msgid "Working with YRpp via submodules" +msgstr "通过子模块使用 YRpp" + +msgid "" +"Often when working on Phobos and/or researching the YR engine you'll need" +" to implement corrections for YRpp. Generally the corrections need to be " +"submitted to [YRpp repository](https://github.com/Phobos-developers/YRpp)" +" and can be done separately from the actual features in Phobos, but " +"frequently the improvements are to be submitted as a part of Phobos " +"contribution process. To submit improvements to YRpp you have to create a" +" branch in YRpp, then you can push it and submit a pull request to YRpp " +"repository." +msgstr "" +"当你开发 Phobos 和研究 YR 引擎时常常需要对 YRpp 进行修正。这些修正通常需要提交到 [YRpp " +"仓库](https://github.com/Phobos-developers/YRpp),可与 Phobos " +"中的实际功能分开处理。但许多情况下这些改动需要作为 Phobos 贡献流程的一部分进行提交。要向 YRpp 提交改动你需要在 YRpp " +"中创建分支,推送后向 YRpp 仓库提交拉取请求。" + +msgid "" +"When you clone Phobos recursively - you also clone YRpp as a submodule. " +"Basically submodules are just nested repositories. You can open it like " +"any other repository, so the changes can be synchronized to Phobos and " +"you don't need to rename stuff by hand." +msgstr "" +"当你递归克隆 Phobos 时,YRpp 会作为子模块一同克隆。子模块本质上就是嵌套的仓库。你可以像操作普通仓库一样打开它,因此变更可以同步到 " +"Phobos,无需手动重命名文件。" + +msgid "The suggested workflow is as follows:" +msgstr "推荐的工作流程如下:" + +msgid "" +"In your IDE of choice rename fields and functions using symbol renaming " +"feature (`Rename...` feature in Visual Studio (regular or Code), `[F2]` " +"by default), then you will have two \"levels\" of changes displayed in " +"your Git client:" +msgstr "" +"在你选择的 IDE 中使用符号重命名功能修改字段和函数名称(Visual Studio 常规版本或 Code 中默认快捷键为 " +"`[F2]`),此时你将在 Git 客户端中看到以下两个「层级」的变更:" + +msgid "" +"for Phobos repository - changes in the Phobos code (as regular changes) " +"and changes to YRpp (as one submodule change)." +msgstr "Phobos 仓库:Phobos 代码的常规变更 + YRpp 子模块的变更(显示为一个子模块变更)。" + +msgid "" +"for YRpp repository - changes to the field names and function names in " +"YRpp as regular changes." +msgstr "YRpp 仓库:YRpp 中字段和函数名称的常规变更。" + +msgid "" +"Create a branch in YRpp repository (create a fork of it if you didn't " +"yet), commit and push the changes and submit it as a pull request. After " +"pushing it you have two options in Phobos repository:" +msgstr "在 YRpp 仓库中创建分支(若未创建则先 fork),提交并推送更改,然后发起拉取请求。推送后你在 Phobos 仓库有两个选择:" + +msgid "" +"wait until it's accepted, then checkout YRpp at the newest commit, then " +"commit and push - this will save you having to commit and push multiple " +"times, but you won't be able to get a nightly build for people to test;" +msgstr "等待合并通过后,将 YRpp 子模块切换至最新提交,然后提交推送——这可以减少提交次数,但无法获取供测试的自动构建;" + +msgid "" +"don't wait for YRpp changes to be merged, commit and push right after you" +" pushed the YRpp changes to your YRpp branch - you will have an up-to-" +"date build on Phobos pull request this way. Note that you must do this " +"only after you committed to and pushed your YRpp branch, otherwise the " +"build system won't know what are the changes as they are not exposed to " +"the world, only available to you locally." +msgstr "" +"不等待 YRpp 合并,在推送 YRpp 分支变更后立即推送 Phobos——这种方式可以确保 Phobos 拉取请求使用最新构建。注意你必须在 " +"YRpp 分支完成提交推送,否则构建系统无法识别仅在本地存在的变更" + +msgid "" +"After the YRpp pull request gets accepted you will need to switch to the " +"latest commit that was merged (you do that in the submodule), verify that" +" it compiles like normal, and then commit and push it to your Phobos " +"branch that you made for your pull request." +msgstr "当 YRpp 拉取请求接受后,你需要再子模块中切换到已合并的最新提交,验证正常编译后,将其提交并推送到 Phobos 拉取请求创建的分支。" + diff --git a/docs/locale/zh_CN/LC_MESSAGES/Whats-New.po b/docs/locale/zh_CN/LC_MESSAGES/Whats-New.po index 8d1c72fe1a..ea4b58850c 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/Whats-New.po +++ b/docs/locale/zh_CN/LC_MESSAGES/Whats-New.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Phobos \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-23 22:17+0800\n" +"POT-Creation-Date: 2026-06-30 21:43+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -109,11 +109,124 @@ msgstr "" "`TiltsWhenCrusher.Vehicles` 和 `TiltsWhenCrusher.Overlays` " "分别定义这两种情况,它们都默认为 `TiltsWhenCrushes`。" -msgid "From older Phobos versions" -msgstr "由旧版本 Phobos" +msgid "Breaking changes" +msgstr "破坏性更改" -msgid "From post-0.3 devbuilds" -msgstr "由 post-0.3 开发版" +msgid "" +"This serves as a changelog for when you just need to drop the new version" +" in without reading into every version you're skipping, so you can simply" +" read up on this log of breaking changes and apply whatever you might " +"need to apply." +msgstr "这是一份用于让你只需替换新版本而无需了解你所跳过的每个版本时使用的更新日志,以便你可以简单查阅这份破坏性变更日志并应用你可能需要的任何更改。" + +msgid "0.4" +msgstr "0.4" + +msgid "" +"Phobos-introduced Warhead effects like shield modifiers, critical hits, " +"disguise & mind control removal now require Warhead `Verses` to affect " +"target to apply unless `EffectsRequireVerses` is set to false. Shield " +"armor type is used if target has an active shield that cannot be " +"penetrated by the Warhead." +msgstr "" +"现在由 Phobos 引入的弹头效果例如修改护盾、暴击、解除伪装和心控除非 `EffectsRequireVerses` 否则需要弹头 " +"`Verses` 能够影响目标才会生效。若目标拥有无法被弹头穿透的激活状态护盾则使用护盾的护甲类型判定。" + +msgid "" +"`Trajectory=Straight` projectiles can now snap on targets within 0.5 " +"cells from their detonation point, this distance can be customized via " +"`Trajectory.Straight.TargetSnapDistance`." +msgstr "" +"现在 `Trajectory=Straight` 的抛射体可以自动锁定距离爆点 0.5 格内的目标,该距离可以通过 " +"`Trajectory.Straight.TargetSnapDistance` 进行调整。" + +msgid "" +"`LaunchSW.RealLaunch=false` now checks if firing house has enough credits" +" to satisfy SW's `Money.Amount` in order to be fired." +msgstr "现在即便 `LaunchSW.RealLaunch=false` 也会检查发射方的资金是否满足超武 `Money.Amount` 的数值。" + +msgid "" +"`CreateUnit` now creates the units by default at animation's height (even" +" if `CreateUnit.ConsiderPathfinding` is enabled) instead of always at " +"ground level. This behaviour can be restored by setting " +"`CreateUnit.AlwaysSpawnOnGround` to true." +msgstr "" +"现在 `CreateUnit` 默认在动画所在高度处创建单位(即便启用了 " +"`CreateUnit.ConsiderPathfinding`)而非始终在地面创建。这一行为可以通过将 " +"`CreateUnit.AlwaysSpawnOnGround` 设为 true 来复原。" + +msgid "" +"Phobos-introduced attack scripts now consider potential target's current " +"map zone when evaluating targets. [TargetZoneScanType](Fixed-or-Improved-" +"Logics.md#customizable-target-evaluation-map-zone-check-behaviour) can be" +" used to customize this behaviour." +msgstr "" +"Phobos 引入的攻击脚本现在会评估潜在目标当前所处的地图区域。可使用 [TargetZoneScanType](Fixed-or-" +"Improved-Logics.md#customizable-target-evaluation-map-zone-check-" +"behaviour) 来自定义该行为。" + +msgid "" +"`Artillary`, `ICBMLauncher`, `TickTank` or `SensorArray` no longer affect" +" whether or not building is considered as vehicle for AI attack scripts. " +"Use [ConsideredVehicle](Fixed-or-Improved-Logics.md#buildings-considered-" +"as-vehicles) instead on buildings that do not have both `UndeploysInto` " +"set and `Foundation=1x1`." +msgstr "" +"`Artillary`、`ICBMLauncher`、`TickTank` 及 `SensorArray` 不再影响建筑是否被 AI " +"攻击脚本视为载具。对于没有同时设置 `UndeploysInto` 与 `Foundation=1x1` 的建筑请使用 " +"[ConsideredVehicle](Fixed-or-Improved-Logics.md#buildings-considered-as-" +"vehicles)。" + +msgid "" +"`PassengerDeletion.SoylentFriendlies` has been replaced by " +"`PassengerDeletion.SoylentAllowedHouses`. Current default value of " +"`PassengerDeletion.SoylentAllowedHouses=enemies` matches the previous " +"default behaviour with `PassengerDeletion.SoylentFriendlies=false`." +msgstr "" +"`PassengerDeletion.SoylentFriendlies` 已被替换为 " +"`PassengerDeletion.SoylentAllowedHouses`。目前设定默认值 " +"`PassengerDeletion.SoylentAllowedHouses=enemies` 对应原本默认为 " +"`PassengerDeletion.SoylentFriendlies=false` 的行为。" + +msgid "" +"`Grinding.DisplayRefund` is changed to `DisplayIncome`, " +"`Grinding.DisplayRefund.Houses` is changed to `DisplayIncome.Houses`, " +"`Grinding.DisplayRefund.Offset` is changed to `DisplayIncome.Offset`." +msgstr "" +"`Grinding.DisplayRefund` 已更名为 " +"`DisplayIncome`,`Grinding.DisplayRefund.Houses` 更名为 " +"`DisplayIncome.Houses`,`Grinding.DisplayRefund.Offset` 更名为 " +"`DisplayIncome.Offset`。" + +msgid "" +"`[JumpjetControls] -> AllowLayerDeviation` and " +"`JumpjetAllowLayerDeviation` have been deprecated as the animation " +"layering issues have been properly fixed by default now." +msgstr "" +"`[JumpjetControls] -> AllowLayerDeviation` 和 `JumpjetAllowLayerDeviation`" +" 已被弃用,因为动画图层问题现在默认状态下已彻底修复。" + +msgid "" +"`[JumpjetControls] -> TurnToTarget` and `JumpjetTurnToTarget` are " +"obsolete. Jumpjet units who fire `OmniFire=no` weapons **always** turn to" +" targets as other units do." +msgstr "" +"`[JumpjetControls] -> TurnToTarget` 和 `JumpjetTurnToTarget` 均已过时。使用 " +"`OmniFire=no` 武器的 JumpJet 单位现在 **总是** 会像其他单位那样转向目标。" + +msgid "" +"Buildings delivered by trigger action 125 will now **always** play " +"buildup anim as long as it exists. `[ParamTypes] -> 53` is deprecated." +msgstr "现在 125 号触发结果所投送的建筑只要存在就 **总是** 会播放其建造动画。`[ParamTypes] -> 53` 已弃用。" + +msgid "`Shadow` for debris & meteor animations is changed to `ExtraShadow`." +msgstr "用于碎片和流星动画的 `Shadow` 已更名为 `ExtraShadow`。" + +msgid "Changes compared to inter-version builds / pre-releases" +msgstr "相较于版本间构建/预发布版本的更改" + +msgid "Click to show" +msgstr "点击查看" msgid "" "Ivan bombs no longer automatically center on building when attached. Set " @@ -264,111 +377,39 @@ msgstr "" "`Level=true` 的抛射体现在不再在对被非水地块阻隔的目标时移动自己的位置(恢复原版规则)。现在需要使用 " "`SubjectToLand=true` 来启用这一行为。" -msgid "From 0.3" -msgstr "由 0.3" - -msgid "" -"Phobos-introduced Warhead effects like shield modifiers, critical hits, " -"disguise & mind control removal now require Warhead `Verses` to affect " -"target to apply unless `EffectsRequireVerses` is set to false. Shield " -"armor type is used if target has an active shield that cannot be " -"penetrated by the Warhead." -msgstr "" -"现在由 Phobos 引入的弹头效果例如修改护盾、暴击、解除伪装和心控除非 `EffectsRequireVerses` 否则需要弹头 " -"`Verses` 能够影响目标才会生效。若目标拥有无法被弹头穿透的激活状态护盾则使用护盾的护甲类型判定。" - -msgid "" -"`Trajectory=Straight` projectiles can now snap on targets within 0.5 " -"cells from their detonation point, this distance can be customized via " -"`Trajectory.Straight.TargetSnapDistance`." -msgstr "" -"现在 `Trajectory=Straight` 的抛射体可以自动锁定距离爆点 0.5 格内的目标,该距离可以通过 " -"`Trajectory.Straight.TargetSnapDistance` 进行调整。" - -msgid "" -"`LaunchSW.RealLaunch=false` now checks if firing house has enough credits" -" to satisfy SW's `Money.Amount` in order to be fired." -msgstr "现在即便 `LaunchSW.RealLaunch=false` 也会检查发射方的资金是否满足超武 `Money.Amount` 的数值。" - -msgid "" -"`CreateUnit` now creates the units by default at animation's height (even" -" if `CreateUnit.ConsiderPathfinding` is enabled) instead of always at " -"ground level. This behaviour can be restored by setting " -"`CreateUnit.AlwaysSpawnOnGround` to true." -msgstr "" -"现在 `CreateUnit` 默认在动画所在高度处创建单位(即便启用了 " -"`CreateUnit.ConsiderPathfinding`)而非始终在地面创建。这一行为可以通过将 " -"`CreateUnit.AlwaysSpawnOnGround` 设为 true 来复原。" - -msgid "" -"Phobos-introduced attack scripts now consider potential target's current " -"map zone when evaluating targets. [TargetZoneScanType](Fixed-or-Improved-" -"Logics.md#customizable-target-evaluation-map-zone-check-behaviour) can be" -" used to customize this behaviour." -msgstr "" -"Phobos 引入的攻击脚本现在会评估潜在目标当前所处的地图区域。可使用 [TargetZoneScanType](Fixed-or-" -"Improved-Logics.md#customizable-target-evaluation-map-zone-check-" -"behaviour) 来自定义该行为。" - -msgid "" -"`Artillary`, `ICBMLauncher`, `TickTank` or `SensorArray` no longer affect" -" whether or not building is considered as vehicle for AI attack scripts. " -"Use [ConsideredVehicle](Fixed-or-Improved-Logics.md#buildings-considered-" -"as-vehicles) instead on buildings that do not have both `UndeploysInto` " -"set and `Foundation=1x1`." -msgstr "" -"`Artillary`、`ICBMLauncher`、`TickTank` 及 `SensorArray` 不再影响建筑是否被 AI " -"攻击脚本视为载具。对于没有同时设置 `UndeploysInto` 与 `Foundation=1x1` 的建筑请使用 " -"[ConsideredVehicle](Fixed-or-Improved-Logics.md#buildings-considered-as-" -"vehicles)。" - -msgid "" -"`PassengerDeletion.SoylentFriendlies` has been replaced by " -"`PassengerDeletion.SoylentAllowedHouses`. Current default value of " -"`PassengerDeletion.SoylentAllowedHouses=enemies` matches the previous " -"default behaviour with `PassengerDeletion.SoylentFriendlies=false`." -msgstr "" -"`PassengerDeletion.SoylentFriendlies` 已被替换为 " -"`PassengerDeletion.SoylentAllowedHouses`。目前设定默认值 " -"`PassengerDeletion.SoylentAllowedHouses=enemies` 对应原本默认为 " -"`PassengerDeletion.SoylentFriendlies=false` 的行为。" +msgid "0.3" +msgstr "0.3" msgid "" -"`Grinding.DisplayRefund` is changed to `DisplayIncome`, " -"`Grinding.DisplayRefund.Houses` is changed to `DisplayIncome.Houses`, " -"`Grinding.DisplayRefund.Offset` is changed to `DisplayIncome.Offset`." +"Keys `rulesmd.ini -> [WarheadType] -> PenetratesShield` and `rulesmd.ini " +"-> [WarheadType] -> BreaksShield` have been changed to `Shield.Penetrate`" +" and `Shield.Break`, respectively." msgstr "" -"`Grinding.DisplayRefund` 已更名为 " -"`DisplayIncome`,`Grinding.DisplayRefund.Houses` 更名为 " -"`DisplayIncome.Houses`,`Grinding.DisplayRefund.Offset` 更名为 " -"`DisplayIncome.Offset`。" +"`rulesmd.ini -> [WarheadType] -> PenetratesShield` 和 `rulesmd.ini -> " +"[WarheadType] -> BreaksShield` 已分别更名为 `Shield.Penetrate` 和 " +"`Shield.Break`。" msgid "" -"`[JumpjetControls] -> AllowLayerDeviation` and " -"`JumpjetAllowLayerDeviation` have been deprecated as the animation " -"layering issues have been properly fixed by default now." +"`Rad.NoOwner` on weapons is deprecated. This has been replaced by " +"`RadHasOwner` key on radiation types itself. It also defaults to no, so " +"radiation once again has no owner house by default." msgstr "" -"`[JumpjetControls] -> AllowLayerDeviation` 和 `JumpjetAllowLayerDeviation`" -" 已被弃用,因为动画图层问题现在默认状态下已彻底修复。" +"武器上的 `Rad.NoOwner` 已被弃用。这已被辐射类型自身的 `RadHasOwner` " +"标签取代。其默认值同样为否,因此辐射默认情况下恢复回了无所属方。" msgid "" -"`[JumpjetControls] -> TurnToTarget` and `JumpjetTurnToTarget` are " -"obsolete. Jumpjet units who fire `OmniFire=no` weapons **always** turn to" -" targets as other units do." +"`RadApplicationDelay` and `RadApplicationDelay.Building` on custom " +"radiation types are now only used if `[Radiation] -> " +"UseGlobalRadApplicationDelay` is explicitly set to false, otherwise " +"values from `[Radiation]` are used." msgstr "" -"`[JumpjetControls] -> TurnToTarget` 和 `JumpjetTurnToTarget` 均已过时。使用 " -"`OmniFire=no` 武器的 JumpJet 单位现在 **总是** 会像其他单位那样转向目标。" +"`RadApplicationDelay` 和 `RadApplicationDelay.Building` 现仅在 `[Radiation] " +"-> UseGlobalRadApplicationDelay` 设为 false 时使用,否则始终使用 `[Radiation]` 中的值。" msgid "" -"Buildings delivered by trigger action 125 will now **always** play " -"buildup anim as long as it exists. `[ParamTypes] -> 53` is deprecated." -msgstr "现在 125 号触发结果所投送的建筑只要存在就 **总是** 会播放其建造动画。`[ParamTypes] -> 53` 已弃用。" - -msgid "`Shadow` for debris & meteor animations is changed to `ExtraShadow`." -msgstr "用于碎片和流星动画的 `Shadow` 已更名为 `ExtraShadow`。" - -msgid "From pre-0.3 devbuilds" -msgstr "由 pre-0.3 开发版" +"Existing script actions were renumbered, please use the migration utility" +" to change the numbers to the correct ones." +msgstr "现有的动作脚本已被重新编号,请使用迁移工具将旧有序号更改为正确的新序号。" msgid "`Trajectory.Speed` is now defined on projectile instead of weapon." msgstr "`Trajectory.Speed` 现在定义在抛射体上而不再是武器上。" @@ -414,47 +455,13 @@ msgstr "" " 以及 `ShowBuildingPlacementPreview` 标签已被重做/重命名并需要调整以运作。另外,你必须通过指定 " "`[AudioVisual] -> PlacementPreview=yes` 手动启用此功能。" -msgid "" -"Existing script actions were renumbered, please use the migration utility" -" to change the numbers to the correct ones." -msgstr "现有的动作脚本已被重新编号,请使用迁移工具将旧有序号更改为正确的新序号。" - msgid "" "`DiskLaser.Radius` values were misinterpreted by a factor of 1/2π. The " "default radius is now 240, please multiply your customized radii by 2π." msgstr "`DiskLaser.Radius` 的值曾被错误解释了一个大小为 1/2π 的系数。现在默认半径为 240,以及你需要将自定义的半径乘以 2π。" -msgid "From 0.2.2.2" -msgstr "由 0.2.2.2" - -msgid "" -"Keys `rulesmd.ini -> [WarheadType] -> PenetratesShield` and `rulesmd.ini " -"-> [WarheadType] -> BreaksShield` have been changed to `Shield.Penetrate`" -" and `Shield.Break`, respectively." -msgstr "" -"`rulesmd.ini -> [WarheadType] -> PenetratesShield` 和 `rulesmd.ini -> " -"[WarheadType] -> BreaksShield` 已分别更名为 `Shield.Penetrate` 和 " -"`Shield.Break`。" - -msgid "" -"`Rad.NoOwner` on weapons is deprecated. This has been replaced by " -"`RadHasOwner` key on radiation types itself. It also defaults to no, so " -"radiation once again has no owner house by default." -msgstr "" -"武器上的 `Rad.NoOwner` 已被弃用。这已被辐射类型自身的 `RadHasOwner` " -"标签取代。其默认值同样为否,因此辐射默认情况下恢复回了无所属方。" - -msgid "" -"`RadApplicationDelay` and `RadApplicationDelay.Building` on custom " -"radiation types are now only used if `[Radiation] -> " -"UseGlobalRadApplicationDelay` is explicitly set to false, otherwise " -"values from `[Radiation]` are used." -msgstr "" -"`RadApplicationDelay` 和 `RadApplicationDelay.Building` 现仅在 `[Radiation] " -"-> UseGlobalRadApplicationDelay` 设为 false 时使用,否则始终使用 `[Radiation]` 中的值。" - -msgid "From 0.1.1" -msgstr "由 0.1.1" +msgid "0.2" +msgstr "0.2" msgid "" "Key `rulesmd.ini -> [TechnoType] -> Deployed.RememberTarget` is " @@ -479,9 +486,6 @@ msgstr "" msgid "For Map Editor (Final Alert 2)" msgstr "对地图编辑器(Final Alert 2)的更改" -msgid "Click to show" -msgstr "点击查看" - msgid "In `FAData.ini`:" msgstr "在 `FAData.ini`:" @@ -496,9 +500,13 @@ msgstr "原版问题修复:" msgid "" "Vehicles overlapping `Wall=true` OverlayTypes no longer display sell " -"cursor and cannot be sold (by CnCRAZER & Starkku)" -msgstr "" -"图像与 `Wall=true` 的覆盖物重叠的载具上不再会显示出售光标也不再能被出售(by RAZER & Starkku)" +"cursor and cannot be sold (by CnCRAZER, Starkku, Noble_Fish)" +msgstr "图像与 `Wall=true` 的覆盖物重叠的载具上不再会显示出售光标也不再能被出售(by RAZER、Starkku、Noble_Fish)" + +msgid "" +"Fixed a desync due to an inconsistent shroud state caused by " +"`GapGenerator` and `SpySat` interaction (by Starkku)" +msgstr "修复了一个由于 `GapGenerator` 和 `SpySat` 交互导致黑幕状态不一致而引发的不同步问题(by Starkku)" msgid "Phobos fixes:" msgstr "Phobos 过往版本问题修复:" @@ -506,8 +514,105 @@ msgstr "Phobos 过往版本问题修复:" msgid "" "Fixed vehicles disguised as trees incorrectly displaying veterancy " "insignia when they shouldn't (by Starkku)" +msgstr "修复了伪装成树的载具错误显示出军衔(能打人的精英树)的问题(by Starkku)" + +msgid "" +"Fixed the issue that power output of building on tooltip won't consider " +"power enhancer (by NetsuNegi)" +msgstr "修复了建筑拓展工具提示信息中的发电量数值未考虑电厂增幅器的问题(by NetsuNegi)" + +msgid "" +"`RealTimeTimers` now support independent gamespeed index values for " +"Multiplayer and Skirmish (by RAZER)" +msgstr "现在 `RealTimeTimers` 支持多人联机和遭遇战拥有彼此独立的游戏速度档位数值(by RAZER)" + +msgid "" +"Fixed the bug that the upgrade building's power-enhancing effect depends " +"only on its parent building and is not related to the upgrade building " +"itself (by NetsuNegi)" +msgstr "修复了加载物建筑的电厂增幅效果仅取决于其基底建筑而非加载物建筑自身的 Bug(by NetsuNegi)" + +msgid "" +"Fixed an issue where shadow matrix scaling was incorrectly applied to " +"`TurretOffset` causing turret shadow misplacement (by Noble_Fish)" +msgstr "修复了一个影子矩阵缩放错误地应用于 `TurretOffset` 而导致炮塔影子错位的问题(by Noble_Fish)" + +msgid "" +"Fixed an issue that customizable warhead animation scatter cannot " +"override 32 leptons scatter of `Inviso=yes` projectile (by NetsuNegi)" +msgstr "修复了自定义弹头动画散布范围不能覆盖 `Inviso=yes` 抛射体自带 32 leptons 散布的问题(by NetsuNegi)" + +msgid "" +"Fixed a bug where a unit's turrets would also get locked when the unit " +"became deactivated for reasons other than being under EMP (by Noble_Fish)" +msgstr "修复了由于非 EMP 原因而进入瘫痪状态的单位其炮塔也同样会被锁死的 Bug(by Noble_Fish)" + +msgid "" +"Fixed a bug that prevented recalculation of stats etc. on discarding " +"self-owned AE (by Starkku)" +msgstr "修复了一个在弃用自己所拥有的 AE 时阻止数据重新计算的 Bug(by Starkku)" + +msgid "" +"Fixed a bug causing transfering AttachEffects (e.g on " +"`DeploysInto`/`UndeploysInto`) not to immediately recalculate stats or " +"tint (by Starkku)" +msgstr "" +"修复了一个导致(例如在 `DeploysInto`/`UndeploysInto` 时)转移的 AE 不会立即重新计算属性或染色的 Bug(by " +"Starkku)" + +msgid "" +"Fixed a bug where updating the `OpenTopped` attribute during convert did " +"not update the coordinates of passengers (by NetsuNegi)" +msgstr "修复了类型转换会更新 `OpenTopped` 属性却不更新乘客坐标的 Bug(by NetsuNegi)" + +msgid "" +"Fixed `Shrapnel.AffectsBuildings=true` shrapnel weapons being able to hit" +" the building itself, potentially multiple times, if it had foundation " +"larger than 1x1 (by Starkku)" +msgstr "" +"修复了 `Shrapnel.AffectsBuildings=true` 在建筑占地面积大于 1x1 时溅射武器可能多次命中该建筑自身的问题(by" +" Starkku)" + +msgid "" +"Fixed the bug where `WeaponRange.AllowWeapons` and " +"`WeaponRange.DisallowWeapons` only support weapons listed in the " +"`[WeaponTypes]` list (by Noble_Fish)" +msgstr "" +"修复了 `WeaponRange.AllowWeapons` 和 `WeaponRange.DisallowWeapons` 仅支持通过 " +"`[WeaponTypes]` 注册的武器这一 Bug(by Noble_Fish)" + +msgid "" +"Fixed the bug where passengers, when their transport unit is removed, " +"would cause incorrect `LimboTracker` counts due to either having their " +"destructor called directly (bypassing `UnInit`) or nested `UnInit` calls " +"resetting the deletion flag too early, thereby breaking auto-death and " +"superweapon auxiliary techno checks (by NetsuNegi)" +msgstr "" +"修复了乘客在其所在的运输工具被移除时,因被直接调用析构函数(绕过 `UnInit` )或 `UnInit` 嵌套调用导致删除标志过早重置,从而使 " +"`LimboTracker` 计数错误,进而影响自动死亡及超武辅助单位判定的 Bug(by NetsuNegi)" + +msgid "" +"Fixed AttachEffect with `RecreationDelay` of 0 checking `Delay` as well " +"instead of immediately refreshing duration when possible (by Starkku)" msgstr "" -"修复了伪装成树的载具错误显示出军衔(能打人的精英树)的问题(by Starkku)" +"修复了 `RecreationDelay` 为 0 的 AE 也会检查 `Delay` 而不是只要可以就立即刷新持续时间的问题(by " +"Starkku)" + +msgid "" +"Fixed building interceptors being able to pick targets during " +"construction and selling (by Starkku)" +msgstr "修复了建筑拦截者可以在拔起和出售期间获取目标的问题(by Starkku)" + +msgid "" +"Fixed the bug that the vanilla `SecondSpawnOffset` no longer takes effect" +" (by NetsuNegi)" +msgstr "修复了原版 `SecondSpawnOffset` 不再生效的 Bug(by NetsuNegi)" + +msgid "" +"Fixed a bug introduced in v0.4.0.1 where some floating-point values using" +" percentage form were incorrectly multiplied by an additional 0.01 (by " +"Starkku)" +msgstr "修复了 v0.4.0.1 引入的一个导致某些浮点值使用百分比形式时被错误额外乘 0.01 的 Bug(by Starkku)" msgid "0.4.0.2" msgstr "0.4.0.2" @@ -616,9 +721,6 @@ msgid "" " in some cases contributed to desyncs (by Starkku)" msgstr "修复了一个某些情况下从 INI 解析浮点值时可能导致不同步的问题(by Starkku)" -msgid "0.4" -msgstr "0.4" - msgid "New:" msgstr "新增内容:" @@ -2536,9 +2638,6 @@ msgid "" "depending on firer's elevation (by Starkku)" msgstr "现在 `AreaFire.Target` 会根据开火者所在高度处理桥梁所在的单元格(by Starkku)" -msgid "0.3" -msgstr "0.3" - msgid "LaserTrails initial implementation (by Kerbiter & ChrisLv_CN)" msgstr "激光尾迹初始实现(by Kerbiter 与 ChrisLv_CN)" @@ -3299,9 +3398,6 @@ msgid "" "producing a building when the target cells were occupied (by secsome)" msgstr "修复了触发结果 `125 将建筑建于...` 在目标单元格被占用时无法生产建筑的问题(by secsome)" -msgid "0.2" -msgstr "0.2" - msgid "" "Shield logic for TechnoTypes (by Uranusian, secsome, Belonit) with " "warhead additions (by Starkku)" @@ -3534,42 +3630,3 @@ msgstr "现在侧边栏拓展工具条可以超出侧边栏边界(by Belonit msgid "Lifted stupidly small limit for tooltip character amount (by Belonit)" msgstr "解除了拓展工具条字符数量小得愚蠢的上限(by Belonit)" -#~ msgid "" -#~ "Fixed the bug that a unit can " -#~ "overlap with `Teleport` units after it's" -#~ " been damaged by a fallen unit " -#~ "lifted by `IsLocomotor=yes` warheads (by " -#~ "NetsuNegi)" -#~ msgstr "" -#~ "修复了一个单位被另一个由 `IsLocomotor=yes` 弹头吊起的单位砸过后其所在单元格可以被一个 " -#~ "`Teleport` 运动模式的单位作为超时空移动的目的地的问题(by NetsuNegi)" - -#~ msgid "" -#~ "Fixed starting infantry being scattered " -#~ "randomly on game start instead of " -#~ "being grouped (by 11EJDE11, Belonit &" -#~ " Ollerus)" -#~ msgstr "" - -#~ msgid "" -#~ "Fixed an issue with certain Warhead " -#~ "detonation features (f.ex `Crit.Warhead` " -#~ "without `Crit.Warhead.FullDetonation`=true` not " -#~ "snapping on the intended target without" -#~ " `CellSpread` (by Starkku)" -#~ msgstr "" - -#~ msgid "" -#~ "Fixed OverlayType `ZAdjust` as well as" -#~ " some shield & AttachEffect variables " -#~ "not being correctly saved & loaded " -#~ "(by Ollerus)" -#~ msgstr "修复了覆盖物的 `ZAdjust` 及一些护盾和 AE 变量无法正确保存与加载的问题(by Ollerus)" - -#~ msgid "" -#~ "Fixed the bug that uncontrolled scatter" -#~ " when elite techno attacked by " -#~ "aircraft or some unit try crush it" -#~ " (by NetsuNegi)" -#~ msgstr "修复精英单位在被战机攻击或一个单位尝试碾压它时强制散开的 Bug(by NetsuNegi)" - diff --git a/docs/locale/zh_CN/LC_MESSAGES/index.po b/docs/locale/zh_CN/LC_MESSAGES/index.po index 3944fd9398..249f1526c7 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/index.po +++ b/docs/locale/zh_CN/LC_MESSAGES/index.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-03 16:24+0800\n" +"POT-Creation-Date: 2026-06-30 21:43+0800\n" "PO-Revision-Date: 2025-02-07 13:02+0800\n" "Last-Translator: \n" "Language: zh\n" @@ -14,63 +14,51 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.16.0\n" -#: ../../index.md:1 msgid "General Info" msgstr "概况" -#: ../../index.md:1 msgid "What's New" msgstr "版本更新说明" -#: ../../index.md:1 msgid "Contributing" msgstr "贡献" -#: ../../../README.md:92 ../../index.md:1 +msgid "Project guidelines and policies" +msgstr "项目准则与政策" + msgid "Credits" msgstr "鸣谢" -#: ../../index.md:1 msgid "License" msgstr "许可证" -#: ../../index.md:1 msgid "Project Info" msgstr "项目信息" -#: ../../index.md:11 msgid "New / Enhanced Logics" msgstr "新增或增强的逻辑" -#: ../../index.md:11 msgid "Fixed / Improved Logics" msgstr "修复或改进的逻辑" -#: ../../index.md:11 msgid "AI Scripting and Mapping" msgstr "AI 脚本与触发" -#: ../../index.md:11 msgid "User Interface" msgstr "用户界面特性" -#: ../../index.md:11 msgid "Miscellanous" msgstr "杂项内容" -#: ../../index.md:11 msgid "Extension Documentation" msgstr "扩展文档" -#: ../../../README.md:2 msgid "![Phobos YR Engine Extension](logo.png)" msgstr "![Phobos YR Engine Extension](logo.png)" -#: ../../../README.md:2 msgid "Phobos YR Engine Extension" msgstr "Phobos——尤里的复仇扩展引擎" -#: ../../../README.md:4 msgid "" "[![Github All Releases](https://img.shields.io/github/downloads/Phobos-" "developers/Phobos/total.svg)](https://github.com/Phobos-" @@ -97,27 +85,21 @@ msgstr "" "[![许可证](https://img.shields.io/github/license/Phobos-" "developers/Phobos.svg)](https://www.gnu.org/licenses/lgpl-3.0.en.html)" -#: ../../../README.md:4 msgid "Github All Releases" msgstr "GitHub 所有发布版本" -#: ../../../README.md:4 msgid "Docs status" msgstr "文档状态" -#: ../../../README.md:4 msgid "Workflow" msgstr "工作流程" -#: ../../../README.md:4 msgid "EditorConfig" msgstr "编辑器配置" -#: ../../../README.md:4 msgid "license" msgstr "许可证" -#: ../../../README.md:10 msgid "" "**Warning** The project is currently not maintained actively enough and " "thus we are looking for active maintainers at the moment. Please message " @@ -127,11 +109,9 @@ msgstr "" "**警告** 项目目前的维护工作不够积极,因此我们正在寻找积极的维护者。请在 [Discord " "频道](https://discord.gg/sZeMzz6qVg) 留言给我们(或直接私信 Kerbiter)。" -#: ../../../README.md:13 msgid "Phobos" msgstr "Phobos" -#: ../../../README.md:15 msgid "" "...is a community engine extension project providing a set of new " "features and fixes for Yuri's Revenge based on [modified " @@ -146,22 +126,18 @@ msgstr "" "为《尤里的复仇》提供一系列新功能和修复。它旨在与 [Ares](https://github.com/Ares-Developers/Ares) " "引擎搭配使用,而非取而代之,因此不会带来不兼容问题。" -#: ../../../README.md:17 msgid "" "While Phobos is independent of Ares and does NOT require Ares " "specifically to function, Phobos complements some of the features found " "in Ares and vice versa." msgstr "虽然 Phobos 独立于 Ares 且无需 Ares 即可运行,但 Phobos 补充了 Ares 的一些功能,反之亦然。" -#: ../../../README.md:19 msgid "EA has not endorsed and does not support this product." msgstr "此产品不受 EA 官方认可及支持。" -#: ../../../README.md:21 msgid "Community" msgstr "社区" -#: ../../../README.md:24 msgid "" "As the project is international and English is currently studied the most" " commonly as a second language, it's the main project language. We do not" @@ -172,25 +148,22 @@ msgstr "" "由于这是一个国际性的项目而英语是目前最常用的第二语言,因此英语是该项目的主要语言。 不过我们知道很多人的英语可能不如母语那样好,而且/或者在访问 " "Discord 时可能会遇到困难,所以我们并不限制创建特定语言的社区群组。" -#: ../../../README.md:26 msgid "" "**[🌐 International Discord channel on C&C Mod " "Haven](https://discord.gg/sZeMzz6qVg)**" -msgstr "" -"**[🌐国际性的 Discord 频道:C&C Mod Haven](https://discord.gg/sZeMzz6qVg)**" +msgstr "**[🌐国际性的 Discord 频道:C&C Mod Haven](https://discord.gg/sZeMzz6qVg)**" -msgid "**[🇨🇳 Chinese Phobos Communication Forum - Phobos CN](https://phoboscn.top)**" +msgid "" +"**[🇨🇳 Chinese Phobos Communication Forum - Phobos " +"CN](https://phoboscn.top)**" msgstr "**[🇨🇳 中文社区公共交流论坛:Phobos CN](https://phoboscn.top)**" -#: ../../../README.md:29 msgid "Downloads" msgstr "下载" -#: ../../../README.md:32 msgid "You can choose one of the following:" msgstr "你可以选择以下版本" -#: ../../../README.md:33 msgid "" "[Latest stable branch build](https://github.com/Phobos-" "developers/Phobos/releases/latest) (most bug-free release but very slow " @@ -199,7 +172,6 @@ msgstr "" "[最新的稳定发布版本](https://github.com/Phobos-developers/Phobos/releases/latest) " "(Bug 最少的版本,但功能更新上非常缓慢)" -#: ../../../README.md:34 msgid "" "[Latest development branch builds](https://github.com/Phobos-" "developers/Phobos/releases) (a bit less bug-free releases, devbuilds get " @@ -208,7 +180,6 @@ msgstr "" "[最新的开发分支版本](https://github.com/Phobos-developers/Phobos/releases) (Bug " "相对较少的版本,开发构建会在新功能**完成后**立即更新)" -#: ../../../README.md:35 msgid "" "[Latest development branch nightly](https://nightly.link/Phobos-" "developers/Phobos/blob/develop/.github/workflows/nightly.yml) (added " @@ -218,7 +189,6 @@ msgstr "" "developers/Phobos/blob/develop/.github/workflows/nightly.yml) " "(添加了尚未发布的功能,这些功能将在下一个开发版本中推出)" -#: ../../../README.md:36 msgid "" "Individual new feature nightly builds for testing can be found in [pull " "requests](https://github.com/Phobos-developers/Phobos/pulls)" @@ -226,11 +196,9 @@ msgstr "" "用于测试单个新功能的自动构建版本可在 [拉取请求](https://github.com/Phobos-" "developers/Phobos/pulls) 中找到" -#: ../../../README.md:38 msgid "Note on nightly builds" msgstr "关于自动构建版本的说明" -#: ../../../README.md:40 msgid "" "Last two listed versions are bleeding edge (don't redistribute them " "outside of testing!) and have build information (commit and branch/tag) " @@ -249,11 +217,9 @@ msgstr "" " Phobos 版本。注意**只有当拉取请求没有合并冲突时**才会生成。此外,你可以手动运行 GitHub Actions " "来获取一个由工作流自动生成的工件。只需要点击绿色勾号,打开工作流页面,找到并下载对应的工件。这仅限于被授权的用户执行。" -#: ../../../README.md:42 msgid "Installation and Usage" msgstr "安装和使用" -#: ../../../README.md:45 msgid "" "If you don't have Syringe installed into your mod already, you can " "download it together with the [latest Ares " @@ -268,7 +234,6 @@ msgstr "" "置入游戏根目录(即你 `gamemd.exe` 所在的位置)。强烈建议同时 **安装 Ares** 以获得完整的 Phobos " "功能体验,只需将压缩包中除 Documentation 目录之外的所有文件放入游戏根目录即可。" -#: ../../../README.md:46 msgid "" "Obtain a Phobos \"package\" (official builds can be found on [releases " "page](https://github.com/Phobos-developers/Phobos/releases); read below " @@ -279,11 +244,9 @@ msgstr "" "developers/Phobos/releases) " "找到官方构建版;阅读下文了解如何获取自动构建版本)。最终会生成两个文件:`Phobos.dll` 和 `Phobos.pdb`。" -#: ../../../README.md:47 msgid "Place those files in the game folder (where your `gamemd.exe` is located)." msgstr "将这些文件放入游戏根目录(即你的 `gamemd.exe` 所在的位置)。" -#: ../../../README.md:48 msgid "" "To launch the game with Phobos (and all other installed Syringe-" "compatible engine extensions including Ares) you need to execute " @@ -295,7 +258,6 @@ msgstr "" "`Syringe.exe \"gamemd.exe\" [gamemd.exe 的命令行参数]`(如果不需要参数,请省略)。Ares 软件包中的 " "`RunAres.bat` 也有相同的功能,因此你也同样可以使用它来启动。" -#: ../../../README.md:50 msgid "" "If you already use Ares in your mod, you just need to drop Phobos files " "mentioned above in your game folder, Syringe will load Phobos " @@ -311,7 +273,6 @@ msgstr "" "基底](https://github.com/Starkku/cncnet-client-mod-base),它与 Ares 和 Phobos " "兼容并且开袋即食。" -#: ../../../README.md:52 msgid "" "Additional files and tools that you may need are located at [Phobos " "supplementaries repo](https://github.com/Phobos-" @@ -320,18 +281,15 @@ msgstr "" "你可能用到的其他文件与工具位于 [Phobos 补充资源库](https://github.com/Phobos-" "developers/PhobosSupplementaries)。" -#: ../../../README.md:54 msgid "" "By default Phobos doesn't do any very noticeable changes except a few " "bugfixes. To learn how to use Phobos features head over to official " "documentation." msgstr "在默认情况下除一些错误修复外 Phobos 不会作出任何非常明显的更改。若要了解如何使用 Phobos 功能,请通读本文档。" -#: ../../../README.md:56 msgid "Documentation" msgstr "文档" -#: ../../../README.md:59 msgid "" "[Official docs](https://phobos.readthedocs.io) (also available in " "[Chinese](https://phobos.readthedocs.io/zh_CN/latest))" @@ -339,14 +297,12 @@ msgstr "" "[官方文档](https://phobos.readthedocs.io/zh_CN/latest) (也有 " "[英文](https://phobos.readthedocs.io) 版本)" -#: ../../../README.md:61 msgid "" "You can switch between versions (displays latest develop nightly version " "by default) in the bottom right corner, as well as download a PDF " "version." msgstr "你可以在右下角切换版本(默认显示最新开发的每夜构建版本),也可以下载 PDF 版本。" -#: ../../../README.md:63 msgid "" "The documentation is split by a few major categories, each represented " "with a page on the sidebar. Each page has its contents grouped into " @@ -354,15 +310,12 @@ msgid "" "superweapons or something else." msgstr "文档分为几个大类,每类在侧边栏上都有一个页面。每个页面的内容又分为多个子类别,包括建筑、科技类型、步兵、超级武器或其他。" -#: ../../../README.md:65 msgid "How to read code snippets" msgstr "如何阅读代码片段" -#: ../../../README.md:81 msgid "Building manually" msgstr "手动生成" -#: ../../../README.md:84 msgid "" "Install **Visual Studio** (2022 is minimum) with the dependencies listed " "in `.vsconfig` (it will prompt you to install missing dependences when " @@ -377,40 +330,33 @@ msgstr "" "Code**,也可以使用 `.vsconfig` 中的依赖项安装 **VS Build " "Tools**。也可以不使用代码编辑器或集成开发环境而通过项目中包含的 **命令行脚本** 进行构建。" -#: ../../../README.md:85 msgid "" "Clone this repo recursively via your favorite git client (that will also " "clone YRpp)." msgstr "通过你最喜欢的 git 客户端递归克隆该仓库(也会同时克隆 YRpp)。" -#: ../../../README.md:86 msgid "To build the extension:" msgstr "对于构建扩展:" -#: ../../../README.md:87 msgid "" "in Visual Studio: open the solution file in VS and build it (`Debug` " "build config is recommended);" msgstr "在 Visual Studio 中:在 VS 中打开解决方案文件并构建(建议使用 `Debug` 构建配置;" -#: ../../../README.md:88 msgid "" "in VSCode: open the project folder and hit `Run Build Task...` (`Ctrl + " "Shift + B`);" msgstr "在 VSCode 中:打开项目目录,点击`运行构建任务…`(`Ctrl+Shift+B`);" -#: ../../../README.md:89 msgid "barebones: run `scripts/build_debug.bat`." msgstr "其他:运行 `scripts/build_debug.bat`。" -#: ../../../README.md:90 msgid "" "Upon build completion the resulting `Phobos.dll` and `Phobos.pdb` would " "be placed in the subfolder identical to the name of the buildconfig " "executed." msgstr "构建完成后,生成的 `Phobos.dll` 和 `Phobos.pdb` 将被放置在与执行的构建配置名称相同的子目录中。" -#: ../../../README.md:95 msgid "" "This project was founded by [@Belonit](https://github.com/Belonit) " "(Gluk-v48) and [@Metadorius](https://github.com/Metadorius) (Kerbiter) in" @@ -422,80 +368,66 @@ msgstr "" "[@Metadorius](https://github.com/Metadorius)(Kerbiter)于 2020 年创立,2021 " "年首次发布稳定版。此后它已发展成为一个由众多贡献者和维护者组成的大型社区项目。" -#: ../../../README.md:97 msgid "Maintenance crew" msgstr "维护团队" -#: ../../../README.md:99 msgid "" "Maintenance crew consists of experienced Phobos contributors who are " "recognized and given the permission to maintain and shape the project to " "the extent of their permissions." msgstr "维护团队由经验丰富的 Phobos 贡献者组成,他们经过认可并获得相应权限,可在其权限范围内对项目进行维护和规划。" -#: ../../../README.md:101 msgid "" "Every maintenance crew member is welcome to put a donation link to their " "entry in the list below." msgstr "欢迎每位团队成员在下方为他们自己的条目添加捐款链接。" -#: ../../../README.md:103 msgid "" "**Kerbiter ([@Metadorius](https://github.com/Metadorius))** - T3 " "maintainer (lead)" msgstr "**Kerbiter([@Metadorius](https://github.com/Metadorius))**- T3 维护者(领导者)" -#: ../../../README.md:104 msgid "" "[Patreon](https://www.patreon.com/kerbiter) · PayPal (preferable because " "of no fees) on request" msgstr "[Patreon](https://www.patreon.com/kerbiter) 或私信请求使用 PayPal(更推荐,因为免手续费)" -#: ../../../README.md:105 msgid "**[@Starkku](https://github.com/Starkku)** - T3 maintainer (co-lead)" msgstr "**[@Starkku](https://github.com/Starkku)** - T3 维护者(共同领导者)" -#: ../../../README.md:106 msgid "[Patreon](https://www.patreon.com/Starkku)" msgstr "[Patreon](https://www.patreon.com/Starkku)" -#: ../../../README.md:107 msgid "**[@CrimRecya](https://github.com/CrimRecya) (绯红热茶)** - T2 maintainer" msgstr "**[@CrimRecya](https://github.com/CrimRecya)(绯红热茶)**- T2 维护者" msgid "[Alipay](https://www.phoboscn.top/t/topic/45#crimrecya)" msgstr "[支付宝](https://www.phoboscn.top/t/topic/45#crimrecya)" -#: ../../../README.md:109 msgid "**[@ZivDero](https://github.com/ZivDero)** - T2 maintainer" msgstr "**[@ZivDero](https://github.com/ZivDero)** - T2 维护者" -#: ../../../README.md:110 msgid "[Patreon](https://www.patreon.com/c/ZivDero)" msgstr "[Patreon](https://www.patreon.com/c/ZivDero)" -#: ../../../README.md:111 msgid "**Ollerus ([@Coronia](https://github.com/Coronia))** - T1 maintainer" msgstr "**Ollerus([@Coronia](https://github.com/Coronia))**- T1 维护者" msgid "[Alipay](https://www.phoboscn.top/t/topic/45#ollerus)" msgstr "[支付宝](https://www.phoboscn.top/t/topic/45#ollerus)" -#: ../../../README.md:113 msgid "**[@NetsuNegi](https://github.com/NetsuNegi)** - T1 maintainer" msgstr "**[@NetsuNegi](https://github.com/NetsuNegi)** - T1 维护者" msgid "[Alipay](https://www.phoboscn.top/t/topic/45#netsunegi)" msgstr "[支付宝](https://www.phoboscn.top/t/topic/45#netsunegi)" -#: ../../../README.md:115 msgid "**[@TaranDahl](https://github.com/TaranDahl) (航味麻酱)** - T1 maintainer" msgstr "**[@TaranDahl](https://github.com/TaranDahl)(航味麻酱)**- T1 维护者" msgid "[WeChatPay](https://www.phoboscn.top/t/topic/45#tarandahl)" msgstr "[微信](https://www.phoboscn.top/t/topic/45#tarandahl)" -#: ../../../README.md:117 msgid "" "**Noble_Fish ([@DeathFishAtEase](https://github.com/DeathFishAtEase))** -" " triage, doc maintainer" @@ -506,30 +438,24 @@ msgstr "" msgid "[Alipay](https://www.phoboscn.top/t/topic/45#noble_fish)" msgstr "[支付宝](https://www.phoboscn.top/t/topic/45#noble_fish)" -#: ../../../README.md:119 msgid "**FlyStar ([@Fly-Star-him](https://github.com/Fly-Star-him))** - triage" msgstr "**FlyStar([@Fly-Star-him](https://github.com/Fly-Star-him))**- 分派" -#: ../../../README.md:120 msgid "**[@Fryone](https://github.com/Fryone)** - triage" msgstr "**[@Fryone](https://github.com/Fryone)** - 分派" -#: ../../../README.md:122 msgid "Inactive" msgstr "不活跃的维护团队成员" -#: ../../../README.md:124 msgid "" "*Please note that being put here just means that you seem to be currently" " inactive as a part of maintenance crew. You are always welcome to return" " to the active crew if you want to help out again!*" msgstr "*请注意:被列在此处仅表示您作为维护团队的成员但似乎并不活跃。如果您想再次提供帮助,欢迎您随时归队!*" -#: ../../../README.md:126 msgid "**Gluk-v48 ([@Belonit](https://github.com/Belonit))** - lead in the past" msgstr "**Gluk-v48([@Belonit](https://github.com/Belonit))** - 旧有领导者" -#: ../../../README.md:127 msgid "" "**Uranusian ([@Thrifinesma](https://github.com/Thrifinesma))** - T2 " "maintainer, CN community ambassador, doc maintainer" @@ -537,29 +463,23 @@ msgstr "" "**Uranusian([@Thrifinesma](https://github.com/Thrifinesma))** - T2 " "维护者、中国社区大使、文档维护者" -#: ../../../README.md:128 msgid "**[@secsome](https://github.com/secsome)** - maintainer" msgstr "**[@secsome](https://github.com/secsome)** - 维护者" -#: ../../../README.md:129 msgid "**[@Otamaa](https://github.com/Otamaa) (Fahroni, BoredEXE)** - maintainer" msgstr "**[@Otamaa](https://github.com/Otamaa)(Fahroni 或 BoredEXE)** - 维护者" -#: ../../../README.md:130 msgid "" "**[@FS-21](https://github.com/FS-21)** - inactive as a maintainer " "specifically" msgstr "**[@FS-21](https://github.com/FS-21)** - 作为维护者而言并不活跃" -#: ../../../README.md:131 msgid "**Morton ([@MortonPL](https://github.com/FS-21))** - T2 maintainer" msgstr "**Morton([@MortonPL](https://github.com/FS-21))** - T2 维护者" -#: ../../../README.md:132 msgid "**Trsdy ([@chaserli](https://github.com/chaserli))** - T2 maintainer" msgstr "**Trsdy ([@chaserli](https://github.com/chaserli))** - T2 维护者" -#: ../../../README.md:134 msgid "" "The project is so big that listing here all the help we receive or " "received will make the size of the readme explode, so please see the " @@ -569,11 +489,9 @@ msgstr "" "项目规模如此庞大以至于在此处列出我们正在或曾经获得的所有帮助将使自述文件的篇幅急剧膨胀,因此请查阅 [完整致谢列表](CREDITS.md) " "以获取相关信息。无论您提供何种帮助、贡献或支持,我们都表示感谢!" -#: ../../../README.md:136 msgid "Attribution" msgstr "归属" -#: ../../../README.md:139 msgid "" "You can show your appreciation and help project's publicity by displaying" " the logo (monochrome version can be found [here](https://github.com" @@ -589,7 +507,6 @@ msgstr "" "风格,你可以在不改变基本图形的前提下以不突兀的方式设计单色 Logo(例如,将其重新着色以匹配 Mod 的主题)。如有疑问,请 **先** " "询问我们。" -#: ../../../README.md:141 msgid "" "When promoting features of your mod that you implemented using Phobos, " "please give credit to Phobos and it's contributors. A good promotion for " @@ -603,11 +520,9 @@ msgstr "" "的良好宣传应当简洁明了且聚焦于所展示的功能,例如:「此功能由 Phobos 实现」、「使用 Phobos 的 XYZ " "功能实现」等。这有助于最终用户了解 Phobos 的性质及其在修改社区中的作用,也为该项目及其贡献者提供应有的认可。" -#: ../../../README.md:143 msgid "Legal and License" msgstr "法律与许可证" -#: ../../../README.md:146 msgid "" "[![LGPL " "v3](https://www.gnu.org/graphics/lgplv3-147x51.png)](https://opensource.org/licenses/LGPL-3.0)" @@ -615,30 +530,27 @@ msgstr "" "[![LGPL " "v3](https://www.gnu.org/graphics/lgplv3-147x51.png)](https://opensource.org/licenses/LGPL-3.0)" -#: ../../../README.md:146 msgid "LGPL v3" msgstr "LGPL v3" -#: ../../../README.md:148 msgid "" "The Phobos project is an unofficial open-source community collaboration " "project to extend the Red Alert 2 Yuri's Revenge engine for modding and " "compatibility purposes." msgstr "Phobos 是一个非官方的开源社区合作项目,旨在扩展《红色警戒2尤里的复仇》引擎以用于 Mod 制作与兼容性目的。" -#: ../../../README.md:150 msgid "" "As a modification, the project complies with [EA C&C modding " -"guidelines](https://www.ea.com/games/command-and-conquer/command-and-conquer-remastered/news/modding-faq); " -"should there be conflict between the project's license and modding " -"guidelines - the rules imposed by guidelines shall take precedence (for " -"example, the project should not be commercial or used to make money)." +"guidelines](https://www.ea.com/games/command-and-conquer/command-and-" +"conquer-remastered/news/modding-faq); should there be conflict between " +"the project's license and modding guidelines - the rules imposed by " +"guidelines shall take precedence (for example, the project should not be " +"commercial or used to make money)." msgstr "" "作为一项修改,该项目符合 [EA C&C 修改指南](https://www.ea.com/games/command-and-conquer" "/command-and-conquer-remastered/modding-" "faq);如果项目许可与修改指南之间存在冲突,则以指南中的规则为准(例如,该项目不应用于商业用途或用于盈利)。" -#: ../../../README.md:152 msgid "" "This project has no direct affiliation with Electronic Arts Inc. Command " "& Conquer, Command & Conquer Red Alert 2, Command & Conquer Yuri's "