bug修复

This commit is contained in:
kawagiri 2026-05-21 13:22:05 +08:00
parent 0c64411e1f
commit c6b76d4a03
12 changed files with 5050 additions and 2769 deletions

View File

@ -1,5 +1,5 @@
{
"nextId": 221,
"nextId": 223,
"bugs": [
{
"id": 2,
@ -2180,6 +2180,26 @@
"module": "",
"createdAt": 1779302412986,
"updatedAt": 1779302412986
},
{
"id": 221,
"title": "勇仪击杀妹红火焰",
"description": "",
"status": "open",
"priority": "medium",
"module": "",
"createdAt": 1779334800767,
"updatedAt": 1779334800767
},
{
"id": 222,
"title": "觉沉默自己人",
"description": "",
"status": "open",
"priority": "medium",
"module": "",
"createdAt": 1779336165687,
"updatedAt": 1779336165687
}
]
}

View File

@ -1,5 +1,5 @@
{
"nextId": 22,
"nextId": 24,
"todos": [
{
"id": 2,
@ -123,6 +123,18 @@
"title": "新增数字美术包放到群里",
"done": false,
"createdAt": 1779262524577
},
{
"id": 22,
"title": "改各个视频的定价",
"done": false,
"createdAt": 1779337084908
},
{
"id": 23,
"title": "准备 / 房主AI接管 / 房主自动更换 / 聊天文字 / 组队 / 限时 /",
"done": false,
"createdAt": 1779338200399
}
]
}

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1157744,10 +1157744,19 @@ MonoBehaviour:
Icon:
- ID: 19973
ZH: "\u5F53\u524D\u56DE\u5408\u65E0\u6CD5\u79FB\u52A8\uFF0C\u4E0B\u4E00\u56DE\u5408\u5F00\u59CB\u65F6\u5C06\u81EA\u52A8\u6309\u7167\u6307\u4EE4\u8DEF\u5F84\u79FB\u52A8\u5E76\u5728\u9047\u5230\u7B2C\u4E00\u4E2A\u5355\u4F4D\u540E\u505C\u6B62\u3002\u82E5\u8BE5\u5355\u4F4D\u662F\u654C\u65B9\u5355\u4F4D\u5219\u5BF9\u5176\u9020\u6210\u4F24\u5BB3\u3002\u82E5\u672A\u80FD\u51FB\u6740\u8BE5\u5355\u4F4D\u6216\u8BE5\u5355\u4F4D\u662F\u53CB\u65B9\u5355\u4F4D\uFF0C\u5219\u540E\u9000\u81F3\u4E0A\u4E00\u683C\u3002"
TDZH:
EN:
JP:
KR:
TDZH: "\u7576\u524D\u56DE\u5408\u7121\u6CD5\u79FB\u52D5\uFF0C\u4E0B\u4E00\u56DE\u5408\u958B\u59CB\u6642\u5C07\u81EA\u52D5\u6309\u7167\u6307\u4EE4\u8DEF\u5F91\u79FB\u52D5\uFF0C\u4E26\u5728\u9047\u5230\u7B2C\u4E00\u500B\u55AE\u4F4D\u5F8C\u505C\u6B62\u3002\u82E5\u8A72\u55AE\u4F4D\u662F\u6575\u65B9\u55AE\u4F4D\u5247\u5C0D\u5176\u9020\u6210\u50B7\u5BB3\u3002\u82E5\u672A\u80FD\u64CA\u6BBA\u8A72\u55AE\u4F4D\u6216\u8A72\u55AE\u4F4D\u662F\u53CB\u65B9\u55AE\u4F4D\uFF0C\u5247\u5F8C\u9000\u81F3\u4E0A\u4E00\u683C\u3002"
EN: Cannot move this turn. At the start of the next turn, the unit will automatically
move along the designated path and stop upon encountering the first unit. If
that unit is an enemy, deal damage to it. If the target is not killed or is
an ally, retreat one tile back.
JP: "\u73FE\u5728\u306E\u30BF\u30FC\u30F3\u3067\u306F\u79FB\u52D5\u3067\u304D\u306A\u3044\u3002\u6B21\u306E\u30BF\u30FC\u30F3\u958B\u59CB\u6642\u3001\u6307\u5B9A\u3055\u308C\u305F\u7D4C\u8DEF\u306B\u6CBF\u3063\u3066\u81EA\u52D5\u7684\u306B\u79FB\u52D5\u3057\u3001\u6700\u521D\u306B\u906D\u9047\u3057\u305F\u30E6\u30CB\u30C3\u30C8\u306E\u4F4D\u7F6E\u3067\u505C\u6B62\u3059\u308B\u3002\u305D\u306E\u30E6\u30CB\u30C3\u30C8\u304C\u6575\u30E6\u30CB\u30C3\u30C8\u306E\u5834\u5408\u306F\u30C0\u30E1\u30FC\u30B8\u3092\u4E0E\u3048\u308B\u3002\u6483\u7834\u3067\u304D\u306A\u304B\u3063\u305F\u5834\u5408\u3001\u307E\u305F\u306F\u5473\u65B9\u30E6\u30CB\u30C3\u30C8\u3060\u3063\u305F\u5834\u5408\u306F\u30011\u30DE\u30B9\u5F8C\u9000\u3059\u308B\u3002"
KR: "\uC774\uBC88 \uD134\uC5D0\uB294 \uC774\uB3D9\uD560 \uC218 \uC5C6\uB2E4.
\uB2E4\uC74C \uD134 \uC2DC\uC791 \uC2DC \uC9C0\uC815\uB41C \uACBD\uB85C\uB97C
\uB530\uB77C \uC790\uB3D9\uC73C\uB85C \uC774\uB3D9\uD558\uBA70, \uCC98\uC74C
\uB9C8\uC8FC\uCE5C \uC720\uB2DB\uC774 \uC788\uB294 \uACF3\uC5D0\uC11C \uC815\uC9C0\uD55C\uB2E4.
\uD574\uB2F9 \uC720\uB2DB\uC774 \uC801\uAD70\uC774\uB77C\uBA74 \uB370\uBBF8\uC9C0\uB97C
\uC785\uD78C\uB2E4. \uCC98\uCE58\uD558\uC9C0 \uBABB\uD588\uAC70\uB098 \uC544\uAD70
\uC720\uB2DB\uC774\uB77C\uBA74 \uD55C \uCE78 \uB4A4\uB85C \uD6C4\uD1F4\uD55C\uB2E4."
RU:
ES:
PT:

