This commit is contained in:
daixiawu 2026-04-10 18:16:10 +08:00
commit fe34ea0da0
20 changed files with 1195 additions and 325 deletions

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

View File

@ -0,0 +1,114 @@
fileFormatVersion: 2
guid: 74ad98c2f4cdf3541822658acc86f5c9
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

View File

@ -0,0 +1,114 @@
fileFormatVersion: 2
guid: c24c5872e76eb024eb5d16ed589da1b4
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

View File

@ -0,0 +1,114 @@
fileFormatVersion: 2
guid: 47acdac93fae81548936db0f26c72e50
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -2044,7 +2044,7 @@ MonoBehaviour:
- SkillType: 217
SkillViewType: 4
SkillName: "\u7C97\u949D\u8EAB"
SkillDesc: "\u6BCF\u5C42\u63D0\u4F9B\u79FB\u52A8\u529B+1\uFF0C\u53D7\u4F24\u65F6\u5931\u53BB1\u5C42\uFF0C\u5C42\u6570\u4E0A\u9650\u4E0E\u82F1\u96C4\u7B49\u7EA7\u76F8\u540C"
SkillDesc: "\u6BCF\u5C42\u63D0\u4F9B\u79FB\u52A8\u529B+1\uFF0C\u53D7\u4F24\u65F6\u5931\u53BB1\u5C42\uFF0C\u5C42\u6570\u4E0A\u9650\u4E0E\u82F1\u96C4\u7B49\u7EA7\u76F8\u540C\u3002**<\u62A4\u6469>**(\u653B\u51FB\u7CBE\u5FAE\u8EAB)\u65F6\u6BCF\u5C42\u63D0\u4F9B5\u70B9\u56DE\u590D\u3002"
NotShow: 0
SkillIcon: {fileID: 21300000, guid: f2c29f5a4e8195843aaef21cdffb15d0, type: 3}
HasShowList: 0
@ -2236,7 +2236,7 @@ MonoBehaviour:
- SkillType: 218
SkillViewType: 1
SkillName: "\u65E0\u610F\u8BC6\u7684\u811A\u6B65"
SkillDesc: "\u5BF9\u654C\u65B9\u4E0D\u53EF\u89C1\uFF0C\u79FB\u52A8\u65F6\u65E0\u89C6\u654C\u63A7"
SkillDesc: "\u5BF9\u654C\u65B9\u4E0D\u53EF\u89C1\uFF0C\u79FB\u52A8\u65F6\u65E0\u89C6\u654C\u63A7\u3002\u975E\u79FB\u52A8\u884C\u4E3A\u4F1A\u6253\u7834\u8BE5\u72B6\u6001\u3002"
NotShow: 0
SkillIcon: {fileID: 21300000, guid: 9e68cd88a8dbbc9449c43d815fd75c52, type: 3}
HasShowList: 0
@ -2335,7 +2335,7 @@ MonoBehaviour:
- SkillType: 249
SkillViewType: 4
SkillName: "\u7F57\u5239\u51ED\u4F9D"
SkillDesc: "\u88AB**<\u6BD5\u820D\u906E>**\u9644\u7075\u540E\u83B7\u5F971\u5C42\u3002\u6BCF\u5C42\u63D0\u4F9B0.5\u653B\u51FB\u529B\uFF0C\u4E0A\u96502\u5C42\uFF0C\u6B7B\u4EA1\u65F6\u4EA7\u751F\u5269\u4F59\u5C42\u6570\u4E2A**<\u6BD5\u820D\u906E>**"
SkillDesc: "\u88AB**<\u6BD5\u820D\u906E>**\u9644\u7075\u540E\uFF0C\u6062\u590D5\u70B9\u751F\u547D\u503C\uFF0C\u83B7\u5F971\u70B9**<\u653B\u51FB\u884C\u52A8\u70B9>**"
NotShow: 0
SkillIcon: {fileID: 21300000, guid: 2afc69cdc28e01a4d97d8770ffc05164, type: 3}
HasShowList: 0
@ -2353,7 +2353,7 @@ MonoBehaviour:
- SkillType: 251
SkillViewType: 2
SkillName: "\u70BD\u70ED\u795E\u706B"
SkillDesc: "\u65E0\u6CD5\u4E3B\u52A8\u653B\u51FB\u3002\u51FA\u6218\u65F6\u53EF\u7ACB\u523B\u884C\u52A8\u3002"
SkillDesc: "\u65E0\u6CD5\u4E3B\u52A8\u653B\u51FB\u3002\u51FA\u6218\u65F6\u53EF\u7ACB\u523B\u884C\u52A8\u3002\u53EF\u4EE5\u5C06\u8FF7\u96FE\u5730\u5757\u89C6\u4E3A\u79FB\u52A8\u76EE\u6807\u3002"
NotShow: 0
SkillIcon: {fileID: 21300000, guid: c710882216bc6b54f8e8a81328cb4460, type: 3}
HasShowList: 0

View File

