skill和随机数问题

This commit is contained in:
wuwenbo 2026-05-18 16:35:31 +08:00
parent 824574fc44
commit 8a33f812a6
25 changed files with 26137 additions and 157 deletions

View File

@ -0,0 +1,149 @@
---
name: th1-action-logic
description: TH1 project-specific behavior/action logic guide for Unity C# action execution, CommonActionParams/CommonActionId, ActionLogicFactory, CheckCan/CheckShow/CompleteExecute, player input actions, AI action generation/scoring/execution, turn actions, ActionNetData multiplayer synchronization, deterministic random, and skill lifecycle side effects. Use whenever Codex works on TH1 Action/行为逻辑, UnitMove/UnitAttack/Build/Train/GridMisc/PlayerAction/LearnTech/TurnStart/TurnEnd, AIActionGenerator/AIActionScoreCalculator/BTNodeCanvas AI nodes, action replay/spectator, or bugs involving action desync, illegal actions, AI choosing/executing actions, or action-triggered skills.
---
# TH1 Action Logic
## Core Rule
TH1 的 action 是玩家、AI、网络同步、回放、技能触发共同使用的权威行为层。任何会改变 `MapData` 的行为都应尽量进入 `ActionLogicBase.CompleteExecute` 流程,不能只在 UI、AI 或网络接收处直接改数据。
处理 action 问题时同时考虑四条链路:
- 本地玩家输入/UI 是否能正确构造 `CommonActionParams` 并调用 action。
- `CheckCan`/`CheckShow` 是否区分了权威可执行与 UI 展示状态。
- AI 是否能生成、过滤、评分并最终执行同一个 action。
- 多人同步、回放、AI 评分模拟是否仍然确定性一致。
## First Read
先读这些文件,再改代码:
- `MD/GameMDFramework/03-行为系统-Action.md` - action 架构、参数、执行、同步概览。
- `MD/GameMDFramework/06-AI系统.md` - AI 行为树、action 生成和评分概览。
- `MD/GameMDFramework/11-网络与Steam.md` - ActionConfirm/ActionExecute/ForceUpdate/MapConfirm 概览。
- `Unity/Assets/Scripts/TH1_Logic/Action/ActionLogic.cs` - `CommonActionType``CommonActionId``CommonActionParams``ActionLogicFactory``ActionLogicBase` 和核心 action。
- `Unity/Assets/Scripts/TH1_Logic/AI/AIActionGenerator.cs``AIActionScoreCalculator.cs``AILogic.cs` - AI 生成、评分、执行。
- `Unity/Assets/Scripts/TH1_Logic/Steam/GameNetSender.cs``GameNetReceiver.cs``SteamObjectSerializer.cs``Unity/Assets/Scripts/TH1_Data/NetData.cs` - 多人同步与 action 日志。
需要完整代码地图时加载 `references/action-logic-map.md`
## Canonical Flow
标准行为流:
1. UI、地图点击、AI、网络消息或回放构造 `CommonActionId``CommonActionParams`
2. 参数对象必须持有 `MapData`,并在对象引用和 ID 之间调用正确的同步函数。
3. 从 `ActionLogicFactory` 取到 `ActionLogicBase`
4. UI 用 `CheckShow`/`CheckShowState` 渲染,真正执行前用 `CheckCan`
5. 正式行为调用 `CompleteExecute`。多人模式下它会自动走发送、广播、本地执行或客户端等待。
6. `BeforeExecute` 在真实主地图上写入 `MapData.Net.Actions`
7. `Execute` 改变地图、玩家、单位、城市、格子等权威数据。
8. `AfterExecute` 触发 `MapData.OnActionExecuted`、技能事件、UI 刷新、分数/结算等后处理。
只有明确是嵌套副行为且不应成为独立 action 日志时,才使用 `ExecuteWithoutFullActionPeriod`
## Params And IDs
`CommonActionParams` 是 MemoryPack 同步对象。对象引用字段如 `PlayerData``UnitData``CityData``GridData``TargetUnitData``TargetGridData``TargetPlayerData` 是运行时引用;同步和存档依赖对应的 ID 字段。
- 修改对象引用后调用 `OnParamChanged()`,让 ID 跟上引用。
- 网络接收、回放、深拷贝、AI 模拟后设置 `Param.MapData`,再调用 `RefreshParams()`,让引用从 ID 恢复。
- 复制参数用 `GetCopyParam()`,不要手写半套 ID/引用。
- 传给 AI 或网络的参数必须能仅靠 ID 在目标 `MapData` 中恢复。
`CommonActionId``Id`、相等判断、日志输出依赖 action 类型和子类型字段。新增子字段或新的 action 维度时,必须同步更新 hash、`==``!=`、日志和所有工厂注册/生成处。
## Changing An Action
改已有 action 时:
- 找到具体类:`BuildActionLogic.cs``TrainUnitActionLogic.cs``GridMiscActionLogic.cs``UnitActionLogic.cs``AttackAllyActionLogic.cs``PlayerActionLogic.cs``ActionLogic.cs`
- 先读 `Execute``CheckCan``CheckShow``CheckShowState``CameraControl``GetAnimTime`,确认 UI、AI、网络是否共用该逻辑。
- 权威数据变化放在 `Execute` 或被 `Execute` 调用的逻辑中。
- 动画、镜头、UI、音效、可见性相关代码要守住 `actionParams.MapData == Main.MapData`,必要时再加视野判断。
- `CheckCan` 是权威合法性,必须能保护网络接收和 AI 执行;`CheckShow` 是展示入口,允许更宽松但不能承担安全性。
- 金钱、文化、行动点、人口、冷却、科技、外交、领土、单位占格等消耗和限制必须在 `CheckCan``Execute` 保持一致。
新增 action 时:
1. 决定是否需要新的 `CommonActionType`,还是使用已有 action 的子类型枚举。
2. 更新 `CommonActionId` 的字段、hash、相等和日志。
3. 在 `ActionLogicFactory.Refresh()` 注册 action并检查 `GetMainObjectType()``PlayerHasAction``GridHasAction``CityHasAction``UnitHasAction` 等查询。
4. 实现 `ActionLogicBase` 子类或已有基类子类。
5. 接好 UI 构参入口或地图点击入口。
6. 如果 AI 应该会用,更新 `AIActionGenerator.GeneratorActionIds`、相关 BTNodeCanvas 节点和 `AIActionScoreCalculator`
7. 如果训练/模型会编码该行为,检查 `TrainingState`、action bit codec、AI 模型预测映射。
8. 用单机、AI、多人 host/client、回放/观战思维各走一遍。
## AI Rules
AI 的最终执行仍然走 action 层:
- `AIActionGenerator` 从当前 AI 玩家、单位、城市、领土、目标缓存中枚举候选 `AIActionBase`
- BTNodeCanvas 节点负责筛选、排序、补目标参数、选出 `MaxAiAction`
- `AIExecuteAction` 只准备参数、镜头和可见性,它不真正执行。
- `AILogic.Update()``MaxAiAction` 存在时调用 `MaxAiAction.ActionLogic.CompleteExecute(MaxAiAction.Param)`
- `AIActionScoreCalculator` 会把真实地图深拷贝成 `CalMap`,把参数刷新到 `CalMap`,再调用同一个 `CompleteExecute` 做模拟评分。
因此 action 的 `Execute` 不能默认依赖真实 `Main.MapData`、UI 对象、Unity 随机数、动画状态或当前相机。AI 模拟图上的行为应只改数据,不做真实 UI/表现副作用。
## Network Rules
多人行为不要绕过 `CompleteExecute`
- Host 本地 action`CompleteExecute``ActionExecute` 广播,广播失败则不执行本地 mutation。
- Client 本地 action`CompleteExecute` 发送 `ActionConfirm` 给 host发送失败不执行。本地 `TurnEnd` 发送后直接返回 false等待 host 广播。
- Host 收到 `ActionConfirm`:刷新 params校验当前玩家调用 `CompleteExecute`,再广播 `ActionExcuteMessage` 并执行。
- Client 收到 `ActionExcuteMessage`:版本和 hash 检查后,刷新 params调用 `NetCompleteExecute`,不再二次发送。
- `BeforeExecute` 只在真实主地图上追加 `ActionNetData`,版本来自 `MapData.Net.GetActionVersion()`hash 来自 `NetData.GetMapDataHash(Main.MapData)`
同步行为中的随机数必须使用 `map.Net.GetRandom(map)` 或现有同步随机封装。不要在真实执行路径里用 `UnityEngine.Random` 或新建未同步 seed 的 `System.Random`
多人同步、断线、ForceUpdate、MapConfirm、恢复相关 bug 还要同时使用 `th1-network-sync`
## Skill Side Effects
Action 执行后会触发技能和事件:
- `MapData.OnActionExecuted` 复制单位和技能列表后调用 `SkillBase.OnActionExecuted`,避免迭代中集合变化。
- 还有 `OnTurnStart``OnAfterTurnStart``OnTurnEnd``OnAnyUnitMove``OnAnyUnitDie``OnAnyUnitCreate` 等生命周期。
- 友军攻击/治疗走 `AttackAllyEnable``AttackAllyBaseHeal``AttackAllyHealAddition``AttackAllySelfDamage``OnAttackAllyJustBeforeHeal``OnAttackAllyAfterHeal`
新增 action 或改 action 结果时,检查相关技能是否依赖 action 类型、单位移动/死亡/创建、治疗、回合开始/结束或 `OnActionExecuted`
## Validation
改完 action 相关代码后至少运行:
```powershell
dotnet build Unity/Assembly-CSharp.csproj --no-restore
```
如果改了 Editor、AI 编辑窗口、配置窗口或 wiki 编辑器,再运行:
```powershell
dotnet build Unity/Assembly-CSharp-Editor.csproj --no-restore
```
多人/AI 高风险改动还要人工或自动验证这些路径:
- 单机玩家点击执行。
- AI 生成、评分、执行。
- 多人 host 本地执行并广播。
- 多人 client 发起 actionhost 确认后广播。
- AI 评分 `CalMap` 模拟不会污染真实地图。
- 回放/观战能按 `Net.Actions` 重放。
- action 中所有随机结果在 host/client 一致。
## Common Pitfalls
- 只改 UI 按钮,没有改 `CheckCan` 或工厂注册。
- 只改玩家路径,没有让 AI 生成同类参数。
- `CommonActionParams` 换了引用但忘记 `OnParamChanged()`
- 网络收到参数后忘记 `MapData``RefreshParams()`
- 在 `Execute` 中直接访问真实 UI、相机或动画导致 AI 模拟图异常。
- 用本地随机数、当前时间、对象枚举非确定顺序决定权威结果。
- 在 client 收到确认前提前修改本地真实地图。
- 新增 `CommonActionId` 字段后没更新 hash 和相等判断。

View File

@ -0,0 +1,4 @@
interface:
display_name: "TH1 Action Logic"
short_description: "TH1 action AI sync behavior rules"
default_prompt: "Use $th1-action-logic to trace and safely modify TH1 action, AI, or multiplayer behavior."

View File