View File

@ -33,10 +33,12 @@ namespace Logic.Skill
//这里要用targetCity来判断targetUnit是否和self属于同一个阵营因为unit可能已经死亡
if (!mapData.IsLeagueUnitByCity(info.DamageTargetCity.Id, self.Id)) return;
var selfGrid = self.Grid(mapData);
if (selfGrid == null || info.DamageTargetGrid == null) return;
var distance = mapData.GridMap.CalcDistance(selfGrid, info.DamageTargetGrid);
// 承伤者重定向(SakuyaGuard)场景:Remilia 服务的是真正承伤的 Bearer,而不是原 target
var damagedGrid = info.DamageBearer != null ? info.DamageBearer.Grid(mapData) : info.DamageTargetGrid;
if (selfGrid == null || damagedGrid == null) return;
var distance = mapData.GridMap.CalcDistance(selfGrid, damagedGrid);
if (distance > 2) return;
info.DamageTargetGrid.AddSpType(GridSpType.RemiliaGrid,mapData,self);
damagedGrid.AddSpType(GridSpType.RemiliaGrid,mapData,self);
}
public override void OnUnitDamaged(UnitData self, MapData mapData, SettlementInfo info)
@ -45,10 +47,12 @@ namespace Logic.Skill
//这里要用targetCity来判断targetUnit是否和self属于同一个阵营因为unit可能已经死亡
if (!mapData.IsLeagueUnitByCity(info.DamageTargetCity.Id, self.Id)) return;
var selfGrid = self.Grid(mapData);
if (selfGrid == null || info.DamageTargetGrid == null) return;
var distance = mapData.GridMap.CalcDistance(selfGrid, info.DamageTargetGrid);
// 承伤者重定向(SakuyaGuard)场景:Remilia 服务的是真正承伤的 Bearer,而不是原 target
var damagedGrid = info.DamageBearer != null ? info.DamageBearer.Grid(mapData) : info.DamageTargetGrid;
if (selfGrid == null || damagedGrid == null) return;
var distance = mapData.GridMap.CalcDistance(selfGrid, damagedGrid);
if (distance > 2) return;
info.DamageTargetGrid.AddSpType(GridSpType.RemiliaGrid,mapData,self);
damagedGrid.AddSpType(GridSpType.RemiliaGrid,mapData,self);
}
}

View File