@ -2307,8 +2307,8 @@ MonoBehaviour:
ChessType: 0
GiantCivId: 0
GiantForceId: 0
Name: "\u82F1\u96C4\u6218\u8230Lv.1"
Desc: "\u82F1\u96C4\u6218\u8230Lv.1\uFF0C\u7B49\u7EA7\u6E90\u4E8E\u8239\u4E0A\u82F1\u96C4\u7B49\u7EA7\u3002"
Name: "\u82F1\u96C4\u6218\u8230Lv.0"
Desc: "\u82F1\u96C4\u6218\u8230Lv.0\uFF0C\u7B49\u7EA7\u6E90\u4E8E\u8239\u4E0A\u82F1\u96C4\u7B49\u7EA7\u3002"
LandType: 2
NoMaxHealth: 1
MaxHealth: 50
@ -2448,8 +2448,47 @@ MonoBehaviour:
OnlyCarryGiant: 1
CarryGiantType: 15
Sprite: {fileID: 21300000, guid: 8e8a11d0f93b5114b88162319dde238e, type: 3}
Name:
Desc:
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 16
Sprite: {fileID: 21300000, guid: c24c5872e76eb024eb5d16ed589da1b4, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 19
Sprite: {fileID: 21300000, guid: 47acdac93fae81548936db0f26c72e50, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 20
Sprite: {fileID: 21300000, guid: 74ad98c2f4cdf3541822658acc86f5c9, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
ProjectileType: 1
@ -2463,8 +2502,8 @@ MonoBehaviour:
ChessType: 0
GiantCivId: 0
GiantForceId: 0
Name: "\u82F1\u96C4\u6218\u8230Lv.2"
Desc: "\u82F1\u96C4\u6218\u8230Lv.2\uFF0C\u7B49\u7EA7\u6E90\u4E8E\u8239\u4E0A\u82F1\u96C4\u7B49\u7EA7\u3002"
Name: "\u82F1\u96C4\u6218\u8230Lv.1"
Desc: "\u82F1\u96C4\u6218\u8230Lv.1\uFF0C\u7B49\u7EA7\u6E90\u4E8E\u8239\u4E0A\u82F1\u96C4\u7B49\u7EA7\u3002"
LandType: 2
NoMaxHealth: 1
MaxHealth: 50
@ -2604,8 +2643,47 @@ MonoBehaviour:
OnlyCarryGiant: 1
CarryGiantType: 15
Sprite: {fileID: 21300000, guid: 8e8a11d0f93b5114b88162319dde238e, type: 3}
Name:
Desc:
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 16
Sprite: {fileID: 21300000, guid: c24c5872e76eb024eb5d16ed589da1b4, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 19
Sprite: {fileID: 21300000, guid: 47acdac93fae81548936db0f26c72e50, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 20
Sprite: {fileID: 21300000, guid: 74ad98c2f4cdf3541822658acc86f5c9, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
ProjectileType: 1
@ -2619,8 +2697,8 @@ MonoBehaviour:
ChessType: 0
GiantCivId: 0
GiantForceId: 0
Name: "\u82F1\u96C4\u6218\u8230Lv.3"
Desc: "\u82F1\u96C4\u6218\u8230Lv.3\uFF0C\u7B49\u7EA7\u6E90\u4E8E\u8239\u4E0A\u82F1\u96C4\u7B49\u7EA7\u3002"
Name: "\u82F1\u96C4\u6218\u8230Lv.2"
Desc: "\u82F1\u96C4\u6218\u8230Lv.2\uFF0C\u7B49\u7EA7\u6E90\u4E8E\u8239\u4E0A\u82F1\u96C4\u7B49\u7EA7\u3002"
LandType: 2
NoMaxHealth: 1
MaxHealth: 50
@ -2760,8 +2838,47 @@ MonoBehaviour:
OnlyCarryGiant: 1
CarryGiantType: 15
Sprite: {fileID: 21300000, guid: 8e8a11d0f93b5114b88162319dde238e, type: 3}
Name:
Desc:
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 16
Sprite: {fileID: 21300000, guid: c24c5872e76eb024eb5d16ed589da1b4, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 19
Sprite: {fileID: 21300000, guid: 47acdac93fae81548936db0f26c72e50, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 20
Sprite: {fileID: 21300000, guid: 74ad98c2f4cdf3541822658acc86f5c9, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
ProjectileType: 1
@ -2775,8 +2892,8 @@ MonoBehaviour:
ChessType: 0
GiantCivId: 0
GiantForceId: 0
Name: "\u82F1\u96C4\u6218\u8230Lv.4"
Desc: "\u82F1\u96C4\u6218\u8230Lv.4\uFF0C\u7B49\u7EA7\u6E90\u4E8E\u8239\u4E0A\u82F1\u96C4\u7B49\u7EA7\u3002"
Name: "\u82F1\u96C4\u6218\u8230Lv.3"
Desc: "\u82F1\u96C4\u6218\u8230Lv.3\uFF0C\u7B49\u7EA7\u6E90\u4E8E\u8239\u4E0A\u82F1\u96C4\u7B49\u7EA7\u3002"
LandType: 2
NoMaxHealth: 1
MaxHealth: 50
@ -2916,8 +3033,47 @@ MonoBehaviour:
OnlyCarryGiant: 1
CarryGiantType: 15
Sprite: {fileID: 21300000, guid: 8e8a11d0f93b5114b88162319dde238e, type: 3}
Name:
Desc:
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 16
Sprite: {fileID: 21300000, guid: c24c5872e76eb024eb5d16ed589da1b4, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 19
Sprite: {fileID: 21300000, guid: 47acdac93fae81548936db0f26c72e50, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 20
Sprite: {fileID: 21300000, guid: 74ad98c2f4cdf3541822658acc86f5c9, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
ProjectileType: 1
@ -2994,8 +3150,47 @@ MonoBehaviour:
OnlyCarryGiant: 1
CarryGiantType: 1
Sprite: {fileID: 21300000, guid: 8882d0798639d724597929feb0c1ee17, type: 3}
Name:
Desc:
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 16
Sprite: {fileID: 21300000, guid: c24c5872e76eb024eb5d16ed589da1b4, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 19
Sprite: {fileID: 21300000, guid: 47acdac93fae81548936db0f26c72e50, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 20
Sprite: {fileID: 21300000, guid: 74ad98c2f4cdf3541822658acc86f5c9, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
ProjectileType: 1
@ -3072,8 +3267,47 @@ MonoBehaviour:
OnlyCarryGiant: 1
CarryGiantType: 1
Sprite: {fileID: 21300000, guid: 8882d0798639d724597929feb0c1ee17, type: 3}
Name:
Desc:
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 16
Sprite: {fileID: 21300000, guid: c24c5872e76eb024eb5d16ed589da1b4, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 19
Sprite: {fileID: 21300000, guid: 47acdac93fae81548936db0f26c72e50, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
- IgnoreCivId: 0
IgnoreForceId: 0
IsGridSpType: 0
GridSpType: 0
CivId: 3
ForceId: 3
OnlyCarryGiant: 1
CarryGiantType: 20
Sprite: {fileID: 21300000, guid: 74ad98c2f4cdf3541822658acc86f5c9, type: 3}
Name:
Desc:
HasLevel: 0
LevelSprite: []
ProjectileType: 1
@ -4941,7 +5175,7 @@ MonoBehaviour:
MoveRange: 3
AttackRange: 1
Cost: 0
Skills: 20000000e5000000e7000000e9000000fb000000
Skills: 20000000e5000000e7000000e9000000fb0000000c000000
ActionIds: []
Sprite: {fileID: 21300000, guid: 2402fd4a0df809349bab2260b42a3d5b, type: 3}
IsSpriteVarient: 0
@ -4967,7 +5201,7 @@ MonoBehaviour:
MoveRange: 3
AttackRange: 1
Cost: 0
Skills: 20000000e5000000e7000000e9000000ea000000fb000000
Skills: 20000000e5000000e7000000e9000000ea000000fb0000000c000000
ActionIds: []
Sprite: {fileID: 21300000, guid: 2402fd4a0df809349bab2260b42a3d5b, type: 3}
IsSpriteVarient: 0

View File

@ -354320,7 +354320,7 @@ MonoBehaviour:
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 1
IsSpecialTerm: 0
Color:
Icon:
- ID: 18071
@ -361447,61 +361447,6 @@ MonoBehaviour:
IsSpecialTerm: 0
Color:
Icon:
- ID: 18742
ZH: English
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 1
Color:
Icon:
- ID: 18743
ZH: Chinese
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 1
Color:
Icon:
- ID: 18744
ZH: Heads-up! The current version of the game is in **<Chinese >**only.**< English
>**and more languages are on the way. Thank you for your patience and support!
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
Color:
Icon:
- ID: 18745
ZH: "\u5730\u5E95\u7684\u963F\u7EA6\u63D0\u4E9A"
TDZH:
@ -362150,4 +362095,167 @@ MonoBehaviour:
IsSpecialTerm: 0
Color:
Icon:
- ID: 18784
ZH: "\u6BCF\u5C42\u63D0\u4F9B\u79FB\u52A8\u529B+1\uFF0C\u53D7\u4F24\u65F6\u5931\u53BB1\u5C42\uFF0C\u5C42\u6570\u4E0A\u9650\u4E0E\u82F1\u96C4\u7B49\u7EA7\u76F8\u540C\u3002**<18705>**(\u653B\u51FB\u7CBE\u5FAE\u8EAB)\u65F6\u6BCF\u5C42\u63D0\u4F9B5\u70B9\u56DE\u590D\u3002"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
Color:
Icon:
- ID: 18785
ZH: "\u5BF9**<17867>**\u9644\u8FD11\u683C\u5185\u7684\u5355\u4F4D\u65BD\u52A0**<17866>**"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
Color:
Icon:
- ID: 18789
ZH: "\u65E0\u6CD5\u4E3B\u52A8\u653B\u51FB\u3002\u51FA\u6218\u65F6\u53EF\u7ACB\u523B\u884C\u52A8\u3002\u53EF\u4EE5\u5C06\u8FF7\u96FE\u5730\u5757\u89C6\u4E3A\u79FB\u52A8\u76EE\u6807\u3002"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
Color:
Icon:
- ID: 18793
ZH: "\u5BF9\u654C\u65B9\u4E0D\u53EF\u89C1\uFF0C\u79FB\u52A8\u65F6\u65E0\u89C6\u654C\u63A7\u3002\u975E\u79FB\u52A8\u884C\u4E3A\u4F1A\u6253\u7834\u8BE5\u72B6\u6001\u3002"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
Color:
Icon:
- ID: 18794
ZH: ' English '
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 1
Color:
Icon:
- ID: 18795
ZH: 'Chinese '
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 1
Color:
Icon:
- ID: 18796
ZH: Heads-up! The current version of the game is in **<18795>**only.**<18794>**and
more languages are on the way. Thank you for your patience and support!
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
Color:
Icon:
- ID: 18797
ZH: "\u82F1\u96C4\u6218\u8230Lv.0"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
Color:
Icon:
- ID: 18798
ZH: "\u82F1\u96C4\u6218\u8230Lv.0\uFF0C\u7B49\u7EA7\u6E90\u4E8E\u8239\u4E0A\u82F1\u96C4\u7B49\u7EA7\u3002"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
Color:
Icon:
TargetTypes: 010000000200000003000000040000000500000006000000070000000800000009000000

View File

@ -2038,7 +2038,7 @@ MonoBehaviour:
- SkillType: 217
SkillViewType: 4
SkillName: 18062
SkillDesc: 18063
SkillDesc: 18784
NotShow: 0
SkillIcon: {fileID: 21300000, guid: f2c29f5a4e8195843aaef21cdffb15d0, type: 3}
HasShowList: 0
@ -2101,7 +2101,7 @@ MonoBehaviour:
- SkillType: 231
SkillViewType: 2
SkillName: 18070
SkillDesc: 18091
SkillDesc: 18785
NotShow: 0
SkillIcon: {fileID: 21300000, guid: ce9bfe5b044549c45852bf4772a11310, type: 3}
HasShowList: 0
@ -2230,7 +2230,7 @@ MonoBehaviour:
- SkillType: 218
SkillViewType: 1
SkillName: 17836
SkillDesc: 17837
SkillDesc: 18793
NotShow: 0
SkillIcon: {fileID: 21300000, guid: 9e68cd88a8dbbc9449c43d815fd75c52, type: 3}
HasShowList: 0
@ -2347,7 +2347,7 @@ MonoBehaviour:
- SkillType: 251
SkillViewType: 2
SkillName: 18242
SkillDesc: 18243
SkillDesc: 18789
NotShow: 0
SkillIcon: {fileID: 21300000, guid: c710882216bc6b54f8e8a81328cb4460, type: 3}
HasShowList: 0

View File

@ -2307,8 +2307,8 @@ MonoBehaviour:
ChessType: 0
GiantCivId: 0
GiantForceId: 0
Name: 16871
Desc: 16872
Name: 18797
Desc: 18798
LandType: 2
NoMaxHealth: 1
MaxHealth: 50
@ -2463,8 +2463,8 @@ MonoBehaviour:
ChessType: 0
GiantCivId: 0
GiantForceId: 0
Name: 16873
Desc: 16874
Name: 16871
Desc: 16872
LandType: 2
NoMaxHealth: 1
MaxHealth: 50
@ -2619,8 +2619,8 @@ MonoBehaviour:
ChessType: 0
GiantCivId: 0
GiantForceId: 0
Name: 16875
Desc: 16876
Name: 16873
Desc: 16874
LandType: 2
NoMaxHealth: 1
MaxHealth: 50
@ -2775,8 +2775,8 @@ MonoBehaviour:
ChessType: 0
GiantCivId: 0
GiantForceId: 0
Name: 16877
Desc: 16878
Name: 16875
Desc: 16876
LandType: 2
NoMaxHealth: 1
MaxHealth: 50
@ -4915,7 +4915,7 @@ MonoBehaviour:
MoveRange: 2
AttackRange: 1
Cost: 0
Skills: 20000000e5000000a6000000fb000000
Skills: 20000000e5000000e7000000fb000000
ActionIds: []
Sprite: {fileID: 21300000, guid: 2402fd4a0df809349bab2260b42a3d5b, type: 3}
IsSpriteVarient: 0
@ -4941,7 +4941,7 @@ MonoBehaviour:
MoveRange: 3
AttackRange: 1
Cost: 0
Skills: 20000000e5000000a6000000e9000000fb000000
Skills: 20000000e5000000e7000000e9000000fb0000000c000000
ActionIds: []
Sprite: {fileID: 21300000, guid: 2402fd4a0df809349bab2260b42a3d5b, type: 3}
IsSpriteVarient: 0
@ -4967,7 +4967,7 @@ MonoBehaviour:
MoveRange: 3
AttackRange: 1
Cost: 0
Skills: 20000000e5000000a6000000e9000000ea000000fb000000
Skills: 20000000e5000000e7000000e9000000ea000000fb0000000c000000
ActionIds: []
Sprite: {fileID: 21300000, guid: 2402fd4a0df809349bab2260b42a3d5b, type: 3}
IsSpriteVarient: 0

View File

@ -1026,7 +1026,7 @@ MonoBehaviour:
Ban: 0
NoExport: 0
FontBan: 0
ID: 18744
ID: 18796
FontID: 0
TextCfg:
- Type: 1

View File

@ -72,7 +72,7 @@ SpriteRenderer:
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_SortingOrder: 1
m_Sprite: {fileID: 21300000, guid: 4fce1316421cf234ea54249eda14e1e1, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
@ -669,7 +669,7 @@ SpriteRenderer:
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_SortingOrder: 1
m_Sprite: {fileID: 21300000, guid: e5a2ff7768d799149899b03f54fb673e, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
@ -1583,7 +1583,7 @@ SpriteRenderer:
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_SortingOrder: 1
m_Sprite: {fileID: 21300000, guid: f6d015ba74c55fb4f9ecc8c32704769d, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0

View File

@ -30,7 +30,7 @@ namespace Logic.Skill
public override void OnDamageOther(MapData mapData, SettlementInfo info)
{
if (!info.IsKill || info.DamageTarget == null) return;
if (!info.IsKill || info.DamageTarget == null || info.DamageTargetGrid == null) return;
if (!mapData.GetPlayerDataByUnitId(info.DamageOrigin.Id, out var player)) return;
if (!mapData.GetCapitalCityDataByPlayerId(player.Id, out var capitalCity)) return;
var cityGrid = capitalCity?.Grid(mapData);
@ -39,17 +39,24 @@ namespace Logic.Skill
var fullType = new UnitFullType();
fullType.UnitType = UnitType.BonePile;
if (!cityGrid.RealUnit(mapData,out var _) && mapData.CheckLandTypeForGrid(fullType, cityGrid))
if (!info.DamageTargetGrid.RealUnit(mapData,out var _) && mapData.CheckLandTypeForGrid(fullType, info.DamageTargetGrid))
{
mapData.AddUnitData(cityGrid.Id, capitalCity.Id, fullType, out _);
mapData.AddUnitData(cityGrid.Id, capitalCity.Id, fullType, out var bone);
bone.GetSkill(SkillType.BonePile, out var skill);
var bonePile = skill as BonePileSkill;
if (bonePile != null)
{
bonePile.TargetType = info.DamageTarget.UnitFullType;
bonePile.TargetCityId = info.DamageTargetCity.Id;
}
}
else
{
var gridList = mapData.GridMap.GetAroundGridData(1, 1, cityGrid);
var gridList = mapData.GridMap.GetAroundGridData(1, 1, info.DamageTargetGrid);
var randomList = new List<GridData>();
foreach (var grid in gridList)
{
if (grid == cityGrid) continue;
if (grid == info.DamageTargetGrid) continue;
if (grid.RealUnit(mapData,out var _)) continue;
if(!mapData.CheckLandTypeForGrid(fullType, grid))continue;
randomList.Add(grid);

View File

@ -33,6 +33,18 @@ namespace Logic.Skill
return SkillType.UtsuhoDelayAct;
}
public override void NewSkillOnTransform(List<SkillBase> oldSkills)
{
foreach (var old in oldSkills)
{
if (old is UtsuhoDelayActSkill oldDelay && oldDelay.Path != null && oldDelay.Path.Count > 0)
{
Path = oldDelay.Path;
break;
}
}
}
// 外部直接调用即可
public void DelayMove(UnitData self, GridData grid, MapData mapData, MoveType moveType, List<Vector2Int> path = null)
{

View File

@ -45,46 +45,139 @@ namespace Logic.Skill
var path = delayActSkill.Path;
if (path == null || path.Count == 0) return;
// 沿路径对敌方单位造成伤害
for (int i = 1; i < path.Count; i++)
bool hasRadiation = selfUnit.GetSkill(SkillType.UtsuhoRadiation, out _);
// 如果有UtsuhoRadiation先确定路径终点再做沿途溅射
if (hasRadiation)
{
var vec = path[i];
if (!mapData.GridMap.GetGridDataByV2(vec, out var grid)) continue;
if (!grid.RealUnit(mapData, out var targetUnit)) continue;
if (mapData.IsLeagueUnitByUnit(selfUnit.Id, targetUnit.Id)) continue;
var dmg = Table.Instance.CalcDamage(mapData, selfUnit, targetUnit);
var targetGrid = targetUnit.Grid(mapData);
var targetCity = targetUnit.City(mapData);
Main.UnitLogic.DamageSettlement(mapData, selfUnit, targetUnit, dmg, DamageType.DelayAttack);
// 更新被伤害单位的视觉
if (targetGrid != null && targetGrid.InMainSight())
// Step1: 确定路径在哪里结束(碰到敌方单位则截断)
int endIndex = path.Count - 1;
bool hitAlive = false;
for (int i = 1; i < path.Count; i++)
{
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Damage, dmg));
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Hurt));
targetCity?.CityInfoRenderer(mapData)?.InstantUpdateCityInfo();
targetUnit.Renderer(mapData)?.InstantUpdateUnit(false);
if (!targetUnit.IsAlive())
if (!mapData.GridMap.GetGridDataByV2(path[i], out var grid)) continue;
if (!grid.RealUnit(mapData, out var targetUnit)) continue;
if (mapData.IsLeagueUnitByUnit(selfUnit.Id, targetUnit.Id)) continue;
endIndex = i;
hitAlive = true;
break;
}
// Step2: 对路径上所有格子含终点周围1格内的敌方单位造成溅射伤害
var splashedUnits = new HashSet<uint>();
int splashEnd = hitAlive ? endIndex : endIndex;
for (int i = 1; i <= splashEnd; i++)
{
if (!mapData.GridMap.GetGridDataByV2(path[i], out var pathGrid)) continue;
var aroundGrids = mapData.GridMap.GetAroundGridData(1, 1, pathGrid);
foreach (var aroundGrid in aroundGrids)
{
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Die));
if (!aroundGrid.RealUnit(mapData, out var splashTarget)) continue;
if (splashTarget.Id == selfUnit.Id) continue;
if (mapData.IsLeagueUnitByUnit(selfUnit.Id, splashTarget.Id)) continue;
if (!splashedUnits.Add(splashTarget.Id)) continue;
var splashDmg = Table.Instance.CalcDamage(mapData, selfUnit, splashTarget, damagePara: 0.5f);
var splashGrid = splashTarget.Grid(mapData);
var splashCity = splashTarget.City(mapData);
Main.UnitLogic.DamageSettlement(mapData, selfUnit, splashTarget, splashDmg, DamageType.Splash);
if (splashGrid != null && splashGrid.InMainSight())
{
splashGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Damage, splashDmg));
splashGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Hurt));
splashCity?.CityInfoRenderer(mapData)?.InstantUpdateCityInfo();
splashTarget.Renderer(mapData)?.InstantUpdateUnit(false);
if (!splashTarget.IsAlive())
splashGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Die));
splashTarget.Renderer(mapData)?.InstantUpdateTryDie();
splashGrid.Renderer(mapData)?.InstantUpdateGrid();
}
}
targetUnit.Renderer(mapData)?.InstantUpdateTryDie();
targetGrid.Renderer(mapData)?.InstantUpdateGrid();
}
// 处理提前结束截断path[i+1]及之后的部分
if (i + 1 < path.Count)
path.RemoveRange(i + 1, path.Count - (i + 1));
if (targetUnit.IsAlive())
// Step3: 对路径终点的敌方单位造成正常伤害并处理截断
if (hitAlive)
{
// 情况1目标没死折返回前一格
path.Add(path[i - 1]);
if (mapData.GridMap.GetGridDataByV2(path[endIndex], out var hitGrid) &&
hitGrid.RealUnit(mapData, out var hitUnit) &&
!mapData.IsLeagueUnitByUnit(selfUnit.Id, hitUnit.Id) &&
hitUnit.IsAlive())
{
var dmg = Table.Instance.CalcDamage(mapData, selfUnit, hitUnit);
var targetGrid = hitUnit.Grid(mapData);
var targetCity = hitUnit.City(mapData);
Main.UnitLogic.DamageSettlement(mapData, selfUnit, hitUnit, dmg, DamageType.DelayAttack);
if (targetGrid != null && targetGrid.InMainSight())
{
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Damage, dmg));
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Hurt));
targetCity?.CityInfoRenderer(mapData)?.InstantUpdateCityInfo();
hitUnit.Renderer(mapData)?.InstantUpdateUnit(false);
if (!hitUnit.IsAlive())
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Die));
hitUnit.Renderer(mapData)?.InstantUpdateTryDie();
targetGrid.Renderer(mapData)?.InstantUpdateGrid();
}
if (endIndex + 1 < path.Count)
path.RemoveRange(endIndex + 1, path.Count - (endIndex + 1));
if (hitUnit.IsAlive())
path.Add(path[endIndex - 1]);
}
}
// 情况2目标死了path已截断到path[i],无需额外处理
break;
}
else
{
// 没有UtsuhoRadiation原有逻辑沿路径对敌方单位造成伤害
for (int i = 1; i < path.Count; i++)
{
var vec = path[i];
if (!mapData.GridMap.GetGridDataByV2(vec, out var grid)) continue;
if (!grid.RealUnit(mapData, out var targetUnit)) continue;
if (mapData.IsLeagueUnitByUnit(selfUnit.Id, targetUnit.Id)) continue;
var dmg = Table.Instance.CalcDamage(mapData, selfUnit, targetUnit);
var targetGrid = targetUnit.Grid(mapData);
var targetCity = targetUnit.City(mapData);
Main.UnitLogic.DamageSettlement(mapData, selfUnit, targetUnit, dmg, DamageType.DelayAttack);
// 更新被伤害单位的视觉
if (targetGrid != null && targetGrid.InMainSight())
{
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Damage, dmg));
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Hurt));
targetCity?.CityInfoRenderer(mapData)?.InstantUpdateCityInfo();
targetUnit.Renderer(mapData)?.InstantUpdateUnit(false);
if (!targetUnit.IsAlive())
{
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Die));
}
targetUnit.Renderer(mapData)?.InstantUpdateTryDie();
targetGrid.Renderer(mapData)?.InstantUpdateGrid();
}
// 处理提前结束截断path[i+1]及之后的部分
if (i + 1 < path.Count)
path.RemoveRange(i + 1, path.Count - (i + 1));
if (targetUnit.IsAlive())
{
// 情况1目标没死折返回前一格
path.Add(path[i - 1]);
}
// 情况2目标死了path已截断到path[i],无需额外处理
break;
}
}
// 如果最终停留位置有己方或盟友单位沿path反复回退到没有友方单位的格子
while (path.Count > 1)
{
if (!mapData.GridMap.GetGridDataByV2(path[^1], out var checkGrid)) break;
if (!checkGrid.RealUnit(mapData, out var occupant)) break;
if (occupant.Id == selfUnit.Id) break;
// 格子上有其他单位(友方或盟友),回退一格
path.RemoveAt(path.Count - 1);
}
// 构建移动动画并移动到path最终位置

View File

@ -5,10 +5,16 @@
* @Modify:
*/
using System.Collections.Generic;
using RuntimeData;
using MemoryPack;
using TH1_Anim;
using TH1_Anim.Fragments;
using TH1_Core.Managers;
using TH1_Logic.Core;
using TH1_Presentation.Sequencer.Task;
using TH1Renderer;
using UnityEngine;
namespace Logic.Skill
{
@ -25,62 +31,128 @@ namespace Logic.Skill
{
return SkillType.UtsuhoReadyMoveSuper;
}
public override void OnTurnStart(IdentifierBase self, MapData mapData)
{
var selfUnit = self as UnitData;
if (selfUnit == null) return;
var playerData = selfUnit.Player(mapData);
if (playerData == null) return;
if (!mapData.GetCapitalCityDataByPlayerId(playerData.Id, out var capitalCity)) return;
if (!selfUnit.GetSkill(SkillType.UtsuhoDelayAct, out var skill)) return;
var delayActSkill = skill as UtsuhoDelayActSkill;
if (delayActSkill == null) return;
var path = delayActSkill.Path;
if (path == null || path.Count == 0) return;
for (int i = 1; i < path.Count; i++)
bool hasRadiation = selfUnit.GetSkill(SkillType.UtsuhoRadiation, out _);
// Step1: 如果有Radiation对整条路径周围1格内的敌方单位造成溅射伤害
if (hasRadiation)
{
var vec = path[i];
if (!mapData.GridMap.GetGridDataByV2(vec, out var grid)) continue;
if (!grid.RealUnit(mapData, out var targetUnit)) continue;
if (mapData.IsLeagueUnitByUnit(selfUnit.Id, targetUnit.Id)) continue;
var dmg = Table.Instance.CalcDamage(mapData,selfUnit,targetUnit);
var targetGrid = targetUnit.Grid(mapData);
var targetCity = targetUnit.City(mapData);
Main.UnitLogic.DamageSettlement(mapData, selfUnit, targetUnit, dmg, DamageType.DelayAttack);
// 更新被伤害单位的视觉
if (targetGrid != null && targetGrid.InMainSight())
var splashedUnits = new HashSet<uint>();
for (int i = 1; i < path.Count; i++)
{
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Damage, dmg));
targetCity?.CityInfoRenderer(mapData)?.InstantUpdateCityInfo();
targetUnit.Renderer(mapData)?.InstantUpdateUnit(false);
targetUnit.Renderer(mapData)?.InstantUpdateTryDie();
targetGrid.Renderer(mapData)?.InstantUpdateGrid();
}
if (!targetUnit.IsAlive())
{
var killVec = path[i];
if (mapData.GridMap.GetGridDataByV2(killVec, out var killGrid))
if (!mapData.GridMap.GetGridDataByV2(path[i], out var pathGrid)) continue;
var aroundGrids = mapData.GridMap.GetAroundGridData(1, 1, pathGrid);
foreach (var aroundGrid in aroundGrids)
{
mapData.AddUnitData(killGrid.Id, capitalCity.Id, targetUnit.UnitFullType, out var newUnit);
newUnit.AddOrOverrideSkill(SkillType.BonePile, mapData, selfUnit.Id);
newUnit.Health = (int)(newUnit.GetMaxHealth() * 0.2f);
newUnit.Renderer(mapData)?.InstantUpdateUnit(false);
if (!aroundGrid.RealUnit(mapData, out var splashTarget)) continue;
if (splashTarget.Id == selfUnit.Id) continue;
if (mapData.IsLeagueUnitByUnit(selfUnit.Id, splashTarget.Id)) continue;
if (!splashedUnits.Add(splashTarget.Id)) continue;
var splashDmg = Table.Instance.CalcDamage(mapData, selfUnit, splashTarget, damagePara: 0.5f);
var splashGrid = splashTarget.Grid(mapData);
var splashCity = splashTarget.City(mapData);
Main.UnitLogic.DamageSettlement(mapData, selfUnit, splashTarget, splashDmg, DamageType.Splash);
if (splashGrid != null && splashGrid.InMainSight())
{
splashGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Damage, splashDmg));
splashGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Hurt));
splashCity?.CityInfoRenderer(mapData)?.InstantUpdateCityInfo();
splashTarget.Renderer(mapData)?.InstantUpdateUnit(false);
if (!splashTarget.IsAlive())
splashGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Die));
splashTarget.Renderer(mapData)?.InstantUpdateTryDie();
splashGrid.Renderer(mapData)?.InstantUpdateGrid();
}
}
}
}
// Step2: 从path末尾往前逐格判断能否停留
// 有敌方单位 → 攻击,杀死则停留,未杀死则继续回退
// 有友方单位 → 继续回退
// 空格 → 停留
int finalIndex = 0; // 默认回到起点
for (int i = path.Count - 1; i >= 1; i--)
{
if (!mapData.GridMap.GetGridDataByV2(path[i], out var finalGrid)) return;
if (finalGrid.RealUnit(mapData,out var _)) return;
if(!mapData.CheckLandTypeForGrid(selfUnit.UnitFullType, finalGrid))continue;
Main.UnitLogic.MoveTo(mapData, playerData, selfUnit, finalGrid);
break;
if (!mapData.GridMap.GetGridDataByV2(path[i], out var grid)) continue;
if (!grid.RealUnit(mapData, out var occupant))
{
// 空格,可以停留
finalIndex = i;
break;
}
if (occupant.Id == selfUnit.Id)
{
finalIndex = i;
break;
}
if (mapData.IsLeagueUnitByUnit(selfUnit.Id, occupant.Id))
{
// 友方单位,继续回退
continue;
}
// 敌方单位,造成伤害
var dmg = Table.Instance.CalcDamage(mapData, selfUnit, occupant);
var targetGrid = occupant.Grid(mapData);
var targetCity = occupant.City(mapData);
Main.UnitLogic.DamageSettlement(mapData, selfUnit, occupant, dmg, DamageType.DelayAttack);
if (targetGrid != null && targetGrid.InMainSight())
{
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Damage, dmg));
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Hurt));
targetCity?.CityInfoRenderer(mapData)?.InstantUpdateCityInfo();
occupant.Renderer(mapData)?.InstantUpdateUnit(false);
if (!occupant.IsAlive())
targetGrid.Renderer(mapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Die));
occupant.Renderer(mapData)?.InstantUpdateTryDie();
targetGrid.Renderer(mapData)?.InstantUpdateGrid();
}
if (!occupant.IsAlive())
{
// 杀死了,停在这个位置
finalIndex = i;
break;
}
// 没杀死,继续回退
}
// 截断path到finalIndex
if (finalIndex + 1 < path.Count)
path.RemoveRange(finalIndex + 1, path.Count - (finalIndex + 1));
// Step3: 构建移动动画并移动到path最终位置
if (!mapData.GridMap.GetGridDataByV2(path[^1], out var finalGrid)) return;
var originGrid = selfUnit.Grid(mapData);
if (mapData == Main.MapData && originGrid != null)
{
bool inSight = Main.MapData.PlayerMap.SelfPlayerData.Sight.CheckIsInSight(originGrid.Id)
|| Main.MapData.PlayerMap.SelfPlayerData.Sight.CheckIsInSight(finalGrid.Id);
if (inSight && MapRenderer.Instance.ROUnitMap.TryGetValue(selfUnit.Id, out var unitRenderer))
{
var data = FragmentDataFactory.Create(FragmentType.Move, unitRenderer, originGrid, finalGrid, path);
var fragment = FragmentFactory.Create(FragmentType.Move, data);
PresentationManager.EnqueueTask(new FragmentSequencerTask(fragment));
}
}
Main.UnitLogic.MoveTo(mapData, playerData, selfUnit, finalGrid);
}
}
}

View File

@ -591,9 +591,11 @@ namespace Logic
//Step #2处理恢复技能的herotask生命周期
origin.HeroTask(map)?.OnHealthReturn(map,realRecover,recover);
//Step #3 处理View
//Step #3 处理View隐身且不可见的单位不播放特效
if (map == Main.MapData && target.IsHideAndCantSee(map, map.PlayerMap.SelfPlayerData))
return realRecover;
var grid = target.Grid(map);
if (grid != null)
if (grid != null)
grid.Renderer(map)?.PlayVFXInSight(new GridVFXParams(GridVFXType.Heal));
target.Renderer(map)?.InstantUpdateUnit(true);
origin.Renderer(map)?.InstantUpdateUnit(true);