@ -0,0 +1,722 @@
# TH1 Action Logic Code Map
This reference records the project-specific action, AI, synchronization, and side-effect map for TH1. Load it when tracing a concrete action bug or adding/changing action behavior.
## Architecture From MD
The framework docs describe TH1 as a Unity C# turn-based 4X project with a layered runtime:
- Action layer: player/AI operations, validation, execution, synchronization.
- Logic layer: player, unit, map, city, skill, game state orchestration.
- Data layer: `MapData`, `PlayerData`, `UnitData`, `CityData`, `GridData`, `NetData`.
- UI/input layer: constructs action params and displays action circles.
- Network layer: Steam P2P messages, MemoryPack serialization, action confirmation/broadcast.
Core loop:
```text
player input or AI decision
-> CommonActionId + CommonActionParams
-> ActionLogicFactory
-> CheckCan / CheckShow
-> CompleteExecute
-> Execute
-> MapData.OnActionExecuted / skills / UI / score / next turn
-> network action log / replay path
```
## Main Files
| File | Purpose |
| --- | --- |
| `Unity/Assets/Scripts/TH1_Logic/Action/ActionLogic.cs` | `CommonActionType`, `CommonActionId`, `CommonActionParams`, `ActionLogicFactory`, `ActionLogicBase`, move/attack/turn/tech/wonder/culture/AIParam core actions |
| `Unity/Assets/Scripts/TH1_Logic/Action/BuildActionLogic.cs` | Buildings, roads, bridges, ports, temples, special civ buildings |
| `Unity/Assets/Scripts/TH1_Logic/Action/TrainUnitActionLogic.cs` | Normal units, heroes, Kaguya French animal warrior |
| `Unity/Assets/Scripts/TH1_Logic/Action/GridMiscActionLogic.cs` | Grow/Clear/Burn forest, Destroy, GrowForestOutside, CreateMountain, SellMetal |
| `Unity/Assets/Scripts/TH1_Logic/Action/UnitActionLogic.cs` | Unit actions: capture, upgrade, recover, gather, examine, disband, hero/special civ actions |
| `Unity/Assets/Scripts/TH1_Logic/Action/AttackAllyActionLogic.cs` | Friendly-target attack/heal/combine/sacrifice actions |
| `Unity/Assets/Scripts/TH1_Logic/Action/PlayerActionLogic.cs` | Diplomacy, hero select, finish hero task |
| `Unity/Assets/Scripts/TH1_Logic/AI/AIActionGenerator.cs` | Candidate action enumeration |
| `Unity/Assets/Scripts/TH1_Logic/AI/AIActionScoreCalculator.cs` | AI scoring, true-action shortcuts, `CalMap` simulation |
| `Unity/Assets/Scripts/TH1_Logic/AI/AIActionBase.cs` | `AICalculatorData`, AI caches, action visibility/duration |
| `Unity/Assets/Scripts/TH1_Logic/AI/AILogic.cs` | AI state machine and final action execution |
| `Unity/Assets/Scripts/BTNodeCanvas/*.cs` | Behavior tree nodes that filter/generate/select AI actions |
| `Unity/Assets/Scripts/TH1_Logic/Steam/GameNetSender.cs` | Sends `ActionConfirm`, broadcasts `ActionExecute`, MapConfirm, ForceUpdate |
| `Unity/Assets/Scripts/TH1_Logic/Steam/GameNetReceiver.cs` | Receives action confirm/execute and refreshes params before execution |
| `Unity/Assets/Scripts/TH1_Logic/Steam/SteamObjectSerializer.cs` | P2P message types and MemoryPack message DTOs |
| `Unity/Assets/Scripts/TH1_Data/NetData.cs` | Action log, action version, deterministic random, map hash, player net map |
| `Unity/Assets/Scripts/TH1_Logic/Core/GameLogic.cs` | State update, current player, AI update, map confirm heartbeat |
| `Unity/Assets/Scripts/TH1_Logic/Player/PlayerLogic.cs` | Start/end turn, surrender, AI money action |
| `Unity/Assets/Scripts/TH1_Logic/Map/MapInteraction.cs` | Map click move/attack/attack ally/attack ground entry |
| `Unity/Assets/Scripts/TH1_Logic/Input/InputLogic.cs` | Special input entry such as `ToggleShenlan` |
| `Unity/Assets/Scripts/TH1_UI/Info/*` | Action circle UI, tech/diplomacy/culture/hero action buttons |
## CommonActionType
`CommonActionType` currently includes:
- `Gain`
- `Build`
- `StartWonder`
- `BuildWonder`
- `TrainUnit`
- `GridMisc`
- `UnitAction`
- `CityLevelUpAction`
- `UnitSkill`
- `LearnTech`
- `UnitMove`
- `UnitAttack`
- `TurnStart`
- `TurnEnd`
- `PlayerAction`
- `UnitPassiveMove`
- `AIParamControl`
- `UnitAttackAlly`
- `UnitAttackGround`
- `PlayerSurrender`
- `BuyCultureCard`
`ActionLogicFactory.Refresh()` is the authoritative registry. If an action exists in an enum but is not registered there, UI/AI/factory lookups will not see it.
## CommonActionParams
`CommonActionParams` is `[MemoryPackable]`. It stores:
- Runtime references ignored by MemoryPack: `MapData`, `PlayerData`, `UnitData`, `CityData`, `GridData`, `TargetUnitData`, `TargetGridData`, `TargetPlayerData`.
- Serialized IDs: `PlayerId`, `UnitId`, `CityId`, `GridId`, `TargetUnitId`, `TargetGridId`, `TargetPlayerId`.
- `MainObjectType`, used by UI and factory checks.
Rules:
- Constructors set IDs from refs.
- `OnParamChanged()` copies refs into IDs.
- `RefreshParams()` copies IDs back into refs through `MapData`.
- `GetCopyParam()` is the safe copy helper.
- Network and replay paths must set `Param.MapData` then `RefreshParams()`.
- AI simulation must refresh params against `CalMap`, not the real map.
## CommonActionId
`CommonActionId` is `[MemoryPackable]`. It includes the main action type and subtypes:
- `WonderType`
- `ResourceType`
- `FeatureType`
- `TerrainType`
- `UnitType`
- `GiantType`
- `UnitLevel`
- `Vegetation`
- `UnitActionType`
- `CityLevelUpActionType`
- `GridMiscActionType`
- `SkillType`
- `TechType`
- `PlayerActionType`
- `AIParamControlType`
- `CultureCardType`
`Id` is a computed hash. Equality compares all fields. `ToLogString()` prints fields for debugging. Any new subtype field must update all of those.
## ActionLogicFactory
`ActionLogicFactory.Refresh()` lazily builds:
- `ActionLogicDict`
- `_actionLogicIdDict`
Registration summary:
- Core unit actions: `UnitMoveAction`, `UnitAttackAction`, `UnitAttackGroundAction`, `UnitPassiveMoveAction`, `UnitAttackAllyAction`.
- Turn actions: `PlayerTurnStartAction`, `PlayerTurnEndAction`.
- Player-level actions: surrender, culture card purchase, `AIParamControlAction`, diplomacy actions.
- `GainResourceAction` for `Animal`, `Fish`, `Fruit`.
- `BuildAction` for normal buildings and road/bridge/port plus special subclasses for preserve, naval base, temples, Kaguya yard, Egyptian irrigation, Remilia military, metal station, Moriya military.
- `GridMiscAction` plus special `GrowForestOutside`, `CreateMountain`, `SellMetal`.
- Wonder build/start.
- `TrainUnitAction` for normal units, `TrainUnitActionTrainHero` for heroes, special Kaguya/French animal warrior, Moriya snake level 3 handling.
- City level-up actions for all `CityLevelUpActionType`.
- `UnitActionAction` for all `UnitActionType`, with special subclasses for hero/special actions.
- Water/shore unit transforms.
- `LearnTechAction` for all tech types.
- `UnitSkillAction` for active skills.
Important query helpers:
- `PlayerHasAction`
- `GridHasAction`
- `CityHasAction`
- `UnitHasAction`
- `UnitHasMoveAndAttackAction`
- `MainObjectCanShowAction`
- `GetActionLogicByType`
- `GetMainObjectType`
## ActionLogicBase Execution
`CompleteExecute(CommonActionParams)` is the main gateway.
High-level behavior:
```text
validate current player except TurnStart and PlayerSurrender
if already IsNetActionExecuting -> ExecuteWithoutFullActionPeriod
if real map and multiplayer:
host -> broadcast ActionExecute; abort local execute if send fails
client -> send ActionConfirm; abort local execute if send fails
client TurnEnd -> return false after send
set IsNetActionExecuting = true
BeforeExecute
Execute
AfterExecute
set IsNetActionExecuting = false
```
`NetCompleteExecute()` runs `BeforeExecute`, `Execute`, `AfterExecute` without sending. It is used by clients receiving host broadcast.
`ExecuteWithoutFullActionPeriod()` only calls `Execute`; it intentionally skips logging and global after-action hooks. Use it only for nested implementation details that should not be independent actions.
`BeforeExecute`:
- Only acts on `actionParams.MapData == Main.MapData`.
- Appends `ActionNetData` to `Main.MapData.Net.Actions`.
- Uses `Version = Main.MapData.Net.GetActionVersion()`.
- Uses `MapHash = NetData.GetMapDataHash(Main.MapData)`.
- Stores `Param`, `ActionId`, and `Time`.
`AfterExecute`:
- Calls `MapData.OnActionExecuted`.
- Refreshes diplomacy/feeling except `TurnEnd`, `TurnStart`, `AIParamControl`.
- Recalculates player scores.
- Updates UI topbar and `Main.PlayerLogic.Update`.
- Refreshes settlement.
- Calls moment/tutorial/ranking UI events.
- May run action-difference checks under compile flags.
## Core Actions
### BuildWonderAction
Validates own territory, wonder availability, terrain/resource constraints, and cost. Execution turns the grid resource into a wonder, updates player wonder state, grid/city experience, moments and achievements.
### GainResourceAction
Validates own territory, matching gatherable resource, no enemy blocker, tech/action availability, and cost. Execution spends money, clears resource, grants city experience, and refreshes building levels.
### CityLevelUpActionAction
Consumes city level-up points and applies city upgrade branches such as explorer, workshop, wealth, wall, expand, population, park, and big unit creation. `CheckCan` is tied to city level and available point.
### UnitMoveAction
Validates unit/player/grid, self unit, legal target, visibility/enemy blocking, movement path and special move restrictions. Execution uses `Main.UnitLogic.CalcUnitMoveInfo`, `GetMovePath`, `MoveToLogic`, sight refresh, and visible movement fragments only on the real map.
### UnitPassiveMoveAction
Used for displacement/passive moves. It is normally nested and should not create a full action period unless explicitly intended.
### UnitAttackAction
Uses `PresentationManager.BeginScope()`, validates alive units, target hostility, attack range/rules and current player. Execution calls `Main.UnitLogic.Attack`, enqueues visible attack/move-kill/push fragments, and refreshes sight when movement happens.
### UnitAttackGroundAction
Ground-target actions for skills like Suwako and Infiltrate. It may spawn Moriya snake or perform direct theft/suicide/rebel effects. It must validate target grid attackability and AP.
### StartWonderAction
Player-level start wonder action. Inspect this when changing wonder prerequisites, states or UI.
### UnitSkillAction
Dispatches active skills through `SkillType`. Inspect the target skill implementation under `Unity/Assets/Scripts/TH1_Logic/Skill` before changing behavior.
### LearnTechAction
Validates tech pool, father techs, not learned, enough coin and tech point. Execution delegates to `Main.PlayerLogic.ResearchTech`.
### PlayerTurnStartAction / PlayerTurnEndAction
Wrap `MapData.OnTurnStart`, `MapData.OnAfterTurnStart`, and `MapData.OnTurnEnd`. These are special in player checks and network behavior.
### AIParamControlAction
Clears AP/MP/CP or gives AI money. `AIMoney` must not apply to real multiplayer players or the self player in single-player.
### SurrenderAction
Calls player surrender logic and creates a local surrender archive for the self player outside story mode.
### BuyCultureCardAction
Delegates to `PlayerCultureInfo.TryBuyCultureCard` and `CheckCanBuyCultureCard`.
## Build Actions
Base file: `BuildActionLogic.cs`.
`BuildAction` handles:
- Farm/Mine/LumberHut collection buildings.
- Windmill/Forge/Sawmill/Market improvements.
- Port, Road, Bridge.
- Temple/Military/Academy and generic building effects.
- Cost spending, grid mutations, city exp, building-level refresh, city connection refresh.
Special subclasses:
- `BuildActionBuildPreserve`
- `BuildActionBuildNavalBase`
- `BuildActionBuildTemple`
- `BuildActionBuildKaguyaFrenchYard`
- `BuildActionUpdateAllBuildingLevel`
- `BuildActionBuildEgyptianIrrigation`
- `BuildActionBuildRemiliaMilitary`
- `BuildActionBuildMetalStation`
- `BuildActionBuildMoriyaMilitary`
When changing building rules, inspect both `CheckCan` and `CheckShowState`; this code often separates visibility, disabled reason, and final legality.
## Train Unit Actions
Base file: `TrainUnitActionLogic.cs`.
`TrainUnitAction` validates:
- City/grid ownership and production site.
- Population and occupancy.
- Money or culture cost.
- Tech, culture cards and civilization-specific availability.
- Enemy blockers and special unit limits.
Execution:
- Spends cost.
- Adds unit to city/grid.
- Handles special Moriya/Kaguya effects.
- Refreshes sight.
- Updates hero tasks, achievements and faith/score hooks.
Special subclasses:
- `TrainUnitActionTrainHero`
- `TrainUnitActionTrainKaguyaFrenchAnimalWarrior`
Hero training uses hero cooldown/penalty, hero level, duplicate checks and special French Mokou egg sharing.
## Grid Misc Actions
Base file: `GridMiscActionLogic.cs`.
`GridMiscActionType` includes:
- `GrowForest`
- `ClearForest`
- `BurnForest`
- `Destroy`
- `GrowForestOutside`
- `CreateMountain`
- `SellMetal`
Base action handles vegetation/resource/building-level/city-connect/visual updates. Destroy has special bridge safety, including hidden real unit checks and land-only unit constraints.
Special subclasses:
- `GridMiscActionGrowTreeOutside`
- `GridMiscActionCreateMountain`
- `GridMiscActionSellMetal`
`CreateMountain` uses synchronized random through `Net.GetRandom`, so any similar new behavior must follow that model.
## Unit Actions
Base file: `UnitActionLogic.cs`.
`UnitActionType` includes:
- `Upgrade`
- `Recover`
- `HEAL`
- `Examine`
- `Gather`
- `Capture`
- `Disband`
- `ROYALFLAMES`
- `ROYALFLAMESPRO`
- `HeroUpgrade`
- `TEWIFRENCHBUFF`
- `MOKOUFRENCHBOOM`
- `KAGUYAFRENCHAROUND`
- `ForceDisband`
- `RemoveRedMist`
- `REMILIABUFF`
- `AbsorbRedMist`
- `REMILIAABSORB`
- `KANAKOSIT`
- `KANAKOUNSIT`
- `AYAMOVEAGAIN`
- `KomeijiRinFire`
- `KomeijiRinCityExp`
- `KomeijiBonePileBoom`
- `ReisenFrenchBoom`
- `ToggleShenlan`
Base `UnitActionAction` handles capture, upgrade, ship transforms, disband, recover, gather, examine treasure and skill-like enum dispatch. `ToggleShenlan` is special debug/visual input and should not consume normal AP/cost.
Special subclasses:
- `UnitActionROYALFLAMESPRO`
- `UnitActionHeroUpgrade`
- `UnitActionHEAL`
- `UnitActionTEWIFRENCHBUFF`
- `UnitActionMOKOUFRENCHBOOM`
- `UnitActionKAGUYAFRENCHAROUND`
- `UnitActionForceDisband`
- `UnitActionRemoveRedMist`
- `UnitActionREMILIABUFF`
- `UnitActionAbsorbRedMist`
- `UnitActionRemiliaAbsorb`
- `UnitActionKanakoSit`
- `UnitActionKanakoUnSit`
- `UnitActionAyaMoveAgain`
- `UnitActionKomeijiRinFire`
- `UnitActionKomeijiRinCityExp`
- `UnitActionReisenFrenchBoom`
- `UnitActionKomeijiBonePileBoom`
Treasure/examine and any reward-like execution must use synchronized random.
## Friendly Attack / Heal
File: `AttackAllyActionLogic.cs`.
`UnitAttackAllyAction` validates allied target, range, players/cities and per-unit skill permissions. It supports both new lifecycle hooks and legacy special branches:
- `AttackAllyEnable`
- `AttackAllyBaseHeal`
- `AttackAllyHealAddition`
- `AttackAllySelfDamage`
- `OnAttackAllyJustBeforeHeal`
- `OnAttackAllyAfterHeal`
- legacy Kaguya, Patchouli, SuwakoHebi combine, Komeiji sacrifice/BonePile feed, SanaeWind branches
Animation should only run on the real map and when visible.
## Player Actions
File: `PlayerActionLogic.cs`.
Diplomacy actions:
- `Embassy`
- `OfferAlly`
- `AcceptAlly`
- `RefuseAlly`
- `BreakAlly`
`BreakAlly` force-disbands own units inside target territory by nested `ForceDisband`, clears relevant AP and updates rendering/UI/highlight.
Other player actions:
- `SelectHero`
- `FinishHeroTask`
Hero task finish may spend culture for a real player and force-complete the current hero task.
## AI Action Flow
Files:
- `AIActionGenerator.cs`
- `AIActionScoreCalculator.cs`
- `AIActionBase.cs`
- `AILogic.cs`
- `BTNodeCanvas/*.cs`
Flow:
```text
GameLogic.UpdateAI
-> AILogic.StartAILogic / Update
-> AICalculatorData.Refresh
-> BT owner update
-> AIGeneratorAction / filters / score nodes
-> AIExecuteAction prepares MaxAiAction but does not execute
-> AILogic.Update calls MaxAiAction.ActionLogic.CompleteExecute
-> when no action remains, GameLogic.EndPlayerTurn
```
`AILogic.Update` has loop protection around 200 executed actions and 150 behavior tree updates per pass.
`AIActionGenerator.Init` snapshots:
- Self units.
- Self cities.
- Self territory grids.
- Wait queues for unit/grid/city/tech/action groups.
`GeneratorActionIds(data, type)` patterns:
- Gain/Build/BuildWonder/GridMisc: iterate city territory grids, skip destructive types where needed, set grid refs, `OnParamChanged`, `CheckCan`.
- StartWonder/LearnTech: player-level params.
- TrainUnit/CityLevelUpAction: city-level and non-city territory production params.
- UnitAction/UnitSkill: unit-level params.
- UnitMove: requires alive unit, MP, calculated move info and reachable target grids.
- UnitAttack: requires AP, visible enemy target, attack reach and `CheckCan`.
- PlayerAction: iterates target players for diplomacy, then separately handles hero select/task finish.
- AIParamControl: currently AP/MP/CP clearing, skips `AIMoney` in generation.
- UnitAttackAlly: allied unit targets and AP.
- UnitAttackGround: target grids around attack range, movement info required for some skills.
- BuyCultureCard: player-level params.
`GeneratorAllActionIdsForUse` filters out some actions for general/model use:
- `FinishHeroTask`
- `Disband`
- `ForceDisband`
- `Destroy`
## AI Scoring And CalMap
`AIActionScoreCalculator.GetCalMap` deep-copies the real map into static `CalMap`.
`CalculateAIActionScore`:
1. Gets start score result.
2. Copies/refreshed params onto `CalMap`.
3. Calls the action's `CompleteExecute` against `CalMap`.
4. Calculates score delta.
5. Uses max positive offset unless a true-action shortcut applies.
Because `CalMap != Main.MapData`:
- `BeforeExecute` should not append real net actions.
- UI/visual code guarded by real map checks should not run.
- `Execute` must be data-only safe.
- Random action results must be deterministic under `Net.GetRandom`.
`CalculateAIActionIsTrue` can force-pick action categories such as capture/gather/examine, upgrade, direct attacks, defend attacks, no-unit city moves, diplomacy tech handling and other scripted tactical choices.
## Network Message Flow
Files:
- `SteamObjectSerializer.cs`
- `GameNetSender.cs`
- `GameNetReceiver.cs`
- `NetData.cs`
Message types:
- `ActionConfirm = 3`
- `ActionExcute = 4` (class name/message spelling uses `Excute`)
- `TurnEnd = 5`
- `MapConfirm = 6`
- `ForceUpdate = 7`
Client action:
```text
client CompleteExecute
-> GameNetSender.ActionConfirm(ActionNetData)
-> no local mutation
-> host OnReceivedActionConfirm
-> host CompleteExecute
-> host Broadcast ActionExcute
-> host local Execute
-> clients OnReceivedActionExcute
-> client NetCompleteExecute
```
Host action:
```text
host CompleteExecute
-> Broadcast ActionExcute
-> host local Execute only if broadcast succeeds
-> clients NetCompleteExecute
```
Receiver checks:
- Host only accepts `ActionConfirm`.
- Clients only accept `ActionExcute`.
- Version must match `Main.MapData.Net.GetActionVersion()`; higher version requests force update.
- Current-player check is skipped only for `TurnStart` and `PlayerSurrender`.
- Receiver sets `message.ActionData.Param.MapData = Main.MapData` then `RefreshParams()`.
`MapConfirm`:
- Host compares member action index and last action data against local `Net.Actions`.
- Client requests force update on index/action mismatch.
`ForceUpdate`:
- Clients validate received map, refresh player net, enter ForceUpdating, call `NetResumeMatch`, then restore/hide UI on success.
## NetData
`NetData` stores:
- `Mode`
- `CurPlayerId`
- `Players` mapping Steam ID to player ID.
- `Actions`
- immutable game `RandomSeed`
Important methods:
- `GetActionVersion()` returns zero for no actions, otherwise last action version plus one.
- `GetMapDataHash(map)` serializes a map with `Net.Actions = null`, then restores in `finally`.
- `GetRandom(map)` returns deterministic random. For `map != Main.MapData`, it returns a new `System.Random(RandomSeed)`; for real map it caches `_random`.
- `RefreshPlayerNet(map, isHost)` validates lobby mappings and `SelfPlayerId`.
## Turn And AI Ownership
`GameLogic.Update`:
- Updates reconnect and heartbeat.
- Updates current state.
- Calls `MapData.RefreshTurn`.
- Switches state based on self/current player.
- Calls `UpdateAI` and `UpdateConfirm`.
`GameLogic.UpdateAI`:
- In multiplayer, only lobby owner runs AI.
- Real/self players do not use AI.
- Disconnected/timed-out members may need AI control.
- Starts or updates `AILogic`.
- Ends turn when AI finishes.
`MapData.RefreshTurn`:
- In multiplayer only host progresses turn timeout.
- Starts next player turn when no current player.
`PlayerLogic.StartPlayerTurn` and `EndPlayerTurn` use action objects:
- `PlayerTurnStartAction`
- `PlayerTurnEndAction`
- `SurrenderAction`
- `AIParamControlAction` for AI money
## Replay / Spectate
`GameLogic.SpectateState` replays `endMap.Net.Actions`:
- Skips `TurnStart`.
- For `TurnEnd`, calls `EndPlayerTurn`.
- Otherwise sets param map, refreshes params, and calls `CompleteExecute`.
Any action that cannot replay from serialized IDs alone is unsafe.
## Input And UI Entries
`MapInteraction.cs`:
- Unit attack.
- Unit attack ally.
- Unit attack ground.
- Movement/timer move.
- Constructs `CommonActionParams` with `Main.MapData`, self player, selected unit, target unit/grid, then refreshes params.
`InputLogic.cs`:
- `ToggleShenlan` special repeated-click action uses `CommonActionType.UnitAction` and `UnitActionType.ToggleShenlan`.
Common UI:
- `UIInfoGridInfoView` creates params for grid/city/unit/player action circles and calls `MainObjectCanShowAction`.
- `UIInfoCommonBaseActionCircleMono` handles display, cost/locked/done/send/cold states.
- Tech, diplomacy, culture card and hero views construct params and call `CompleteExecute`.
## Action-Triggered Skills
`MapData.OnActionExecuted`:
- Copies unit list.
- Copies each unit's skill list.
- Calls `skill.OnActionExecuted(logic, param, unit)`.
Other skill hooks:
- `OnTurnStart`
- `OnAfterTurnStart`
- `OnTurnEnd`
- `OnAnyUnitMove`
- `OnAnyUnitDie`
- `OnAnyUnitCreate`
- `OnHealOther`
- Attack ally lifecycle hooks
Known action-random skill examples:
- `InfiltrateSkill` comments explicitly require synchronized random to avoid multiplayer divergence.
- `KoishiAutoMoveSkill`
- `KomeijiKnightKillSkill`
- `SanaeDivineSkill`
- `UtsuhoBoneMakerSkill`
- `YuugiPushSkill`
## Determinism Checklist
Before changing synced action behavior, confirm:
- No `UnityEngine.Random` in authority-changing execution.
- No current time, frame count or local-only object order deciding data results.
- No UI/camera/animation object required for data execution.
- Parameter IDs are sufficient for network/replay.
- `CheckCan` protects host network confirm path.
- Host send/broadcast failure aborts mutation.
- Client local action does not mutate until host broadcast.
- AI `CalMap` execution cannot write real-map UI, net log or static accidental state.
## Debugging Checklist
When a behavior is missing:
1. Is the action registered in `ActionLogicFactory.Refresh()`?
2. Does `GetMainObjectType()` match the UI object?
3. Does the UI build params with the correct player/unit/city/grid/target?
4. Does it call `OnParamChanged()` before lookup/network?
5. Does `CheckShow` hide it or `CheckShowState` mark it locked/cost/done/cold?
6. Does `CheckCan` fail because of AP/MP/CP, resource, tech, territory, enemy blocker, city pop, diplomacy or cooldown?
7. Does AI need `AIActionGenerator` support?
8. Does network receiver rebuild params correctly from IDs?
9. Does replay work from `Net.Actions` without runtime-only refs?
10. Does any skill hook immediately modify or reverse the result?
When a behavior desyncs:
1. Compare `ActionNetData.Version`, `MapHash`, `ActionId`, and serialized params.
2. Inspect host `ActionConfirm` and client `ActionExcute` paths.
3. Verify all random results use `Net.GetRandom`.
4. Ensure visuals or UI mutations do not change data only on one machine.
5. Check nested actions: should they be full logged actions or `ExecuteWithoutFullActionPeriod`?
6. Check `AfterExecute` hooks and skills for non-determinism.
7. Use `th1-network-sync` for ForceUpdate, MapConfirm, heartbeat and reconnect logic.
## Validation Commands
Compile runtime:
```powershell
dotnet build Unity/Assembly-CSharp.csproj --no-restore
```
Compile editor if editor scripts changed:
```powershell
dotnet build Unity/Assembly-CSharp-Editor.csproj --no-restore
```
Search helpers:
```powershell
rg -n "CommonActionType|CommonActionId|CompleteExecute|CheckCan|CheckShow|ActionConfirm|ActionExcute" Unity/Assets/Scripts
rg -n "GeneratorActionIds|CalculateAIActionScore|MaxAiAction|AIExecuteAction" Unity/Assets/Scripts/TH1_Logic/AI Unity/Assets/Scripts/BTNodeCanvas
rg -n "Net.GetRandom|UnityEngine.Random|System.Random" Unity/Assets/Scripts/TH1_Logic Unity/Assets/Scripts/TH1_Data
```

View File

@ -0,0 +1,127 @@
---
name: th1-multilingual
description: TH1 project-specific multilingual/localization guide for Unity editor export/import, Multilingual.asset, Multilingual.xlsx, MultilingualTxt.txt, special-term syntax, ordered embedded references, duplicate ID prevention, active text scanning, Excel round-tripping, and translation data debugging. Use whenever Codex works on TH1 多语言导表/导回, localization Excel issues, duplicated rows/IDs, special-term parsing, ordered marker bugs, MultilingualEditorWindow, MultilingualData, or any bug that may create new localization IDs unexpectedly.
---
# TH1 Multilingual
## Core Rule
Preserve existing translated IDs. Do not create a new `MultilingualItem.ID` for text that is semantically the same after embedded terms are canonicalized.
Before changing multilingual export/import code, trace this path:
`source text -> ExportSpecialTerm -> Multilingual.asset internal ID form -> GetMultilingualStrEditor -> MultilingualTxt.txt -> Multilingual.xlsx -> ExcelExportToAsset -> AlignEmbeddedStringsToZH -> runtime ResolveEmbeddedStringsRunning`.
If Excel shows duplicate rows, first compare Asset raw `item.ZH`, not only the Excel-visible text.
## First Files To Read
- `Unity/Assets/Scripts/TH1_Logic/Editor/MultilingualEditorWindow.cs`
- `Unity/Assets/Scripts/TH1_Logic/Multilingual/MultilingualData.cs`
- `Unity/Assets/Scripts/TH1_Logic/Multilingual/MultilingualItem` in `MultilingualData.cs`
- `Tools/PrintExcelString.py`
- `Tools/ExportStringToExcel.py`
- `Tools/Multilingual.xlsx`
- `Tools/MultilingualTxt.txt`
- `Unity/Assets/Resources/Export/Multilingual.asset`
For the full data-flow contract, read `references/pipeline.md`.
For duplicate IDs, bad markers, and validation commands, read `references/diagnostics.md`.
## Format Contract
Use only these formats:
```text
Excel/source human form:
**<文本>**
**<![1]文本>**
Asset internal form:
**<123>**
**<![1]123>**
```
`**<[1]文本>**` is invalid and must not be accepted as a legacy ordered marker.
`**<[马]职阶英雄>**`, `**<[王]职阶>**`, `**<[基础属性]>**`, and similar bracketed labels are normal special-term text, not ordered markers, because the marker lacks `!` and the bracket content is not the ordered-marker syntax.
## Export Workflow
1. Run `DuplicateRemoval()` before scanning sources.
2. In `DuplicateRemoval()`, canonicalize existing `item.ZH` into internal ID form before building `_zhStrDict`.
- Example: `**<[王]职阶英雄>**...**<蓬莱山辉夜>**` must become `**<17914>**...**<171>**`.
- This preserves old translated rows and prevents new IDs such as `19977` from being created for already translated text.
3. Build `_zhStrDict` from canonical raw `item.ZH`, not from Excel-visible text.
4. Scan scene, prefab, and DataAssets text.
5. Apply `ExportSpecialTerm()` to source text before lookup.
6. If the canonical string exists in `_zhStrDict`, reuse that ID.
7. Only allocate `_idIndex` when the canonical string is genuinely new.
8. Write Excel-visible text through `GetMultilingualStrEditor()`, which expands internal IDs back to readable terms.
## Import Workflow
1. Convert Excel to `MultilingualTxt.txt` through `Tools/PrintExcelString.py`.
2. Load rows by ID and update existing items.
3. Set `IsActive` from the Excel active column.
4. Convert `ZH` human-form embedded strings to internal IDs with `UnResolveEmbeddedStrings`.
5. Align other languages to the canonical Chinese IDs with `AlignEmbeddedStringsToZH`.
6. Save `Multilingual.asset`.
Do not overwrite existing translations with blank Excel cells.
## Duplicate ID Policy
When two rows display the same in Excel:
1. Compare raw `item.ZH` in `Multilingual.asset`.
2. If one row is readable term form and another is ID form, canonicalization is missing or did not run.
3. Prefer the older/lower ID that already has translations.
4. Update active references to the preserved ID when practical.
5. Delete the later duplicate only after confirming no source asset still references it, or let the fixed export deduplicate after canonicalization.
Regression example:
```text
17228 raw: **<[王]职阶英雄>**...**<蓬莱山辉夜>**
19977 raw: **<17914>**...**<171>**
Excel display: same text
Correct result: preserve 17228; do not create/use 19977.
```
## Ordered Marker Policy
Use ordered markers only when translators may reorder embedded terms:
```text
ZH Excel: 可在**<![1]森林>**中建造**<![2]后之雕像>**
EN Excel: Allows construction of **<![2]Statue of the Queen>** in **<![1]Forest>** tiles
Asset: 可在**<![1]445>**中建造**<![2]18127>**
```
If text contains `**<[1]...>**`, report a format error: write `**<![1]...>**`.
## Checks Before Finishing
For editor-code changes, run or ask the user to run in Unity if CLI build is unavailable:
```powershell
dotnet build Unity/Assembly-CSharp-Editor.csproj --no-restore
```
For export/import changes, inspect at least one old translated row and one newly active source row:
- Confirm the old ID is reused.
- Confirm Excel-visible text can be duplicate-free after canonicalization.
- Confirm `**<[马]...>**` style labels are not flagged as ordered markers.
- Confirm `**<[1]...>**` is rejected, not silently accepted.
- Confirm `**<![1]...>**` round-trips to `**<![1]id>**` and back.
## What Not To Do
- Do not treat Excel-visible equality as proof that Asset raw strings are equal.
- Do not add compatibility for historical `**<[n]...>**` ordered syntax.
- Do not create new IDs when a canonicalized existing item already matches.
- Do not remove an old translated row in favor of a new blank active row.
- Do not normalize bracket labels like `[王]职阶英雄` into ordered markers.

View File

@ -0,0 +1,4 @@
interface:
display_name: "TH1 Multilingual"
short_description: "TH1 Unity 多语言导表导回特殊词和重复ID排查"
default_prompt: "Use TH1 multilingual rules to inspect, fix, or explain localization export/import issues."

View File

@ -0,0 +1,134 @@
# TH1 Multilingual Diagnostics
## Quick Duplicate Analysis
Use this when Excel shows duplicate Chinese rows:
```powershell
@'
import sys, io, openpyxl
from collections import defaultdict
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
wb = openpyxl.load_workbook('Tools/Multilingual.xlsx', read_only=True, data_only=False)
ws = wb.active
by_zh = defaultdict(list)
for r, row in enumerate(ws.iter_rows(min_row=2, values_only=True), start=2):
if not row or row[0] is None:
continue
zh = str(row[2] or '').strip()
if zh:
by_zh[zh].append((r, str(row[0]), str(row[1]), zh, str(row[16] or '') if len(row) > 16 else ''))
for group in [v for v in by_zh.values() if len(v) > 1][:50]:
print('---')
for item in group:
print(item[:3], item[4])
print(item[3][:300])
'@ | python -
```
If duplicate rows differ by `Active`, preserve the old translated row unless the active source truly changed.
## Inspect Raw Asset Entries
Use this to compare raw `Multilingual.asset` storage for IDs that look duplicate in Excel:
```powershell
@'
import sys, io
from pathlib import Path
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
ids = {'17228', '19977'}
text = Path('Unity/Assets/Resources/Export/Multilingual.asset').read_text(encoding='utf-8')
lines = text.splitlines()
for idx, line in enumerate(lines):
if line.strip() in [f'- ID: {i}' for i in ids]:
print('\\n---', line.strip(), 'line', idx + 1)
for j in range(idx, min(idx + 25, len(lines))):
print(lines[j])
'@ | python -
```
Interpretation:
- Raw readable term form: `**<蓬莱山辉夜>**`.
- Raw internal ID form: `**<171>**`.
- If both export to the same Excel text, canonicalization before `_zhStrDict` lookup is missing or stale.
## Inspect Source Reference
Search an ID in exported assets to see who currently references it:
```powershell
rg -n "Desc: 19977|ActionName: 19977|TechDesc: 19977| 19977" Unity/Assets/Resources/Export -S
```
For field-level reference context:
```powershell
rg -n "19977" Unity/Assets/Resources/Export/ActionDataAssets.asset -C 20
```
If a new duplicate ID is already written into a DataAssets export, rerunning export after fixing canonicalization should normally reassign the source field back to the preserved ID.
## Ordered Marker Checks
Run this mental/regex check when marker errors appear:
```text
[马]职阶英雄 -> normal text
[1]森林 -> invalid; missing !
![1]森林 -> valid ordered marker
```
Valid ID patterns:
```text
**<445>**
**<![1]445>**
```
Invalid old pattern:
```text
**<[1]445>**
```
## Known Regression Cases
Use these rows as smoke tests after export logic changes:
```text
17228 / 19977:
Readable: **<[王]职阶英雄>**。全场最多存在一名**<蓬莱山辉夜>**。死亡后3回合内不可再次出战。
Canonical: **<17914>**。全场最多存在一名**<171>**。死亡后3回合内不可再次出战。
Expected: preserve 17228; do not create/use 19977.
```
```text
18136 style ordered terrain/statue:
Excel: 可在**<![1]深海>**中建造**<![2]车之雕像>**
Asset: 可在**<![1]445>**中建造**<![2]18133>**
Expected: no bare numbers in Excel when source IDs resolve.
```
```text
Bracket labels:
**<[王]职阶英雄>**
**<[基础属性]>**
Expected: treated as normal special terms, not ordered markers.
```
## Common Failure Modes
- Excel shows duplicate rows but Asset raw differs.
- Cause: readable form and ID form both exist.
- Fix: canonicalize existing `item.ZH` before dedupe and `_zhStrDict`.
- Excel shows bare `445` or `18133` inside embedded terms.
- Cause: ID pattern did not resolve or source marker format is wrong.
- Fix: confirm Asset uses `**<id>**` or `**<![n]id>**`, not `**<[n]id>**`.
- Console logs `[马]` or `[王]` as non-numeric prefix.
- Cause: parser matched `[anything]` as order prefix.
- Fix: ordered prefix regex must require `^!\[(\d+)\]`.
- New active blank row replaces old translated row.
- Cause: scan did not find the canonical old ID.
- Fix: compare canonical raw strings and preserve lower/translated ID.

View File

@ -0,0 +1,169 @@
# TH1 Multilingual Pipeline
## Key Files
- `Unity/Assets/Scripts/TH1_Logic/Editor/MultilingualEditorWindow.cs`
- Editor UI.
- `AssetExportToExcel`.
- `DuplicateRemoval`.
- `ExportSpecialTerm`.
- `ExcelExportToAsset`.
- `TraverseObject`.
- `Unity/Assets/Scripts/TH1_Logic/Multilingual/MultilingualData.cs`
- Runtime/editor string lookup.
- Embedded string resolve/unresolve.
- Language fallback.
- `MultilingualItem`.
- `Unity/Assets/Resources/Export/Multilingual.asset`
- Canonical ScriptableObject data.
- `Tools/MultilingualTxt.txt`
- Intermediate delimiter file.
- `Tools/Multilingual.xlsx`
- Human editing/translation sheet.
- `Tools/ExportStringToExcel.py`
- TXT to Excel.
- `Tools/PrintExcelString.py`
- Excel to TXT.
## Data Columns
Current Excel/TXT order:
```text
0 ID
1 Active
2 ZH
3 TDZH
4 EN
5 JP
6 KR
7 IsSecondary
8 IsProperNoun
9 IsDialogue
10 DialogueSpeaker
11 IsDeprecated
12 IsCustom
13 IsSpecialTerm
14 Color
15 Icon
16 Desc (Excel only; TXT may omit when importing to asset)
```
TXT delimiters:
```text
column: %$#@!
row: !@#$%
```
## Canonical Storage Model
Store embedded special terms in `Multilingual.asset` as IDs:
```text
**<171>**
**<![1]445>**
```
Show embedded special terms in Excel as readable text:
```text
**<蓬莱山辉夜>**
**<![1]森林>**
```
The same row can therefore have different representations at different phases. Always name which phase is being discussed.
## Export Phases
1. `DuplicateRemoval()`
- Sort by ID.
- Refresh strings.
- Apply optional old color syntax transform when `_isTransformStr`.
- Build a temporary `ZH -> ID` index from existing items.
- Canonicalize existing `item.ZH` from readable term form to internal ID form.
- Deduplicate by canonical raw `item.ZH`.
2. Initialize `_zhStrDict` from canonical `item.ZH`.
3. Scan active `TextMeshProUGUI` from scene `UICanvas`.
4. Scan prefabs under `Assets/Resources/Prefab/`.
5. Scan ScriptableObjects under `Assets/Resources/DataAssets/`.
6. For each source string:
- Trim and normalize newlines.
- Optionally `TransformString`.
- `ExportSpecialTerm` to internal ID form.
- Lookup canonical text in `_zhStrDict`.
- Reuse existing ID or allocate `_idIndex`.
- Record `_activeSet` and `_descDict`.
7. Add genuinely new `_zhStrDict` entries to `_asset.Items`.
8. Write `MultilingualTxt.txt` with `GetMultilingualStrEditor`, which expands IDs for Excel.
9. Run `ExportStringToExcel.py`.
## Import Phases
1. Run `PrintExcelString.py`.
2. Read `MultilingualTxt.txt`.
3. Locate or create item by ID.
4. Assign non-empty language cells.
5. Assign flags and metadata.
6. `RefreshDict`.
7. For active items:
- `item.ZH = UnResolveEmbeddedStrings(item.ZH, ZH)`.
- `TDZH/EN/JP/KR = AlignEmbeddedStringsToZH(item.ZH, languageText, type, item.ID)`.
8. `item.Refresh()`.
9. Save `Multilingual.asset`.
## Embedded String Functions
- `ExportSpecialTerm(origin, regex)`
- Editor export: readable source text to internal IDs.
- Creates special-term items when actual term text is new.
- `GetMultilingualStrEditor(id, type)`
- Asset internal ID form to Excel-readable form.
- `ResolveEmbeddedStringsRunning(origin, type)`
- Runtime ID form to colored and optional icon text.
- `UnResolveEmbeddedStrings(origin, type)`
- Excel-readable form to ID form for the target language.
- `AlignEmbeddedStringsToZH(zhResolved, otherOrigin, type, itemId)`
- Replace other language markers with the exact IDs from canonical Chinese.
## Special Term Syntax
Valid:
```text
**<文本>**
**<123>**
**<![1]文本>**
**<![1]123>**
```
Invalid ordered marker:
```text
**<[1]文本>**
```
Normal bracketed term, not an ordered marker:
```text
**<[马]职阶英雄>**
**<[基础属性]>**
```
## Runtime Notes
Runtime text lookup uses `GetMultilingualStr(id, type)`.
Fallback rules in `MultilingualData`:
- Main languages `ZH`, `TDZH`, `EN`, `JP`, `KR` do not fallback to English except `EN` can fallback to Chinese.
- Extended languages fallback to English, then Chinese.
- Embedded IDs are resolved after fallback.
Runtime embedded special terms may add color and icon:
```text
<sprite name="..."><color=#...>text</color>
```
Nested embedded terms are invalid and should log errors.

View File

@ -0,0 +1,46 @@
---
name: th1-online-debug
description: Project-specific online production debug workflow for TH1 player backend errors, CrashSight/UnityLogError reports, obfuscated stack traces, short obfuscated class/method names, live-version crash triage, and locating/fixing decoded Unity C# issues. Use whenever the user provides online logs, backend exception messages, production crash text, or mixed obfuscated names such as fu/blu/gn.blu; always decode with Tools/DecodeOnlineError.ps1 or Tools/ObfuscatedExceptionDecoder.ps1 before searching code.
---
# TH1 Online Debug
Use this skill when investigating production/online errors for `F:\th1new`, especially logs from the backend console, CrashSight, `UnityLogError`, or messages that include obfuscated symbols.
## First Move
Preserve the raw log text, version, time range, and frequency if provided. Do not guess from short obfuscated tokens alone.
If the log contains likely obfuscated names, decode it before code search:
```powershell
pwsh -NoProfile -ExecutionPolicy Bypass -File Tools\DecodeOnlineError.ps1 -Text @'
PASTE_RAW_ERROR_HERE
'@
```
For a file:
```powershell
pwsh -NoProfile -ExecutionPolicy Bypass -File Tools\DecodeOnlineError.ps1 -InputPath crash.txt -OutputPath decoded_crash.txt
```
Use `-Replace` only when the decoded output is easier to search without annotations. Use `-AggressiveShortNames` only for mostly-symbol stack traces; it can misread normal prose such as `to` or `in`.
## Investigation Workflow
1. Decode obfuscated text with `Tools\DecodeOnlineError.ps1`.
2. Search decoded classes/methods with `rg` in `Unity\Assets`, `DotNet`, and other relevant project folders.
3. Trace the runtime path from the decoded symbol outward: caller, state assumptions, null/empty data, network ownership, save/load state, and version-specific behavior.
4. If decoded symbols are under `TH1_Logic.Steam`, lobby, P2P, force update, action sync, map sync, heartbeat, or reconnect code, also use the `th1-network-sync` skill.
5. Make a focused fix; do not touch unrelated generated Unity metadata or user changes.
6. Verify with targeted tests, compile/build checks when practical, and a command-line decode sanity check if the fix references the reported symbol.
## Reporting Back
Summarize:
- raw obfuscated token(s) and decoded symbol(s)
- likely user-visible symptom
- root cause and changed files
- verification performed

View File

@ -0,0 +1,275 @@
version=1
# This file caches language service data to improve the performance of C# Dev Kit.
# It is not intended for manual editing. It can safely be deleted and will be
# regenerated automatically. For more information, see https://aka.ms/lscache
#
# To control where cache files are stored, use the following VS Code setting:
# "dotnet.projectsystem.cacheInProjectFolder": true
[project]
language=C#
primary
lastDtbSucceeded
[properties]
AssemblyName=App
CommandLineArgsForDesignTimeEvaluation=-langversion:12 -define:DOTNET
CompilerGeneratedFilesOutputPath=
MaxSupportedLangVersion=12.0
ProjectAssetsFile=<PATH>obj/project.assets.json
RootNamespace=ET
RunAnalyzers=
RunAnalyzersDuringLiveAnalysis=
SolutionPath=<PATH>../../ET.sln
TargetFrameworkIdentifier=.NETCoreApp
TargetPath=<PATH>../../Bin/App.dll
TargetRefPath=<PATH>obj/Debug/ref/App.dll
TemporaryDependencyNodeTargetIdentifier=net8.0
[commandLineArguments]
/noconfig
/unsafe-
/checked-
/nowarn:0169,0649,3021,8981,1701,1702
/fullpaths
/nostdlib+
/errorreport:prompt
/warn:8
/define:DOTNET;DEBUG;NET;NET8_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER
/highentropyva+
/debug+
/debug:portable
/filealign:512
/optimize+
/out:obj\Debug\App.dll
/refout:obj\Debug\refint\App.dll
/target:exe
/warnaserror+
/utf8output
/deterministic+
/langversion:12
/warnaserror+:NU1605,SYSLIB0011
[sourceFiles]
obj/Debug/
.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
DotNet.App.AssemblyInfo.cs
Program.cs
[metadataReferences]
../
Core/obj/Debug/ref/Core.dll
Loader/obj/Debug/ref/Loader.dll
Model/obj/Debug/ref/Model.dll
ThirdParty/obj/Debug/ref/ThirdParty.dll
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/ref/net8.0/
Microsoft.CSharp.dll
Microsoft.VisualBasic.Core.dll
Microsoft.VisualBasic.dll
Microsoft.Win32.Primitives.dll
Microsoft.Win32.Registry.dll
mscorlib.dll
netstandard.dll
System.AppContext.dll
System.Buffers.dll
System.Collections.Concurrent.dll
System.Collections.dll
System.Collections.Immutable.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.Annotations.dll
System.ComponentModel.DataAnnotations.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Configuration.dll
System.Console.dll
System.Core.dll
System.Data.Common.dll
System.Data.DataSetExtensions.dll
System.Data.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.DiagnosticSource.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.dll
System.Drawing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Formats.Asn1.dll
System.Formats.Tar.dll
System.Globalization.Calendars.dll
System.Globalization.dll
System.Globalization.Extensions.dll
System.IO.Compression.Brotli.dll
System.IO.Compression.dll
System.IO.Compression.FileSystem.dll
System.IO.Compression.ZipFile.dll
System.IO.dll
System.IO.FileSystem.AccessControl.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.AccessControl.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Memory.dll
System.Net.dll
System.Net.Http.dll
System.Net.Http.Json.dll
System.Net.HttpListener.dll
System.Net.Mail.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Quic.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.ServicePoint.dll
System.Net.Sockets.dll
System.Net.WebClient.dll
System.Net.WebHeaderCollection.dll
System.Net.WebProxy.dll
System.Net.WebSockets.Client.dll
System.Net.WebSockets.dll
System.Numerics.dll
System.Numerics.Vectors.dll
System.ObjectModel.dll
System.Reflection.DispatchProxy.dll
System.Reflection.dll
System.Reflection.Emit.dll
System.Reflection.Emit.ILGeneration.dll
System.Reflection.Emit.Lightweight.dll
System.Reflection.Extensions.dll
System.Reflection.Metadata.dll
System.Reflection.Primitives.dll
System.Reflection.TypeExtensions.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.JavaScript.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Intrinsics.dll
System.Runtime.Loader.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.AccessControl.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Cng.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.OpenSsl.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.dll
System.Security.Principal.dll
System.Security.Principal.Windows.dll
System.Security.SecureString.dll
System.ServiceModel.Web.dll
System.ServiceProcess.dll
System.Text.Encoding.CodePages.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.Encodings.Web.dll
System.Text.Json.dll
System.Text.RegularExpressions.dll
System.Threading.Channels.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.Dataflow.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Extensions.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.Transactions.dll
System.Transactions.Local.dll
System.ValueTuple.dll
System.Web.dll
System.Web.HttpUtility.dll
System.Windows.dll
System.Xml.dll
System.Xml.Linq.dll
System.Xml.ReaderWriter.dll
System.Xml.Serialization.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
WindowsBase.dll
<NUGET>/
commandlineparser/2.8.0/lib/netstandard2.0/CommandLine.dll
dnsclient/1.6.1/lib/net5.0/DnsClient.dll
epplus/5.8.8/lib/net5.0/EPPlus.dll
memorypack.core/1.10.0/lib/net7.0/MemoryPack.Core.dll
microsoft.codeanalysis.common/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll
microsoft.codeanalysis.csharp/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll
microsoft.extensions.configuration.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll
microsoft.extensions.configuration.fileextensions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll
microsoft.extensions.configuration.json/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll
microsoft.extensions.configuration/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.dll
microsoft.extensions.fileproviders.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll
microsoft.extensions.fileproviders.physical/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll
microsoft.extensions.filesystemglobbing/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll
microsoft.extensions.primitives/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll
microsoft.io.recyclablememorystream/1.4.1/lib/netcoreapp2.1/Microsoft.IO.RecyclableMemoryStream.dll
mongodb.bson/2.17.1/lib/netstandard2.1/MongoDB.Bson.dll
mongodb.driver.core/2.17.1/lib/netstandard2.1/MongoDB.Driver.Core.dll
mongodb.driver/2.17.1/lib/netstandard2.1/MongoDB.Driver.dll
mongodb.libmongocrypt/1.5.5/lib/netstandard2.1/MongoDB.Libmongocrypt.dll
nlog/4.7.15/lib/netstandard2.0/NLog.dll
sharpcompress/0.30.1/lib/net5.0/SharpCompress.dll
sharpziplib/1.3.3/lib/netstandard2.1/ICSharpCode.SharpZipLib.dll
system.drawing.common/5.0.0/ref/netcoreapp3.0/System.Drawing.Common.dll
system.security.cryptography.pkcs/5.0.0/ref/netcoreapp3.0/System.Security.Cryptography.Pkcs.dll
[analyzerReferences]
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/analyzers/dotnet/cs/
Microsoft.Interop.ComInterfaceGenerator.dll
Microsoft.Interop.JavaScript.JSImportGenerator.dll
Microsoft.Interop.LibraryImportGenerator.dll
Microsoft.Interop.SourceGeneration.dll
System.Text.Json.SourceGeneration.dll
System.Text.RegularExpressions.Generator.dll
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/
Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll
Microsoft.CodeAnalysis.NetAnalyzers.dll
<NUGET>/
memorypack.generator/1.10.0/analyzers/dotnet/cs/MemoryPack.Generator.dll
microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/
Microsoft.CodeAnalysis.Analyzers.dll
Microsoft.CodeAnalysis.CSharp.Analyzers.dll
[analyzerConfigFiles]
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig
obj/Debug/DotNet.App.GeneratedMSBuildEditorConfig.editorconfig

View File

@ -0,0 +1,275 @@
version=1
# This file caches language service data to improve the performance of C# Dev Kit.
# It is not intended for manual editing. It can safely be deleted and will be
# regenerated automatically. For more information, see https://aka.ms/lscache
#
# To control where cache files are stored, use the following VS Code setting:
# "dotnet.projectsystem.cacheInProjectFolder": true
[project]
language=C#
primary
lastDtbSucceeded
[properties]
AssemblyName=Core
CommandLineArgsForDesignTimeEvaluation=-langversion:12 -define:DOTNET
CompilerGeneratedFilesOutputPath=
MaxSupportedLangVersion=12.0
ProjectAssetsFile=<PATH>obj/project.assets.json
RootNamespace=ET
RunAnalyzers=
RunAnalyzersDuringLiveAnalysis=
SolutionPath=<PATH>../../ET.sln
TargetFrameworkIdentifier=.NETCoreApp
TargetPath=<PATH>../../Bin/Core.dll
TargetRefPath=<PATH>obj/Debug/ref/Core.dll
TemporaryDependencyNodeTargetIdentifier=net8.0
[commandLineArguments]
/noconfig
/unsafe+
/checked-
/nowarn:0169,0649,3021,8981,CS9193,CS9192,1701,1702
/fullpaths
/nostdlib+
/errorreport:prompt
/warn:8
/define:DOTNET;DEBUG;NET;NET8_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER
/highentropyva+
/nullable:disable
/debug+
/debug:portable
/filealign:512
/optimize-
/out:obj\Debug\Core.dll
/refout:obj\Debug\refint\Core.dll
/target:library
/warnaserror+
/utf8output
/deterministic+
/langversion:12
/warnaserror+:NU1605,SYSLIB0011
[sourceFiles]
obj/Debug/
.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
DotNet.Core.AssemblyInfo.cs
DotNet.Core.GlobalUsings.g.cs
[metadataReferences]
../ThirdParty/obj/Debug/ref/ThirdParty.dll
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/ref/net8.0/
Microsoft.CSharp.dll
Microsoft.VisualBasic.Core.dll
Microsoft.VisualBasic.dll
Microsoft.Win32.Primitives.dll
Microsoft.Win32.Registry.dll
mscorlib.dll
netstandard.dll
System.AppContext.dll
System.Buffers.dll
System.Collections.Concurrent.dll
System.Collections.dll
System.Collections.Immutable.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.Annotations.dll
System.ComponentModel.DataAnnotations.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Configuration.dll
System.Console.dll
System.Core.dll
System.Data.Common.dll
System.Data.DataSetExtensions.dll
System.Data.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.DiagnosticSource.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.dll
System.Drawing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Formats.Asn1.dll
System.Formats.Tar.dll
System.Globalization.Calendars.dll
System.Globalization.dll
System.Globalization.Extensions.dll
System.IO.Compression.Brotli.dll
System.IO.Compression.dll
System.IO.Compression.FileSystem.dll
System.IO.Compression.ZipFile.dll
System.IO.dll
System.IO.FileSystem.AccessControl.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.AccessControl.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Memory.dll
System.Net.dll
System.Net.Http.dll
System.Net.Http.Json.dll
System.Net.HttpListener.dll
System.Net.Mail.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Quic.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.ServicePoint.dll
System.Net.Sockets.dll
System.Net.WebClient.dll
System.Net.WebHeaderCollection.dll
System.Net.WebProxy.dll
System.Net.WebSockets.Client.dll
System.Net.WebSockets.dll
System.Numerics.dll
System.Numerics.Vectors.dll
System.ObjectModel.dll
System.Reflection.DispatchProxy.dll
System.Reflection.dll
System.Reflection.Emit.dll
System.Reflection.Emit.ILGeneration.dll
System.Reflection.Emit.Lightweight.dll
System.Reflection.Extensions.dll
System.Reflection.Metadata.dll
System.Reflection.Primitives.dll
System.Reflection.TypeExtensions.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.JavaScript.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Intrinsics.dll
System.Runtime.Loader.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.AccessControl.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Cng.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.OpenSsl.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.dll
System.Security.Principal.dll
System.Security.Principal.Windows.dll
System.Security.SecureString.dll
System.ServiceModel.Web.dll
System.ServiceProcess.dll
System.Text.Encoding.CodePages.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.Encodings.Web.dll
System.Text.Json.dll
System.Text.RegularExpressions.dll
System.Threading.Channels.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.Dataflow.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Extensions.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.Transactions.dll
System.Transactions.Local.dll
System.ValueTuple.dll
System.Web.dll
System.Web.HttpUtility.dll
System.Windows.dll
System.Xml.dll
System.Xml.Linq.dll
System.Xml.ReaderWriter.dll
System.Xml.Serialization.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
WindowsBase.dll
<NUGET>/
commandlineparser/2.8.0/lib/netstandard2.0/CommandLine.dll
dnsclient/1.6.1/lib/net5.0/DnsClient.dll
epplus/5.8.8/lib/net5.0/EPPlus.dll
memorypack.core/1.10.0/lib/net7.0/MemoryPack.Core.dll
microsoft.codeanalysis.common/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll
microsoft.codeanalysis.csharp/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll
microsoft.extensions.configuration.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll
microsoft.extensions.configuration.fileextensions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll
microsoft.extensions.configuration.json/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll
microsoft.extensions.configuration/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.dll
microsoft.extensions.fileproviders.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll
microsoft.extensions.fileproviders.physical/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll
microsoft.extensions.filesystemglobbing/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll
microsoft.extensions.primitives/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll
microsoft.io.recyclablememorystream/1.4.1/lib/netcoreapp2.1/Microsoft.IO.RecyclableMemoryStream.dll
mongodb.bson/2.17.1/lib/netstandard2.1/MongoDB.Bson.dll
mongodb.driver.core/2.17.1/lib/netstandard2.1/MongoDB.Driver.Core.dll
mongodb.driver/2.17.1/lib/netstandard2.1/MongoDB.Driver.dll
mongodb.libmongocrypt/1.5.5/lib/netstandard2.1/MongoDB.Libmongocrypt.dll
nlog/4.7.15/lib/netstandard2.0/NLog.dll
sharpcompress/0.30.1/lib/net5.0/SharpCompress.dll
sharpziplib/1.3.3/lib/netstandard2.1/ICSharpCode.SharpZipLib.dll
system.drawing.common/5.0.0/ref/netcoreapp3.0/System.Drawing.Common.dll
system.security.cryptography.pkcs/5.0.0/ref/netcoreapp3.0/System.Security.Cryptography.Pkcs.dll
[analyzerReferences]
../../Share/
Analyzer/bin/Debug/Share.Analyzer.dll
Share.SourceGenerator/bin/Debug/Share.SourceGenerator.dll
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/analyzers/dotnet/cs/
Microsoft.Interop.ComInterfaceGenerator.dll
Microsoft.Interop.JavaScript.JSImportGenerator.dll
Microsoft.Interop.LibraryImportGenerator.dll
Microsoft.Interop.SourceGeneration.dll
System.Text.Json.SourceGeneration.dll
System.Text.RegularExpressions.Generator.dll
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/
Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll
Microsoft.CodeAnalysis.NetAnalyzers.dll
<NUGET>/
memorypack.generator/1.10.0/analyzers/dotnet/cs/MemoryPack.Generator.dll
microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/
Microsoft.CodeAnalysis.Analyzers.dll
Microsoft.CodeAnalysis.CSharp.Analyzers.dll
[analyzerConfigFiles]
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig
obj/Debug/DotNet.Core.GeneratedMSBuildEditorConfig.editorconfig

View File

@ -0,0 +1,275 @@
version=1
# This file caches language service data to improve the performance of C# Dev Kit.
# It is not intended for manual editing. It can safely be deleted and will be
# regenerated automatically. For more information, see https://aka.ms/lscache
#
# To control where cache files are stored, use the following VS Code setting:
# "dotnet.projectsystem.cacheInProjectFolder": true
[project]
language=C#
primary
lastDtbSucceeded
[properties]
AssemblyName=Hotfix
CommandLineArgsForDesignTimeEvaluation=-langversion:12 -define:DOTNET
CompilerGeneratedFilesOutputPath=
MaxSupportedLangVersion=12.0
ProjectAssetsFile=<PATH>obj/project.assets.json
RootNamespace=ET
RunAnalyzers=
RunAnalyzersDuringLiveAnalysis=
SolutionPath=<PATH>../../ET.sln
TargetFrameworkIdentifier=.NETCoreApp
TargetPath=<PATH>../../Bin/Hotfix.dll
TargetRefPath=<PATH>obj/Debug/ref/Hotfix.dll
TemporaryDependencyNodeTargetIdentifier=net8.0
[commandLineArguments]
/noconfig
/unsafe-
/checked-
/nowarn:0169,0649,3021,8981,CS9193,CS9192,1701,1702
/fullpaths
/nostdlib+
/errorreport:prompt
/warn:8
/define:DOTNET;DEBUG;NET;NET8_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER
/highentropyva+
/debug+
/debug:portable
/filealign:512
/optimize-
/out:obj\Debug\Hotfix.dll
/refout:obj\Debug\refint\Hotfix.dll
/target:library
/warnaserror+
/utf8output
/deterministic+
/langversion:12
/warnaserror+:NU1605,SYSLIB0011
[sourceFiles]
obj/Debug/DotNet.Hotfix.AssemblyInfo.cs
[metadataReferences]
../
Core/obj/Debug/ref/Core.dll
Loader/obj/Debug/ref/Loader.dll
Model/obj/Debug/ref/Model.dll
ThirdParty/obj/Debug/ref/ThirdParty.dll
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/ref/net8.0/
Microsoft.CSharp.dll
Microsoft.VisualBasic.Core.dll
Microsoft.VisualBasic.dll
Microsoft.Win32.Primitives.dll
Microsoft.Win32.Registry.dll
mscorlib.dll
netstandard.dll
System.AppContext.dll
System.Buffers.dll
System.Collections.Concurrent.dll
System.Collections.dll
System.Collections.Immutable.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.Annotations.dll
System.ComponentModel.DataAnnotations.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Configuration.dll
System.Console.dll
System.Core.dll
System.Data.Common.dll
System.Data.DataSetExtensions.dll
System.Data.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.DiagnosticSource.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.dll
System.Drawing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Formats.Asn1.dll
System.Formats.Tar.dll
System.Globalization.Calendars.dll
System.Globalization.dll
System.Globalization.Extensions.dll
System.IO.Compression.Brotli.dll
System.IO.Compression.dll
System.IO.Compression.FileSystem.dll
System.IO.Compression.ZipFile.dll
System.IO.dll
System.IO.FileSystem.AccessControl.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.AccessControl.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Memory.dll
System.Net.dll
System.Net.Http.dll
System.Net.Http.Json.dll
System.Net.HttpListener.dll
System.Net.Mail.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Quic.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.ServicePoint.dll
System.Net.Sockets.dll
System.Net.WebClient.dll
System.Net.WebHeaderCollection.dll
System.Net.WebProxy.dll
System.Net.WebSockets.Client.dll
System.Net.WebSockets.dll
System.Numerics.dll
System.Numerics.Vectors.dll
System.ObjectModel.dll
System.Reflection.DispatchProxy.dll
System.Reflection.dll
System.Reflection.Emit.dll
System.Reflection.Emit.ILGeneration.dll
System.Reflection.Emit.Lightweight.dll
System.Reflection.Extensions.dll
System.Reflection.Metadata.dll
System.Reflection.Primitives.dll
System.Reflection.TypeExtensions.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.JavaScript.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Intrinsics.dll
System.Runtime.Loader.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.AccessControl.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Cng.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.OpenSsl.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.dll
System.Security.Principal.dll
System.Security.Principal.Windows.dll
System.Security.SecureString.dll
System.ServiceModel.Web.dll
System.ServiceProcess.dll
System.Text.Encoding.CodePages.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.Encodings.Web.dll
System.Text.Json.dll
System.Text.RegularExpressions.dll
System.Threading.Channels.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.Dataflow.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Extensions.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.Transactions.dll
System.Transactions.Local.dll
System.ValueTuple.dll
System.Web.dll
System.Web.HttpUtility.dll
System.Windows.dll
System.Xml.dll
System.Xml.Linq.dll
System.Xml.ReaderWriter.dll
System.Xml.Serialization.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
WindowsBase.dll
<NUGET>/
commandlineparser/2.8.0/lib/netstandard2.0/CommandLine.dll
dnsclient/1.6.1/lib/net5.0/DnsClient.dll
epplus/5.8.8/lib/net5.0/EPPlus.dll
memorypack.core/1.10.0/lib/net7.0/MemoryPack.Core.dll
microsoft.codeanalysis.common/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll
microsoft.codeanalysis.csharp/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll
microsoft.extensions.configuration.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll
microsoft.extensions.configuration.fileextensions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll
microsoft.extensions.configuration.json/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll
microsoft.extensions.configuration/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.dll
microsoft.extensions.fileproviders.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll
microsoft.extensions.fileproviders.physical/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll
microsoft.extensions.filesystemglobbing/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll
microsoft.extensions.primitives/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll
microsoft.io.recyclablememorystream/1.4.1/lib/netcoreapp2.1/Microsoft.IO.RecyclableMemoryStream.dll
mongodb.bson/2.17.1/lib/netstandard2.1/MongoDB.Bson.dll
mongodb.driver.core/2.17.1/lib/netstandard2.1/MongoDB.Driver.Core.dll
mongodb.driver/2.17.1/lib/netstandard2.1/MongoDB.Driver.dll
mongodb.libmongocrypt/1.5.5/lib/netstandard2.1/MongoDB.Libmongocrypt.dll
nlog/4.7.15/lib/netstandard2.0/NLog.dll
sharpcompress/0.30.1/lib/net5.0/SharpCompress.dll
sharpziplib/1.3.3/lib/netstandard2.1/ICSharpCode.SharpZipLib.dll
system.drawing.common/5.0.0/ref/netcoreapp3.0/System.Drawing.Common.dll
system.security.cryptography.pkcs/5.0.0/ref/netcoreapp3.0/System.Security.Cryptography.Pkcs.dll
[analyzerReferences]
../../Share/
Analyzer/bin/Debug/Share.Analyzer.dll
Share.SourceGenerator/bin/Debug/Share.SourceGenerator.dll
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/analyzers/dotnet/cs/
Microsoft.Interop.ComInterfaceGenerator.dll
Microsoft.Interop.JavaScript.JSImportGenerator.dll
Microsoft.Interop.LibraryImportGenerator.dll
Microsoft.Interop.SourceGeneration.dll
System.Text.Json.SourceGeneration.dll
System.Text.RegularExpressions.Generator.dll
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/
Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll
Microsoft.CodeAnalysis.NetAnalyzers.dll
<NUGET>/
memorypack.generator/1.10.0/analyzers/dotnet/cs/MemoryPack.Generator.dll
microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/
Microsoft.CodeAnalysis.Analyzers.dll
Microsoft.CodeAnalysis.CSharp.Analyzers.dll
[analyzerConfigFiles]
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig
obj/Debug/DotNet.Hotfix.GeneratedMSBuildEditorConfig.editorconfig

View File

@ -0,0 +1,279 @@
version=1
# This file caches language service data to improve the performance of C# Dev Kit.
# It is not intended for manual editing. It can safely be deleted and will be
# regenerated automatically. For more information, see https://aka.ms/lscache
#
# To control where cache files are stored, use the following VS Code setting:
# "dotnet.projectsystem.cacheInProjectFolder": true
[project]
language=C#
primary
lastDtbSucceeded
[properties]
AssemblyName=Loader
CommandLineArgsForDesignTimeEvaluation=-langversion:12 -define:DOTNET
CompilerGeneratedFilesOutputPath=
MaxSupportedLangVersion=12.0
ProjectAssetsFile=<PATH>obj/project.assets.json
RootNamespace=ET
RunAnalyzers=
RunAnalyzersDuringLiveAnalysis=
SolutionPath=<PATH>../../ET.sln
TargetFrameworkIdentifier=.NETCoreApp
TargetPath=<PATH>../../Bin/Loader.dll
TargetRefPath=<PATH>obj/Debug/ref/Loader.dll
TemporaryDependencyNodeTargetIdentifier=net8.0
[commandLineArguments]
/noconfig
/unsafe+
/checked-
/nowarn:0169,0649,3021,8981,1701,1702
/fullpaths
/nostdlib+
/errorreport:prompt
/warn:8
/define:DOTNET;DEBUG;NET;NET8_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER
/highentropyva+
/debug+
/debug:portable
/filealign:512
/optimize-
/out:obj\Debug\Loader.dll
/refout:obj\Debug\refint\Loader.dll
/target:library
/warnaserror+
/utf8output
/deterministic+
/langversion:12
/warnaserror+:NU1605,SYSLIB0011
[sourceFiles]
CodeLoader.cs
ConfigLoaderInvoker.cs
Init.cs
obj/Debug/
.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
DotNet.Loader.AssemblyInfo.cs
RecastFileReader.cs
[metadataReferences]
../
Core/obj/Debug/ref/Core.dll
ThirdParty/obj/Debug/ref/ThirdParty.dll
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/ref/net8.0/
Microsoft.CSharp.dll
Microsoft.VisualBasic.Core.dll
Microsoft.VisualBasic.dll
Microsoft.Win32.Primitives.dll
Microsoft.Win32.Registry.dll
mscorlib.dll
netstandard.dll
System.AppContext.dll
System.Buffers.dll
System.Collections.Concurrent.dll
System.Collections.dll
System.Collections.Immutable.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.Annotations.dll
System.ComponentModel.DataAnnotations.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Configuration.dll
System.Console.dll
System.Core.dll
System.Data.Common.dll
System.Data.DataSetExtensions.dll
System.Data.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.DiagnosticSource.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.dll
System.Drawing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Formats.Asn1.dll
System.Formats.Tar.dll
System.Globalization.Calendars.dll
System.Globalization.dll
System.Globalization.Extensions.dll
System.IO.Compression.Brotli.dll
System.IO.Compression.dll
System.IO.Compression.FileSystem.dll
System.IO.Compression.ZipFile.dll
System.IO.dll
System.IO.FileSystem.AccessControl.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.AccessControl.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Memory.dll
System.Net.dll
System.Net.Http.dll
System.Net.Http.Json.dll
System.Net.HttpListener.dll
System.Net.Mail.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Quic.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.ServicePoint.dll
System.Net.Sockets.dll
System.Net.WebClient.dll
System.Net.WebHeaderCollection.dll
System.Net.WebProxy.dll
System.Net.WebSockets.Client.dll
System.Net.WebSockets.dll
System.Numerics.dll
System.Numerics.Vectors.dll
System.ObjectModel.dll
System.Reflection.DispatchProxy.dll
System.Reflection.dll
System.Reflection.Emit.dll
System.Reflection.Emit.ILGeneration.dll
System.Reflection.Emit.Lightweight.dll
System.Reflection.Extensions.dll
System.Reflection.Metadata.dll
System.Reflection.Primitives.dll
System.Reflection.TypeExtensions.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.JavaScript.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Intrinsics.dll
System.Runtime.Loader.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.AccessControl.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Cng.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.OpenSsl.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.dll
System.Security.Principal.dll
System.Security.Principal.Windows.dll
System.Security.SecureString.dll
System.ServiceModel.Web.dll
System.ServiceProcess.dll
System.Text.Encoding.CodePages.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.Encodings.Web.dll
System.Text.Json.dll
System.Text.RegularExpressions.dll
System.Threading.Channels.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.Dataflow.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Extensions.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.Transactions.dll
System.Transactions.Local.dll
System.ValueTuple.dll
System.Web.dll
System.Web.HttpUtility.dll
System.Windows.dll
System.Xml.dll
System.Xml.Linq.dll
System.Xml.ReaderWriter.dll
System.Xml.Serialization.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
WindowsBase.dll
<NUGET>/
commandlineparser/2.8.0/lib/netstandard2.0/CommandLine.dll
dnsclient/1.6.1/lib/net5.0/DnsClient.dll
epplus/5.8.8/lib/net5.0/EPPlus.dll
memorypack.core/1.10.0/lib/net7.0/MemoryPack.Core.dll
microsoft.codeanalysis.common/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll
microsoft.codeanalysis.csharp/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll
microsoft.extensions.configuration.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll
microsoft.extensions.configuration.fileextensions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll
microsoft.extensions.configuration.json/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll
microsoft.extensions.configuration/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.dll
microsoft.extensions.fileproviders.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll
microsoft.extensions.fileproviders.physical/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll
microsoft.extensions.filesystemglobbing/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll
microsoft.extensions.primitives/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll
microsoft.io.recyclablememorystream/1.4.1/lib/netcoreapp2.1/Microsoft.IO.RecyclableMemoryStream.dll
mongodb.bson/2.17.1/lib/netstandard2.1/MongoDB.Bson.dll
mongodb.driver.core/2.17.1/lib/netstandard2.1/MongoDB.Driver.Core.dll
mongodb.driver/2.17.1/lib/netstandard2.1/MongoDB.Driver.dll
mongodb.libmongocrypt/1.5.5/lib/netstandard2.1/MongoDB.Libmongocrypt.dll
nlog/4.7.15/lib/netstandard2.0/NLog.dll
sharpcompress/0.30.1/lib/net5.0/SharpCompress.dll
sharpziplib/1.3.3/lib/netstandard2.1/ICSharpCode.SharpZipLib.dll
system.drawing.common/5.0.0/ref/netcoreapp3.0/System.Drawing.Common.dll
system.security.cryptography.pkcs/5.0.0/ref/netcoreapp3.0/System.Security.Cryptography.Pkcs.dll
[analyzerReferences]
../../Share/
Analyzer/bin/Debug/Share.Analyzer.dll
Share.SourceGenerator/bin/Debug/Share.SourceGenerator.dll
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/analyzers/dotnet/cs/
Microsoft.Interop.ComInterfaceGenerator.dll
Microsoft.Interop.JavaScript.JSImportGenerator.dll
Microsoft.Interop.LibraryImportGenerator.dll
Microsoft.Interop.SourceGeneration.dll
System.Text.Json.SourceGeneration.dll
System.Text.RegularExpressions.Generator.dll
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/
Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll
Microsoft.CodeAnalysis.NetAnalyzers.dll
<NUGET>/
memorypack.generator/1.10.0/analyzers/dotnet/cs/MemoryPack.Generator.dll
microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/
Microsoft.CodeAnalysis.Analyzers.dll
Microsoft.CodeAnalysis.CSharp.Analyzers.dll
[analyzerConfigFiles]
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig
obj/Debug/DotNet.Loader.GeneratedMSBuildEditorConfig.editorconfig

View File

@ -0,0 +1,273 @@
version=1
# This file caches language service data to improve the performance of C# Dev Kit.
# It is not intended for manual editing. It can safely be deleted and will be
# regenerated automatically. For more information, see https://aka.ms/lscache
#
# To control where cache files are stored, use the following VS Code setting:
# "dotnet.projectsystem.cacheInProjectFolder": true
[project]
language=C#
primary
lastDtbSucceeded
[properties]
AssemblyName=Model
CommandLineArgsForDesignTimeEvaluation=-langversion:12 -define:DOTNET
CompilerGeneratedFilesOutputPath=
MaxSupportedLangVersion=12.0
ProjectAssetsFile=<PATH>obj/project.assets.json
RootNamespace=ET
RunAnalyzers=
RunAnalyzersDuringLiveAnalysis=
SolutionPath=<PATH>../../ET.sln
TargetFrameworkIdentifier=.NETCoreApp
TargetPath=<PATH>../../Bin/Model.dll
TargetRefPath=<PATH>obj/Debug/ref/Model.dll
TemporaryDependencyNodeTargetIdentifier=net8.0
[commandLineArguments]
/noconfig
/unsafe+
/checked-
/nowarn:0169,0649,3021,8981,CS9193,CS9192,1701,1702
/fullpaths
/nostdlib+
/errorreport:prompt
/warn:8
/define:DOTNET;DEBUG;NET;NET8_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER
/highentropyva+
/debug+
/debug:portable
/filealign:512
/optimize-
/out:obj\Debug\Model.dll
/refout:obj\Debug\refint\Model.dll
/target:library
/warnaserror+
/utf8output
/deterministic+
/langversion:12
/warnaserror+:NU1605,SYSLIB0011
[sourceFiles]
obj/Debug/DotNet.Model.AssemblyInfo.cs
[metadataReferences]
../
Core/obj/Debug/ref/Core.dll
ThirdParty/obj/Debug/ref/ThirdParty.dll
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/ref/net8.0/
Microsoft.CSharp.dll
Microsoft.VisualBasic.Core.dll
Microsoft.VisualBasic.dll
Microsoft.Win32.Primitives.dll
Microsoft.Win32.Registry.dll
mscorlib.dll
netstandard.dll
System.AppContext.dll
System.Buffers.dll
System.Collections.Concurrent.dll
System.Collections.dll
System.Collections.Immutable.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.Annotations.dll
System.ComponentModel.DataAnnotations.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Configuration.dll
System.Console.dll
System.Core.dll
System.Data.Common.dll
System.Data.DataSetExtensions.dll
System.Data.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.DiagnosticSource.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.dll
System.Drawing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Formats.Asn1.dll
System.Formats.Tar.dll
System.Globalization.Calendars.dll
System.Globalization.dll
System.Globalization.Extensions.dll
System.IO.Compression.Brotli.dll
System.IO.Compression.dll
System.IO.Compression.FileSystem.dll
System.IO.Compression.ZipFile.dll
System.IO.dll
System.IO.FileSystem.AccessControl.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.AccessControl.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Memory.dll
System.Net.dll
System.Net.Http.dll
System.Net.Http.Json.dll
System.Net.HttpListener.dll
System.Net.Mail.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Quic.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.ServicePoint.dll
System.Net.Sockets.dll
System.Net.WebClient.dll
System.Net.WebHeaderCollection.dll
System.Net.WebProxy.dll
System.Net.WebSockets.Client.dll
System.Net.WebSockets.dll
System.Numerics.dll
System.Numerics.Vectors.dll
System.ObjectModel.dll
System.Reflection.DispatchProxy.dll
System.Reflection.dll
System.Reflection.Emit.dll
System.Reflection.Emit.ILGeneration.dll
System.Reflection.Emit.Lightweight.dll
System.Reflection.Extensions.dll
System.Reflection.Metadata.dll
System.Reflection.Primitives.dll
System.Reflection.TypeExtensions.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.JavaScript.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Intrinsics.dll
System.Runtime.Loader.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.AccessControl.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Cng.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.OpenSsl.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.dll
System.Security.Principal.dll
System.Security.Principal.Windows.dll
System.Security.SecureString.dll
System.ServiceModel.Web.dll
System.ServiceProcess.dll
System.Text.Encoding.CodePages.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.Encodings.Web.dll
System.Text.Json.dll
System.Text.RegularExpressions.dll
System.Threading.Channels.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.Dataflow.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Extensions.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.Transactions.dll
System.Transactions.Local.dll
System.ValueTuple.dll
System.Web.dll
System.Web.HttpUtility.dll
System.Windows.dll
System.Xml.dll
System.Xml.Linq.dll
System.Xml.ReaderWriter.dll
System.Xml.Serialization.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
WindowsBase.dll
<NUGET>/
commandlineparser/2.8.0/lib/netstandard2.0/CommandLine.dll
dnsclient/1.6.1/lib/net5.0/DnsClient.dll
epplus/5.8.8/lib/net5.0/EPPlus.dll
memorypack.core/1.10.0/lib/net7.0/MemoryPack.Core.dll
microsoft.codeanalysis.common/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll
microsoft.codeanalysis.csharp/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll
microsoft.extensions.configuration.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll
microsoft.extensions.configuration.fileextensions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll
microsoft.extensions.configuration.json/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll
microsoft.extensions.configuration/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.dll
microsoft.extensions.fileproviders.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll
microsoft.extensions.fileproviders.physical/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll
microsoft.extensions.filesystemglobbing/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll
microsoft.extensions.primitives/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll
microsoft.io.recyclablememorystream/1.4.1/lib/netcoreapp2.1/Microsoft.IO.RecyclableMemoryStream.dll
mongodb.bson/2.17.1/lib/netstandard2.1/MongoDB.Bson.dll
mongodb.driver.core/2.17.1/lib/netstandard2.1/MongoDB.Driver.Core.dll
mongodb.driver/2.17.1/lib/netstandard2.1/MongoDB.Driver.dll
mongodb.libmongocrypt/1.5.5/lib/netstandard2.1/MongoDB.Libmongocrypt.dll
nlog/4.7.15/lib/netstandard2.0/NLog.dll
sharpcompress/0.30.1/lib/net5.0/SharpCompress.dll
sharpziplib/1.3.3/lib/netstandard2.1/ICSharpCode.SharpZipLib.dll
system.drawing.common/5.0.0/ref/netcoreapp3.0/System.Drawing.Common.dll
system.security.cryptography.pkcs/5.0.0/ref/netcoreapp3.0/System.Security.Cryptography.Pkcs.dll
[analyzerReferences]
../../Share/
Analyzer/bin/Debug/Share.Analyzer.dll
Share.SourceGenerator/bin/Debug/Share.SourceGenerator.dll
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/analyzers/dotnet/cs/
Microsoft.Interop.ComInterfaceGenerator.dll
Microsoft.Interop.JavaScript.JSImportGenerator.dll
Microsoft.Interop.LibraryImportGenerator.dll
Microsoft.Interop.SourceGeneration.dll
System.Text.Json.SourceGeneration.dll
System.Text.RegularExpressions.Generator.dll
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/
Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll
Microsoft.CodeAnalysis.NetAnalyzers.dll
<NUGET>/
memorypack.generator/1.10.0/analyzers/dotnet/cs/MemoryPack.Generator.dll
microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/
Microsoft.CodeAnalysis.Analyzers.dll
Microsoft.CodeAnalysis.CSharp.Analyzers.dll
[analyzerConfigFiles]
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig
obj/Debug/DotNet.Model.GeneratedMSBuildEditorConfig.editorconfig

View File

@ -0,0 +1,452 @@
version=1
# This file caches language service data to improve the performance of C# Dev Kit.
# It is not intended for manual editing. It can safely be deleted and will be
# regenerated automatically. For more information, see https://aka.ms/lscache
#
# To control where cache files are stored, use the following VS Code setting:
# "dotnet.projectsystem.cacheInProjectFolder": true
[project]
language=C#
primary
lastDtbSucceeded
[properties]
AssemblyName=ThirdParty
CommandLineArgsForDesignTimeEvaluation=-langversion:12 -define:DOTNET;UNITY_DOTSPLAYER
CompilerGeneratedFilesOutputPath=
MaxSupportedLangVersion=12.0
ProjectAssetsFile=<PATH>obj/project.assets.json
RootNamespace=ET
RunAnalyzers=
RunAnalyzersDuringLiveAnalysis=
SolutionPath=<PATH>../../ET.sln
TargetFrameworkIdentifier=.NETCoreApp
TargetPath=<PATH>../../Bin/ThirdParty.dll
TargetRefPath=<PATH>obj/Debug/ref/ThirdParty.dll
TemporaryDependencyNodeTargetIdentifier=net8.0
[commandLineArguments]
/noconfig
/unsafe+
/checked-
/nowarn:0169,0649,3021,8981,NU1903,1701,1702
/fullpaths
/nostdlib+
/errorreport:prompt
/warn:8
/define:DOTNET;UNITY_DOTSPLAYER;DEBUG;NET;NET8_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER
/highentropyva+
/nullable:disable
/debug+
/debug:portable
/filealign:512
/optimize+
/out:obj\Debug\ThirdParty.dll
/refout:obj\Debug\refint\ThirdParty.dll
/target:library
/warnaserror+
/utf8output
/deterministic+
/langversion:12
/warnaserror+:NU1605,SYSLIB0011
[sourceFiles]
../../Unity/Library/PackageCache/com.unity.mathematics@1.2.6/Unity.Mathematics/
bool2.gen.cs
@folderNames=Unity.Mathematics
bool2x2.gen.cs
@folderNames=Unity.Mathematics
bool2x3.gen.cs
@folderNames=Unity.Mathematics
bool2x4.gen.cs
@folderNames=Unity.Mathematics
bool3.gen.cs
@folderNames=Unity.Mathematics
bool3x2.gen.cs
@folderNames=Unity.Mathematics
bool3x3.gen.cs
@folderNames=Unity.Mathematics
bool3x4.gen.cs
@folderNames=Unity.Mathematics
bool4.gen.cs
@folderNames=Unity.Mathematics
bool4x2.gen.cs
@folderNames=Unity.Mathematics
bool4x3.gen.cs
@folderNames=Unity.Mathematics
bool4x4.gen.cs
@folderNames=Unity.Mathematics
double2.gen.cs
@folderNames=Unity.Mathematics
double2x2.gen.cs
@folderNames=Unity.Mathematics
double2x3.gen.cs
@folderNames=Unity.Mathematics
double2x4.gen.cs
@folderNames=Unity.Mathematics
double3.gen.cs
@folderNames=Unity.Mathematics
double3x2.gen.cs
@folderNames=Unity.Mathematics
double3x3.gen.cs
@folderNames=Unity.Mathematics
double3x4.gen.cs
@folderNames=Unity.Mathematics
double4.gen.cs
@folderNames=Unity.Mathematics
double4x2.gen.cs
@folderNames=Unity.Mathematics
double4x3.gen.cs
@folderNames=Unity.Mathematics
double4x4.gen.cs
@folderNames=Unity.Mathematics
float2.gen.cs
@folderNames=Unity.Mathematics
float2x2.gen.cs
@folderNames=Unity.Mathematics
float2x3.gen.cs
@folderNames=Unity.Mathematics
float2x4.gen.cs
@folderNames=Unity.Mathematics
float3.gen.cs
@folderNames=Unity.Mathematics
float3x2.gen.cs
@folderNames=Unity.Mathematics
float3x3.gen.cs
@folderNames=Unity.Mathematics
float3x4.gen.cs
@folderNames=Unity.Mathematics
float4.gen.cs
@folderNames=Unity.Mathematics
float4x2.gen.cs
@folderNames=Unity.Mathematics
float4x3.gen.cs
@folderNames=Unity.Mathematics
float4x4.gen.cs
@folderNames=Unity.Mathematics
Geometry/
MinMaxAABB.cs
@folderNames=Unity.Mathematics,Geometry
Plane.cs
@folderNames=Unity.Mathematics,Geometry
half.cs
@folderNames=Unity.Mathematics
half2.gen.cs
@folderNames=Unity.Mathematics
half3.gen.cs
@folderNames=Unity.Mathematics
half4.gen.cs
@folderNames=Unity.Mathematics
Il2CppEagerStaticClassConstructionAttribute.cs
@folderNames=Unity.Mathematics
int2.gen.cs
@folderNames=Unity.Mathematics
int2x2.gen.cs
@folderNames=Unity.Mathematics
int2x3.gen.cs
@folderNames=Unity.Mathematics
int2x4.gen.cs
@folderNames=Unity.Mathematics
int3.gen.cs
@folderNames=Unity.Mathematics
int3x2.gen.cs
@folderNames=Unity.Mathematics
int3x3.gen.cs
@folderNames=Unity.Mathematics
int3x4.gen.cs
@folderNames=Unity.Mathematics
int4.gen.cs
@folderNames=Unity.Mathematics
int4x2.gen.cs
@folderNames=Unity.Mathematics
int4x3.gen.cs
@folderNames=Unity.Mathematics
int4x4.gen.cs
@folderNames=Unity.Mathematics
math.cs
@folderNames=Unity.Mathematics
math_unity_conversion.cs
@folderNames=Unity.Mathematics
matrix.cs
@folderNames=Unity.Mathematics
matrix.gen.cs
@folderNames=Unity.Mathematics
Noise/
cellular2D.cs
@folderNames=Unity.Mathematics,Noise
cellular2x2.cs
@folderNames=Unity.Mathematics,Noise
cellular2x2x2.cs
@folderNames=Unity.Mathematics,Noise
cellular3D.cs
@folderNames=Unity.Mathematics,Noise
classicnoise2D.cs
@folderNames=Unity.Mathematics,Noise
classicnoise3D.cs
@folderNames=Unity.Mathematics,Noise
classicnoise4D.cs
@folderNames=Unity.Mathematics,Noise
common.cs
@folderNames=Unity.Mathematics,Noise
noise2D.cs
@folderNames=Unity.Mathematics,Noise
noise3D.cs
@folderNames=Unity.Mathematics,Noise
noise3Dgrad.cs
@folderNames=Unity.Mathematics,Noise
noise4D.cs
@folderNames=Unity.Mathematics,Noise
psrdnoise2D.cs
@folderNames=Unity.Mathematics,Noise
Properties/AssemblyInfo.cs
@folderNames=Unity.Mathematics,Properties
PropertyAttributes.cs
@folderNames=Unity.Mathematics
quaternion.cs
@folderNames=Unity.Mathematics
random.cs
@folderNames=Unity.Mathematics
rigid_transform.cs
@folderNames=Unity.Mathematics
uint2.gen.cs
@folderNames=Unity.Mathematics
uint2x2.gen.cs
@folderNames=Unity.Mathematics
uint2x3.gen.cs
@folderNames=Unity.Mathematics
uint2x4.gen.cs
@folderNames=Unity.Mathematics
uint3.gen.cs
@folderNames=Unity.Mathematics
uint3x2.gen.cs
@folderNames=Unity.Mathematics
uint3x3.gen.cs
@folderNames=Unity.Mathematics
uint3x4.gen.cs
@folderNames=Unity.Mathematics
uint4.gen.cs
@folderNames=Unity.Mathematics
uint4x2.gen.cs
@folderNames=Unity.Mathematics
uint4x3.gen.cs
@folderNames=Unity.Mathematics
uint4x4.gen.cs
@folderNames=Unity.Mathematics
obj/Debug/
.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
DotNet.ThirdParty.AssemblyInfo.cs
Unity.Mathematics/PropertyAttribute.cs
[metadataReferences]
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/ref/net8.0/
Microsoft.CSharp.dll
Microsoft.VisualBasic.Core.dll
Microsoft.VisualBasic.dll
Microsoft.Win32.Primitives.dll
Microsoft.Win32.Registry.dll
mscorlib.dll
netstandard.dll
System.AppContext.dll
System.Buffers.dll
System.Collections.Concurrent.dll
System.Collections.dll
System.Collections.Immutable.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.Annotations.dll
System.ComponentModel.DataAnnotations.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Configuration.dll
System.Console.dll
System.Core.dll
System.Data.Common.dll
System.Data.DataSetExtensions.dll
System.Data.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.DiagnosticSource.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.dll
System.Drawing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Formats.Asn1.dll
System.Formats.Tar.dll
System.Globalization.Calendars.dll
System.Globalization.dll
System.Globalization.Extensions.dll
System.IO.Compression.Brotli.dll
System.IO.Compression.dll
System.IO.Compression.FileSystem.dll
System.IO.Compression.ZipFile.dll
System.IO.dll
System.IO.FileSystem.AccessControl.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.AccessControl.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Memory.dll
System.Net.dll
System.Net.Http.dll
System.Net.Http.Json.dll
System.Net.HttpListener.dll
System.Net.Mail.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Quic.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.ServicePoint.dll
System.Net.Sockets.dll
System.Net.WebClient.dll
System.Net.WebHeaderCollection.dll
System.Net.WebProxy.dll
System.Net.WebSockets.Client.dll
System.Net.WebSockets.dll
System.Numerics.dll
System.Numerics.Vectors.dll
System.ObjectModel.dll
System.Reflection.DispatchProxy.dll
System.Reflection.dll
System.Reflection.Emit.dll
System.Reflection.Emit.ILGeneration.dll
System.Reflection.Emit.Lightweight.dll
System.Reflection.Extensions.dll
System.Reflection.Metadata.dll
System.Reflection.Primitives.dll
System.Reflection.TypeExtensions.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.JavaScript.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Intrinsics.dll
System.Runtime.Loader.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.AccessControl.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Cng.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.OpenSsl.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.dll
System.Security.Principal.dll
System.Security.Principal.Windows.dll
System.Security.SecureString.dll
System.ServiceModel.Web.dll
System.ServiceProcess.dll
System.Text.Encoding.CodePages.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.Encodings.Web.dll
System.Text.Json.dll
System.Text.RegularExpressions.dll
System.Threading.Channels.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.Dataflow.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Extensions.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.Transactions.dll
System.Transactions.Local.dll
System.ValueTuple.dll
System.Web.dll
System.Web.HttpUtility.dll
System.Windows.dll
System.Xml.dll
System.Xml.Linq.dll
System.Xml.ReaderWriter.dll
System.Xml.Serialization.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
WindowsBase.dll
<NUGET>/
commandlineparser/2.8.0/lib/netstandard2.0/CommandLine.dll
dnsclient/1.6.1/lib/net5.0/DnsClient.dll
epplus/5.8.8/lib/net5.0/EPPlus.dll
memorypack.core/1.10.0/lib/net7.0/MemoryPack.Core.dll
microsoft.codeanalysis.common/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll
microsoft.codeanalysis.csharp/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll
microsoft.extensions.configuration.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll
microsoft.extensions.configuration.fileextensions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll
microsoft.extensions.configuration.json/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll
microsoft.extensions.configuration/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.dll
microsoft.extensions.fileproviders.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll
microsoft.extensions.fileproviders.physical/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll
microsoft.extensions.filesystemglobbing/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll
microsoft.extensions.primitives/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll
microsoft.io.recyclablememorystream/1.4.1/lib/netcoreapp2.1/Microsoft.IO.RecyclableMemoryStream.dll
mongodb.bson/2.17.1/lib/netstandard2.1/MongoDB.Bson.dll
mongodb.driver.core/2.17.1/lib/netstandard2.1/MongoDB.Driver.Core.dll
mongodb.driver/2.17.1/lib/netstandard2.1/MongoDB.Driver.dll
mongodb.libmongocrypt/1.5.5/lib/netstandard2.1/MongoDB.Libmongocrypt.dll
nlog/4.7.15/lib/netstandard2.0/NLog.dll
sharpcompress/0.30.1/lib/net5.0/SharpCompress.dll
sharpziplib/1.3.3/lib/netstandard2.1/ICSharpCode.SharpZipLib.dll
system.drawing.common/5.0.0/ref/netcoreapp3.0/System.Drawing.Common.dll
system.security.cryptography.pkcs/5.0.0/ref/netcoreapp3.0/System.Security.Cryptography.Pkcs.dll
[analyzerReferences]
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/analyzers/dotnet/cs/
Microsoft.Interop.ComInterfaceGenerator.dll
Microsoft.Interop.JavaScript.JSImportGenerator.dll
Microsoft.Interop.LibraryImportGenerator.dll
Microsoft.Interop.SourceGeneration.dll
System.Text.Json.SourceGeneration.dll
System.Text.RegularExpressions.Generator.dll
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/
Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll
Microsoft.CodeAnalysis.NetAnalyzers.dll
<NUGET>/
memorypack.generator/1.10.0/analyzers/dotnet/cs/MemoryPack.Generator.dll
microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/
Microsoft.CodeAnalysis.Analyzers.dll
Microsoft.CodeAnalysis.CSharp.Analyzers.dll
[analyzerConfigFiles]
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig
obj/Debug/DotNet.ThirdParty.GeneratedMSBuildEditorConfig.editorconfig

View File

@ -0,0 +1,282 @@
version=1
# This file caches language service data to improve the performance of C# Dev Kit.
# It is not intended for manual editing. It can safely be deleted and will be
# regenerated automatically. For more information, see https://aka.ms/lscache
#
# To control where cache files are stored, use the following VS Code setting:
# "dotnet.projectsystem.cacheInProjectFolder": true
[project]
language=C#
primary
lastDtbSucceeded
[properties]
AssemblyName=ExcelExport
CommandLineArgsForDesignTimeEvaluation=-langversion:12.0 -define:TRACE
CompilerGeneratedFilesOutputPath=
MaxSupportedLangVersion=12.0
ProjectAssetsFile=<PATH>obj/project.assets.json
RootNamespace=ExcelExport
RunAnalyzers=
RunAnalyzersDuringLiveAnalysis=
SolutionPath=<PATH>../ET.sln
TargetFrameworkIdentifier=.NETCoreApp
TargetPath=<PATH>bin/Debug/net8.0/ExcelExport.dll
TargetRefPath=<PATH>obj/Debug/net8.0/ref/ExcelExport.dll
TemporaryDependencyNodeTargetIdentifier=net8.0
[commandLineArguments]
/noconfig
/unsafe-
/checked-
/nowarn:1701,1702,1701,1702
/fullpaths
/nostdlib+
/errorreport:prompt
/warn:8
/define:TRACE;DEBUG;NET;NET8_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER
/highentropyva+
/nullable:enable
/debug+
/debug:portable
/filealign:512
/optimize-
/out:obj\Debug\net8.0\ExcelExport.dll
/refout:obj\Debug\net8.0\refint\ExcelExport.dll
/target:exe
/warnaserror-
/utf8output
/deterministic+
/langversion:12.0
/warnaserror+:NU1605,SYSLIB0011
[sourceFiles]
ExcelConfigBase.cs
Export.cs
GenerateCS/
AIConfig.cs
GeoDesc.cs
Moment.cs
GenerateCSPartial/
AIConfig.cs
GeoDesc.cs
Moment.cs
obj/Debug/net8.0/
.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
ExcelExport.AssemblyInfo.cs
ExcelExport.GlobalUsings.g.cs
Program.cs
[metadataReferences]
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/ref/net8.0/
Microsoft.CSharp.dll
Microsoft.VisualBasic.Core.dll
Microsoft.VisualBasic.dll
Microsoft.Win32.Primitives.dll
Microsoft.Win32.Registry.dll
mscorlib.dll
netstandard.dll
System.AppContext.dll
System.Buffers.dll
System.Collections.Concurrent.dll
System.Collections.dll
System.Collections.Immutable.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.Annotations.dll
System.ComponentModel.DataAnnotations.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Configuration.dll
System.Console.dll
System.Core.dll
System.Data.Common.dll
System.Data.DataSetExtensions.dll
System.Data.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.DiagnosticSource.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.dll
System.Drawing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Formats.Asn1.dll
System.Formats.Tar.dll
System.Globalization.Calendars.dll
System.Globalization.dll
System.Globalization.Extensions.dll
System.IO.Compression.Brotli.dll
System.IO.Compression.dll
System.IO.Compression.FileSystem.dll
System.IO.Compression.ZipFile.dll
System.IO.dll
System.IO.FileSystem.AccessControl.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.AccessControl.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Memory.dll
System.Net.dll
System.Net.Http.dll
System.Net.Http.Json.dll
System.Net.HttpListener.dll
System.Net.Mail.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Quic.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.ServicePoint.dll
System.Net.Sockets.dll
System.Net.WebClient.dll
System.Net.WebHeaderCollection.dll
System.Net.WebProxy.dll
System.Net.WebSockets.Client.dll
System.Net.WebSockets.dll
System.Numerics.dll
System.Numerics.Vectors.dll
System.ObjectModel.dll
System.Reflection.DispatchProxy.dll
System.Reflection.dll
System.Reflection.Emit.dll
System.Reflection.Emit.ILGeneration.dll
System.Reflection.Emit.Lightweight.dll
System.Reflection.Extensions.dll
System.Reflection.Metadata.dll
System.Reflection.Primitives.dll
System.Reflection.TypeExtensions.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.JavaScript.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Intrinsics.dll
System.Runtime.Loader.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.AccessControl.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Cng.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.OpenSsl.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.dll
System.Security.Principal.dll
System.Security.Principal.Windows.dll
System.Security.SecureString.dll
System.ServiceModel.Web.dll
System.ServiceProcess.dll
System.Text.Encoding.CodePages.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.Encodings.Web.dll
System.Text.Json.dll
System.Text.RegularExpressions.dll
System.Threading.Channels.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.Dataflow.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Extensions.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.Transactions.dll
System.Transactions.Local.dll
System.ValueTuple.dll
System.Web.dll
System.Web.HttpUtility.dll
System.Windows.dll
System.Xml.dll
System.Xml.Linq.dll
System.Xml.ReaderWriter.dll
System.Xml.Serialization.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
WindowsBase.dll
<NUGET>/
commandlineparser/2.8.0/lib/netstandard2.0/CommandLine.dll
dnsclient/1.6.1/lib/net5.0/DnsClient.dll
epplus/5.8.8/lib/net5.0/EPPlus.dll
memorypack.core/1.10.0/lib/net7.0/MemoryPack.Core.dll
microsoft.codeanalysis.common/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll
microsoft.codeanalysis.csharp/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll
microsoft.extensions.configuration.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll
microsoft.extensions.configuration.fileextensions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll
microsoft.extensions.configuration.json/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll
microsoft.extensions.configuration/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.dll
microsoft.extensions.fileproviders.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll
microsoft.extensions.fileproviders.physical/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll
microsoft.extensions.filesystemglobbing/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll
microsoft.extensions.primitives/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll
microsoft.io.recyclablememorystream/1.4.1/lib/netcoreapp2.1/Microsoft.IO.RecyclableMemoryStream.dll
mongodb.bson/2.17.1/lib/netstandard2.1/MongoDB.Bson.dll
mongodb.driver.core/2.17.1/lib/netstandard2.1/MongoDB.Driver.Core.dll
mongodb.driver/2.17.1/lib/netstandard2.1/MongoDB.Driver.dll
mongodb.libmongocrypt/1.5.5/lib/netstandard2.1/MongoDB.Libmongocrypt.dll
nlog/4.7.15/lib/netstandard2.0/NLog.dll
sharpcompress/0.30.1/lib/net5.0/SharpCompress.dll
sharpziplib/1.3.3/lib/netstandard2.1/ICSharpCode.SharpZipLib.dll
system.drawing.common/5.0.0/ref/netcoreapp3.0/System.Drawing.Common.dll
system.security.cryptography.pkcs/5.0.0/ref/netcoreapp3.0/System.Security.Cryptography.Pkcs.dll
[analyzerReferences]
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/analyzers/dotnet/cs/
Microsoft.Interop.ComInterfaceGenerator.dll
Microsoft.Interop.JavaScript.JSImportGenerator.dll
Microsoft.Interop.LibraryImportGenerator.dll
Microsoft.Interop.SourceGeneration.dll
System.Text.Json.SourceGeneration.dll
System.Text.RegularExpressions.Generator.dll
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/
Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll
Microsoft.CodeAnalysis.NetAnalyzers.dll
<NUGET>/
memorypack.generator/1.10.0/analyzers/dotnet/cs/MemoryPack.Generator.dll
microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/
Microsoft.CodeAnalysis.Analyzers.dll
Microsoft.CodeAnalysis.CSharp.Analyzers.dll
[analyzerConfigFiles]
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig
obj/Debug/net8.0/ExcelExport.GeneratedMSBuildEditorConfig.editorconfig

View File

@ -0,0 +1,233 @@
version=1
# This file caches language service data to improve the performance of C# Dev Kit.
# It is not intended for manual editing. It can safely be deleted and will be
# regenerated automatically. For more information, see https://aka.ms/lscache
#
# To control where cache files are stored, use the following VS Code setting:
# "dotnet.projectsystem.cacheInProjectFolder": true
[project]
language=C#
primary
lastDtbSucceeded
[properties]
AssemblyName=Share.Analyzer
CommandLineArgsForDesignTimeEvaluation=-langversion:12 -define:TRACE
CompilerGeneratedFilesOutputPath=
MaxSupportedLangVersion=7.3
ProjectAssetsFile=<PATH>obj/project.assets.json
RootNamespace=Share.Analyzer
RunAnalyzers=
RunAnalyzersDuringLiveAnalysis=
SolutionPath=<PATH>../../ET.sln
TargetFrameworkIdentifier=.NETStandard
TargetPath=<PATH>bin/Debug/Share.Analyzer.dll
TargetRefPath=
TemporaryDependencyNodeTargetIdentifier=netstandard2.0
[commandLineArguments]
/noconfig
/unsafe-
/checked-
/nowarn:1701,1702,RS2008,1701,1702
/fullpaths
/nostdlib+
/errorreport:prompt
/define:TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0;NETSTANDARD1_0_OR_GREATER;NETSTANDARD1_1_OR_GREATER;NETSTANDARD1_2_OR_GREATER;NETSTANDARD1_3_OR_GREATER;NETSTANDARD1_4_OR_GREATER;NETSTANDARD1_5_OR_GREATER;NETSTANDARD1_6_OR_GREATER;NETSTANDARD2_0_OR_GREATER
/highentropyva+
/nullable:enable
/debug+
/debug:portable
/filealign:512
/optimize-
/out:obj\Debug\Share.Analyzer.dll
/target:library
/warnaserror+
/utf8output
/deterministic+
/langversion:12
/warnaserror+:NU1605
[sourceFiles]
../../Unity/Assets/Scripts/Core/Helper/StringHashHelper.cs
Analyzer/
AddChildTypeAnalyzer.cs
AsyncMethodReturnTypeAnalyzer.cs
ClassDeclarationInHotfixAnalyzer.cs
ClientClassInServerAnalyzer.cs
DiableNewAnalyzer.cs
DisableNormalClassDeclaratonInModelAssemblyAnalyzer.cs
EntityClassDeclarationAnalyzer.cs
EntityComponentAnalyzer.cs
EntityFiledAccessAnalyzer.cs
EntityHashCodeAnalyzer.cs
EntityMemberDeclarationAnalyzer.cs
EntityMethodDeclarationAnalyzer.cs
EntitySystemAnalyzer.cs
ETCancellationTokenAnalyzer.cs
ETTaskAnalyzer.cs
HotfixProjectFieldDeclarationAnalyzer.cs
NetMessageAnalyzer.cs
StaticClassCircularDependencyAnalyzer.cs
StaticFieldDeclarationAnalyzer.cs
UniqueIdAnalyzer.cs
AnalyzerGlobalSetting.cs
CodeFixer/
EntityFiledAccessCodeFixProvider.cs
EntitySystemCodeFixProvider.cs
Config/
AnalyzeAssembly.cs
Definition.cs
DiagnosticCategories.cs
DiagnosticIds.cs
DiagnosticRules.cs
Extension/AnalyzerHelper.cs
obj/Debug/
.NETStandard,Version=v2.0.AssemblyAttributes.cs
Share.Analyzer.AssemblyInfo.cs
[metadataReferences]
<NUGET>/
microsoft.bcl.asyncinterfaces/5.0.0/lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll
microsoft.codeanalysis.common/4.0.1/lib/netstandard2.0/Microsoft.CodeAnalysis.dll
microsoft.codeanalysis.csharp.workspaces/4.0.1/lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll
microsoft.codeanalysis.csharp/4.0.1/lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.dll
microsoft.codeanalysis.workspaces.common/4.0.1/lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.dll
netstandard.library/2.0.3/build/netstandard2.0/ref/
Microsoft.Win32.Primitives.dll
mscorlib.dll
netstandard.dll
System.AppContext.dll
System.Collections.Concurrent.dll
System.Collections.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.Composition.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Console.dll
System.Core.dll
System.Data.Common.dll
System.Data.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.dll
System.Drawing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Globalization.Calendars.dll
System.Globalization.dll
System.Globalization.Extensions.dll
System.IO.Compression.dll
System.IO.Compression.FileSystem.dll
System.IO.Compression.ZipFile.dll
System.IO.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Net.dll
System.Net.Http.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.Sockets.dll
System.Net.WebHeaderCollection.dll
System.Net.WebSockets.Client.dll
System.Net.WebSockets.dll
System.Numerics.dll
System.ObjectModel.dll
System.Reflection.dll
System.Reflection.Extensions.dll
System.Reflection.Primitives.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.Principal.dll
System.Security.SecureString.dll
System.ServiceModel.Web.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.RegularExpressions.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.Transactions.dll
System.ValueTuple.dll
System.Web.dll
System.Windows.dll
System.Xml.dll
System.Xml.Linq.dll
System.Xml.ReaderWriter.dll
System.Xml.Serialization.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
system.buffers/4.5.1/ref/netstandard2.0/System.Buffers.dll
system.collections.immutable/5.0.0/lib/netstandard2.0/System.Collections.Immutable.dll
system.composition.attributedmodel/1.0.31/lib/netstandard1.0/System.Composition.AttributedModel.dll
system.composition.convention/1.0.31/lib/netstandard1.0/System.Composition.Convention.dll
system.composition.hosting/1.0.31/lib/netstandard1.0/System.Composition.Hosting.dll
system.composition.runtime/1.0.31/lib/netstandard1.0/System.Composition.Runtime.dll
system.composition.typedparts/1.0.31/lib/netstandard1.0/System.Composition.TypedParts.dll
system.io.pipelines/5.0.1/lib/netstandard2.0/System.IO.Pipelines.dll
system.memory/4.5.4/lib/netstandard2.0/System.Memory.dll
system.numerics.vectors/4.4.0/ref/netstandard2.0/System.Numerics.Vectors.dll
system.reflection.metadata/5.0.0/lib/netstandard2.0/System.Reflection.Metadata.dll
system.runtime.compilerservices.unsafe/5.0.0/ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll
system.text.encoding.codepages/4.5.1/lib/netstandard2.0/System.Text.Encoding.CodePages.dll
system.threading.tasks.extensions/4.5.4/lib/netstandard2.0/System.Threading.Tasks.Extensions.dll
[analyzerReferences]
<NUGET>/microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/
Microsoft.CodeAnalysis.Analyzers.dll
Microsoft.CodeAnalysis.CSharp.Analyzers.dll
[analyzerConfigFiles]
obj/Debug/Share.Analyzer.GeneratedMSBuildEditorConfig.editorconfig

View File