@ -33,10 +33,12 @@ namespace Logic.Skill
//这里要用targetCity来判断targetUnit是否和self属于同一个阵营因为unit可能已经死亡
if (!mapData.IsLeagueUnitByCity(info.DamageTargetCity.Id, self.Id)) return;
var selfGrid = self.Grid(mapData);
if (selfGrid == null || info.DamageTargetGrid == null) return;
var distance = mapData.GridMap.CalcDistance(selfGrid, info.DamageTargetGrid);
// 承伤者重定向(SakuyaGuard)场景:Remilia 服务的是真正承伤的 Bearer,而不是原 target
var damagedGrid = info.DamageBearer != null ? info.DamageBearer.Grid(mapData) : info.DamageTargetGrid;
if (selfGrid == null || damagedGrid == null) return;
var distance = mapData.GridMap.CalcDistance(selfGrid, damagedGrid);
if (distance > 1) return;
info.DamageTargetGrid.AddSpType(GridSpType.RemiliaGrid,mapData,self);
damagedGrid.AddSpType(GridSpType.RemiliaGrid,mapData,self);
}
public override void OnUnitDamaged(UnitData self, MapData mapData, SettlementInfo info)
@ -45,10 +47,12 @@ namespace Logic.Skill
//这里要用targetCity来判断targetUnit是否和self属于同一个阵营因为unit可能已经死亡
if (!mapData.IsLeagueUnitByCity(info.DamageTargetCity.Id, self.Id)) return;
var selfGrid = self.Grid(mapData);
if (selfGrid == null || info.DamageTargetGrid == null) return;
var distance = mapData.GridMap.CalcDistance(selfGrid, info.DamageTargetGrid);
// 承伤者重定向(SakuyaGuard)场景:Remilia 服务的是真正承伤的 Bearer,而不是原 target
var damagedGrid = info.DamageBearer != null ? info.DamageBearer.Grid(mapData) : info.DamageTargetGrid;
if (selfGrid == null || damagedGrid == null) return;
var distance = mapData.GridMap.CalcDistance(selfGrid, damagedGrid);
if (distance > 1) return;
info.DamageTargetGrid.AddSpType(GridSpType.RemiliaGrid,mapData,self);
damagedGrid.AddSpType(GridSpType.RemiliaGrid,mapData,self);
}
}
}

View File

@ -7,6 +7,7 @@
using System.Collections.Generic;
using MemoryPack;
using RuntimeData;
using Logic.CrashSight;
using TH1_Anim.Fragments;
@ -20,6 +21,10 @@ namespace Logic.Skill
{
public partial class SkillBanBombSkill : SkillBase
{
// 来源阵营PlayerId, 0=未记录(老存档反序列化默认值, 走旧逻辑不过滤盟友)
[MemoryPackInclude]
private uint _originPlayerId;
public SkillBanBombSkill()
{
IsPermanent = true;
@ -32,6 +37,28 @@ namespace Logic.Skill
return SkillType.SkillBanBoom;
}
public override void OnSkillAdd(MapData mapData, uint originId)
{
base.OnSkillAdd(mapData, originId);
_originPlayerId = ResolveOriginPlayerId(mapData, originId);
}
public override void OnSkillOverride(MapData mapData, uint originId, uint selfId)
{
base.OnSkillOverride(mapData, originId, selfId);
// 覆盖叠加时以最新一次施加者的阵营为准; 查不到则保留原阵营信息
var refreshed = ResolveOriginPlayerId(mapData, originId);
if (refreshed != 0) _originPlayerId = refreshed;
}
private static uint ResolveOriginPlayerId(MapData mapData, uint originId)
{
if (mapData == null) return 0;
return mapData.GetPlayerDataByUnitId(originId, out var player) && player != null
? player.Id
: 0u;
}
public override void OnDamaged(MapData mapData, SettlementInfo info)
{
if (!info.IsKill || info.DamageTarget == null) return;
@ -51,6 +78,14 @@ namespace Logic.Skill
if (around == grid) continue;
around.RealUnit(mapData,out var target);
if (target == null) continue;
// 跳过来源阵营的盟友(_originPlayerId==0 时跳过过滤, 兼容老存档)
if (_originPlayerId != 0 &&
mapData.GetPlayerDataByUnitId(target.Id, out var targetPlayer) &&
targetPlayer != null &&
mapData.SameUnion(_originPlayerId, targetPlayer.Id))
{
continue;
}
target.AddOrOverrideSkill(SkillType.SkillBan, mapData, info.DamageTarget.Id);
unitsToRefresh.Add(target.Id);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff