diff --git a/Assets/Localization/Items/Items.csv b/Assets/Localization/Items/Items.csv index 0acefb266..7a0f3b71a 100644 --- a/Assets/Localization/Items/Items.csv +++ b/Assets/Localization/Items/Items.csv @@ -186,3 +186,5 @@ PhotonPolarizer_Name,光子偏振器,Photon Polarizer PhotonPolarizer_Desc0,Polychrome的扩展器,可以使完美格挡弹开敌人,阻止敌人的连招。,An extender for Polychrome. Allows a perfect block to knock back enemies and interrupt their combos. PhotonWarper_Name,光子折跃器,Photon Warper PhotonWarper_Desc0,Polychrome的扩展器,若敌人在2米之外,重攻击在起手结束时折跃至其身前。,"An extender for Polychrome. If an enemy is more than 2 meters away, the heavy attack will warp you to the front of the enemy at the end of its startup phase." +LightningConcentrator_Name,引雷标记,Lightning Concentrator +LightningConcentrator_Desc0,FutureWand的扩展器。使Lightning集中攻击一个敌人并造成双倍伤害,优先选择正在进行可打断动作的目标,并可打断敌人的黄光或白光动作。,"An extender for FutureWand. Concentrates Lightning on one enemy for double damage, prioritizes targets performing disruptable actions, and can disrupt yellow- or white-glowing actions." diff --git a/Assets/Prefabs/MainGame/Characters/Player/PlayerOverride.overrideController b/Assets/Prefabs/MainGame/Characters/Player/PlayerOverride.overrideController index d1e461da9..834101b28 100644 --- a/Assets/Prefabs/MainGame/Characters/Player/PlayerOverride.overrideController +++ b/Assets/Prefabs/MainGame/Characters/Player/PlayerOverride.overrideController @@ -10,23 +10,23 @@ AnimatorOverrideController: m_Controller: {fileID: 9100000, guid: fda18c69e5ccb554d8ae8867ca37c7cd, type: 2} m_Clips: - m_OriginalClip: {fileID: 7400000, guid: 99d9faf139ff6064c8e7d4d9d63f58e0, type: 2} - m_OverrideClip: {fileID: 7400000, guid: d95d162166de6ef43b1b02fd81bfac5f, type: 2} + m_OverrideClip: {fileID: 7400000, guid: db4e03a90cfcbca4a80335177ce4377e, type: 2} - m_OriginalClip: {fileID: 7400000, guid: ed2676607db0d6a4c99fa5df36dd09b7, type: 2} - m_OverrideClip: {fileID: 7400000, guid: 5c1c87a6d19434d4fa8401a700723ca0, type: 2} + m_OverrideClip: {fileID: 7400000, guid: a6530c5433035d040974f3cf8572fe7c, type: 2} - m_OriginalClip: {fileID: 7400000, guid: b24a11ee47f88ff4eb978d5aca0ae93a, type: 2} - m_OverrideClip: {fileID: 7400000, guid: 006c64cfe8d1ff74a95609b30c08226f, type: 2} + m_OverrideClip: {fileID: 7400000, guid: 2ca224e0bb91d7f4bb55fbb05ba6acf2, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 25258b12f158def43a56416b73f94d80, type: 2} - m_OverrideClip: {fileID: 7400000, guid: 55fc8ba7f6ff77c43b6fa2a248dc76ef, type: 2} + m_OverrideClip: {fileID: 7400000, guid: 2f2de8fb421af5d479106b8ef9505348, type: 2} - m_OriginalClip: {fileID: 7400000, guid: e6caba10fc3a02649821183412ab5d27, type: 2} - m_OverrideClip: {fileID: 7400000, guid: 6fe92b2195a121740a2634989e0f716c, type: 2} + m_OverrideClip: {fileID: 7400000, guid: 2ac88efeeb1f1134bad19886bfd66dd5, type: 2} - m_OriginalClip: {fileID: 7400000, guid: a67e0dc7ee6cae741899189ffa2ddc92, type: 2} - m_OverrideClip: {fileID: 7400000, guid: d70ab478c40d9624280e39279a520606, type: 2} + m_OverrideClip: {fileID: 7400000, guid: e9235e894ec47e84fb276beef822777e, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 7fde74c9e60900e4ca19db67cf173155, type: 2} - m_OverrideClip: {fileID: -7353071353133039039, guid: 66d7c97acde74ce4e899ad9b96187c0e, type: 2} + m_OverrideClip: {fileID: -4996637841620507632, guid: 5ae4e6fb437c04a49b116a062daf9892, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 608dfee9855dc694aa1ea89a29de4d21, type: 2} - m_OverrideClip: {fileID: 711754592020139737, guid: 22059bdfc675ed4449c937fd23f06fa9, type: 2} + m_OverrideClip: {fileID: 6608794370682065959, guid: f1927d06b481d974aa61cf56710dce94, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 3943c8602c6198544a485240dc3e4dc5, type: 2} - m_OverrideClip: {fileID: 7814122754322888409, guid: f5d72584f2746ae488124c0f03cf3bee, type: 2} + m_OverrideClip: {fileID: -266041012799328612, guid: 03ddb2652d7010b47bb65f6eaa27091c, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 44a4a4e66482cdf4a90dfe1a2b8dcf9f, type: 2} m_OverrideClip: {fileID: -1037278177794748566, guid: 2ecf7267f05b6a74fa3a7b5831e7a7c7, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 03b1b65aa412abb40a823ccb29db5e68, type: 2} @@ -34,17 +34,17 @@ AnimatorOverrideController: - m_OriginalClip: {fileID: 7400000, guid: 60e1d16bb1bf0d34ca9779213d1de121, type: 2} m_OverrideClip: {fileID: -5197396910865140100, guid: e04988b618f662a44934fb8b31dee442, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 16e418b0431434e45aceb776e47e4049, type: 2} - m_OverrideClip: {fileID: -4186487134355181447, guid: f198c27c52a158942ab682ae4fcc4764, type: 2} + m_OverrideClip: {fileID: -6679882188084308422, guid: ca9edd43f681c7046a02489b15017517, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 16fe7b5baf0b4484d82bdf6e65f7f764, type: 2} - m_OverrideClip: {fileID: 7400000, guid: fcbbe6ec48ef21241a5f6aa22b14239c, type: 2} + m_OverrideClip: {fileID: -962660157572785255, guid: 9ea02f821f2f66243bfc198d8367f8d5, type: 2} - m_OriginalClip: {fileID: 7400000, guid: c4be64c0aa99e8d46b18bb9bbfe50b51, type: 2} m_OverrideClip: {fileID: 8895735517814013975, guid: cc7be8e826d20cc41a72c20f55350257, type: 2} - m_OriginalClip: {fileID: 7400000, guid: d6cd30a547339cf4ab437b1cf287b3b6, type: 2} m_OverrideClip: {fileID: -1840021845681425404, guid: 5dae8552f60f2c04b8ec6bd5c070772e, type: 2} - m_OriginalClip: {fileID: 7400000, guid: a22305c6448bd0944b3abdd9642af5af, type: 2} - m_OverrideClip: {fileID: 7400000, guid: 036020491cb55094b8eeb1a6d3f54574, type: 2} + m_OverrideClip: {fileID: 7400000, guid: f11b21589c8864d4688a80bdcba683de, type: 2} - m_OriginalClip: {fileID: 7400000, guid: a1ddc6114281ae5478f4aa3b07f8e8db, type: 2} - m_OverrideClip: {fileID: 7400000, guid: a80f126322d89ed48bf5f647347bcdd2, type: 2} + m_OverrideClip: {fileID: 7400000, guid: 0ebe99e0b48b2844eb5e4e4405172a81, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 1b1eee0d3d253354ca6863fcb54df53d, type: 2} m_OverrideClip: {fileID: 7036735654395455674, guid: d5062293a334bc940aaf36a1f77e5276, type: 2} - m_OriginalClip: {fileID: 7400000, guid: ed83dc6fe102a5d408821f0bc4eee48d, type: 2} @@ -62,19 +62,19 @@ AnimatorOverrideController: - m_OriginalClip: {fileID: 7400000, guid: 26617ca51425c224c8301ca9732957d1, type: 2} m_OverrideClip: {fileID: 7400000, guid: b5df97ca91ab8af4baa3e122e64b3498, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 809bedf47813ead41a782f2fb907e92a, type: 2} - m_OverrideClip: {fileID: 526448870181282028, guid: dca0cb386a2cd714ea62c697c5b228bb, type: 2} + m_OverrideClip: {fileID: 6855822782620295428, guid: 36518a264992be14e99e7c3fd48a7f65, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 56bfc371e2f641742a4e265413247bb7, type: 2} m_OverrideClip: {fileID: -3379015116143753677, guid: 70dff40dddf098c46b0397cf85a1c4bb, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 77f0087f588da334a9390bac754e0661, type: 2} - m_OverrideClip: {fileID: 38608564573035343, guid: 276c16384832a0841b7f23386709893c, type: 2} + m_OverrideClip: {fileID: 708219783587015279, guid: 2ade289f2956acc4aa42ef79025ef2b4, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 4bf2c010f7d09074d90bdf5ba4a963b4, type: 2} - m_OverrideClip: {fileID: -7663133397540677395, guid: 86667fcf08e3e15408e18c6efd36ddf1, type: 2} + m_OverrideClip: {fileID: -947574008279609053, guid: a31727863ab7d8b46964840f10d6688e, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 3b5b951727ba18f44bfd49eb783b5962, type: 2} m_OverrideClip: {fileID: 7310127618108163040, guid: 355eb38f3725e6e48bc4d7fcf2608313, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 6a1df70940a591645b87b639bd2e4db2, type: 2} - m_OverrideClip: {fileID: 5622727906928794325, guid: c8e44d541a7617e47b0599da2cb5d7af, type: 2} + m_OverrideClip: {fileID: 6704612531316691056, guid: 0b3667eb58bb1344182d36d9c6aca3d9, type: 2} - m_OriginalClip: {fileID: 7400000, guid: c1a20f998e23155458548b50a2e4ef78, type: 2} - m_OverrideClip: {fileID: -7890072066398965591, guid: 27b0b2d99a406b84085629f58ec4ee96, type: 2} + m_OverrideClip: {fileID: 3802710096632156124, guid: 881da7fc50f4662469213ca12cf29d31, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 81cb8ecb343e3cd439e11f575d9f8787, type: 2} m_OverrideClip: {fileID: 397512681564518357, guid: 9a12fdfdfeb51ce429fea01de3bc14ed, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 468d58630242eb54b8c247544e709556, type: 2} @@ -86,11 +86,11 @@ AnimatorOverrideController: - m_OriginalClip: {fileID: 7400000, guid: be2660eb64d0a60498242c08fc4143f6, type: 2} m_OverrideClip: {fileID: 7400000, guid: 9ff66b6c70876334d9af5cf6bac92d28, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 12d6fdaf1287de34b8242fef8bfdfffb, type: 2} - m_OverrideClip: {fileID: -7202508781374027911, guid: 351c21c94ad728249ad533d8d2f511ae, type: 2} + m_OverrideClip: {fileID: -6941054893137821415, guid: 6e63b794b00654e4bbaf0c55c92d614e, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 1069018dcbf6b264683585b238b48d7f, type: 2} - m_OverrideClip: {fileID: -683015962456246945, guid: 15695eb7a90849a4782af65d2c9c8a4c, type: 2} + m_OverrideClip: {fileID: 2128303080740529859, guid: c794a6da378e5554393d97a6bc810f3a, type: 2} - m_OriginalClip: {fileID: 7400000, guid: ace81af5b21651a4ba800accd47fbe34, type: 2} - m_OverrideClip: {fileID: 3336616053425093602, guid: 2a98f848897e27d45b24f8db62deb7ad, type: 2} + m_OverrideClip: {fileID: 7405628368492001861, guid: 268153881ab15eb4fbb92b9100833a79, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 3859e6d68f2917c44a01ffac957738c8, type: 2} m_OverrideClip: {fileID: 3089349482916515268, guid: 237f2a6462e01a0429907987527c64ca, type: 2} - m_OriginalClip: {fileID: 7400000, guid: 7dd899b6eaf0a09498a5e41112cf2b8c, type: 2} diff --git a/Assets/Prefabs/MainGame/Items/Extenders/FutureWand/LightningConcentrator.meta b/Assets/Prefabs/MainGame/Items/Extenders/FutureWand/LightningConcentrator.meta new file mode 100644 index 000000000..fef8c84ef --- /dev/null +++ b/Assets/Prefabs/MainGame/Items/Extenders/FutureWand/LightningConcentrator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6a8864afd25443dea340ad347d196e30 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/MainGame/Items/Extenders/FutureWand/LightningConcentrator/LightningConcentrator_ContentData.asset b/Assets/Prefabs/MainGame/Items/Extenders/FutureWand/LightningConcentrator/LightningConcentrator_ContentData.asset new file mode 100644 index 000000000..43da2ed46 --- /dev/null +++ b/Assets/Prefabs/MainGame/Items/Extenders/FutureWand/LightningConcentrator/LightningConcentrator_ContentData.asset @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fd6893a98c17a0e47af8bd555a67190b, type: 3} + m_Name: LightningConcentrator_ContentData + m_EditorClassIdentifier: Assembly-CSharp::Cielonos.MainGame.Inventory.ContentData + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: itemClass + Entry: 7 + Data: 0|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: Cielonos.MainGame.Inventory.Collections.LightningConcentrator, Assembly-CSharp + - Name: + Entry: 8 + Data: + - Name: descriptions + Entry: 7 + Data: 1|System.Collections.Generic.List`1[[Cielonos.MainGame.Inventory.ItemDescription, + Assembly-CSharp]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 2|Cielonos.MainGame.Inventory.ItemDescription, Assembly-CSharp + - Name: descriptionKey + Entry: 1 + Data: LightningConcentrator_Desc0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: dropSettings + Entry: 7 + Data: 3|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Single, + mscorlib]], mscorlib + - Name: comparer + Entry: 7 + Data: 4|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + itemType: 2 + itemRarity: 3 + tags: [] + institutions: + - WardenclyffeResonanceHub + displayNameKey: LightningConcentrator_Name + itemIcon: {fileID: 21300000, guid: a685aa7ba5f7a074f8a84237bbab1032, type: 3} + dropWeight: 1 diff --git a/Assets/Prefabs/MainGame/Items/Extenders/FutureWand/LightningConcentrator/LightningConcentrator_ContentData.asset.meta b/Assets/Prefabs/MainGame/Items/Extenders/FutureWand/LightningConcentrator/LightningConcentrator_ContentData.asset.meta new file mode 100644 index 000000000..f0810da2f --- /dev/null +++ b/Assets/Prefabs/MainGame/Items/Extenders/FutureWand/LightningConcentrator/LightningConcentrator_ContentData.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 62000f3abf8b47ab9e3069360f1c42b4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Items/PassiveEquipment/LightningConcentrator.prefab b/Assets/Resources/Items/PassiveEquipment/LightningConcentrator.prefab new file mode 100644 index 000000000..f058e1c71 --- /dev/null +++ b/Assets/Resources/Items/PassiveEquipment/LightningConcentrator.prefab @@ -0,0 +1,118 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8246481056240113942 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5252010459508781963} + - component: {fileID: 2207735315041899684} + m_Layer: 0 + m_Name: LightningConcentrator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5252010459508781963 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8246481056240113942} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2207735315041899684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8246481056240113942} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0572525d1cf145cd84962c632a304e45, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Cielonos.MainGame.Inventory.Collections.LightningConcentrator + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: passiveAttributeSm + Entry: 6 + Data: + - Name: comboSm + Entry: 6 + Data: + - Name: functionSm + Entry: 6 + Data: + - Name: ammoSm + Entry: 6 + Data: + - Name: overloadSm + Entry: 6 + Data: + - Name: auraSm + Entry: 6 + Data: + - Name: viewObjects + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[Cielonos.MainGame.Inventory.ItemViewObject, + Assembly-CSharp]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: hostType + Entry: 7 + Data: 2|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: Cielonos.MainGame.Inventory.Collections.FutureWand, Assembly-CSharp + - Name: + Entry: 8 + Data: + fullBodyFuncAnims: {fileID: 0} + upperBodyFuncAnims: {fileID: 0} + contentData: {fileID: 11400000, guid: 62000f3abf8b47ab9e3069360f1c42b4, type: 2} + viewObjectData: {fileID: 0} + vfxData: {fileID: 0} + passiveAttributeData: {fileID: 0} + upgradeData: {fileID: 0} + comboData: {fileID: 0} + attackData: {fileID: 0} + functionData: {fileID: 0} + ammoData: {fileID: 0} + blockData: {fileID: 0} + overloadData: {fileID: 0} + inputData: {fileID: 0} + feedbackSc: {fileID: 0} + extenders: [] diff --git a/Assets/Resources/Items/PassiveEquipment/LightningConcentrator.prefab.meta b/Assets/Resources/Items/PassiveEquipment/LightningConcentrator.prefab.meta new file mode 100644 index 000000000..31aaf2c9d --- /dev/null +++ b/Assets/Resources/Items/PassiveEquipment/LightningConcentrator.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2dd4ef00812f4a868336960429d76c03 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/CityArena/CityArena.unity b/Assets/Scenes/CityArena/CityArena.unity index 121f81be2..33e66bd59 100644 --- a/Assets/Scenes/CityArena/CityArena.unity +++ b/Assets/Scenes/CityArena/CityArena.unity @@ -1133,45 +1133,6 @@ MonoBehaviour: - Func_02 - Func_03 --- !u!21 &458856279 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: DefaultBlurredImage - m_Shader: {fileID: 4800000, guid: 0bc497fc7237fb94a98a758638ed8902, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _ColorMask: 15 - - _Stencil: 0 - - _StencilComp: 8 - - _StencilOp: 0 - - _StencilReadMask: 255 - - _StencilWriteMask: 255 - - _UseUIAlphaClip: 0 - m_Colors: [] - m_BuildTextureStacks: [] - m_AllowLocking: 1 ---- !u!21 &523069877 Material: serializedVersion: 8 m_ObjectHideFlags: 0 @@ -1686,6 +1647,45 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::Cielonos.MainGame.Effects.Feedback.RGBSplitGlitchShaker minIntensity: 0 maxIntensity: 1 +--- !u!21 &988489540 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DefaultBlurredImage + m_Shader: {fileID: 4800000, guid: 0bc497fc7237fb94a98a758638ed8902, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UseUIAlphaClip: 0 + m_Colors: [] + m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!1 &998525393 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/MainGame/AttackArea/AttackAreaBase.cs b/Assets/Scripts/MainGame/AttackArea/AttackAreaBase.cs index a8a0dafbe..0a344b83d 100644 --- a/Assets/Scripts/MainGame/AttackArea/AttackAreaBase.cs +++ b/Assets/Scripts/MainGame/AttackArea/AttackAreaBase.cs @@ -36,6 +36,7 @@ namespace Cielonos.MainGame public bool canTriggerHitEvent = true; public List tags = new List(); public Action updateAction; + private Predicate _targetFilter; [NonSerialized, HideInEditorMode] public CreatorTimePolicy timePolicy; /// @@ -93,6 +94,7 @@ namespace Cielonos.MainGame this.targetFractions = targetFractions.ToList(); this.canTriggerHitEvent = true; this.tags = new List(); + this._targetFilter = null; this.timePolicy = DefaultTimePolicy; this.reactedTargets.Clear(); @@ -411,14 +413,25 @@ namespace Cielonos.MainGame public partial class AttackAreaBase { /// - /// 检查目标角色是否为有效攻击目标:非创建者自身,且属于目标阵营。 + /// 设置只对当前池化实例有效的额外目标条件。 + /// + public T SetTargetFilter(Predicate targetFilter) where T : AttackAreaBase + { + // 对池化 AttackArea 施加本次运行时目标约束;Initialize 会负责清空。 + _targetFilter = targetFilter; + return this as T; + } + + /// + /// 检查目标角色是否为有效攻击目标:非创建者自身,且属于目标阵营并满足额外目标条件。 /// public bool IsValidTarget(CharacterBase target) { if (target == null || target == creator) return false; if (!target.gameObject.activeInHierarchy) return false; if (target.statusSm == null || target.statusSm.isDead) return false; - return targetFractions.Contains(target.fraction); + if (!targetFractions.Contains(target.fraction)) return false; + return _targetFilter?.Invoke(target) ?? true; } public virtual void HitCharacter(Collider characterCollider, Vector3 hitPosition) diff --git a/Assets/Scripts/MainGame/Characters/Player/Inventory/PlayerInventorySubcontroller.cs b/Assets/Scripts/MainGame/Characters/Player/Inventory/PlayerInventorySubcontroller.cs index 8ccda1019..f5473757e 100644 --- a/Assets/Scripts/MainGame/Characters/Player/Inventory/PlayerInventorySubcontroller.cs +++ b/Assets/Scripts/MainGame/Characters/Player/Inventory/PlayerInventorySubcontroller.cs @@ -44,7 +44,9 @@ namespace Cielonos.MainGame.Characters backpackSm.ObtainItem(); backpackSm.ObtainItem(); backpackSm.ObtainItem(); - backpackSm.ObtainItem(); + //backpackSm.ObtainItem(); + + backpackSm.ObtainItem(); /*backpackSm.ObtainItem(); backpackSm.ObtainItem(); backpackSm.ObtainItem(); diff --git a/Assets/Scripts/MainGame/Items/Data/FunctionData.cs b/Assets/Scripts/MainGame/Items/Data/FunctionData.cs index 8e9bc0386..ee0402394 100644 --- a/Assets/Scripts/MainGame/Items/Data/FunctionData.cs +++ b/Assets/Scripts/MainGame/Items/Data/FunctionData.cs @@ -48,6 +48,8 @@ namespace Cielonos.MainGame.Inventory public class FunctionUnit { + public const string DisruptionTag = "Disruption"; + [ReadOnly] public FunctionData parentData; @@ -81,8 +83,8 @@ namespace Cielonos.MainGame.Inventory public static List Tags = new() { - "Disruption" + DisruptionTag }; } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/MainGame/Items/Extenders/FutureWand/LightningConcentrator.cs b/Assets/Scripts/MainGame/Items/Extenders/FutureWand/LightningConcentrator.cs new file mode 100644 index 000000000..b8be53b7f --- /dev/null +++ b/Assets/Scripts/MainGame/Items/Extenders/FutureWand/LightningConcentrator.cs @@ -0,0 +1,15 @@ +namespace Cielonos.MainGame.Inventory.Collections +{ + /// + /// 引雷标记 / Lightning Concentrator + /// 将 FutureWand 的 Lightning 集中到单个目标,并将其转化为 Disruption 攻击。 + /// + public class LightningConcentrator : ExtenderBase + { + public override void OnObtained() + { + hostType = typeof(FutureWand); + base.OnObtained(); + } + } +} diff --git a/Assets/Scripts/MainGame/Items/Extenders/FutureWand/LightningConcentrator.cs.meta b/Assets/Scripts/MainGame/Items/Extenders/FutureWand/LightningConcentrator.cs.meta new file mode 100644 index 000000000..cd3e80d10 --- /dev/null +++ b/Assets/Scripts/MainGame/Items/Extenders/FutureWand/LightningConcentrator.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0572525d1cf145cd84962c632a304e45 diff --git a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_AnimationCallbacks.cs b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_AnimationCallbacks.cs index 9a720548e..45f0f6ba4 100644 --- a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_AnimationCallbacks.cs +++ b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_AnimationCallbacks.cs @@ -15,6 +15,20 @@ namespace Cielonos.MainGame.Inventory.Collections private void FAPF_GenerateLightning(RuntimeFuncAnim rtFuncAnim) { CustomFunction.PC_StringString p = rtFuncAnim.GetParams(); + + if (_hasLightningConcentrator) + { + Enemy target = PrimaryTarget; + if (target == null || !target.gameObject.activeInHierarchy || target.statusSm.isDead) + { + target = RefreshLightningConcentratorTarget(out _); + } + + AttackUnit modifiedAttack = ApplyLightningConcentrator(attackData[p.str1]); + Vector3 fallbackPosition = player.transform.position + player.transform.forward * 10f; + GenerateLightning(p.str0, modifiedAttack, target, fallbackPosition); + return; + } List targets = CombatManager.EnemySm.Query(25f).From(player.transform).Candidates(); diff --git a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_AttackAreas.cs b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_AttackAreas.cs index 0b1f9646f..35bc0aac0 100644 --- a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_AttackAreas.cs +++ b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_AttackAreas.cs @@ -44,6 +44,7 @@ namespace Cielonos.MainGame.Inventory.Collections NormalArea lightning = vfxData.SpawnVFX(vfxName, player).GetComponentInChildren(); lightning.Initialize(player, this, Fraction.Enemy) + .SetTargetFilter(candidate => candidate == target) .SetAttackSubmodule(attackUnit) .SetTimeSubmodule(2f, 0.1f, 0.04f) .SetHitSubmodule(); diff --git a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Combat.cs b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Combat.cs index 518025159..b36220462 100644 --- a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Combat.cs +++ b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Combat.cs @@ -1,4 +1,7 @@ using Cielonos.MainGame.Characters; +using Cielonos.MainGame.Effects.Feedback; +using SLSUtilities.Feedback; +using SLSUtilities.FunctionalAnimation; namespace Cielonos.MainGame.Inventory.Collections { @@ -62,11 +65,25 @@ namespace Cielonos.MainGame.Inventory.Collections return played; } - private bool PlayLightning(CharacterBase target) + private bool PlayLightning(CharacterBase target, bool playStartupFeedback = false) { bool played = PlayTargetedAnimation("GenerateLightning", target); if (played) { + if (_hasLightningConcentrator && playStartupFeedback) + { + float duration = fullBodyFuncAnimSm.collection["GenerateLightning"] + .Interval(IntervalType.Startup).Duration * 2f; + player.feedbackSc.PlayFeedback("DisruptionStartup", runtimeFeedback => + { + FeedbackClip timeScaleModifierClip = runtimeFeedback.Clip("Time"); + if (timeScaleModifierClip != null) + { + timeScaleModifierClip.duration = duration; + } + }); + } + functionSm["Lightning"].Execute(); } return played; diff --git a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Extenders.cs b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Extenders.cs index 7c9fd9863..ca7556292 100644 --- a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Extenders.cs +++ b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Extenders.cs @@ -14,6 +14,7 @@ namespace Cielonos.MainGame.Inventory.Collections private bool _hasCubicScatterIndexer; private bool _hasFusionChargeCore; private bool _hasSigilBreakWedge; + private bool _hasLightningConcentrator; private const int StellarRingQuickcasterSpinAreaUpgradeLevel = 1; private const int FusionChargeCoreExtraFusionStack = 1; @@ -32,6 +33,23 @@ namespace Cielonos.MainGame.Inventory.Collections _hasCubicScatterIndexer = HasExtender(); _hasFusionChargeCore = HasExtender(); _hasSigilBreakWedge = HasExtender(); + _hasLightningConcentrator = HasExtender(); + functionSm?["Lightning"]?.SetRuntimeTag( + nameof(LightningConcentrator), + FunctionData.FunctionUnit.DisruptionTag, + _hasLightningConcentrator); + } + + private AttackUnit ApplyLightningConcentrator(AttackUnit source) + { + if (!_hasLightningConcentrator) return source; + + // AttackData 已把基础倍率结算进 startDamage;clone 后只修改本次 Lightning。 + AttackUnit modified = source.Clone(); + modified.startDamage *= 2f; + modified.damageDeviation *= 2f; + modified.breakthroughType = Breakthrough.Type.Disruption; + return modified; } private bool PlayStellarRingQuickcasterSpinArea() diff --git a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Input.cs b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Input.cs index d97cc3f74..97f2ebc32 100644 --- a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Input.cs +++ b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Input.cs @@ -95,7 +95,11 @@ namespace Cielonos.MainGame.Inventory.Collections { if (functionSm["Lightning"].IsAvailable() && fullBodyFuncAnimSm.CheckPlayability()) { - PlayLightning(RefreshPrimaryTarget()); + bool playStartupFeedback = false; + CharacterBase target = _hasLightningConcentrator + ? RefreshLightningConcentratorTarget(out playStartupFeedback) + : RefreshPrimaryTarget(); + PlayLightning(target, playStartupFeedback); } } } diff --git a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Targeting.cs b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Targeting.cs index 684e05145..b5e956a4c 100644 --- a/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Targeting.cs +++ b/Assets/Scripts/MainGame/Items/MainWeapons/FutureWand/FutureWand_Targeting.cs @@ -21,6 +21,25 @@ namespace Cielonos.MainGame.Inventory.Collections return RefreshPrimaryTarget(TargetingScorePreset.MeleeAttack, radius); } + private Enemy RefreshLightningConcentratorTarget(out bool hasDisruptableTarget, + float radius = DefaultTargetingRadius) + { + _currentTargets.Clear(); + + Enemy target = CombatManager.EnemySm.Query(radius, TargetingScorePreset.RangedAttack) + .OnlyDisruptable(Breakthrough.Type.Disruption) + .Best(); + hasDisruptableTarget = target != null; + target ??= CombatManager.EnemySm.Query(radius, TargetingScorePreset.RangedAttack).LockonFirst(); + + if (target != null) + { + _currentTargets.Add(target); + } + + return target; + } + private Enemy RefreshPrimaryTarget(TargetingScorePreset preset, float radius = DefaultTargetingRadius) { RefreshCurrentTargets(1, radius, preset); diff --git a/Assets/Scripts/MainGame/Items/Submodules/FunctionSubmodule.cs b/Assets/Scripts/MainGame/Items/Submodules/FunctionSubmodule.cs index 4a0de781d..4166c1b8e 100644 --- a/Assets/Scripts/MainGame/Items/Submodules/FunctionSubmodule.cs +++ b/Assets/Scripts/MainGame/Items/Submodules/FunctionSubmodule.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; using Cielonos.MainGame.Characters; @@ -44,6 +45,9 @@ namespace Cielonos.MainGame.Inventory public FunctionData.FunctionUnit data; public float currentCooldown; public float maxCooldown; + + private Dictionary> _runtimeTagsBySource; + public event Action OnPresentationChanged; public RuntimeFunctionUnit(FunctionSubmodule owner, FunctionData.FunctionUnit data) : base(owner) { @@ -51,6 +55,59 @@ namespace Cielonos.MainGame.Inventory maxCooldown = data.cooldown; currentCooldown = 0f; } + + public bool HasTag(string tag) + { + // Runtime tag 只影响当前 FunctionUnit 实例,不修改共享的 FunctionData。 + if (data.tags != null && data.tags.Contains(tag)) return true; + if (_runtimeTagsBySource == null) return false; + + foreach (HashSet tags in _runtimeTagsBySource.Values) + { + if (tags.Contains(tag)) return true; + } + + return false; + } + + public void SetRuntimeTag(string sourceKey, string tag, bool enabled) + { + // sourceKey 让多个装备可以独立添加或撤销同名表现标签。 + bool changed = false; + if (enabled) + { + _runtimeTagsBySource ??= new Dictionary>(); + if (!_runtimeTagsBySource.TryGetValue(sourceKey, out HashSet tags)) + { + tags = new HashSet(); + _runtimeTagsBySource.Add(sourceKey, tags); + } + + changed = tags.Add(tag); + } + else if (_runtimeTagsBySource != null && + _runtimeTagsBySource.TryGetValue(sourceKey, out HashSet tags)) + { + changed = tags.Remove(tag); + if (tags.Count == 0) + { + _runtimeTagsBySource.Remove(sourceKey); + } + } + + if (changed) + { + OnPresentationChanged?.Invoke(); + } + } + + public void RemoveRuntimeTags(string sourceKey) + { + if (_runtimeTagsBySource != null && _runtimeTagsBySource.Remove(sourceKey)) + { + OnPresentationChanged?.Invoke(); + } + } public void Update(float deltaTime) { diff --git a/Assets/Scripts/MainGame/UI/PlayerUI/MainWeapon/MainWeaponFunctionIcon.cs b/Assets/Scripts/MainGame/UI/PlayerUI/MainWeapon/MainWeaponFunctionIcon.cs index e51e47a92..038b85133 100644 --- a/Assets/Scripts/MainGame/UI/PlayerUI/MainWeapon/MainWeaponFunctionIcon.cs +++ b/Assets/Scripts/MainGame/UI/PlayerUI/MainWeapon/MainWeaponFunctionIcon.cs @@ -19,9 +19,24 @@ namespace Cielonos.MainGame.UI private Sequence _frameOutlineSequence; private ItemBase.RuntimeFunctionUnit _functionUnit; + private Color _defaultIconColor; + private Color _defaultFrameColor; + + private void Awake() + { + _defaultIconColor = iconImage.color; + _defaultFrameColor = frame.color; + } + public void Initialize(ItemBase.RuntimeFunctionUnit functionUnit) { + if (_functionUnit != null) + { + _functionUnit.OnPresentationChanged -= RefreshPresentation; + } + this._functionUnit = functionUnit; + _functionUnit.OnPresentationChanged += RefreshPresentation; iconImage.sprite = functionUnit.data.icon != null ? functionUnit.data.icon : null; if (_functionUnit.maxCooldown <= 0) @@ -39,7 +54,15 @@ namespace Cielonos.MainGame.UI costText.text = Mathf.CeilToInt(_functionUnit.data.energyCost).ToString("D"); } - if (_functionUnit.data.tags.Contains("Disruption")) + RefreshPresentation(); + } + + private void RefreshPresentation() + { + iconImage.color = _defaultIconColor; + frame.color = _defaultFrameColor; + + if (_functionUnit.HasTag(FunctionData.FunctionUnit.DisruptionTag)) { Color newColor = Color.yellow; iconImage.color = newColor; @@ -48,6 +71,14 @@ namespace Cielonos.MainGame.UI } } + private void OnDestroy() + { + if (_functionUnit != null) + { + _functionUnit.OnPresentationChanged -= RefreshPresentation; + } + } + public override void UpdateUI() { if (_functionUnit.maxCooldown <= 0f) diff --git a/Assets/Scripts/MainGame/UI/PlayerUI/SupportEquipments/SupportEquipmentIcon.cs b/Assets/Scripts/MainGame/UI/PlayerUI/SupportEquipments/SupportEquipmentIcon.cs index 9bac3d2e6..619ee9abc 100644 --- a/Assets/Scripts/MainGame/UI/PlayerUI/SupportEquipments/SupportEquipmentIcon.cs +++ b/Assets/Scripts/MainGame/UI/PlayerUI/SupportEquipments/SupportEquipmentIcon.cs @@ -20,9 +20,23 @@ namespace Cielonos.MainGame.UI private ItemBase.RuntimeFunctionUnit _functionUnit; private Sequence _frameOutlineSequence; + private Color _defaultIconColor; + private Color _defaultFrameColor; + + private void Awake() + { + _defaultIconColor = iconImage.color; + _defaultFrameColor = frame.color; + } public void Initialize(SupportEquipmentBase supportEquipment) { + if (_functionUnit != null) + { + _functionUnit.OnPresentationChanged -= RefreshPresentation; + _functionUnit = null; + } + if (supportEquipment == null) { DisableAllParts(); @@ -49,11 +63,13 @@ namespace Cielonos.MainGame.UI //如果有多个功能单元,优先显示主功能单元 _functionUnit = supportEquipment.functionSm.mainFunction; } + + _functionUnit.OnPresentationChanged += RefreshPresentation; timerImage.gameObject.SetActive(true); timerText.gameObject.SetActive(true); costText.gameObject.SetActive(true); - iconImage.color = Color.white; + iconImage.color = _defaultIconColor; if (_functionUnit.maxCooldown <= 0) { @@ -70,13 +86,7 @@ namespace Cielonos.MainGame.UI costText.text = Mathf.CeilToInt(_functionUnit.data.energyCost).ToString("D"); } - if (_functionUnit.data.tags.Contains("Disruption")) - { - Color newColor = Color.yellow; - iconImage.color = newColor; - newColor.a = 0.5f; - frame.color = newColor; - } + RefreshPresentation(); } else { @@ -85,10 +95,34 @@ namespace Cielonos.MainGame.UI } } + private void RefreshPresentation() + { + if (_functionUnit == null) return; + + iconImage.color = _defaultIconColor; + frame.color = _defaultFrameColor; + if (_functionUnit.HasTag(FunctionData.FunctionUnit.DisruptionTag)) + { + Color newColor = Color.yellow; + iconImage.color = newColor; + newColor.a = 0.5f; + frame.color = newColor; + } + } + + private void OnDestroy() + { + if (_functionUnit != null) + { + _functionUnit.OnPresentationChanged -= RefreshPresentation; + } + } + public void DisableAllParts() { iconImage.sprite = null; iconImage.color = Color.clear; + frame.color = _defaultFrameColor; timerImage.gameObject.SetActive(false); timerText.gameObject.SetActive(false); costText.gameObject.SetActive(false);