@ -0,0 +1,208 @@
version=1
# This file caches language service data to improve the performance of C# Dev Kit.
# It is not intended for manual editing. It can safely be deleted and will be
# regenerated automatically. For more information, see https://aka.ms/lscache
#
# To control where cache files are stored, use the following VS Code setting:
# "dotnet.projectsystem.cacheInProjectFolder": true
[project]
language=C#
primary
lastDtbSucceeded
[properties]
AssemblyName=Share.SourceGenerator
CommandLineArgsForDesignTimeEvaluation=-langversion:12 -define:TRACE
CompilerGeneratedFilesOutputPath=
MaxSupportedLangVersion=7.3
ProjectAssetsFile=<PATH>obj/project.assets.json
RootNamespace=Share.SourceGenerator
RunAnalyzers=
RunAnalyzersDuringLiveAnalysis=
SolutionPath=<PATH>../../ET.sln
TargetFrameworkIdentifier=.NETStandard
TargetPath=<PATH>bin/Debug/Share.SourceGenerator.dll
TargetRefPath=
TemporaryDependencyNodeTargetIdentifier=netstandard2.0
[commandLineArguments]
/noconfig
/unsafe-
/checked-
/nowarn:1701,1702,RS2008,1701,1702
/fullpaths
/nostdlib+
/errorreport:prompt
/define:TRACE;DEBUG;NETSTANDARD;NETSTANDARD2_0;NETSTANDARD1_0_OR_GREATER;NETSTANDARD1_1_OR_GREATER;NETSTANDARD1_2_OR_GREATER;NETSTANDARD1_3_OR_GREATER;NETSTANDARD1_4_OR_GREATER;NETSTANDARD1_5_OR_GREATER;NETSTANDARD1_6_OR_GREATER;NETSTANDARD2_0_OR_GREATER
/highentropyva+
/nullable:enable
/debug+
/debug:portable
/filealign:512
/optimize-
/out:obj\Debug\Share.SourceGenerator.dll
/target:library
/warnaserror-
/utf8output
/deterministic+
/langversion:12
/warnaserror+:NU1605
[sourceFiles]
../
../Unity/Assets/Scripts/Core/Helper/StringHashHelper.cs
Analyzer/Config/
AnalyzeAssembly.cs
Definition.cs
Analyzer/Extension/AnalyzerHelper.cs
@folderNames=Extension
Config/
DiagnosticCategories.cs
DiagnosticIds.cs
DiagnosticRules.cs
Generator/
ETEntitySerializeFormatterGenerator.cs
ETGetComponentGenerator.cs
ETSystemGenerator/
AttributeTemplate.cs
ETSystemGenerator.cs
obj/Debug/
.NETStandard,Version=v2.0.AssemblyAttributes.cs
Share.SourceGenerator.AssemblyInfo.cs
[metadataReferences]
<NUGET>/
microsoft.codeanalysis.common/3.9.0/lib/netstandard2.0/Microsoft.CodeAnalysis.dll
microsoft.codeanalysis.csharp/3.9.0/lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.dll
netstandard.library/2.0.3/build/netstandard2.0/ref/
Microsoft.Win32.Primitives.dll
mscorlib.dll
netstandard.dll
System.AppContext.dll
System.Collections.Concurrent.dll
System.Collections.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.Composition.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Console.dll
System.Core.dll
System.Data.Common.dll
System.Data.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.dll
System.Drawing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Globalization.Calendars.dll
System.Globalization.dll
System.Globalization.Extensions.dll
System.IO.Compression.dll
System.IO.Compression.FileSystem.dll
System.IO.Compression.ZipFile.dll
System.IO.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Net.dll
System.Net.Http.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.Sockets.dll
System.Net.WebHeaderCollection.dll
System.Net.WebSockets.Client.dll
System.Net.WebSockets.dll
System.Numerics.dll
System.ObjectModel.dll
System.Reflection.dll
System.Reflection.Extensions.dll
System.Reflection.Primitives.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.Principal.dll
System.Security.SecureString.dll
System.ServiceModel.Web.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.RegularExpressions.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.Transactions.dll
System.ValueTuple.dll
System.Web.dll
System.Windows.dll
System.Xml.dll
System.Xml.Linq.dll
System.Xml.ReaderWriter.dll
System.Xml.Serialization.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
system.buffers/4.5.1/ref/netstandard2.0/System.Buffers.dll
system.collections.immutable/5.0.0/lib/netstandard2.0/System.Collections.Immutable.dll
system.memory/4.5.4/lib/netstandard2.0/System.Memory.dll
system.numerics.vectors/4.4.0/ref/netstandard2.0/System.Numerics.Vectors.dll
system.reflection.metadata/5.0.0/lib/netstandard2.0/System.Reflection.Metadata.dll
system.runtime.compilerservices.unsafe/5.0.0/ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll
system.text.encoding.codepages/4.5.1/lib/netstandard2.0/System.Text.Encoding.CodePages.dll
system.threading.tasks.extensions/4.5.4/lib/netstandard2.0/System.Threading.Tasks.Extensions.dll
[analyzerReferences]
<NUGET>/microsoft.codeanalysis.analyzers/3.3.3/analyzers/dotnet/cs/
Microsoft.CodeAnalysis.Analyzers.dll
Microsoft.CodeAnalysis.CSharp.Analyzers.dll
[analyzerConfigFiles]
obj/Debug/Share.SourceGenerator.GeneratedMSBuildEditorConfig.editorconfig

View File

@ -0,0 +1,278 @@
version=1
# This file caches language service data to improve the performance of C# Dev Kit.
# It is not intended for manual editing. It can safely be deleted and will be
# regenerated automatically. For more information, see https://aka.ms/lscache
#
# To control where cache files are stored, use the following VS Code setting:
# "dotnet.projectsystem.cacheInProjectFolder": true
[project]
language=C#
primary
lastDtbSucceeded
[properties]
AssemblyName=Tool
CommandLineArgsForDesignTimeEvaluation=-langversion:12 -define:DOTNET
CompilerGeneratedFilesOutputPath=
MaxSupportedLangVersion=12.0
ProjectAssetsFile=<PATH>obj/project.assets.json
RootNamespace=ET
RunAnalyzers=
RunAnalyzersDuringLiveAnalysis=
SolutionPath=<PATH>../../ET.sln
TargetFrameworkIdentifier=.NETCoreApp
TargetPath=<PATH>../../Bin/Tool.dll
TargetRefPath=<PATH>obj/Debug/ref/Tool.dll
TemporaryDependencyNodeTargetIdentifier=net8.0
[commandLineArguments]
/noconfig
/unsafe+
/checked-
/nowarn:1701,1702,1701,1702
/fullpaths
/nostdlib+
/errorreport:prompt
/warn:8
/define:DOTNET;DEBUG;NET;NET8_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER
/highentropyva+
/nullable:disable
/debug+
/debug:portable
/filealign:512
/optimize-
/out:obj\Debug\Tool.dll
/refout:obj\Debug\refint\Tool.dll
/target:exe
/warnaserror+
/utf8output
/deterministic+
/langversion:12
/warnaserror+:NU1605,SYSLIB0011
[sourceFiles]
../../Unity/Assets/Scripts/Core/Network/OpcodeRangeDefine.cs
@folderNames=Module,Message
ExcelExporter/ExcelExporter.cs
Init.cs
obj/Debug/
.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
Share.Tool.AssemblyInfo.cs
Proto2CS/Proto2CS.cs
[metadataReferences]
../../DotNet/
Core/obj/Debug/ref/Core.dll
ThirdParty/obj/Debug/ref/ThirdParty.dll
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/ref/net8.0/
Microsoft.CSharp.dll
Microsoft.VisualBasic.Core.dll
Microsoft.VisualBasic.dll
Microsoft.Win32.Primitives.dll
Microsoft.Win32.Registry.dll
mscorlib.dll
netstandard.dll
System.AppContext.dll
System.Buffers.dll
System.Collections.Concurrent.dll
System.Collections.dll
System.Collections.Immutable.dll
System.Collections.NonGeneric.dll
System.Collections.Specialized.dll
System.ComponentModel.Annotations.dll
System.ComponentModel.DataAnnotations.dll
System.ComponentModel.dll
System.ComponentModel.EventBasedAsync.dll
System.ComponentModel.Primitives.dll
System.ComponentModel.TypeConverter.dll
System.Configuration.dll
System.Console.dll
System.Core.dll
System.Data.Common.dll
System.Data.DataSetExtensions.dll
System.Data.dll
System.Diagnostics.Contracts.dll
System.Diagnostics.Debug.dll
System.Diagnostics.DiagnosticSource.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.Diagnostics.StackTrace.dll
System.Diagnostics.TextWriterTraceListener.dll
System.Diagnostics.Tools.dll
System.Diagnostics.TraceSource.dll
System.Diagnostics.Tracing.dll
System.dll
System.Drawing.dll
System.Drawing.Primitives.dll
System.Dynamic.Runtime.dll
System.Formats.Asn1.dll
System.Formats.Tar.dll
System.Globalization.Calendars.dll
System.Globalization.dll
System.Globalization.Extensions.dll
System.IO.Compression.Brotli.dll
System.IO.Compression.dll
System.IO.Compression.FileSystem.dll
System.IO.Compression.ZipFile.dll
System.IO.dll
System.IO.FileSystem.AccessControl.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.FileSystem.Watcher.dll
System.IO.IsolatedStorage.dll
System.IO.MemoryMappedFiles.dll
System.IO.Pipes.AccessControl.dll
System.IO.Pipes.dll
System.IO.UnmanagedMemoryStream.dll
System.Linq.dll
System.Linq.Expressions.dll
System.Linq.Parallel.dll
System.Linq.Queryable.dll
System.Memory.dll
System.Net.dll
System.Net.Http.dll
System.Net.Http.Json.dll
System.Net.HttpListener.dll
System.Net.Mail.dll
System.Net.NameResolution.dll
System.Net.NetworkInformation.dll
System.Net.Ping.dll
System.Net.Primitives.dll
System.Net.Quic.dll
System.Net.Requests.dll
System.Net.Security.dll
System.Net.ServicePoint.dll
System.Net.Sockets.dll
System.Net.WebClient.dll
System.Net.WebHeaderCollection.dll
System.Net.WebProxy.dll
System.Net.WebSockets.Client.dll
System.Net.WebSockets.dll
System.Numerics.dll
System.Numerics.Vectors.dll
System.ObjectModel.dll
System.Reflection.DispatchProxy.dll
System.Reflection.dll
System.Reflection.Emit.dll
System.Reflection.Emit.ILGeneration.dll
System.Reflection.Emit.Lightweight.dll
System.Reflection.Extensions.dll
System.Reflection.Metadata.dll
System.Reflection.Primitives.dll
System.Reflection.TypeExtensions.dll
System.Resources.Reader.dll
System.Resources.ResourceManager.dll
System.Resources.Writer.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Runtime.CompilerServices.VisualC.dll
System.Runtime.dll
System.Runtime.Extensions.dll
System.Runtime.Handles.dll
System.Runtime.InteropServices.dll
System.Runtime.InteropServices.JavaScript.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Runtime.Intrinsics.dll
System.Runtime.Loader.dll
System.Runtime.Numerics.dll
System.Runtime.Serialization.dll
System.Runtime.Serialization.Formatters.dll
System.Runtime.Serialization.Json.dll
System.Runtime.Serialization.Primitives.dll
System.Runtime.Serialization.Xml.dll
System.Security.AccessControl.dll
System.Security.Claims.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Cng.dll
System.Security.Cryptography.Csp.dll
System.Security.Cryptography.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.OpenSsl.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.dll
System.Security.Principal.dll
System.Security.Principal.Windows.dll
System.Security.SecureString.dll
System.ServiceModel.Web.dll
System.ServiceProcess.dll
System.Text.Encoding.CodePages.dll
System.Text.Encoding.dll
System.Text.Encoding.Extensions.dll
System.Text.Encodings.Web.dll
System.Text.Json.dll
System.Text.RegularExpressions.dll
System.Threading.Channels.dll
System.Threading.dll
System.Threading.Overlapped.dll
System.Threading.Tasks.Dataflow.dll
System.Threading.Tasks.dll
System.Threading.Tasks.Extensions.dll
System.Threading.Tasks.Parallel.dll
System.Threading.Thread.dll
System.Threading.ThreadPool.dll
System.Threading.Timer.dll
System.Transactions.dll
System.Transactions.Local.dll
System.ValueTuple.dll
System.Web.dll
System.Web.HttpUtility.dll
System.Windows.dll
System.Xml.dll
System.Xml.Linq.dll
System.Xml.ReaderWriter.dll
System.Xml.Serialization.dll
System.Xml.XDocument.dll
System.Xml.XmlDocument.dll
System.Xml.XmlSerializer.dll
System.Xml.XPath.dll
System.Xml.XPath.XDocument.dll
WindowsBase.dll
<NUGET>/
commandlineparser/2.8.0/lib/netstandard2.0/CommandLine.dll
dnsclient/1.6.1/lib/net5.0/DnsClient.dll
epplus/5.8.8/lib/net5.0/EPPlus.dll
memorypack.core/1.10.0/lib/net7.0/MemoryPack.Core.dll
microsoft.codeanalysis.common/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll
microsoft.codeanalysis.csharp/4.0.1/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll
microsoft.extensions.configuration.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll
microsoft.extensions.configuration.fileextensions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll
microsoft.extensions.configuration.json/5.0.0/lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll
microsoft.extensions.configuration/5.0.0/lib/netstandard2.0/Microsoft.Extensions.Configuration.dll
microsoft.extensions.fileproviders.abstractions/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll
microsoft.extensions.fileproviders.physical/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll
microsoft.extensions.filesystemglobbing/5.0.0/lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll
microsoft.extensions.primitives/5.0.0/lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll
microsoft.io.recyclablememorystream/1.4.1/lib/netcoreapp2.1/Microsoft.IO.RecyclableMemoryStream.dll
mongodb.bson/2.17.1/lib/netstandard2.1/MongoDB.Bson.dll
mongodb.driver.core/2.17.1/lib/netstandard2.1/MongoDB.Driver.Core.dll
mongodb.driver/2.17.1/lib/netstandard2.1/MongoDB.Driver.dll
mongodb.libmongocrypt/1.5.5/lib/netstandard2.1/MongoDB.Libmongocrypt.dll
nlog/4.7.15/lib/netstandard2.0/NLog.dll
sharpcompress/0.30.1/lib/net5.0/SharpCompress.dll
sharpziplib/1.3.3/lib/netstandard2.1/ICSharpCode.SharpZipLib.dll
system.drawing.common/5.0.0/ref/netcoreapp3.0/System.Drawing.Common.dll
system.security.cryptography.pkcs/5.0.0/ref/netcoreapp3.0/System.Security.Cryptography.Pkcs.dll
[analyzerReferences]
<DOTNET>/packs/Microsoft.NETCore.App.Ref/8.0.18/analyzers/dotnet/cs/
Microsoft.Interop.ComInterfaceGenerator.dll
Microsoft.Interop.JavaScript.JSImportGenerator.dll
Microsoft.Interop.LibraryImportGenerator.dll
Microsoft.Interop.SourceGeneration.dll
System.Text.Json.SourceGeneration.dll
System.Text.RegularExpressions.Generator.dll
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/
Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll
Microsoft.CodeAnalysis.NetAnalyzers.dll
<NUGET>/
memorypack.generator/1.10.0/analyzers/dotnet/cs/MemoryPack.Generator.dll
microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/
Microsoft.CodeAnalysis.Analyzers.dll
Microsoft.CodeAnalysis.CSharp.Analyzers.dll
[analyzerConfigFiles]
<DOTNET>/sdk/8.0.412/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig
obj/Debug/Share.Tool.GeneratedMSBuildEditorConfig.editorconfig

View File

@ -0,0 +1,72 @@
param(
[Parameter(ValueFromPipeline = $true)]
[string[]]$Text,
[string]$InputPath,
[string]$OutputPath,
[string]$MappingPath,
[switch]$Replace,
[Alias('IncludeOneCharNames')]
[switch]$AggressiveShortNames
)
Set-StrictMode -Version 2.0
$ScriptDirectory = if ([string]::IsNullOrWhiteSpace($PSScriptRoot)) {
Split-Path -Parent $MyInvocation.MyCommand.Path
}
else {
$PSScriptRoot
}
if ([string]::IsNullOrWhiteSpace($MappingPath)) {
$MappingPath = Join-Path $ScriptDirectory 'OPSFile.txt'
}
$pipelineText = @($input)
$sourceText = $null
if ($Text -and $Text.Count -gt 0) {
$sourceText = ($Text -join [Environment]::NewLine)
}
elseif ($pipelineText.Count -gt 0) {
$sourceText = ($pipelineText -join [Environment]::NewLine)
}
elseif ([string]::IsNullOrWhiteSpace($InputPath)) {
try {
$clipText = Get-Clipboard -Raw -ErrorAction Stop
if (-not [string]::IsNullOrWhiteSpace($clipText)) {
$sourceText = $clipText
}
}
catch {
$sourceText = $null
}
}
$decoderPath = Join-Path $ScriptDirectory 'ObfuscatedExceptionDecoder.ps1'
$mode = if ($Replace) { 'Replace' } else { 'Annotate' }
$decoderParams = @{
NoGui = $true
MappingPath = $MappingPath
Mode = $mode
}
if ($AggressiveShortNames) {
$decoderParams['AggressiveShortNames'] = $true
}
if (-not [string]::IsNullOrWhiteSpace($InputPath)) {
$decoderParams['InputPath'] = $InputPath
}
else {
if ([string]::IsNullOrWhiteSpace($sourceText)) {
throw 'No input text. Pass -Text, pipe text, use -InputPath, or put the log in clipboard.'
}
$decoderParams['Text'] = $sourceText
}
if (-not [string]::IsNullOrWhiteSpace($OutputPath)) {
$decoderParams['OutputPath'] = $OutputPath
}
& $decoderPath @decoderParams

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
param(
[string]$MappingPath = (Join-Path $PSScriptRoot 'OPSFile.txt'),
[string]$MappingPath,
[string]$Text,
[string]$InputPath,
[string]$OutputPath,
@ -12,6 +12,19 @@ param(
Set-StrictMode -Version 2.0
$ScriptDirectory = if ([string]::IsNullOrWhiteSpace($PSScriptRoot)) {
Split-Path -Parent $MyInvocation.MyCommand.Path
}
else {
$PSScriptRoot
}
if ([string]::IsNullOrWhiteSpace($MappingPath)) {
$MappingPath = Join-Path $ScriptDirectory 'OPSFile.txt'
}
$script:OpsDecoderUiText = $null
function New-ObjectList {
return New-Object 'System.Collections.Generic.List[object]'
}
@ -274,7 +287,7 @@ function Get-SectionPriority {
function Format-Candidate {
param([object]$Candidate)
return "$($Candidate.Section): $($Candidate.Display)"
return "$(Get-SectionDisplayName $Candidate.Section): $($Candidate.Display)"
}
function Resolve-Candidates {
@ -501,15 +514,15 @@ function New-SummaryText {
$lines = New-Object 'System.Collections.Generic.List[string]'
[void]$lines.Add('')
[void]$lines.Add('---- OPS decode summary ----')
[void]$lines.Add("Mapping: $($Index.MappingPath)")
[void]$lines.Add((Get-UiText 'SummaryTitle'))
[void]$lines.Add("$(Get-UiText 'Mapping'): $($Index.MappingPath)")
if (-not [string]::IsNullOrWhiteSpace($Index.Version)) {
[void]$lines.Add("Version: $($Index.Version)")
[void]$lines.Add("$(Get-UiText 'VersionLabel'): $($Index.Version)")
}
[void]$lines.Add("Hits: $ReplacementCount, unique names: $($Hits.Count)")
[void]$lines.Add("$(Get-UiText 'HitsLabel'): $ReplacementCount, $(Get-UiText 'UniqueLabel'): $($Hits.Count)")
if ($Hits.Count -eq 0) {
[void]$lines.Add('No obfuscated names were matched.')
[void]$lines.Add((Get-UiText 'NoMatches'))
return ($lines -join [Environment]::NewLine)
}
@ -518,10 +531,10 @@ function New-SummaryText {
$hit = $Hits[$name]
$candidates = @($hit.Candidates)
$ordered = @(Resolve-Candidates -Candidates $candidates -PreviousChar '' -NextChar '')
$primary = if ($ordered.Count -gt 0) { Format-Candidate $ordered[0] } else { '(unknown)' }
$primary = if ($ordered.Count -gt 0) { Format-Candidate $ordered[0] } else { "($(Get-UiText 'Unknown'))" }
$suffix = ''
if ($ordered.Count -gt 1) {
$suffix = "; ambiguous candidates: $($ordered.Count)"
$suffix = "$(Get-UiText 'MoreInline')$($ordered.Count - 1)$(Get-UiText 'MoreInlineSuffix')"
}
[void]$lines.Add("$name x$($hit.Count) -> $primary$suffix")
@ -530,7 +543,7 @@ function New-SummaryText {
[void]$lines.Add(" - $(Format-Candidate $candidate)")
}
if ($ordered.Count -gt 6) {
[void]$lines.Add(" - ... $($ordered.Count - 6) more")
[void]$lines.Add("$(Get-UiText 'MoreLinePrefix')$($ordered.Count - 6)$(Get-UiText 'MoreLineSuffix')")
}
}
}
@ -662,6 +675,78 @@ function Convert-ObfuscatedText {
}
}
function Get-UiText {
param([string]$Key)
if ($null -eq $script:OpsDecoderUiText) {
$script:OpsDecoderUiText = New-StringHashtable
$script:OpsDecoderUiText['Mapping'] = '5pig5bCE'
$script:OpsDecoderUiText['Browse'] = '6YCJ5oup'
$script:OpsDecoderUiText['Reload'] = '6YeN6L29'
$script:OpsDecoderUiText['Annotate'] = '5L+d55WZ5re35reG5ZCNICsg5rOo6YeK'
$script:OpsDecoderUiText['Replace'] = '55u05o6l5pu/5o2i5oiQ5Y6f5ZCN'
$script:OpsDecoderUiText['AggressiveShort'] = '5r+A6L+b55+t5ZCN6L2s5o2i'
$script:OpsDecoderUiText['Convert'] = '6L2s5o2i'
$script:OpsDecoderUiText['InputGroup'] = '6L6T5YWl77ya5ZCO5Y+w5byC5bi45raI5oGvIC8g5aCG5qCI'
$script:OpsDecoderUiText['OutputGroup'] = '6L6T5Ye677ya5Y+N5re35reG57uT5p6c'
$script:OpsDecoderUiText['Paste'] = '5LuO5Ymq6LS05p2/57KY6LS0'
$script:OpsDecoderUiText['Copy'] = '5aSN5Yi257uT5p6c'
$script:OpsDecoderUiText['Save'] = '5L+d5a2Y57uT5p6c'
$script:OpsDecoderUiText['Clear'] = '5riF56m6'
$script:OpsDecoderUiText['Sample'] = '5aGr5YWl56S65L6L'
$script:OpsDecoderUiText['Ready'] = '5bCx57uq'
$script:OpsDecoderUiText['Loading'] = '5q2j5Zyo6K+75Y+W5pig5bCELi4u'
$script:OpsDecoderUiText['LoadedPrefix'] = '5pig5bCE5bey5Yqg6L2977ya'
$script:OpsDecoderUiText['LoadFailedPrefix'] = '5pig5bCE5Yqg6L295aSx6LSl77ya'
$script:OpsDecoderUiText['DonePrefix'] = '6L2s5o2i5a6M5oiQ77ya5ZG95LitIA=='
$script:OpsDecoderUiText['DoneMiddle'] = 'IOWkhO+8jOWUr+S4gOWQjeensCA='
$script:OpsDecoderUiText['DoneSuffix'] = 'IOS4qg=='
$script:OpsDecoderUiText['ConvertFailedPrefix'] = '6L2s5o2i5aSx6LSl77ya'
$script:OpsDecoderUiText['SelectMapping'] = '6YCJ5oupIE9QU0ZpbGUudHh0'
$script:OpsDecoderUiText['Copied'] = '57uT5p6c5bey5aSN5Yi25Yiw5Ymq6LS05p2/'
$script:OpsDecoderUiText['SaveDecoded'] = '5L+d5a2Y5Y+N5re35reG57uT5p6c'
$script:OpsDecoderUiText['SavedPrefix'] = '57uT5p6c5bey5L+d5a2Y77ya'
$script:OpsDecoderUiText['Cleared'] = '5bey5riF56m6'
$script:OpsDecoderUiText['SampleText'] = '5byC5bi45raI5oGvIGZ1OiDmiL/kuLvlub/mkq3lpLHotKUK5byC5bi45raI5oGvIGJsdTog5Y+R6YCB57uZ5oi/5Li75aSx6LSlCmF0IGduLmJsdShSdW50aW1lRGF0YS5NYXBEYXRhLCBSdW50aW1lRGF0YS5QbGF5ZXJEYXRhKQ=='
$script:OpsDecoderUiText['SummaryTitle'] = 'LS0tLSBPUFMg5Y+N5re35reG5pGY6KaBIC0tLS0='
$script:OpsDecoderUiText['VersionLabel'] = '54mI5pys'
$script:OpsDecoderUiText['HitsLabel'] = '5ZG95Lit'
$script:OpsDecoderUiText['UniqueLabel'] = '5ZSv5LiA5ZCN56ew'
$script:OpsDecoderUiText['NoMatches'] = '5rKh5pyJ5Yy56YWN5Yiw5re35reG5ZCN56ew44CC'
$script:OpsDecoderUiText['Unknown'] = '5pyq55+l'
$script:OpsDecoderUiText['MoreInline'] = '77yb5Y+m5pyJIA=='
$script:OpsDecoderUiText['MoreInlineSuffix'] = 'IOS4quWAmemAiQ=='
$script:OpsDecoderUiText['MoreLinePrefix'] = 'ICAtIC4uLiDlj6bmnIkg'
$script:OpsDecoderUiText['MoreLineSuffix'] = 'IOS4qg=='
$script:OpsDecoderUiText['SectionNamespace'] = '5ZG95ZCN56m66Ze0'
$script:OpsDecoderUiText['SectionType'] = '57G75Z6L'
$script:OpsDecoderUiText['SectionMethod'] = '5pa55rOV'
$script:OpsDecoderUiText['SectionField'] = '5a2X5q61'
$script:OpsDecoderUiText['SectionProperty'] = '5bGe5oCn'
$script:OpsDecoderUiText['SectionEvent'] = '5LqL5Lu2'
}
if (-not $script:OpsDecoderUiText.ContainsKey($Key)) {
return $Key
}
return [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String([string]$script:OpsDecoderUiText[$Key]))
}
function Get-SectionDisplayName {
param([string]$Section)
switch ($Section) {
'Namespace' { return Get-UiText 'SectionNamespace' }
'Type' { return Get-UiText 'SectionType' }
'Method' { return Get-UiText 'SectionMethod' }
'Field' { return Get-UiText 'SectionField' }
'Property' { return Get-UiText 'SectionProperty' }
'Event' { return Get-UiText 'SectionEvent' }
default { return $Section }
}
}
function Show-DecoderGui {
param([string]$InitialMappingPath)
@ -703,7 +788,7 @@ function Show-DecoderGui {
$main.Controls.Add($topPanel, 0, 0)
$mappingLabel = New-Object System.Windows.Forms.Label
$mappingLabel.Text = 'Mapping'
$mappingLabel.Text = Get-UiText 'Mapping'
$mappingLabel.TextAlign = 'MiddleRight'
$mappingLabel.Dock = 'Fill'
$topPanel.Controls.Add($mappingLabel, 0, 0)
@ -715,31 +800,31 @@ function Show-DecoderGui {
$topPanel.Controls.Add($mappingTextBox, 1, 0)
$browseButton = New-Object System.Windows.Forms.Button
$browseButton.Text = 'Browse'
$browseButton.Text = Get-UiText 'Browse'
$browseButton.Dock = 'Fill'
$topPanel.Controls.Add($browseButton, 2, 0)
$reloadButton = New-Object System.Windows.Forms.Button
$reloadButton.Text = 'Reload'
$reloadButton.Text = Get-UiText 'Reload'
$reloadButton.Dock = 'Fill'
$topPanel.Controls.Add($reloadButton, 3, 0)
$modeBox = New-Object System.Windows.Forms.ComboBox
$modeBox.DropDownStyle = 'DropDownList'
[void]$modeBox.Items.Add('Annotate')
[void]$modeBox.Items.Add('Replace')
[void]$modeBox.Items.Add((Get-UiText 'Annotate'))
[void]$modeBox.Items.Add((Get-UiText 'Replace'))
$modeBox.SelectedIndex = 0
$modeBox.Dock = 'Fill'
$topPanel.Controls.Add($modeBox, 4, 0)
$oneCharCheckBox = New-Object System.Windows.Forms.CheckBox
$oneCharCheckBox.Text = 'Aggressive short names'
$oneCharCheckBox.Text = Get-UiText 'AggressiveShort'
$oneCharCheckBox.Checked = $false
$oneCharCheckBox.Dock = 'Fill'
$topPanel.Controls.Add($oneCharCheckBox, 5, 0)
$convertButtonTop = New-Object System.Windows.Forms.Button
$convertButtonTop.Text = 'Convert'
$convertButtonTop.Text = Get-UiText 'Convert'
$convertButtonTop.Dock = 'Fill'
$topPanel.Controls.Add($convertButtonTop, 6, 0)
@ -750,7 +835,7 @@ function Show-DecoderGui {
$main.Controls.Add($split, 0, 1)
$inputGroup = New-Object System.Windows.Forms.GroupBox
$inputGroup.Text = 'Input: exception message / stack trace'
$inputGroup.Text = Get-UiText 'InputGroup'
$inputGroup.Dock = 'Fill'
$split.Panel1.Controls.Add($inputGroup)
@ -765,7 +850,7 @@ function Show-DecoderGui {
$inputGroup.Controls.Add($inputTextBox)
$outputGroup = New-Object System.Windows.Forms.GroupBox
$outputGroup.Text = 'Output: decoded result'
$outputGroup.Text = Get-UiText 'OutputGroup'
$outputGroup.Dock = 'Fill'
$split.Panel2.Controls.Add($outputGroup)
@ -787,37 +872,37 @@ function Show-DecoderGui {
$main.Controls.Add($buttonPanel, 0, 2)
$pasteButton = New-Object System.Windows.Forms.Button
$pasteButton.Text = 'Paste'
$pasteButton.Text = Get-UiText 'Paste'
$pasteButton.Width = 118
$buttonPanel.Controls.Add($pasteButton)
$convertButton = New-Object System.Windows.Forms.Button
$convertButton.Text = 'Convert'
$convertButton.Text = Get-UiText 'Convert'
$convertButton.Width = 86
$buttonPanel.Controls.Add($convertButton)
$copyButton = New-Object System.Windows.Forms.Button
$copyButton.Text = 'Copy'
$copyButton.Text = Get-UiText 'Copy'
$copyButton.Width = 92
$buttonPanel.Controls.Add($copyButton)
$saveButton = New-Object System.Windows.Forms.Button
$saveButton.Text = 'Save'
$saveButton.Text = Get-UiText 'Save'
$saveButton.Width = 92
$buttonPanel.Controls.Add($saveButton)
$clearButton = New-Object System.Windows.Forms.Button
$clearButton.Text = 'Clear'
$clearButton.Text = Get-UiText 'Clear'
$clearButton.Width = 74
$buttonPanel.Controls.Add($clearButton)
$sampleButton = New-Object System.Windows.Forms.Button
$sampleButton.Text = 'Sample'
$sampleButton.Text = Get-UiText 'Sample'
$sampleButton.Width = 92
$buttonPanel.Controls.Add($sampleButton)
$statusLabel = New-Object System.Windows.Forms.Label
$statusLabel.Text = 'Ready'
$statusLabel.Text = Get-UiText 'Ready'
$statusLabel.Dock = 'Fill'
$statusLabel.TextAlign = 'MiddleLeft'
$statusLabel.Padding = New-Object System.Windows.Forms.Padding(8, 0, 8, 0)
@ -830,15 +915,15 @@ function Show-DecoderGui {
$loadMapping = {
try {
$form.Cursor = [System.Windows.Forms.Cursors]::WaitCursor
$statusLabel.Text = 'Loading mapping...'
$statusLabel.Text = Get-UiText 'Loading'
$form.Refresh()
$state.Index = New-DecoderIndex -Path $mappingTextBox.Text
$counts = $state.Index.SectionCounts
$statusLabel.Text = "Mapping loaded: Type $($counts.Type), Method $($counts.Method), Field $($counts.Field), Property $($counts.Property), Event $($counts.Event)"
$statusLabel.Text = "$(Get-UiText 'LoadedPrefix')Type $($counts.Type), Method $($counts.Method), Field $($counts.Field), Property $($counts.Property), Event $($counts.Event)"
}
catch {
$state.Index = $null
$statusLabel.Text = "Failed to load mapping: $($_.Exception.Message)"
$statusLabel.Text = "$(Get-UiText 'LoadFailedPrefix')$($_.Exception.Message)"
[System.Windows.Forms.MessageBox]::Show($form, $_.Exception.Message, 'OPS Exception Decoder', 'OK', 'Error') | Out-Null
}
finally {
@ -859,10 +944,10 @@ function Show-DecoderGui {
$selectedMode = if ($modeBox.SelectedIndex -eq 1) { 'Replace' } else { 'Annotate' }
$result = Convert-ObfuscatedText -SourceText $inputTextBox.Text -Index $state.Index -Mode $selectedMode -IncludeOneCharNames:$oneCharCheckBox.Checked -AppendSummary
$outputTextBox.Text = $result.FullText
$statusLabel.Text = "Done: $($result.ReplacementCount) hits, $($result.UniqueHitCount) unique names"
$statusLabel.Text = "$(Get-UiText 'DonePrefix')$($result.ReplacementCount)$(Get-UiText 'DoneMiddle')$($result.UniqueHitCount)$(Get-UiText 'DoneSuffix')"
}
catch {
$statusLabel.Text = "Convert failed: $($_.Exception.Message)"
$statusLabel.Text = "$(Get-UiText 'ConvertFailedPrefix')$($_.Exception.Message)"
[System.Windows.Forms.MessageBox]::Show($form, $_.Exception.Message, 'OPS Exception Decoder', 'OK', 'Error') | Out-Null
}
finally {
@ -872,7 +957,7 @@ function Show-DecoderGui {
$browseButton.Add_Click({
$dialog = New-Object System.Windows.Forms.OpenFileDialog
$dialog.Title = 'Select OPSFile.txt'
$dialog.Title = Get-UiText 'SelectMapping'
$dialog.Filter = 'OPS mapping (*.txt;*.json)|*.txt;*.json|All files (*.*)|*.*'
if (Test-Path -LiteralPath $mappingTextBox.Text) {
$dialog.InitialDirectory = Split-Path -Parent (Resolve-Path -LiteralPath $mappingTextBox.Text).Path
@ -897,29 +982,29 @@ function Show-DecoderGui {
$copyButton.Add_Click({
if (-not [string]::IsNullOrEmpty($outputTextBox.Text)) {
[System.Windows.Forms.Clipboard]::SetText($outputTextBox.Text)
$statusLabel.Text = 'Copied to clipboard'
$statusLabel.Text = Get-UiText 'Copied'
}
})
$saveButton.Add_Click({
$dialog = New-Object System.Windows.Forms.SaveFileDialog
$dialog.Title = 'Save decoded result'
$dialog.Title = Get-UiText 'SaveDecoded'
$dialog.Filter = 'Text file (*.txt)|*.txt|All files (*.*)|*.*'
$dialog.FileName = 'decoded_exception.txt'
if ($dialog.ShowDialog($form) -eq 'OK') {
[System.IO.File]::WriteAllText($dialog.FileName, $outputTextBox.Text, [System.Text.Encoding]::UTF8)
$statusLabel.Text = "Saved: $($dialog.FileName)"
$statusLabel.Text = "$(Get-UiText 'SavedPrefix')$($dialog.FileName)"
}
})
$clearButton.Add_Click({
$inputTextBox.Clear()
$outputTextBox.Clear()
$statusLabel.Text = 'Cleared'
$statusLabel.Text = Get-UiText 'Cleared'
})
$sampleButton.Add_Click({
$inputTextBox.Text = "error fu: host broadcast failed" + [Environment]::NewLine + "error blu: send to host failed" + [Environment]::NewLine + "at gn.blu(RuntimeData.MapData, RuntimeData.PlayerData)"
$inputTextBox.Text = (Get-UiText 'SampleText')
})
$form.Add_Shown({ & $loadMapping })

View File

@ -23,6 +23,16 @@ blu [Method: Logic.PlayerLogic.StartNextTurn(RuntimeData.MapData,RuntimeData.Pla
## 命令行
推荐给 Codex/命令行排查用的快捷入口:
```powershell
pwsh -NoProfile -ExecutionPolicy Bypass -File Tools\DecodeOnlineError.ps1 -Text "异常消息 fu: 房主广播失败"
```
中文日志建议用 `-Text``-InputPath`,可以避开不同终端之间的管道编码问题。
原始工具入口:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass -File Tools\ObfuscatedExceptionDecoder.ps1 -NoGui -Text "异常消息 fu: 房主广播失败"
```

View File

@ -152,6 +152,9 @@ namespace RuntimeData
// 随机数种子 开始游戏时由房主进行初始化,整局游戏不可变
public int RandomSeed;
// 同步随机源的消费次数,用于 ForceUpdate/重连后恢复随机游标
public int RandomUseCount;
[MemoryPackIgnore]
private System.Random _random;
private static readonly ArrayBufferWriter<byte> _bufferWriter = new ArrayBufferWriter<byte>(64 * 1024);
@ -171,6 +174,7 @@ namespace RuntimeData
Actions = new List<ActionNetData>();
// 生成确定性种子(由房主生成并广播)
RandomSeed = System.Environment.TickCount;
RandomUseCount = 0;
GameStartTime = 0;
PlayerStartTime = 0;
}
@ -181,6 +185,7 @@ namespace RuntimeData
Mode = copyData.Mode;
CurPlayerId = copyData.CurPlayerId;
RandomSeed = copyData.RandomSeed;
RandomUseCount = copyData.RandomUseCount;
Players = new Dictionary<ulong, uint>();
Actions = new List<ActionNetData>();
}
@ -191,6 +196,8 @@ namespace RuntimeData
Mode = copyData.Mode;
CurPlayerId = copyData.CurPlayerId;
RandomSeed = copyData.RandomSeed;
RandomUseCount = copyData.RandomUseCount;
_random = null;
Players = new Dictionary<ulong, uint>();
Actions = new List<ActionNetData>();
}
@ -198,11 +205,72 @@ namespace RuntimeData
// 只有 Action 的逻辑可以使用这个 Random, 因为要保证计数一致
public System.Random GetRandom(MapData map)
{
if (map != Main.MapData) return new System.Random(RandomSeed);
if (_random == null) _random = new System.Random(RandomSeed);
if (map != Main.MapData) return CreateRandom(RandomUseCount, null);
if (_random == null) _random = CreateRandom(RandomUseCount, () => RandomUseCount++);
return _random;
}
private System.Random CreateRandom(int useCount, System.Action onUse)
{
var random = new CountingRandom(RandomSeed, onUse);
random.Advance(useCount);
return random;
}
private sealed class CountingRandom : System.Random
{
private readonly System.Action _onUse;
private bool _advancing;
public CountingRandom(int seed, System.Action onUse) : base(seed)
{
_onUse = onUse;
}
public void Advance(int count)
{
if (count <= 0) return;
_advancing = true;
for (var i = 0; i < count; i++) base.Next();
_advancing = false;
}
private void CountUse()
{
if (!_advancing) _onUse?.Invoke();
}
public override int Next()
{
CountUse();
return base.Next();
}
public override int Next(int maxValue)
{
CountUse();
return base.Next(maxValue);
}
public override int Next(int minValue, int maxValue)
{
CountUse();
return base.Next(minValue, maxValue);
}
public override double NextDouble()
{
CountUse();
return base.NextDouble();
}
public override void NextBytes(byte[] buffer)
{
CountUse();
base.NextBytes(buffer);
}
}
public bool RefreshPlayerNet(MapData mapData)
{
if (Mode != NetMode.Multi) return true;
@ -327,6 +395,7 @@ namespace RuntimeData
// 使用序列化比较各个组件
MapData.CompareComponent(Mode, net.Mode, "Mode", differences);
MapData.CompareComponent(CurPlayerId, net.CurPlayerId, "CurPlayerId", differences);
MapData.CompareComponent(RandomUseCount, net.RandomUseCount, "RandomUseCount", differences);
MapData.CompareComponent(Players, net.Players, "Players", differences);
MapData.CompareComponent(Actions, net.Actions, "Actions", differences);
@ -344,6 +413,8 @@ namespace RuntimeData
Actions.Clear();
// 生成确定性种子(由房主生成并广播)
RandomSeed = System.Environment.TickCount;
RandomUseCount = 0;
_random = null;
GameStartTime = 0;
PlayerStartTime = 0;
}

View File

@ -107,16 +107,16 @@ namespace TH1_Logic.Steam
if (!LobbyManager.Instance.Lobby.IsLobbyOwner()) return;
if (message.ActionData == null) return;
// if (message.ActionData.MapHash != Main.MapData.Net.MapHash)
// {
// LogSystem.LogError($"OnReceivedActionConfirm MapHash不一致");
// return;
// }
if (message.ActionData.Version != Main.MapData.Net.GetActionVersion())
{
LogSystem.LogError($"OnReceivedActionConfirm Version 不一致");
return;
}
if (NetData.GetMapDataHash(Main.MapData) != message.ActionData.MapHash)
{
LogSystem.LogError($"OnReceivedActionConfirm MapHash 不一致,拒绝执行");
return;
}
message.ActionData.Param.MapData = Main.MapData;
message.ActionData.Param.RefreshParams();
@ -148,12 +148,6 @@ namespace TH1_Logic.Steam
}
if (LobbyManager.Instance.Lobby.IsLobbyOwner()) return;
if (message.ActionData == null) return;
// if (message.ActionData.MapHash != Main.MapData.Net.MapHash)
// {
// LogSystem.LogError($"OnReceivedActionConfirm MapHash不一致");
// return;
// }
if (Main.MapData == null) return;
// 这里感觉可以不用了,游戏内心跳包会校验这种情况,先放着
if (message.ActionData.Version > Main.MapData.Net.GetActionVersion())
@ -165,7 +159,9 @@ namespace TH1_Logic.Steam
if (NetData.GetMapDataHash(Main.MapData) != message.ActionData.MapHash)
{
Main.MapData.FindDifferences(message.Map);
LogSystem.LogError($"OnReceivedActionExcute MapHash 不一致,拒绝执行");
if (message.Map != null) Main.MapData.FindDifferences(message.Map);
return;
}
message.ActionData.Param.MapData = Main.MapData;