diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index 3712a5a1..f4ce93a5 100644 Binary files a/1.6/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/1.6/Defs/HediffDefs/Hediffs_WULA_DamageShield.xml b/1.6/1.6/Defs/HediffDefs/Hediffs_WULA_DamageShield.xml similarity index 54% rename from 1.6/Defs/HediffDefs/Hediffs_WULA_DamageShield.xml rename to 1.6/1.6/Defs/HediffDefs/Hediffs_WULA_DamageShield.xml index ac879775..1ce69de1 100644 --- a/1.6/Defs/HediffDefs/Hediffs_WULA_DamageShield.xml +++ b/1.6/1.6/Defs/HediffDefs/Hediffs_WULA_DamageShield.xml @@ -1,17 +1,14 @@ - + WULA_DamageShield 一种特殊的能量护盾,可以抵挡受到的伤害。每层护盾可以抵挡一次伤害。 WulaFallenEmpire.Hediff_DamageShield - 10 - 999 - false - false - 1 - true - false + 10 + 999 + (0.6, 0.6, 1.0) + false
  • @@ -19,6 +16,5 @@
  • - false
    \ No newline at end of file diff --git a/1.6/1.6/Defs/ThingDefs/ThingDefs_WULA_Items_DamageShield.xml b/1.6/1.6/Defs/ThingDefs/ThingDefs_WULA_Items_DamageShield.xml new file mode 100644 index 00000000..bbdb55ce --- /dev/null +++ b/1.6/1.6/Defs/ThingDefs/ThingDefs_WULA_Items_DamageShield.xml @@ -0,0 +1,34 @@ + + + + WULA_DamageShieldGenerator + + 一个便携式设备,可以激活并生成一个临时的能量护盾,抵挡即将到来的伤害。 + + Wula/Item/WULA_Syhth_Trainer + Graphic_Single + + 1 + true + false + + 50 + 500 + 0.5 + 1000 + + +
  • Items
  • +
    + Sellable + +
  • + UseItem +
  • +
  • + WULA_DamageShield + 100 +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.6/Defs/ThingDefs_Misc/ThingDefs_WULA_Items_DamageShield.xml b/1.6/1.6/Defs/ThingDefs_Misc/ThingDefs_WULA_Items_DamageShield.xml similarity index 93% rename from 1.6/Defs/ThingDefs_Misc/ThingDefs_WULA_Items_DamageShield.xml rename to 1.6/1.6/Defs/ThingDefs_Misc/ThingDefs_WULA_Items_DamageShield.xml index f0b696f8..b03e2b25 100644 --- a/1.6/Defs/ThingDefs_Misc/ThingDefs_WULA_Items_DamageShield.xml +++ b/1.6/1.6/Defs/ThingDefs_Misc/ThingDefs_WULA_Items_DamageShield.xml @@ -24,7 +24,6 @@
  • UseItem - 使用伤害护盾发生器
  • WULA_DamageShield diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml index e711aa26..743562c7 100644 --- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml +++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml @@ -17,4 +17,9 @@ {PAWN_nameDef} 的维护已完成,但{PAWN_nameDef} 没有可修复的受损部位。 没有可用的零部件来搬运。 + {0} 获得了 {1} 层伤害护盾! + 无法对已死亡的Pawn使用。 + 伤害护盾已达到最大层数。 + 使用:增加 {0} 层伤害护盾 + \ No newline at end of file diff --git a/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml b/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml deleted file mode 100644 index 64c72e36..00000000 --- a/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - {0} 获得了 {1} 层伤害护盾! - 无法对已死亡的Pawn使用。 - 伤害护盾已达到最大层数。 - 使用:增加 {0} 层伤害护盾 - \ No newline at end of file diff --git a/MCP/vector_cache/knowledge_cache.json b/MCP/vector_cache/knowledge_cache.json index 4797faf2..9b4a3b3b 100644 --- a/MCP/vector_cache/knowledge_cache.json +++ b/MCP/vector_cache/knowledge_cache.json @@ -22768,5 +22768,2074 @@ ], "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\RimWorld\\CompUseEffect.txt\n\npublic abstract class CompUseEffect : ThingComp\n{\n\tprivate const float CameraShakeMag = 1f;\n\n\tprivate Effecter effecter;\n\n\tpublic virtual float OrderPriority => 0f;\n\n\tprivate CompProperties_UseEffect Props => (CompProperties_UseEffect)props;\n\n\tpublic virtual void DoEffect(Pawn usedBy)\n\t{\n\t\tif (usedBy.Map == Find.CurrentMap)\n\t\t{\n\t\t\tif (Props.doCameraShake && usedBy.Spawned)\n\t\t\t{\n\t\t\t\tFind.CameraDriver.shaker.DoShake(1f);\n\t\t\t}\n\t\t\tif (Props.moteOnUsed != null)\n\t\t\t{\n\t\t\t\tMoteMaker.MakeAttachedOverlay(usedBy, Props.moteOnUsed, Vector3.zero, Props.moteOnUsedScale);\n\t\t\t}\n\t\t\tif (Props.fleckOnUsed != null)\n\t\t\t{\n\t\t\t\tFleckMaker.AttachedOverlay(usedBy, Props.fleckOnUsed, Vector3.zero, Props.fleckOnUsedScale);\n\t\t\t}\n\t\t\tif (Props.effecterOnUsed != null)\n\t\t\t{\n\t\t\t\tProps.effecterOnUsed.SpawnMaintained(usedBy, new TargetInfo(parent.Position, parent.Map));\n\t\t\t}\n\t\t\teffecter?.Cleanup();\n\t\t}\n\t}\n\n\tpublic virtual void PrepareTick()\n\t{\n\t\tif (Props.warmupEffecter != null)\n\t\t{\n\t\t\tif (effecter == null)\n\t\t\t{\n\t\t\t\teffecter = Props.warmupEffecter.Spawn(parent, parent.Map);\n\t\t\t}\n\t\t\teffecter?.EffectTick(parent, parent);\n\t\t}\n\t}\n\n\tpublic virtual TaggedString ConfirmMessage(Pawn p)\n\t{\n\t\treturn null;\n\t}\n\n\tpublic virtual bool SelectedUseOption(Pawn p)\n\t{\n\t\treturn false;\n\t}\n\n\tpublic virtual AcceptanceReport CanBeUsedBy(Pawn p)\n\t{\n\t\treturn true;\n\t}\n}\n\n", "timestamp": "2025-08-26 18:29:45,809" + }, + "CompProperties_Shield": { + "keywords": [ + "CompProperties_Shield" + ], + "question": "RimWorld CompProperties_Shield C# 代码", + "embedding": [ + 0.009521562606096268, + 0.0188528411090374, + 0.051494017243385315, + 0.00434727780520916, + -0.015295976772904396, + 0.00892875250428915, + -0.040047649294137955, + -0.009287365712225437, + -0.01845763437449932, + 0.1018170490860939, + 0.027342474088072777, + -0.043794795870780945, + -0.0236246008425951, + -0.003856928087770939, + 0.02767913229763508, + 0.04244816675782204, + 0.00869455561041832, + -0.10187559574842453, + -0.0337243378162384, + 0.03413417935371399, + 0.029377058148384094, + 0.07974400371313095, + 0.03076760098338127, + 0.02375633642077446, + -0.0011654949048534036, + -0.011109709739685059, + -1.8596801965031773e-05, + 0.045375626534223557, + 0.0035330778919160366, + 0.009946044534444809, + 0.013568775728344917, + -0.03240697830915451, + 0.005628041457384825, + -0.017008541151881218, + -0.04139428213238716, + 0.04578547179698944, + -0.04578547179698944, + -0.00867259968072176, + -0.07693364471197128, + 0.007128364406526089, + -0.00873846746981144, + -0.01936514675617218, + 0.036944542080163956, + 0.027357110753655434, + 0.004822989925742149, + 0.03214350715279579, + 0.06539945304393768, + -0.05784660577774048, + -0.03466112166643143, + 0.07582120597362518, + 0.034836769104003906, + 0.011248763650655746, + -0.04765904322266579, + 0.021546103060245514, + 0.04019402340054512, + 0.05483132228255272, + 0.007110067643225193, + 0.05207950994372368, + -0.022146232426166534, + 0.012844229117035866, + 0.017140276730060577, + -0.00882629118859768, + -0.014468969777226448, + -0.013861522078514099, + 0.025102967396378517, + -0.029172135517001152, + -0.0714300200343132, + -0.0006586784147657454, + 0.0031525082886219025, + -0.014747078530490398, + 0.02914286218583584, + 0.004958384670317173, + -0.0006641673971898854, + 0.019467607140541077, + -0.006217192392796278, + 0.0587833896279335, + 0.013568775728344917, + -0.014403101988136768, + -0.046985726803541183, + 0.024092992767691612, + -0.012822273187339306, + -0.00819688756018877, + -0.027605945244431496, + -0.022365791723132133, + 0.02091670036315918, + 0.07658234983682632, + 0.010260745882987976, + -0.001965057337656617, + -0.002188276033848524, + 0.03984272852540016, + 0.05491914600133896, + -0.002320011844858527, + 0.016496235504746437, + -0.031909309327602386, + 0.0025048076640814543, + 0.004149673972278833, + -0.015530173666775227, + 0.04019402340054512, + -0.009236135520040989, + 0.011885486543178558, + -0.027898691594600677, + 0.01772576943039894, + -0.04549272358417511, + 0.052606452256441116, + -0.012119683437049389, + 0.03782277926802635, + -0.018516182899475098, + 0.0013932879082858562, + -0.011695201508700848, + 0.05207950994372368, + -0.009484969079494476, + -0.02280491031706333, + 0.014886132441461086, + 0.06264764070510864, + 0.019833538681268692, + -0.022746361792087555, + 0.010963336564600468, + -0.021165532991290092, + -0.0029768606182187796, + 0.019174860790371895, + 0.017111001536250114, + -0.007516252808272839, + -0.023126931861042976, + -0.03319739177823067, + 0.04803961515426636, + 0.013166249729692936, + 0.010751095600426197, + 0.024180816486477852, + -0.02823534980416298, + 0.016642607748508453, + -0.01067059114575386, + -0.028630556538701057, + 0.007029562722891569, + -0.01368587464094162, + -0.005053527187556028, + -0.01416158676147461, + -0.0019613979384303093, + 0.020799601450562477, + -0.10287093371152878, + 0.03240697830915451, + -0.029625892639160156, + 0.01683289371430874, + 0.017198825255036354, + 0.029801540076732635, + 0.11159476637840271, + -0.05948598310351372, + -0.030240658670663834, + -0.007091771345585585, + 0.017930690199136734, + -0.007465022150427103, + -0.0006893252721056342, + -0.018838202580809593, + -0.027488846331834793, + 0.05380671098828316, + 0.03056268021464348, + -0.027298562228679657, + 0.021399730816483498, + 0.006978332065045834, + -0.013722467236220837, + -0.04625386372208595, + -0.028425633907318115, + -0.026405686512589455, + 0.00608911644667387, + -0.003223865060135722, + 0.03269972652196884, + -0.023009832948446274, + -0.027079002931714058, + 0.030650503933429718, + 0.012939372099936008, + 0.001621995703317225, + 0.006912464275956154, + -0.00912635587155819, + -0.031440917402505875, + -0.005840281955897808, + 0.023039108142256737, + -0.003919136710464954, + 0.01570582203567028, + 0.08144193142652512, + -0.012668581679463387, + 0.027049727737903595, + 0.036944542080163956, + -9.868741472018883e-05, + 0.027532758191227913, + 0.005232834257185459, + 0.024210091680288315, + -0.019570067524909973, + -0.026186127215623856, + 0.029450245201587677, + -0.013202843256294727, + 0.04666370898485184, + -0.020111648365855217, + 0.0714300200343132, + -0.04382407292723656, + -0.0030335800256580114, + 0.002052881056442857, + -0.02621540240943432, + 0.0019559089560061693, + 0.05383598431944847, + -0.06762432307004929, + -0.0037325110752135515, + 0.013239436782896519, + -0.03489531949162483, + -0.032816823571920395, + -0.0246199369430542, + 0.04584401845932007, + -0.010187559761106968, + -0.02078496478497982, + 0.0033812159672379494, + 0.04350205138325691, + -0.015427712351083755, + 0.048098161816596985, + 0.004526584409177303, + -0.005993973929435015, + -0.03846682235598564, + 0.0051340325735509396, + -0.0018845521844923496, + -0.03870101645588875, + 0.023946620523929596, + 0.0211801715195179, + 0.014395782724022865, + -0.051113445311784744, + 0.007948053069412708, + 0.01144636794924736, + 0.007333286572247744, + 0.0377056822180748, + 0.00835057906806469, + 0.03243625536561012, + -0.0026164171285927296, + 0.04318002983927727, + -0.02530789002776146, + -0.004504628479480743, + -0.0006486152997240424, + -0.04675153270363808, + 0.00506816478446126, + 0.038496095687150955, + -0.012097727507352829, + -0.0011764728697016835, + -0.055504634976387024, + 0.011160939931869507, + 0.031997133046388626, + -0.0001453438017051667, + 0.04531707614660263, + 0.021121621131896973, + -0.0035824787337332964, + -0.020126285031437874, + -0.04376552253961563, + 0.0009880176512524486, + -0.015369163826107979, + 0.005898831412196159, + -0.02896721474826336, + 0.018428359180688858, + 0.03559790924191475, + -0.01683289371430874, + -0.03334376588463783, + 0.010290021076798439, + -0.00017141648277174681, + 0.02211695909500122, + -0.015383800491690636, + -0.005298702046275139, + -0.013824928551912308, + -0.0298308152705431, + 0.034280553460121155, + -0.00022687812452204525, + 0.028835479170084, + -0.03182148560881615, + 0.019057761877775192, + 0.055885206907987595, + -0.013985938392579556, + 0.018486907705664635, + -0.00014763088256586343, + -0.02147291786968708, + 0.02599584311246872, + 0.02568845823407173, + -0.006736816838383675, + 0.027781592682003975, + -0.005104757845401764, + 0.02956734225153923, + -0.002918311394751072, + 0.015413075685501099, + -0.00828471127897501, + 0.024210091680288315, + -0.014754396863281727, + -0.0006262019160203636, + 0.01910167559981346, + -0.03158729150891304, + 0.009689891710877419, + 0.006469686049968004, + -0.013605369254946709, + -0.0012524038320407271, + -0.015983929857611656, + 0.00725278165191412, + -0.00574513990432024, + 0.015574085526168346, + 0.028440270572900772, + -0.01760867051780224, + 0.030738327652215958, + -0.019438331946730614, + 0.014578749425709248, + -0.002925629960373044, + 0.003093959065154195, + -0.024883408099412918, + 0.022570714354515076, + -0.009258091449737549, + -0.013883478008210659, + 0.029201410710811615, + 0.01621812768280506, + -0.020301932469010353, + -0.10410046577453613, + 0.03758858144283295, + -0.08032949268817902, + 0.00938250869512558, + -0.0035385668743401766, + -0.03826189786195755, + -0.016364499926567078, + -0.05026448518037796, + -0.0033482820726931095, + -0.01634986326098442, + 0.008409127593040466, + 0.035568635910749435, + 0.03545153886079788, + -0.061301007866859436, + 0.0024810221511870623, + -0.054070182144641876, + 0.011197533458471298, + 0.007552845869213343, + -0.026244675740599632, + 0.0465758852660656, + 0.024737033993005753, + 0.007713856175541878, + 0.011863530613481998, + -0.025585997849702835, + -0.00014957490202505141, + 0.014644617214798927, + 0.055065516382455826, + -0.029420970007777214, + 0.0157497338950634, + -0.0094264205545187, + 0.017520846799016, + -0.0013420573668554425, + 0.027532758191227913, + 0.011043841950595379, + -0.057173289358615875, + -0.005679271649569273, + -0.045463450253009796, + -0.014249410480260849, + 0.0204043947160244, + 0.05246007815003395, + 0.056909818202257156, + -0.0204043947160244, + 0.005177944432944059, + -0.009243453852832317, + 0.02934778295457363, + -0.004530244041234255, + -0.0006792621570639312, + 0.009097080677747726, + -0.01768185757100582, + -0.0037215331103652716, + 0.0017537312814965844, + -0.07664089649915695, + 0.015105691738426685, + 0.03287537395954132, + -0.0038862028159201145, + 0.019306596368551254, + -0.00968257337808609, + 0.03834972158074379, + 0.021106984466314316, + 0.012427066452801228, + 0.05796370282769203, + -0.032992471009492874, + 0.013122337870299816, + -0.048098161816596985, + -0.05319194495677948, + 0.04511215537786484, + 0.031148171052336693, + -0.0031397005077451468, + 0.0636429712176323, + 0.028425633907318115, + 0.004709550645202398, + -0.045082878321409225, + 0.04604894295334816, + -0.021575378254055977, + 0.018106337636709213, + -0.00846035871654749, + -0.0507914274930954, + -0.021546103060245514, + 0.0009230646537616849, + 0.01798924058675766, + 0.012844229117035866, + 0.053133394569158554, + -0.04083806276321411, + 0.06007147207856178, + 0.018267348408699036, + 0.0025834832340478897, + -0.01588146947324276, + 0.025468898937106133, + 0.014000575989484787, + -0.0028231688775122166, + 0.027693768963217735, + 0.057817328721284866, + 0.004453398287296295, + 0.01759403385221958, + -0.006158643402159214, + -0.05366033688187599, + -0.001098712207749486, + 0.02156074158847332, + 0.03524661436676979, + 0.0022504846565425396, + 0.018530819565057755, + -0.03179221227765083, + -0.00011075174552388489, + -0.05585592985153198, + -0.026961904019117355, + 0.03673962131142616, + 0.0015378311509266496, + 0.021399730816483498, + 0.00881897285580635, + -0.011980628594756126, + -0.018003877252340317, + 0.0026603289879858494, + -0.017447659745812416, + -0.020623954012989998, + 0.029333146288990974, + -0.040223296731710434, + -0.01372978650033474, + 0.009155630134046078, + 0.062120694667100906, + -0.034836769104003906, + -0.01949688233435154, + -0.0035330778919160366, + 0.0034141498617827892, + 0.00023099486134015024, + -0.011336587369441986, + -0.08858492970466614, + 0.055504634976387024, + -0.007347923703491688, + -0.01914558745920658, + 0.02142900601029396, + 0.04751267284154892, + -0.04601966589689255, + -0.010795007459819317, + -0.05761240795254707, + -0.00439118966460228, + 0.01889675296843052, + -0.04358987510204315, + -0.040955159813165665, + -0.048390910029411316, + -0.0035678416024893522, + 0.007611395325511694, + 0.026537422090768814, + -0.011482960544526577, + -0.04285801202058792, + -0.0337243378162384, + 0.04479013383388519, + 0.03843754529953003, + -0.004577815067023039, + -0.0012203847290948033, + -0.02737174928188324, + -0.06510670483112335, + -0.03387070819735527, + -0.03340231627225876, + 0.036388322710990906, + 0.003300710814073682, + -0.03179221227765083, + 0.022687813267111778, + -0.013151613064110279, + -0.018560094758868217, + -0.02160465344786644, + 0.0018461293075233698, + 0.016803618520498276, + -0.04748339578509331, + -0.024195455014705658, + 0.012346561066806316, + -0.025468898937106133, + -0.009280047379434109, + -0.005840281955897808, + -0.0507914274930954, + -0.007691900245845318, + 0.07096162438392639, + 0.0115341916680336, + 0.06094971299171448, + 0.007461362984031439, + 0.021370455622673035, + -0.005968358367681503, + 0.05685126781463623, + -0.1574973315000534, + -0.01910167559981346, + 0.011658607982099056, + 0.01759403385221958, + 0.00949228834360838, + -0.030182110145688057, + -0.03489531949162483, + -0.027898691594600677, + 0.04350205138325691, + 0.05488986894488335, + -0.04850800707936287, + 0.014220135286450386, + -0.041160084307193756, + 0.006063500884920359, + 0.018794290721416473, + -0.07061032950878143, + 0.00759675819426775, + 0.021209444850683212, + 0.04247744008898735, + -0.020023824647068977, + -0.006670949049293995, + -0.022058408707380295, + -0.037120189517736435, + 0.016803618520498276, + 0.006078138016164303, + -0.009177586063742638, + -0.017052453011274338, + -0.02142900601029396, + 0.03834972158074379, + -0.010172922164201736, + -0.021809574216604233, + -0.01217823289334774, + 0.026669157668948174, + 0.006949057336896658, + 0.030094286426901817, + 0.010385163128376007, + 0.032465528696775436, + 0.016203489154577255, + 0.04798106476664543, + -0.00433629984036088, + -0.010560810565948486, + -0.009946044534444809, + 9.0225221356377e-05, + -0.04145282879471779, + 0.01643768697977066, + -0.05289919674396515, + -0.004910813644528389, + 0.026800893247127533, + 0.004420464392751455, + 0.013078426010906696, + 0.03542226180434227, + 0.039872001856565475, + 0.02832317352294922, + 0.012866185046732426, + 0.06762432307004929, + 0.0942642018198967, + 0.034836769104003906, + 0.029157498851418495, + 0.01293205376714468, + 0.01093406230211258, + 0.01790141686797142, + 0.04145282879471779, + 0.03624195232987404, + -0.01579364575445652, + 0.022365791723132133, + -0.007161298301070929, + 0.006092775613069534, + 0.0004720528668258339, + -0.022658538073301315, + -0.0629989355802536, + 0.04455593600869179, + 0.019130948930978775, + 0.017740406095981598, + 0.06452121585607529, + 0.002903674030676484, + -0.024473562836647034, + 0.0022980559151619673, + -0.009411782957613468, + 0.00892875250428915, + -0.07459167391061783, + -0.025966567918658257, + 0.022029133513569832, + -0.054977692663669586, + 0.0151935163885355, + -0.0204043947160244, + -0.0022376771084964275, + -0.019394420087337494, + 0.014564111828804016, + -0.04221396893262863, + 0.03799842670559883, + 0.029157498851418495, + -0.016686519607901573, + 0.015208153054118156, + 0.016730431467294693, + 0.0652238056063652, + 0.0186332818120718, + -0.009887495078146458, + 0.0034086608793586493, + 0.0067697507329285145, + -0.006872211582958698, + 0.042711637914180756, + 0.015530173666775227, + -0.006912464275956154, + -0.01336385402828455, + 0.05052795633673668, + 0.0038605874869972467, + 0.05307484418153763, + 0.029128223657608032, + -0.056441422551870346, + -0.01687680557370186, + -0.027562033385038376, + 0.031353093683719635, + -0.013144293799996376, + 0.027781592682003975, + 0.018223436549305916, + 0.004091124981641769, + -0.005642678588628769, + -0.019789626821875572, + 0.01004850585013628, + 0.013605369254946709, + 0.032465528696775436, + -0.03196785971522331, + -0.007552845869213343, + -0.025922656059265137, + 0.03697381541132927, + -0.004844945855438709, + 0.028469545766711235, + 0.014651935547590256, + 0.03357796370983124, + 0.004156992770731449, + 0.0017217122949659824, + -0.01570582203567028, + 0.009528880938887596, + -0.0049620443023741245, + 0.008299347944557667, + 0.0024554068222641945, + -0.008914114907383919, + 0.0033537710551172495, + 0.002347456756979227, + -0.03343158960342407, + -0.027620581910014153, + -0.03469039872288704, + -0.01129999477416277, + -0.040691688656806946, + 0.023083020001649857, + -0.033929258584976196, + -0.026405686512589455, + 0.003445254173129797, + -0.018911389634013176, + -0.0017802614020183682, + 0.03249480202794075, + -0.04423391819000244, + -0.02861591801047325, + 0.0005278575699776411, + 0.0182966236025095, + 0.03389998525381088, + 0.0211801715195179, + 0.0030335800256580114, + -0.003419638844206929, + -0.025029780343174934, + -0.03735438734292984, + -0.010904787108302116, + -0.021458279341459274, + -0.04716137424111366, + -0.04648806154727936, + -0.0052035595290362835, + -0.01566191017627716, + 0.00649896077811718, + 0.021677838638424873, + 0.007256440818309784, + -0.06264764070510864, + 0.00826275534927845, + -0.004354596138000488, + 0.0037178739439696074, + -0.007926097139716148, + -0.0016796300187706947, + -0.03132382035255432, + -0.030884699895977974, + -0.024166179820895195, + -0.040779512375593185, + -0.005818326026201248, + 0.03267044946551323, + -0.012405110523104668, + -0.007194232195615768, + 0.012917416170239449, + -0.007362561300396919, + -0.014959319494664669, + -0.026112940162420273, + 0.04962044209241867, + 0.009587430395185947, + 0.030094286426901817, + 0.027401022613048553, + -0.056529246270656586, + -0.00901657622307539, + 0.013598049990832806, + 0.0145275192335248, + -0.01555944886058569, + -0.037120189517736435, + -0.043970443308353424, + -0.038027700036764145, + -0.04871293157339096, + 0.019599342718720436, + -0.026200763881206512, + 0.024941956624388695, + -0.006063500884920359, + 0.009894813410937786, + 0.03911086171865463, + -0.06416991353034973, + 0.01936514675617218, + 0.006422114558517933, + -0.05243080481886864, + -0.021926673129200935, + -0.06838545948266983, + -0.030152834951877594, + 0.01967252977192402, + 0.027518121525645256, + 0.07224970310926437, + -0.030913975089788437, + 0.027781592682003975, + 0.024327190592885017, + 0.010538854636251926, + -0.0006870381766930223, + -0.013312622904777527, + -0.03466112166643143, + 0.013671237044036388, + -0.03791060298681259, + 0.0014692188706248999, + 0.0503523088991642, + 0.05462639778852463, + -0.022760998457670212, + -0.017462296411395073, + 0.03322666883468628, + 0.007933415472507477, + -0.021077709272503853, + -0.05325049161911011, + 0.013715148903429508, + -0.038027700036764145, + 0.03635904937982559, + -0.025834832340478897, + 0.031616564840078354, + -0.05755385756492615, + -0.0009505095658823848, + -0.0064038182608783245, + 0.004877879749983549, + -0.0434727780520916, + 0.025161515921354294, + -0.023639237508177757, + -0.0251761544495821, + 0.022146232426166534, + 0.012771042995154858, + 0.036300498992204666, + 0.030738327652215958, + 0.02380024828016758, + -0.016584059223532677, + -0.00025889722746796906, + -0.023595325648784637, + -0.019423695281147957, + -0.034456200897693634, + 0.054040905088186264, + -0.04897640272974968, + 0.09280047565698624, + -0.003911817912012339, + 0.007223506923764944, + 0.022951284423470497, + 0.04771759361028671, + -0.006985650863498449, + 0.02375633642077446, + -0.01816488802433014, + 0.03706163913011551, + -0.033460862934589386, + 0.014403101988136768, + 0.003229354042559862, + 0.027825504541397095, + -0.006455048453062773, + 0.050293758511543274, + -0.0035568636376410723, + -0.006253785919398069, + -0.03480749577283859, + 0.02211695909500122, + 0.043531324714422226, + 0.005562173668295145, + 0.03480749577283859, + -0.03732511028647423, + 0.0024462584406137466, + -0.018091700971126556, + 0.005027912091463804, + -0.032641176134347916, + -0.006308675743639469, + -0.03141164407134056, + 0.021590014919638634, + 0.03773495554924011, + 0.027298562228679657, + -0.002314522862434387, + -0.010963336564600468, + -0.042155418545007706, + 0.0022687811870127916, + -0.005646337755024433, + -0.04089661315083504, + 0.04642951115965843, + -0.017974602058529854, + 0.012017222121357918, + 0.024195455014705658, + -0.002720707794651389, + -0.024766309186816216, + 0.003922795876860619, + -0.022760998457670212, + -0.018311260268092155, + 0.004515606444329023, + 0.062120694667100906, + -0.007794361561536789, + 0.020843513309955597, + 0.06013002246618271, + -0.0035294187255203724, + 0.11071652919054031, + 0.018779654055833817, + 0.005082801915705204, + -0.012858866713941097, + -0.011453686282038689, + -0.039140135049819946, + -0.045639097690582275, + 0.004544881172478199, + -0.002729856176301837, + -0.014007894322276115, + -0.007545527536422014, + -0.03442692756652832, + 0.00509012071415782, + -0.04247744008898735, + -0.010677909478545189, + 0.04420464113354683, + 0.026230039075016975, + 0.04089661315083504, + 0.0030317504424601793, + -0.017023177817463875, + -0.018223436549305916, + 0.047922514379024506, + 0.03188003599643707, + 0.01366391871124506, + 0.033929258584976196, + -0.009001938626170158, + 0.020902061834931374, + 0.0019485903903841972, + -0.01621812768280506, + -0.023814884945750237, + 0.00584394158795476, + -0.004907154478132725, + -0.028381722047924995, + 0.006799024995416403, + 0.005170625634491444, + -0.010882831178605556, + 0.014454332180321217, + 0.02289273589849472, + 0.011343906633555889, + -0.004782737232744694, + 0.01190012414008379, + 0.005492646247148514, + -0.02879156544804573, + -0.05064505338668823, + 0.005595107562839985, + -0.0092068612575531, + -0.025717733427882195, + -0.0015844876179471612, + 0.02715218812227249, + -0.03328521549701691, + -0.020799601450562477, + -0.023302579298615456, + 0.022717086598277092, + -0.06516525149345398, + 0.0596616305410862, + 0.010509580373764038, + -0.005005956161767244, + -0.022760998457670212, + 0.03471967205405235, + 0.0033610896207392216, + 0.031528741121292114, + -0.038847390562295914, + 0.017286648973822594, + 0.009265409782528877, + -0.036300498992204666, + -0.01734519936144352, + 0.036212675273418427, + 0.02590801939368248, + -0.004555859137326479, + 0.06311602890491486, + 0.0026273950934410095, + -0.011373180896043777, + 0.038847390562295914, + 0.062471989542245865, + 0.08079788833856583, + -0.03205568343400955, + 0.02479558438062668, + 0.01927732303738594, + -0.050762150436639786, + -0.04789324104785919, + 0.002382220234721899, + -0.003999641630798578, + -0.04429246485233307, + -0.061476655304431915, + -0.04200904816389084, + 0.005880534648895264, + 0.023551413789391518, + 0.03179221227765083, + 0.027079002931714058, + -0.007161298301070929, + -0.033929258584976196, + -0.0964890718460083, + 0.056909818202257156, + 0.011160939931869507, + -0.018267348408699036, + 0.03226060792803764, + 0.03407563269138336, + 0.0204043947160244, + 0.0137517424300313, + -0.08062224090099335, + -0.014029850251972675, + 0.009602067992091179, + 0.0037215331103652716, + 0.01198794785887003, + 0.033460862934589386, + 0.01820879988372326, + -0.007205210160464048, + -0.026273950934410095, + 0.004438760690391064, + 0.00614400627091527, + -0.007424769923090935, + -0.011109709739685059, + 0.026800893247127533, + -0.040135473012924194, + -0.031235994771122932, + 0.027122914791107178, + 0.0008887584554031491, + -0.008357897400856018, + 0.0017445830162614584, + 0.024649210274219513, + 0.060832612216472626, + 0.06727302074432373, + -0.03466112166643143, + 0.005829303991049528, + -0.015105691738426685, + 0.038027700036764145, + 0.012690537609159946, + -0.002936607925221324, + 0.009850901551544666, + -0.012273374944925308, + 0.06469686329364777, + -0.028162162750959396, + -0.04165775328874588, + 0.011848893016576767, + -0.01721346378326416, + 0.06329167634248734, + 0.014417739585042, + 0.04464375972747803, + -0.009785033762454987, + 0.023214755579829216, + -0.05000101029872894, + -0.05184531211853027, + -0.022131595760583878, + -0.002363923704251647, + 0.0033592600375413895, + -0.00925077311694622, + 0.009331277571618557, + 0.04230179265141487, + -0.005598766729235649, + 0.018750378862023354, + -0.013180887326598167, + 0.009236135520040989, + 0.04757121950387955, + -0.03553936257958412, + 0.008504270575940609, + -0.005942743271589279, + -0.015691183507442474, + -0.011717157438397408, + 0.023258667439222336, + 0.02315620705485344, + 0.015003231354057789, + -0.015032505616545677, + -0.02582019381225109, + 0.03021138347685337, + 0.05134764313697815, + -0.0038422909565269947, + -0.054040905088186264, + 0.03984272852540016, + -0.013620005920529366, + -0.04593184217810631, + -0.0032055682968348265, + 0.044526662677526474, + 0.012858866713941097, + -0.03562718629837036, + 0.03176293894648552, + -0.0011993437074124813, + -0.028513457626104355, + -0.01239779219031334, + 0.012902778573334217, + -0.037120189517736435, + -0.0882921814918518, + -0.050030287355184555, + 0.006367224734276533, + 0.04411681741476059, + 0.014373826794326305, + -0.03963780403137207, + 0.028733016923069954, + -0.0021096006967127323, + -0.00895070843398571, + 0.017623307183384895, + 0.0020986227318644524, + 0.017491571605205536, + -0.028162162750959396, + -0.00947033241391182, + -0.015032505616545677, + 0.02621540240943432, + -0.013334578834474087, + 0.022497527301311493, + 0.009367871098220348, + 0.0009925918420776725, + -0.04423391819000244, + 0.05617795139551163, + -0.010363207198679447, + 0.06709737330675125, + 0.0021114302799105644, + 0.024136904627084732, + 0.008914114907383919, + 0.013100381940603256, + 0.02134118229150772, + -0.060364220291376114, + 0.023551413789391518, + -0.01560336071997881, + -0.002336478792130947, + 0.0785144716501236, + -0.007278396748006344, + 0.051494017243385315, + -0.024810221046209335, + 0.002396857598796487, + -0.022790273651480675, + -0.034280553460121155, + 0.024092992767691612, + 0.04716137424111366, + -0.027430297806859016, + -0.025234702974557877, + 0.0012862526345998049, + 0.013927389867603779, + -0.011841574683785439 + ], + "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\RimWorld\\CompProperties_Shield.txt\n\npublic class CompProperties_Shield : CompProperties\n{\n\tpublic int startingTicksToReset = 3200;\n\n\tpublic float minDrawSize = 1.2f;\n\n\tpublic float maxDrawSize = 1.55f;\n\n\tpublic float energyLossPerDamage = 0.033f;\n\n\tpublic float energyOnReset = 0.2f;\n\n\tpublic bool blocksRangedWeapons = true;\n\n\tpublic CompProperties_Shield()\n\t{\n\t\tcompClass = typeof(CompShield);\n\t}\n}\n\n", + "timestamp": "2025-08-26 18:34:16,279" + }, + "C#-CompShield": { + "keywords": [ + "CompShield", + "C#" + ], + "question": "RimWorld CompShield C# 代码", + "embedding": [ + 0.011226645670831203, + 0.018389001488685608, + 0.04453849792480469, + -0.006092602852731943, + 0.004148644395172596, + -0.00831262581050396, + 0.0341707207262516, + -0.008864755742251873, + -0.011234314180910587, + 0.10643842071294785, + 0.020229434594511986, + -0.03423206880688667, + -0.027468474581837654, + -0.0059392331168055534, + 0.008304957300424576, + 0.049292951822280884, + 0.007035824935883284, + -0.09459829330444336, + -0.026716964319348335, + 0.029891712591052055, + -0.015490317717194557, + 0.05944601073861122, + 0.04052021726965904, + 0.03871045634150505, + 0.03432409092783928, + 0.003356874454766512, + -0.03450813516974449, + -0.0018461851868778467, + -0.013588536530733109, + -0.006464523728936911, + 0.007357900962233543, + -0.021839814260601997, + 0.020244771614670753, + 0.003663613460958004, + 0.0014876839704811573, + 0.058740511536598206, + -0.04594949632883072, + -0.010827885009348392, + -0.06545809656381607, + -0.006801936775445938, + -0.004505228716880083, + -0.014547095634043217, + 0.049078233540058136, + 0.023956313729286194, + 0.004650929477065802, + 0.03108799457550049, + 0.04579612612724304, + -0.05355662479996681, + -0.015198915265500546, + 0.03871045634150505, + 0.051317427307367325, + 0.006192293018102646, + -0.04521332308650017, + 0.02660960517823696, + 0.025858094915747643, + 0.046440280973911285, + -0.01428636722266674, + 0.036256544291973114, + -0.012852362357079983, + 0.01789821870625019, + 0.019892022013664246, + -0.028695430606603622, + -0.029692331328988075, + -0.006614058744162321, + -0.01688598096370697, + -0.050765298306941986, + -0.07827978581190109, + 0.020505499094724655, + -0.025029899552464485, + -0.016916653141379356, + -0.01891045644879341, + 0.00459341611713171, + 0.010275755077600479, + 0.011257319711148739, + -0.026103485375642776, + 0.06840278953313828, + 0.009202169254422188, + -0.005038187373429537, + -0.043403562158346176, + 0.036379240453243256, + -0.016103794798254967, + -0.007668474223464727, + -0.0336492657661438, + -0.016502555459737778, + 0.02676297537982464, + 0.05895522981882095, + 0.026793649420142174, + 0.007584121078252792, + -0.0006599680637009442, + 0.06478326767683029, + 0.03361859172582626, + 0.021195663139224052, + 0.028741441667079926, + -0.03383330628275871, + 0.013067079707980156, + -0.03613385185599327, + -0.04303547739982605, + 0.055826492607593536, + -0.019171185791492462, + 0.01044446136802435, + -0.004512897226959467, + 0.0034028852824121714, + -0.017683500424027443, + 0.04392502084374428, + -0.0269010066986084, + 0.027928583323955536, + -0.012545623816549778, + 0.039630673825740814, + -0.01493051927536726, + 0.03981471806764603, + -0.026793649420142174, + -0.00891843531280756, + 0.00956258736550808, + 0.07797304540872574, + 0.022668009623885155, + -0.04426243156194687, + 0.0006153950234875083, + -0.013105422258377075, + -0.007821843959391117, + 0.026578931137919426, + 0.012683656066656113, + -0.0134505033493042, + -0.011034933850169182, + -0.03438543900847435, + 0.05886320769786835, + 0.0053640976548194885, + 0.024646475911140442, + 0.020965607836842537, + -0.03013710305094719, + 0.03521363437175751, + -0.007434585597366095, + -0.018204957246780396, + 0.01205484103411436, + -0.008757397532463074, + -0.013373819179832935, + 0.03588845953345299, + -0.01575104519724846, + 0.027376452460885048, + -0.09005855768918991, + 0.024569790810346603, + -0.030244462192058563, + 0.004846475552767515, + 0.024232378229498863, + 0.03358791768550873, + 0.0917762964963913, + -0.0601208359003067, + -0.02397165074944496, + 0.042606040835380554, + 0.021471727639436722, + -0.0091484896838665, + -0.009163826704025269, + -0.017468784004449844, + -0.02660960517823696, + 0.04825003817677498, + 0.015114562585949898, + -0.029676994308829308, + 0.025244615972042084, + -0.016778621822595596, + -0.018818436190485954, + -0.04736049473285675, + -0.01791355572640896, + -0.05505964532494545, + 0.003956932574510574, + 0.0002271785488119349, + 0.008964446373283863, + -0.038557086139917374, + -0.02276003174483776, + 0.009669945575296879, + 0.023296823725104332, + -0.009677614085376263, + -0.003429725067690015, + -0.017330750823020935, + -0.0552743598818779, + -0.019339891150593758, + 0.011525716632604599, + -0.002200852148234844, + 0.019953370094299316, + 0.09613199532032013, + 0.010222076438367367, + 0.0398760661482811, + 0.009470565244555473, + 0.013757242821156979, + 0.03144074231386185, + 0.004696940537542105, + 0.027468474581837654, + -0.008642369881272316, + -0.008657706901431084, + 0.03147141635417938, + 0.003492990043014288, + 0.024554453790187836, + -0.020229434594511986, + 0.09975150972604752, + -0.034630827605724335, + -0.016364524140954018, + 0.014332378283143044, + -0.03818900138139725, + -0.006261309143155813, + 0.03236095979809761, + -0.09950611740350723, + -0.02424771524965763, + 0.012675987556576729, + -0.04328086972236633, + -0.03521363437175751, + -0.019140511751174927, + 0.05015182122588158, + 0.005088032688945532, + -0.009777304716408253, + 0.005459953565150499, + 0.046440280973911285, + -0.018603717908263206, + 0.053679317235946655, + 0.008389310911297798, + -0.011119287461042404, + -0.04426243156194687, + -0.008189930580556393, + -0.0031498258467763662, + -0.029508288949728012, + 0.048679474741220474, + 0.012162200175225735, + 0.02736111544072628, + -0.059814099222421646, + 0.014063981361687183, + 0.003602265613153577, + -0.0073502324521541595, + 0.032330285757780075, + 0.01960062049329281, + 0.010720526799559593, + 0.011073276400566101, + 0.06533540040254593, + -0.02007606439292431, + 0.012491944245994091, + 0.019217196851968765, + -0.037667546421289444, + -0.010781874880194664, + 0.032606352120637894, + -0.01573570817708969, + -0.02466181293129921, + -0.044017042964696884, + 0.015720371156930923, + 0.032115571200847626, + 0.0007117302739061415, + 0.04450782388448715, + 7.111311424523592e-05, + 0.0013256875099614263, + -0.03358791768550873, + -0.007323392666876316, + -0.0017953815404325724, + -0.004907823633402586, + -0.02007606439292431, + -0.01710069738328457, + -0.001586415572091937, + 0.005164717324078083, + -0.015582339838147163, + -0.014508753083646297, + -0.0007754744729027152, + 0.029492951929569244, + 0.013205112889409065, + -0.012752672657370567, + -0.017591480165719986, + -0.024968551471829414, + -0.04018280282616615, + 0.02829666994512081, + 0.014186677522957325, + 0.02229992300271988, + -0.03601115569472313, + 0.0074384198524057865, + 0.0634949654340744, + -0.018082261085510254, + 0.010896901600062847, + -0.008535011671483517, + -0.025183269754052162, + 0.01973865181207657, + 0.027729202061891556, + -0.03107265755534172, + 0.032054223120212555, + 0.0009930673986673355, + 0.0528511218726635, + 0.00302329589612782, + 0.02208520472049713, + 0.005425445269793272, + 0.00929419044405222, + -0.012008830904960632, + 0.03950797766447067, + -0.0010199070675298572, + -0.019692640751600266, + 0.03674732893705368, + 0.021180326119065285, + -0.03325050324201584, + 0.0023465531412512064, + -0.010360108688473701, + -0.01296739000827074, + 0.0019017815357074142, + 0.0017177382251247764, + 0.030382495373487473, + -0.03594980761408806, + 0.04837273433804512, + -0.0170853603631258, + -0.0008339465712197125, + 0.016855306923389435, + -0.022253911942243576, + -0.02325081266462803, + 0.011878466233611107, + -0.011073276400566101, + 0.010352440178394318, + 0.02795925736427307, + -0.024738498032093048, + -0.010513477958738804, + -0.06693044304847717, + 0.031992875039577484, + -0.04950767010450363, + -0.0168246328830719, + -0.02363423816859722, + -0.055028971284627914, + -0.03019845113158226, + -0.030750581994652748, + -0.028664756566286087, + -0.019876684993505478, + -0.003604182740673423, + 0.03383330628275871, + 0.04499860480427742, + -0.06236003339290619, + -0.002868009265512228, + -0.037054065614938736, + 0.010521146468818188, + 0.02858807146549225, + -0.03223826363682747, + 0.030244462192058563, + 0.020382804796099663, + 0.02019876055419445, + 0.026839658617973328, + -0.015382959507405758, + 0.0051417117938399315, + 0.007380906492471695, + 0.04647095501422882, + -0.0269010066986084, + 0.01912517473101616, + -0.00459341611713171, + 0.009079473093152046, + -0.00255935313180089, + 0.020827576518058777, + -0.014294035732746124, + -0.06527405232191086, + -0.005475290585309267, + -0.03831169754266739, + -0.012729667127132416, + 0.020229434594511986, + 0.04140976071357727, + 0.04628691077232361, + -0.006437683943659067, + -0.0034028852824121714, + -0.007672308478504419, + 0.032391633838415146, + 0.002785573247820139, + -0.002636037999764085, + 0.004240666050463915, + -0.025996128097176552, + -0.008228273130953312, + 0.002066653687506914, + -0.09196034073829651, + 0.022944074124097824, + 0.021793803200125694, + 0.015375290997326374, + -0.014263361692428589, + -0.029953060671687126, + 0.031778156757354736, + -0.018557706847786903, + 0.03337319940328598, + 0.05548907816410065, + 0.001982300542294979, + 0.008082571439445019, + -0.04944632202386856, + -0.08104043453931808, + 0.04803532361984253, + 0.03956932574510574, + 0.002689717337489128, + 0.07680743932723999, + 0.033741287887096405, + -0.010406119748950005, + -0.04864880070090294, + 0.03674732893705368, + -0.009102478623390198, + 0.002080073580145836, + 0.004206158220767975, + -0.05505964532494545, + -0.031241362914443016, + 0.00415631290525198, + -0.014600775204598904, + 0.009669945575296879, + 0.02587343193590641, + -0.04101099818944931, + 0.04751386493444443, + 0.03282107040286064, + 0.001040995353832841, + -0.013956623151898384, + 0.024155693128705025, + 0.01656390354037285, + 0.0029753679409623146, + 0.03926258906722069, + 0.05196158215403557, + 0.007867854088544846, + 0.005306584294885397, + -0.025996128097176552, + -0.0451519750058651, + -0.004547405056655407, + 0.02973834238946438, + 0.03380263224244118, + 0.014570101164281368, + 0.039753369987010956, + -0.016318513080477715, + 0.0007486348040401936, + -0.03420139476656914, + -0.022944074124097824, + 0.031992875039577484, + 0.005835708696395159, + 0.022990085184574127, + 0.008818745613098145, + -0.01858838088810444, + -0.012522618286311626, + 0.029063517227768898, + 0.002534430706873536, + -0.020766228437423706, + 0.021441053599119186, + -0.06809604912996292, + -0.011249651201069355, + -0.0007917699404060841, + 0.07754360884428024, + -0.03297444060444832, + -0.00973129365593195, + -0.005019016098231077, + 0.0026379551272839308, + -0.006491363514214754, + 0.003512161085382104, + -0.08208334445953369, + 0.05061192810535431, + -0.0194625873118639, + -0.005563477985560894, + 0.021042292937636375, + 0.051041364669799805, + -0.007637800183147192, + 0.0025785244069993496, + -0.06355631351470947, + -0.016931990161538124, + 0.03619519621133804, + -0.043802324682474136, + -0.01742277294397354, + -0.029692331328988075, + -0.0027683191001415253, + -0.0024021496064960957, + 0.011034933850169182, + -0.0077489931136369705, + -0.033281177282333374, + -0.045090626925230026, + 0.019094500690698624, + 0.02992238663136959, + -0.008212936110794544, + -0.005011348053812981, + -0.007108675315976143, + -0.0572681650519371, + -0.04456917196512222, + 0.0036118512507528067, + 0.05895522981882095, + 0.013527188450098038, + -0.04683903977274895, + 0.03392532840371132, + -0.008634702302515507, + -8.519195398548618e-05, + -0.012522618286311626, + 0.022453291341662407, + 0.006809604819864035, + -0.011357010342180729, + -0.013159101828932762, + 0.007273547817021608, + -0.035367000848054886, + -0.023419519886374474, + -0.010252749547362328, + -0.03527498245239258, + -0.0108125489205122, + 0.07656204700469971, + 0.01128032524138689, + 0.027545159682631493, + 0.012668319046497345, + 0.017514795064926147, + -0.002296708058565855, + 0.04147110879421234, + -0.13938218355178833, + -0.020996281877160072, + -0.02729976736009121, + 0.003972269594669342, + -0.004374864511191845, + -0.038465067744255066, + -0.04275941103696823, + -0.024171030148863792, + 0.0606422945857048, + 0.06797335296869278, + -0.024171030148863792, + 0.03245298191905022, + -0.03285174444317818, + 0.0041754841804504395, + -0.026134159415960312, + -0.06588753312826157, + -0.006410844158381224, + 0.036716654896736145, + 0.03466150164604187, + -0.010160728357732296, + 0.01445507351309061, + -0.011441363021731377, + -0.027008365839719772, + -0.0003357353853061795, + -0.005881719756871462, + 0.00973129365593195, + -0.016134468838572502, + -0.03690069913864136, + 0.0398760661482811, + -0.03426274284720421, + -0.011395352892577648, + -0.009439891204237938, + 0.034753523766994476, + 0.012729667127132416, + 0.024293726310133934, + 0.02513725869357586, + 0.026134159415960312, + -0.021855151280760765, + 0.06331092119216919, + -0.02803594060242176, + -0.0010783792240545154, + -0.0067252516746521, + -0.004213826730847359, + -0.01795956678688526, + 0.027882572263479233, + -0.04364895448088646, + -0.006242137867957354, + 0.03318915516138077, + -0.007369403727352619, + 0.01964663155376911, + 0.04263671487569809, + 0.026993028819561005, + 0.02236127108335495, + 0.0020244771149009466, + 0.06913895905017853, + 0.06312687695026398, + 0.010091711767017841, + 0.011034933850169182, + 0.009056467562913895, + 0.016839969903230667, + 0.025628039613366127, + 0.05045856162905693, + 0.044753216207027435, + -0.0015557416481897235, + 0.01595042645931244, + -0.024431759491562843, + 0.008841750212013721, + 0.013488845899701118, + -0.011257319711148739, + -0.07656204700469971, + 0.044017042964696884, + 0.02081223949790001, + 0.004183152690529823, + 0.09067203849554062, + 0.02660960517823696, + -0.0011253486154600978, + -0.015490317717194557, + 0.010160728357732296, + 0.015467312186956406, + -0.05113338679075241, + -0.00669074384495616, + 0.009570255875587463, + -0.034354764968156815, + 0.005647831130772829, + -0.04769790917634964, + -0.0038629937916994095, + -0.02688566967844963, + 0.022269248962402344, + -0.03742215409874916, + 0.02660960517823696, + 0.028741441667079926, + -0.019079163670539856, + 0.006541208364069462, + 0.010061037726700306, + 0.07962943613529205, + 0.028219984844326973, + 0.00544078228995204, + -0.007622463162988424, + 0.017238730564713478, + -0.00461258739233017, + 0.03101130947470665, + 0.01769883744418621, + 0.01196281984448433, + -0.01154872216284275, + 0.037330131977796555, + 0.038004957139492035, + 0.05708412081003189, + 0.03634856641292572, + -0.05291246995329857, + -0.015781719237565994, + -0.04938497394323349, + 0.059231292456388474, + -0.009685282595455647, + 0.03751417621970177, + 0.024830520153045654, + 0.01128032524138689, + 0.008841750212013721, + -0.027269093319773674, + 0.015252594836056232, + 0.021517738699913025, + 0.014846165664494038, + -0.022253911942243576, + -0.017867544665932655, + -0.01845034956932068, + 0.03628721833229065, + -0.01771417446434498, + 0.02087358571588993, + 0.0028986833058297634, + 0.03653261065483093, + 0.0008737267926335335, + 0.025229280814528465, + -0.028219984844326973, + -0.011518048122525215, + -0.024339737370610237, + -0.0065603796392679214, + -0.0017100697150453925, + -0.005739852786064148, + -0.0005219355225563049, + -0.023082107305526733, + -0.027345778420567513, + -0.03114934265613556, + -0.04723780229687691, + -0.014248024672269821, + -0.011234314180910587, + 0.02081223949790001, + -0.011978156864643097, + -0.01857304386794567, + -0.002049399772658944, + -0.020290782675147057, + 0.0025056740269064903, + 0.03782091289758682, + -0.028695430606603622, + -0.03196220099925995, + -0.006318822503089905, + 0.00031249033054336905, + 0.02559736743569374, + 0.03108799457550049, + 0.013596205040812492, + -0.01884911023080349, + -0.012675987556576729, + -0.023066770285367966, + -0.009209837764501572, + -0.005870216991752386, + -0.06932300329208374, + -0.054139427840709686, + 0.008864755742251873, + -0.0302751362323761, + 0.013634546659886837, + 0.004589581862092018, + 0.008642369881272316, + -0.06257475167512894, + 0.015919752418994904, + -0.01209318358451128, + -0.01710069738328457, + -0.0134505033493042, + 0.018741751089692116, + -0.019815336912870407, + -0.013757242821156979, + -0.024539116770029068, + -0.03147141635417938, + -0.01459310669451952, + 0.012323237955570221, + -0.009493570774793625, + 0.002451994689181447, + 0.029032843187451363, + -0.012898373417556286, + -0.02101161889731884, + -0.01154872216284275, + 0.023465530946850777, + -0.0011205557966604829, + -0.003654027823358774, + 0.03978404402732849, + -0.052943143993616104, + 0.0037843920290470123, + 0.022990085184574127, + 0.011142292991280556, + -0.004447714891284704, + -0.03168613463640213, + -0.029216885566711426, + -0.012384586036205292, + -0.027897909283638, + 0.013082416728138924, + -0.015321611426770687, + 0.04552006348967552, + -0.01486917119473219, + -0.003579260315746069, + 0.01668659970164299, + -0.07343330979347229, + -0.001678437227383256, + 0.01084322202950716, + -0.04061223939061165, + -0.01992269605398178, + -0.06337226927280426, + -0.03352656960487366, + 0.011272656731307507, + 0.02736111544072628, + 0.06122509762644768, + -0.020244771614670753, + 0.014309372752904892, + 0.04447714984416962, + 0.01607312262058258, + -0.0024366576690226793, + -0.016057785600423813, + -0.022315260022878647, + 0.015451975166797638, + -0.034293416887521744, + -0.004282842855900526, + 0.05478357896208763, + 0.04858745262026787, + -0.041103020310401917, + -0.011479705572128296, + 0.0221005417406559, + 0.008496669121086597, + -0.03552037104964256, + -0.05858714133501053, + 0.013772579841315746, + -0.05015182122588158, + 0.0432501956820488, + -0.04990642890334129, + 0.05518234148621559, + -0.047605887055397034, + -0.002998373471200466, + -0.009163826704025269, + 0.00018308481958229095, + -0.03616452217102051, + 0.014478079043328762, + -0.019953370094299316, + -0.02553601935505867, + 0.02358822710812092, + 0.015505654737353325, + 0.03591913357377052, + 0.051440123468637466, + 0.02682432159781456, + 0.028066614642739296, + 0.0011675251880660653, + -0.019953370094299316, + -0.018005577847361565, + -0.044231757521629333, + 0.0658261850476265, + -0.03208489716053009, + 0.11146894097328186, + 0.0197233147919178, + 0.013649883680045605, + 0.03414004668593407, + 0.062329359352588654, + -0.03073524497449398, + -0.002630286617204547, + 0.002384895458817482, + 0.07196096330881119, + -0.059691403061151505, + 0.0010668764589354396, + -0.015628350898623466, + 0.009600929915904999, + -0.012438264675438404, + 0.03404802456498146, + -0.012146863155066967, + 0.0004950958536937833, + -0.0442010834813118, + 0.01581239327788353, + 0.02783656120300293, + 0.0054062744602561, + 0.0384957417845726, + -0.020628195255994797, + -0.017882881686091423, + 0.01789821870625019, + 0.023465530946850777, + -0.030382495373487473, + -0.026118822395801544, + -0.030719907954335213, + 0.03371061384677887, + 0.01877242513000965, + 0.03825034946203232, + -0.010896901600062847, + 0.021732455119490623, + -0.03690069913864136, + 0.00031249033054336905, + 0.006847947370260954, + -0.010827885009348392, + 0.036317892372608185, + -0.025305964052677155, + 0.009685282595455647, + 0.011065607890486717, + 0.0013832009863108397, + -0.033465221524238586, + -0.02282137982547283, + -0.04269806295633316, + -0.022315260022878647, + 0.014109992422163486, + 0.0662556141614914, + -0.008910766802728176, + 0.012116189114749432, + 0.04736049473285675, + 0.017729511484503746, + 0.08643904328346252, + 0.011579396203160286, + -0.005582649260759354, + -0.009171495214104652, + -0.04653229936957359, + -0.019293880090117455, + -0.05269775539636612, + 0.017054686322808266, + 0.004098799545317888, + -0.012376917526125908, + 0.014002634212374687, + -0.023465530946850777, + 0.0025957785546779633, + -0.051317427307367325, + 0.0020263942424207926, + 0.04963036626577377, + 0.01128032524138689, + 0.0326983742415905, + -0.0073540667071938515, + -0.027269093319773674, + -0.010858559049665928, + 0.07631665468215942, + 0.0293242447078228, + 0.006928466260433197, + 0.030014406889677048, + -0.006441518198698759, + 0.015129899606108665, + -0.0024328234139829874, + 0.00619996152818203, + -0.03972269594669342, + -0.0036923703737556934, + 0.012024166993796825, + 0.005160883069038391, + 0.009769636206328869, + -0.003991440869867802, + 0.008358636870980263, + -0.004244500305503607, + 0.027253756299614906, + 0.0013774497201666236, + -0.015590008348226547, + -0.010889233089983463, + -0.02047482505440712, + -0.01680929586291313, + -0.047391168773174286, + 0.007300387602299452, + -0.008297288790345192, + -0.05392470955848694, + -0.016303176060318947, + 0.02006072923541069, + -0.006230635102838278, + -0.0018567292718216777, + -0.02345019392669201, + 0.025367312133312225, + -0.10772672295570374, + 0.057666923850774765, + 0.029339581727981567, + -0.004371030256152153, + -0.007108675315976143, + 0.042329978197813034, + -0.00476212240755558, + 0.023404182866215706, + -0.04202323779463768, + 0.04269806295633316, + 0.00365594495087862, + -0.030750581994652748, + -0.009064136072993279, + 0.06416979432106018, + 0.01239992305636406, + -0.019753988832235336, + 0.04321952164173126, + 0.01063617318868637, + -0.012269558385014534, + 0.03932393714785576, + 0.04785127937793732, + 0.07140883058309555, + -0.02924755960702896, + 0.025443997234106064, + 0.011801782064139843, + -0.0269470177590847, + -0.060488924384117126, + -0.006403176113963127, + -0.01910983771085739, + -0.02277536876499653, + -0.07104074209928513, + -0.034293416887521744, + 0.007327226921916008, + 0.018481021746993065, + 0.028204647824168205, + 0.009723625145852566, + 0.003354957327246666, + -0.04843408241868019, + -0.09042664617300034, + 0.061378467828035355, + 0.013688226230442524, + -0.013711231760680676, + 0.01575104519724846, + 0.021318357437849045, + 0.034017350524663925, + 0.00824361015111208, + -0.10018094629049301, + -0.021164989098906517, + 0.005747521296143532, + -0.013941286131739616, + 0.01536762248724699, + 0.026916343718767166, + -0.006084934342652559, + -0.006050426047295332, + -0.05321921035647392, + 0.00874972902238369, + 0.005716847255825996, + -0.004512897226959467, + 0.006932300515472889, + 0.010153059847652912, + -0.03187017887830734, + -0.034017350524663925, + 0.027468474581837654, + 0.011057939380407333, + 0.0021222501527518034, + 0.0079368706792593, + 0.019968707114458084, + 0.011725096963346004, + 0.03708473965525627, + -0.021395042538642883, + -0.0026513750199228525, + -0.03748350217938423, + 0.027483811601996422, + -0.018803099170327187, + 0.004923160187900066, + -0.0002839731751009822, + -0.023358171805739403, + 0.04012145847082138, + -0.011004260741174221, + -0.036256544291973114, + -0.003276355564594269, + -0.016655925661325455, + 0.03380263224244118, + 0.017484121024608612, + 0.026241518557071686, + 0.024416422471404076, + -0.00033070295467041433, + -0.03190085291862488, + -0.06889357417821884, + -0.032268937677145004, + 0.011556390672922134, + -0.010306429117918015, + -0.004305848386138678, + 0.016594577580690384, + 0.0317474827170372, + -0.0075802868232131, + 0.025689387694001198, + -0.017146708443760872, + -0.00444004638120532, + 0.03791293501853943, + -0.03742215409874916, + 0.02507591061294079, + -0.008051897399127483, + -0.012837025336921215, + -0.017576143145561218, + 0.02783656120300293, + 0.03647126257419586, + 0.008067234419286251, + -0.009723625145852566, + -0.023404182866215706, + 0.05892455577850342, + 0.04147110879421234, + -0.003815065836533904, + -0.045305345207452774, + 0.03156343847513199, + -0.020980944857001305, + -0.00593156460672617, + -0.014202014543116093, + 0.02722308225929737, + 0.009930673986673355, + -0.04242200031876564, + 0.01978466287255287, + 0.011218978092074394, + -0.016303176060318947, + -0.01355019398033619, + 0.006445352453738451, + -0.01783687062561512, + -0.07815708965063095, + -0.06404709815979004, + 0.01722339354455471, + 0.027376452460885048, + 0.00604659179225564, + -0.03582711145281792, + 0.01878776215016842, + 0.02323547750711441, + 0.011426026001572609, + 0.02243795618414879, + -0.034354764968156815, + -0.0033741286024451256, + -0.001742660766467452, + -0.005026684608310461, + -0.00871138647198677, + 0.026716964319348335, + -0.011847792193293571, + 0.017882881686091423, + 0.011893803253769875, + 0.012330906465649605, + -0.04263671487569809, + 0.03107265755534172, + -0.0011215143604204059, + 0.039630673825740814, + 0.010475135408341885, + 0.04318884760141373, + -0.013657552190124989, + 0.010061037726700306, + 0.008926103822886944, + -0.06220666319131851, + -0.006798102520406246, + -0.018189620226621628, + -0.013956623151898384, + 0.07165422290563583, + -0.02418636716902256, + 0.06705313920974731, + -0.024017661809921265, + 0.01371890027076006, + -0.014784818515181541, + -0.03257567808032036, + 0.014393726363778114, + 0.03825034946203232, + -0.04450782388448715, + -0.020306119695305824, + 0.01077420637011528, + 0.017514795064926147, + -0.0182509683072567 + ], + "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\RimWorld\\CompShield.txt\n\npublic class CompShield : ThingComp\n{\n\tprotected float energy;\n\n\tprotected int ticksToReset = -1;\n\n\tprotected int lastKeepDisplayTick = -9999;\n\n\tprivate Vector3 impactAngleVect;\n\n\tprivate int lastAbsorbDamageTick = -9999;\n\n\tprivate const float MaxDamagedJitterDist = 0.05f;\n\n\tprivate const int JitterDurationTicks = 8;\n\n\tprivate int KeepDisplayingTicks = 1000;\n\n\tprivate float ApparelScorePerEnergyMax = 0.25f;\n\n\tprivate static readonly Material BubbleMat = MaterialPool.MatFrom(\"Other/ShieldBubble\", ShaderDatabase.Transparent);\n\n\tpublic CompProperties_Shield Props => (CompProperties_Shield)props;\n\n\tprivate float EnergyMax => parent.GetStatValue(StatDefOf.EnergyShieldEnergyMax);\n\n\tprivate float EnergyGainPerTick => parent.GetStatValue(StatDefOf.EnergyShieldRechargeRate) / 60f;\n\n\tpublic float Energy => energy;\n\n\tpublic ShieldState ShieldState\n\t{\n\t\tget\n\t\t{\n\t\t\tif (parent is Pawn p && (p.IsCharging() || p.IsSelfShutdown()))\n\t\t\t{\n\t\t\t\treturn ShieldState.Disabled;\n\t\t\t}\n\t\t\tCompCanBeDormant comp = parent.GetComp();\n\t\t\tif (comp != null && !comp.Awake)\n\t\t\t{\n\t\t\t\treturn ShieldState.Disabled;\n\t\t\t}\n\t\t\tif (ticksToReset <= 0)\n\t\t\t{\n\t\t\t\treturn ShieldState.Active;\n\t\t\t}\n\t\t\treturn ShieldState.Resetting;\n\t\t}\n\t}\n\n\tprotected bool ShouldDisplay\n\t{\n\t\tget\n\t\t{\n\t\t\tPawn pawnOwner = PawnOwner;\n\t\t\tif (!pawnOwner.Spawned || pawnOwner.Dead || pawnOwner.Downed)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (pawnOwner.InAggroMentalState)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (pawnOwner.Drafted)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (pawnOwner.Faction.HostileTo(Faction.OfPlayer) && !pawnOwner.IsPrisoner)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (ModsConfig.BiotechActive && pawnOwner.IsColonyMech && Find.Selector.SingleSelectedThing == pawnOwner)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tprotected Pawn PawnOwner\n\t{\n\t\tget\n\t\t{\n\t\t\tif (parent is Apparel apparel)\n\t\t\t{\n\t\t\t\treturn apparel.Wearer;\n\t\t\t}\n\t\t\tif (parent is Pawn result)\n\t\t\t{\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tpublic bool IsApparel => parent is Apparel;\n\n\tprivate bool IsBuiltIn => !IsApparel;\n\n\tpublic override void PostExposeData()\n\t{\n\t\tbase.PostExposeData();\n\t\tScribe_Values.Look(ref energy, \"energy\", 0f);\n\t\tScribe_Values.Look(ref ticksToReset, \"ticksToReset\", -1);\n\t\tScribe_Values.Look(ref lastKeepDisplayTick, \"lastKeepDisplayTick\", 0);\n\t}\n\n\tpublic override IEnumerable CompGetWornGizmosExtra()\n\t{\n\t\tforeach (Gizmo item in base.CompGetWornGizmosExtra())\n\t\t{\n\t\t\tyield return item;\n\t\t}\n\t\tif (IsApparel)\n\t\t{\n\t\t\tforeach (Gizmo gizmo in GetGizmos())\n\t\t\t{\n\t\t\t\tyield return gizmo;\n\t\t\t}\n\t\t}\n\t\tif (!DebugSettings.ShowDevGizmos)\n\t\t{\n\t\t\tyield break;\n\t\t}\n\t\tCommand_Action command_Action = new Command_Action();\n\t\tcommand_Action.defaultLabel = \"DEV: Break\";\n\t\tcommand_Action.action = Break;\n\t\tyield return command_Action;\n\t\tif (ticksToReset > 0)\n\t\t{\n\t\t\tCommand_Action command_Action2 = new Command_Action();\n\t\t\tcommand_Action2.defaultLabel = \"DEV: Clear reset\";\n\t\t\tcommand_Action2.action = delegate\n\t\t\t{\n\t\t\t\tticksToReset = 0;\n\t\t\t};\n\t\t\tyield return command_Action2;\n\t\t}\n\t}\n\n\tpublic override IEnumerable CompGetGizmosExtra()\n\t{\n\t\tforeach (Gizmo item in base.CompGetGizmosExtra())\n\t\t{\n\t\t\tyield return item;\n\t\t}\n\t\tif (!IsBuiltIn)\n\t\t{\n\t\t\tyield break;\n\t\t}\n\t\tforeach (Gizmo gizmo in GetGizmos())\n\t\t{\n\t\t\tyield return gizmo;\n\t\t}\n\t}\n\n\tprivate IEnumerable GetGizmos()\n\t{\n\t\tif ((PawnOwner.Faction == Faction.OfPlayer || (parent is Pawn pawn && pawn.RaceProps.IsMechanoid)) && Find.Selector.SingleSelectedThing == PawnOwner)\n\t\t{\n\t\t\tGizmo_EnergyShieldStatus gizmo_EnergyShieldStatus = new Gizmo_EnergyShieldStatus();\n\t\t\tgizmo_EnergyShieldStatus.shield = this;\n\t\t\tyield return gizmo_EnergyShieldStatus;\n\t\t}\n\t}\n\n\tpublic override float CompGetSpecialApparelScoreOffset()\n\t{\n\t\treturn EnergyMax * ApparelScorePerEnergyMax;\n\t}\n\n\tpublic override void CompTick()\n\t{\n\t\tbase.CompTick();\n\t\tif (PawnOwner == null)\n\t\t{\n\t\t\tenergy = 0f;\n\t\t}\n\t\telse if (ShieldState == ShieldState.Resetting)\n\t\t{\n\t\t\tticksToReset--;\n\t\t\tif (ticksToReset <= 0)\n\t\t\t{\n\t\t\t\tReset();\n\t\t\t}\n\t\t}\n\t\telse if (ShieldState == ShieldState.Active)\n\t\t{\n\t\t\tenergy += EnergyGainPerTick;\n\t\t\tif (energy > EnergyMax)\n\t\t\t{\n\t\t\t\tenergy = EnergyMax;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override void PostPreApplyDamage(ref DamageInfo dinfo, out bool absorbed)\n\t{\n\t\tabsorbed = false;\n\t\tif (ShieldState != 0 || PawnOwner == null)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tif (dinfo.Def == DamageDefOf.EMP)\n\t\t{\n\t\t\tenergy = 0f;\n\t\t\tBreak();\n\t\t}\n\t\telse if (!dinfo.Def.ignoreShields && (dinfo.Def.isRanged || dinfo.Def.isExplosive))\n\t\t{\n\t\t\tenergy -= dinfo.Amount * Props.energyLossPerDamage;\n\t\t\tif (energy < 0f)\n\t\t\t{\n\t\t\t\tBreak();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tAbsorbedDamage(dinfo);\n\t\t\t}\n\t\t\tabsorbed = true;\n\t\t}\n\t}\n\n\tpublic void KeepDisplaying()\n\t{\n\t\tlastKeepDisplayTick = Find.TickManager.TicksGame;\n\t}\n\n\tprivate void AbsorbedDamage(DamageInfo dinfo)\n\t{\n\t\tSoundDefOf.EnergyShield_AbsorbDamage.PlayOneShot(new TargetInfo(PawnOwner.Position, PawnOwner.Map));\n\t\timpactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle);\n\t\tVector3 loc = PawnOwner.TrueCenter() + impactAngleVect.RotatedBy(180f) * 0.5f;\n\t\tfloat num = Mathf.Min(10f, 2f + dinfo.Amount / 10f);\n\t\tFleckMaker.Static(loc, PawnOwner.Map, FleckDefOf.ExplosionFlash, num);\n\t\tint num2 = (int)num;\n\t\tfor (int i = 0; i < num2; i++)\n\t\t{\n\t\t\tFleckMaker.ThrowDustPuff(loc, PawnOwner.Map, Rand.Range(0.8f, 1.2f));\n\t\t}\n\t\tlastAbsorbDamageTick = Find.TickManager.TicksGame;\n\t\tKeepDisplaying();\n\t}\n\n\tprivate void Break()\n\t{\n\t\tif (parent.Spawned)\n\t\t{\n\t\t\tfloat scale = Mathf.Lerp(Props.minDrawSize, Props.maxDrawSize, energy);\n\t\t\tEffecterDefOf.Shield_Break.SpawnAttached(parent, parent.MapHeld, scale);\n\t\t\tFleckMaker.Static(PawnOwner.TrueCenter(), PawnOwner.Map, FleckDefOf.ExplosionFlash, 12f);\n\t\t\tfor (int i = 0; i < 6; i++)\n\t\t\t{\n\t\t\t\tFleckMaker.ThrowDustPuff(PawnOwner.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle(Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f), PawnOwner.Map, Rand.Range(0.8f, 1.2f));\n\t\t\t}\n\t\t}\n\t\tenergy = 0f;\n\t\tticksToReset = Props.startingTicksToReset;\n\t}\n\n\tprivate void Reset()\n\t{\n\t\tif (PawnOwner.Spawned)\n\t\t{\n\t\t\tSoundDefOf.EnergyShield_Reset.PlayOneShot(new TargetInfo(PawnOwner.Position, PawnOwner.Map));\n\t\t\tFleckMaker.ThrowLightningGlow(PawnOwner.TrueCenter(), PawnOwner.Map, 3f);\n\t\t}\n\t\tticksToReset = -1;\n\t\tenergy = Props.energyOnReset;\n\t}\n\n\tpublic override void CompDrawWornExtras()\n\t{\n\t\tbase.CompDrawWornExtras();\n\t\tif (IsApparel)\n\t\t{\n\t\t\tDraw();\n\t\t}\n\t}\n\n\tpublic override void PostDraw()\n\t{\n\t\tbase.PostDraw();\n\t\tif (IsBuiltIn)\n\t\t{\n\t\t\tDraw();\n\t\t}\n\t}\n\n\tprivate void Draw()\n\t{\n\t\tif (ShieldState == ShieldState.Active && ShouldDisplay)\n\t\t{\n\t\t\tfloat num = Mathf.Lerp(Props.minDrawSize, Props.maxDrawSize, energy);\n\t\t\tVector3 drawPos = PawnOwner.Drawer.DrawPos;\n\t\t\tdrawPos.y = AltitudeLayer.MoteOverhead.AltitudeFor();\n\t\t\tint num2 = Find.TickManager.TicksGame - lastAbsorbDamageTick;\n\t\t\tif (num2 < 8)\n\t\t\t{\n\t\t\t\tfloat num3 = (float)(8 - num2) / 8f * 0.05f;\n\t\t\t\tdrawPos += impactAngleVect * num3;\n\t\t\t\tnum -= num3;\n\t\t\t}\n\t\t\tfloat angle = Rand.Range(0, 360);\n\t\t\tVector3 s = new Vector3(num, 1f, num);\n\t\t\tMatrix4x4 matrix = default(Matrix4x4);\n\t\t\tmatrix.SetTRS(drawPos, Quaternion.AngleAxis(angle, Vector3.up), s);\n\t\t\tGraphics.DrawMesh(MeshPool.plane10, matrix, BubbleMat, 0);\n\t\t}\n\t}\n\n\tpublic override bool CompAllowVerbCast(Verb verb)\n\t{\n\t\tif (Props.blocksRangedWeapons)\n\t\t{\n\t\t\treturn !(verb is Verb_LaunchProjectile);\n\t\t}\n\t\treturn true;\n\t}\n}\n\n", + "timestamp": "2025-08-26 18:35:01,058" } } \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..59f231f7 --- /dev/null +++ b/README.md @@ -0,0 +1,683 @@ +# RimWorld Mod: 基于次数的护盾与原版护盾视觉集成 + +## 1. 引言 + +本Mod旨在为《RimWorld》引入一种新型的护盾机制:基于 Hediff 层数的次数护盾。与原版基于能量的护盾不同,本护盾的抵挡能力由可叠加的“层数”决定,每层护盾可以抵挡一次受到的伤害。同时,为了提供更沉浸和熟悉的体验,我们集成了原版能量护盾(CompShield)的视觉特效和音效,使次数护盾在抵挡伤害时,能够展现出与原版护盾相似的视觉冲击力。 + +## 2. 核心概念回顾 + +### 2.1 Hediff_DamageShield + +这是我们自定义的 Hediff 类型,它代表了Pawn身上激活的次数护盾。它的核心特性是: +- **层数管理**:通过 `ShieldCharges` 属性来跟踪剩余的护盾层数。当Pawn获得护盾时,层数增加;当护盾抵挡伤害时,层数减少。 +- **自动移除**:当护盾层数归零时,该 Hediff 会自动从Pawn身上移除。 +- **显示信息**:在Pawn的健康信息界面,会显示当前护盾的剩余层数。 + +### 2.2 CompShield + +这是《RimWorld》原版用于实现能量护盾的组件。它通常附加在护盾腰带等物品上,提供以下核心功能: +- **能量值**:护盾具有能量储备,受到伤害会消耗能量。 +- **充能与重置**:能量耗尽后,护盾会进入重置状态,并在一段时间后恢复能量。 +- **视觉和音效**:护盾拥有独特的视觉表现(如护盾泡泡)和音效(如吸收伤害时的音效)。 + +## 3. 实现细节 + +### 3.1 伤害抵挡逻辑与护盾渲染 (DRMDamageShield.cs & Hediff_DamageShield.cs) + +**核心思想**:我们利用 `ThingComp` 的 `PostPreApplyDamage` 虚方法来拦截伤害,而不是使用 Harmony Patch `Pawn_HealthTracker.PreApplyDamage`。这将使代码更简洁,更符合 RimWorld 的组件化设计。护盾的视觉渲染也将由这个 `ThingComp` 负责。 + +- **`DRMDamageShield.cs`**: 这是一个自定义的 `ThingComp`,它将附加到 Pawn 身上。 + - **伤害拦截**:它重写了 `PostPreApplyDamage` 方法。当 Pawn 受到伤害时,这个方法会被自动调用。在这里,我们会检查 Pawn 是否拥有 `Hediff_DamageShield` 及其层数,如果满足条件,则消耗层数并设置 `absorbed = true` 来抵挡伤害。 + - **视觉和音效集成**:在抵挡伤害时,`DRMDamageShield` 会触发原版能量护盾的吸收音效、闪光特效和抖动效果。 + - **护盾渲染**:`DRMDamageShield` 包含了从 `CompShield` 中提取的护盾泡泡渲染逻辑。它会在 Pawn 身上渲染一个动态的护盾泡泡,其大小和显示状态与 `Hediff_DamageShield` 的层数关联。 + - **能量同步**:`DRMDamageShield` 的“能量”和“最大能量”属性将直接从 Pawn 身上对应的 `Hediff_DamageShield` 实例中获取其 `ShieldCharges` 和 `def.maxSeverity`。 + +- **`Hediff_DamageShield.cs`**: + - **动态管理 `DRMDamageShield`**:在 `PostAdd` 方法中,当 `Hediff_DamageShield` 被添加到 Pawn 身上时,它会确保 Pawn 拥有一个 `DRMDamageShield` 实例(如果Pawn还没有)。在 `PostRemoved` 方法中,当 `Hediff_DamageShield` 被移除时,它会禁用或移除对应的 `DRMDamageShield` 实例。 + - **层数与能量关联**:`Hediff_DamageShield` 的 `ShieldCharges` 属性将作为 `DRMDamageShield` 的能量来源。 + +### 3.2 充能方式 (CompUseEffect_AddDamageShieldCharges.cs & WULA_DamageShieldGenerator) + +护盾的充能方式保持不变,通过使用特定的物品来增加护盾层数。 + +- **`CompUseEffect_AddDamageShieldCharges`**:这是一个自定义的物品使用效果组件。 + - 当物品被使用时,它会检查目标Pawn是否拥有 `Hediff_DamageShield`。 + - 如果Pawn没有该Hediff,则会为其添加一个,并赋予预设的初始层数(例如10层)。 + - 如果Pawn已有该Hediff,则会在现有层数的基础上增加预设的层数(例如每次使用增加10层)。 +- **`WULA_DamageShieldGenerator`**:这是定义在XML中的一个物品,它附加了 `CompUseEffect_AddDamageShieldCharges` 组件。玩家可以通过制作或获得这个物品,并对其Pawn使用来获取或补充护盾层数。 + +## 4. 代码结构与内容 + +以下是本Mod的关键文件及其作用和完整代码内容: + +### 4.1 Hediff_DamageShield.cs (更新) + +此文件定义了基于层数的护盾 Hediff。它将管理护盾层数,并在 Pawn 身上动态添加/移除 `DRMDamageShield`。 + +```csharp +using Verse; +using System.Text; +using RimWorld; +using UnityEngine; +using HarmonyLib; // Needed for AccessTools if you use it here directly + +namespace WulaFallenEmpire +{ + public class Hediff_DamageShield : HediffWithComps + { + // 伤害抵挡层数 + public int ShieldCharges + { + get => (int)severityInt; + set => severityInt = value; + } + + private DRMDamageShield cachedShieldComp; + + // 获取或创建 DRMDamageShield 组件 + public DRMDamageShield ShieldComp + { + get + { + if (cachedShieldComp == null || cachedShieldComp.parent != pawn) + { + cachedShieldComp = pawn.GetComp(); + if (cachedShieldComp == null) + { + // 如果没有,动态添加一个 + cachedShieldComp = (DRMDamageShield)Activator.CreateInstance(typeof(DRMDamageShield)); + cachedShieldComp.parent = pawn; + cachedShieldComp.props = new DRMCompShieldProp(); // 确保有属性,即使是默认的 + pawn.AllComps.Add(cachedShieldComp); + cachedShieldComp.Initialize(cachedShieldComp.props); + } + } + return cachedShieldComp; + } + } + + + public override string LabelInBrackets + { + get + { + if (ShieldCharges > 0) + { + return "层数: " + ShieldCharges; + } + return null; + } + } + + public override string TipStringExtra + { + get + { + StringBuilder sb = new StringBuilder(); + sb.Append(base.TipStringExtra); + if (ShieldCharges > 0) + { + sb.AppendLine(" - 每层抵挡一次伤害。当前层数: " + ShieldCharges); + } + else + { + sb.AppendLine(" - 没有可用的抵挡层数。"); + } + return sb.ToString(); + } + } + + public override void ExposeData() + { + base.ExposeData(); + // severityInt 会自动保存,所以不需要额外处理 ShieldCharges + } + + public override void PostAdd(DamageInfo? dinfo) + { + base.PostAdd(dinfo); + // 确保 Pawn 拥有 DRMCompShield 组件 + DRMDamageShield comp = ShieldComp; // 访问属性以确保组件被添加 + if (comp != null) + { + comp.IsActive = true; // 激活护盾组件 + // 能量同步将在 Tick() 中完成 + } + } + + public override void PostRemoved() + { + base.PostRemoved(); + // 禁用护盾组件 + if (cachedShieldComp != null && cachedShieldComp.parent == pawn) + { + cachedShieldComp.IsActive = false; + } + } + + public override void Tick() + { + base.Tick(); + // 如果层数归零,移除 Hediff + if (ShieldCharges <= 0) + { + pawn.health.RemoveHediff(this); + } + // 同步能量到 ShieldComp + if (ShieldComp != null && ShieldComp.IsActive) + { + ShieldComp.Energy = ShieldCharges; + ShieldComp.MaxEnergy = (int)def.maxSeverity; + } + } + } +} +``` + +### 4.2 DRMDamageShield.cs (新文件) + +此文件定义了自定义的 `ThingComp`,用于处理护盾的渲染和部分行为。它将从 `CompShield` 和 `PlasmaShieldImplant.cs` 中提取渲染和伤害处理逻辑。 + +```csharp +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Verse; +using Verse.Sound; +using System.Reflection; // For AccessTools +using HarmonyLib; // For AccessTools + +namespace WulaFallenEmpire +{ + // 自定义 CompProperties_Shield 变体 + public class DRMCompShieldProp : CompProperties + { + public int startingTicksToReset = 3200; + public float minDrawSize = 1.2f; + public float maxDrawSize = 1.55f; + public float energyLossPerDamage = 0.033f; + public float energyOnReset = 0.2f; + public bool blocksRangedWeapons = true; + + public DRMCompShieldProp() + { + compClass = typeof(DRMDamageShield); + } + } + + [StaticConstructorOnStartup] // 确保在游戏启动时加载 + public class DRMDamageShield : ThingComp + { + // 从 Hediff_DamageShield 获取层数作为能量 + public float Energy + { + get + { + Hediff_DamageShield hediff = PawnOwner?.health?.hediffSet.GetFirstHediff(); + return hediff?.ShieldCharges ?? 0; + } + set + { + Hediff_DamageShield hediff = PawnOwner?.health?.hediffSet.GetFirstHediff(); + if (hediff != null) + { + hediff.ShieldCharges = (int)value; + } + } + } + + public float MaxEnergy + { + get + { + Hediff_DamageShield hediff = PawnOwner?.health?.hediffSet.GetFirstHediff(); + return hediff?.def.maxSeverity ?? 0; + } + set + { + // MaxEnergy 由 HediffDef 控制,这里不需要设置 + } + } + + public bool IsActive = false; // 控制护盾是否激活,由 Hediff_DamageShield 管理 + + // 复制自 CompShield + protected int ticksToReset = -1; + protected int lastKeepDisplayTick = -9999; + private Vector3 impactAngleVect; + private int lastAbsorbDamageTick = -9999; + + private const float MaxDamagedJitterDist = 0.05f; + private const int JitterDurationTicks = 8; + private int KeepDisplayingTicks = 1000; + + // 获取原版 CompShield 的 BubbleMat + private static readonly Material BubbleMat; + + static DRMDamageShield() + { + // 使用 Harmony AccessTools 获取 CompShield 的私有静态字段 BubbleMat + BubbleMat = (Material)AccessTools.Field(typeof(CompShield), "BubbleMat").GetValue(null); + } + + public DRMCompShieldProp Props => (DRMCompShieldProp)props; + + public ShieldState ShieldState + { + get + { + if (PawnOwner == null || !IsActive || Energy <= 0) + { + return ShieldState.Disabled; + } + if (ticksToReset <= 0) + { + return ShieldState.Active; + } + return ShieldState.Resetting; + } + } + + protected bool ShouldDisplay + { + get + { + Pawn pawnOwner = PawnOwner; + if (pawnOwner == null || !pawnOwner.Spawned || pawnOwner.Dead || pawnOwner.Downed) + { + return false; + } + if (pawnOwner.InAggroMentalState) + { + return true; + } + if (pawnOwner.Drafted) + { + return true; + } + if (pawnOwner.Faction.HostileTo(Faction.OfPlayer) && !pawnOwner.IsPrisoner) + { + return true; + } + if (Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks) + { + return true; + } + return false; + } + } + + protected Pawn PawnOwner + { + get + { + return parent as Pawn; + } + } + + public override void PostExposeData() + { + base.PostExposeData(); + Scribe_Values.Look(ref ticksToReset, "ticksToReset", -1); + Scribe_Values.Look(ref lastKeepDisplayTick, "lastKeepDisplayTick", 0); + Scribe_Values.Look(ref IsActive, "isActive", false); + } + + public override void CompTick() + { + base.CompTick(); + if (PawnOwner == null || !IsActive) + { + return; + } + + if (ShieldState == ShieldState.Resetting) + { + ticksToReset--; + if (ticksToReset <= 0) + { + Reset(); + } + } + else if (ShieldState == ShieldState.Active) + { + // 护盾能量(层数)通过 Hediff_DamageShield 的 Tick 方法管理,这里不需要额外回复 + // 如果需要自动回复层数,可以在这里实现 + } + } + + public override void PostPreApplyDamage(ref DamageInfo dinfo, out bool absorbed) + { + absorbed = false; + // 获取 Hediff_DamageShield 实例 + Hediff_DamageShield damageShield = PawnOwner?.health?.hediffSet.GetFirstHediff(); + + if (ShieldState != ShieldState.Active || !IsActive || damageShield == null || damageShield.ShieldCharges <= 0) + { + return; + } + + // 如果是 EMP 伤害,且护盾没有 EMP 抗性(这里假设我们的护盾没有),则直接击穿 + // 为了简化,我们假设我们的次数盾没有 EMP 抗性,任何 EMP 伤害都会直接击穿 + if (dinfo.Def == DamageDefOf.EMP) + { + Energy = 0; // 能量归零 + Notify_ShieldBreak(); // 触发护盾击穿效果 + absorbed = true; + return; + } + + // 如果是远程或爆炸伤害,且护盾阻挡这些类型 + if (Props.blocksRangedWeapons && (dinfo.Def.isRanged || dinfo.Def.isExplosive)) + { + // 消耗一层护盾 + damageShield.ShieldCharges--; + + // 触发护盾吸收效果 + Notify_DamageAbsorbed(dinfo); + + // 护盾抖动效果 + PawnOwner.Drawer.renderer.wiggler.SetToCustomRotation(Rand.Range(-0.05f, 0.05f)); + // 显示抵挡文本 + Verse.MoteMaker.ThrowText(PawnOwner.DrawPos, PawnOwner.Map, "伤害被护盾抵挡!", Color.cyan, 1.2f); + + absorbed = true; // 伤害被吸收 + + // 如果护盾层数归零,触发护盾击穿效果 + if (damageShield.ShieldCharges <= 0) + { + Notify_ShieldBreak(); + } + } + } + + public void Notify_DamageAbsorbed(DamageInfo dinfo) + { + // 复制自 CompShield.AbsorbedDamage + SoundDefOf.EnergyShield_AbsorbDamage.PlayOneShot(new TargetInfo(PawnOwner.Position, PawnOwner.Map)); + impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); + Vector3 loc = PawnOwner.TrueCenter() + impactAngleVect.RotatedBy(180f) * 0.5f; + float num = Mathf.Min(10f, 2f + dinfo.Amount / 10f); + FleckMaker.Static(loc, PawnOwner.Map, FleckDefOf.ExplosionFlash, num); + int num2 = (int)num; + for (int i = 0; i < num2; i++) + { + FleckMaker.ThrowDustPuff(loc, PawnOwner.Map, Rand.Range(0.8f, 1.2f)); + } + lastAbsorbDamageTick = Find.TickManager.TicksGame; + KeepDisplaying(); + } + + public void Notify_ShieldBreak() + { + // 复制自 CompShield.Break + if (parent.Spawned) + { + float scale = Mathf.Lerp(Props.minDrawSize, Props.maxDrawSize, Energy / MaxEnergy); // 根据当前能量比例调整大小 + EffecterDefOf.Shield_Break.SpawnAttached(parent, parent.MapHeld, scale); + FleckMaker.Static(PawnOwner.TrueCenter(), PawnOwner.Map, FleckDefOf.ExplosionFlash, 12f); + for (int i = 0; i < 6; i++) + { + FleckMaker.ThrowDustPuff(PawnOwner.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle(Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f), PawnOwner.Map, Rand.Range(0.8f, 1.2f)); + } + } + ticksToReset = Props.startingTicksToReset; + // 护盾层数归零将由 Hediff_DamageShield 负责移除 Hediff + } + + private void Reset() + { + // 复制自 CompShield.Reset + if (PawnOwner.Spawned) + { + SoundDefOf.EnergyShield_Reset.PlayOneShot(new TargetInfo(PawnOwner.Position, PawnOwner.Map)); + FleckMaker.ThrowLightningGlow(PawnOwner.TrueCenter(), PawnOwner.Map, 3f); + } + ticksToReset = -1; + // 能量恢复由 Hediff_DamageShield 负责,这里不需要设置 Energy + // 这里可以添加逻辑,让 Hediff_DamageShield 恢复层数 + Hediff_DamageShield hediff = PawnOwner?.health?.hediffSet.GetFirstHediff(); + if (hediff != null) + { + hediff.ShieldCharges = (int)hediff.def.initialSeverity; // 重置时恢复到初始层数 + } + } + + public void KeepDisplaying() + { + lastKeepDisplayTick = Find.TickManager.TicksGame; + } + + public override void PostDraw() + { + base.PostDraw(); + Draw(); + } + + private void Draw() + { + if (ShieldState == ShieldState.Active && ShouldDisplay) + { + float num = Mathf.Lerp(Props.minDrawSize, Props.maxDrawSize, Energy / MaxEnergy); // 根据当前能量比例调整大小 + Vector3 drawPos = PawnOwner.Drawer.DrawPos; + drawPos.y = AltitudeLayer.MoteOverhead.AltitudeFor(); + int num2 = Find.TickManager.TicksGame - lastAbsorbDamageTick; + if (num2 < JitterDurationTicks) // 使用 JitterDurationTicks + { + float num3 = (float)(JitterDurationTicks - num2) / JitterDurationTicks * MaxDamagedJitterDist; // 使用 MaxDamagedJitterDist + drawPos += impactAngleVect * num3; + num -= num3; + } + float angle = Rand.Range(0, 360); + Vector3 s = new Vector3(num, 1f, num); + Matrix4x4 matrix = default(Matrix4x4); + matrix.SetTRS(drawPos, Quaternion.AngleAxis(angle, Vector3.up), s); + Graphics.DrawMesh(MeshPool.plane10, matrix, BubbleMat, 0); + } + } + } +} +``` + +### 4.3 CompUseEffect_AddDamageShieldCharges.cs (不变) + +```csharp +using Verse; +using RimWorld; +using System.Collections.Generic; + +namespace WulaFallenEmpire +{ + public class CompUseEffect_AddDamageShieldCharges : CompUseEffect + { + public CompProperties_AddDamageShieldCharges Props => (CompProperties_AddDamageShieldCharges)props; + + public override void DoEffect(Pawn user) + { + base.DoEffect(user); + + // 获取或添加 Hediff_DamageShield + Hediff_DamageShield damageShield = user.health.hediffSet.GetFirstHediff(); + + if (damageShield == null) + { + // 如果没有 Hediff,则添加一个 + damageShield = (Hediff_DamageShield)HediffMaker.MakeHediff(Props.hediffDef, user); + user.health.AddHediff(damageShield); + damageShield.ShieldCharges = Props.chargesToAdd; // 设置初始层数 + } + else + { + // 如果已有 Hediff,则增加层数 + damageShield.ShieldCharges += Props.chargesToAdd; + } + + // 确保层数不超过最大值 + if (damageShield.ShieldCharges > (int)damageShield.def.maxSeverity) + { + damageShield.ShieldCharges = (int)damageShield.def.maxSeverity; + } + + // 发送消息 + Messages.Message("WULA_MessageGainedDamageShieldCharges".Translate(user.LabelShort, Props.chargesToAdd), user, MessageTypeDefOf.PositiveEvent); + } + + // 修正 CanBeUsedBy 方法签名 + public override AcceptanceReport CanBeUsedBy(Pawn p) + { + // 确保只能对活着的 Pawn 使用 + if (p.Dead) + { + return "WULA_CannotUseOnDeadPawn".Translate(); + } + + // 检查是否已达到最大层数 + Hediff_DamageShield damageShield = p.health.hediffSet.GetFirstHediff(); + if (damageShield != null && damageShield.ShieldCharges >= (int)damageShield.def.maxSeverity) + { + return "WULA_DamageShieldMaxChargesReached".Translate(); + } + + return true; // 可以使用 + } + + // 可以在这里添加 GetDescriptionPart() 来显示描述 + public override string GetDescriptionPart() + { + return "WULA_DamageShieldChargesDescription".Translate(Props.chargesToAdd); + } + } + + public class CompProperties_AddDamageShieldCharges : CompProperties_UseEffect + { + public HediffDef hediffDef; + public int chargesToAdd; + + public CompProperties_AddDamageShieldCharges() + { + compClass = typeof(CompUseEffect_AddDamageShieldCharges); + } + } +} +``` + +### 4.4 DamageShieldPatch.cs (将删除) + +此文件将不再需要,因为伤害拦截逻辑已转移到 `DRMDamageShield.cs`。 + +```csharp +// 此文件将被删除 +``` + +### 4.5 Hediffs_WULA_DamageShield.xml (不变) + +```xml + + + + WULA_DamageShield + + 一种特殊的能量护盾,可以抵挡受到的伤害。每层护盾可以抵挡一次伤害。 + WulaFallenEmpire.Hediff_DamageShield + 10 + 999 + false + false + 1 + true + false + +
  • + + 1 + +
  • + + false + + +``` + +### 4.6 ThingDefs_WULA_Items_DamageShield.xml (修改) + +此文件将定义新的物品 `WULA_DamageShieldGenerator`,它将使用 `CompProperties_AddDamageShieldCharges`。 + +```xml + + + + WULA_DamageShieldGenerator + + 一个便携式设备,可以激活并生成一个临时的能量护盾,抵挡即将到来的伤害。 + + Things/Item/WULA_DamageShieldGenerator + Graphic_Single + + 1 + true + false + + 50 + 500 + 0.5 + 1000 + + +
  • Items
  • +
    + Sellable + +
  • + UseItem + 使用伤害护盾发生器 +
  • +
  • + WULA_DamageShield + 10 +
  • +
    +
    +
    +``` + +### 4.7 WULA_Keyed.xml (不变) + +```xml + + + {0} 获得了 {1} 层伤害护盾! + 无法对已死亡的Pawn使用。 + 伤害护盾已达到最大层数。 + 使用:增加 {0} 层伤害护盾 + +``` + +## 5. 安装与测试 + +### 5.1 安装 Mod + +1. 将本Mod的文件夹放置在《RimWorld》的Mods目录下。 +2. 在游戏启动器中激活本Mod。 + +### 5.2 游戏内测试 + +1. 进入游戏,加载或开始一个殖民地。 +2. 打开开发者模式(通常按 `~` 键)。 +3. **生成护盾物品**:在开发者控制台中输入 `spawn WULA_DamageShieldGenerator 1` 来生成一个护盾发生器物品。 +4. **使用护盾物品**:让Pawn拾取并使用 `WULA_DamageShieldGenerator`。观察Pawn是否获得了 `伤害护盾` Hediff,并且层数是否正确显示。 +5. **测试伤害抵挡**:让Pawn受到伤害(例如,让敌人攻击,或使用开发者模式中的“伤害”工具)。观察护盾层数是否减少,伤害是否被抵挡,以及是否触发了护盾吸收的音效和闪光特效。 +6. **测试护盾渲染**:观察Pawn身上是否显示了护盾泡泡。 + +## 6. 未来展望 + +- **护盾渲染动态化**:使护盾泡泡的视觉表现(例如透明度、大小)与剩余层数更紧密地关联,层数越低,护盾视觉效果越弱。 +- **充能动画**:为 `WULA_DamageShieldGenerator` 的使用添加充能动画。 +- **平衡性调整**:根据游戏测试反馈,调整护盾的初始层数、每次充能的层数、以及护盾的最大层数,以达到更好的游戏平衡。 +- **扩展功能**: + - 添加护盾在特定条件下自动充能的机制。 + - 引入不同类型的次数护盾,具有不同的抵挡特性或额外效果。 + - 护盾被击穿时的特殊效果。 \ No newline at end of file diff --git a/Source/WulaFallenEmpire/DRMDamageShield.cs b/Source/WulaFallenEmpire/DRMDamageShield.cs new file mode 100644 index 00000000..441ed989 --- /dev/null +++ b/Source/WulaFallenEmpire/DRMDamageShield.cs @@ -0,0 +1,290 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Verse; +using Verse.Sound; +using HarmonyLib; // For AccessTools + +namespace WulaFallenEmpire +{ + // 自定义 CompProperties_Shield 变体 + public class DRMCompShieldProp : CompProperties + { + public int startingTicksToReset = 3200; + public float minDrawSize = 1.2f; + public float maxDrawSize = 1.55f; + public float energyLossPerDamage = 0.033f; + public float energyOnReset = 0.2f; + public bool blocksRangedWeapons = true; + + public DRMCompShieldProp() + { + compClass = typeof(DRMDamageShield); + } + } + + [StaticConstructorOnStartup] // 确保在游戏启动时加载 + public class DRMDamageShield : ThingComp + { + // 从 Hediff_DamageShield 获取层数作为能量 + public float Energy + { + get + { + Hediff_DamageShield hediff = PawnOwner?.health?.hediffSet.GetFirstHediff(); + return hediff?.ShieldCharges ?? 0; + } + set + { + Hediff_DamageShield hediff = PawnOwner?.health?.hediffSet.GetFirstHediff(); + if (hediff != null) + { + hediff.ShieldCharges = (int)value; + } + } + } + + public float MaxEnergy + { + get + { + Hediff_DamageShield hediff = PawnOwner?.health?.hediffSet.GetFirstHediff(); + return hediff?.def.maxSeverity ?? 0; + } + set + { + // MaxEnergy 由 HediffDef 控制,这里不需要设置 + } + } + + public bool IsActive = false; // 控制护盾是否激活,由 Hediff_DamageShield 管理 + + // 复制自 CompShield + protected int ticksToReset = -1; + protected int lastKeepDisplayTick = -9999; + private Vector3 impactAngleVect; + private int lastAbsorbDamageTick = -9999; + + private const float MaxDamagedJitterDist = 0.05f; + private const int JitterDurationTicks = 8; + private int KeepDisplayingTicks = 1000; + + // 获取原版 CompShield 的 BubbleMat + private static readonly Material BubbleMat; + + static DRMDamageShield() + { + // 使用 Harmony AccessTools 获取 CompShield 的私有静态字段 BubbleMat + BubbleMat = (Material)AccessTools.Field(typeof(CompShield), "BubbleMat").GetValue(null); + } + + public DRMCompShieldProp Props => (DRMCompShieldProp)props; + + public ShieldState ShieldState + { + get + { + if (PawnOwner == null || !IsActive || Energy <= 0) + { + return ShieldState.Disabled; + } + if (ticksToReset <= 0) + { + return ShieldState.Active; + } + return ShieldState.Resetting; + } + } + + protected bool ShouldDisplay + { + get + { + Pawn pawnOwner = PawnOwner; + if (pawnOwner == null || !pawnOwner.Spawned || pawnOwner.Dead || pawnOwner.Downed) + { + return false; + } + if (pawnOwner.InAggroMentalState) + { + return true; + } + if (pawnOwner.Drafted) + { + return true; + } + if (pawnOwner.Faction.HostileTo(Faction.OfPlayer) && !pawnOwner.IsPrisoner) + { + return true; + } + if (Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks) + { + return true; + } + return false; + } + } + + protected Pawn PawnOwner + { + get + { + return parent as Pawn; + } + } + + public override void PostExposeData() + { + base.PostExposeData(); + Scribe_Values.Look(ref ticksToReset, "ticksToReset", -1); + Scribe_Values.Look(ref lastKeepDisplayTick, "lastKeepDisplayTick", 0); + Scribe_Values.Look(ref IsActive, "isActive", false); + } + + public override void CompTick() + { + base.CompTick(); + if (PawnOwner == null || !IsActive) + { + return; + } + + if (ShieldState == ShieldState.Resetting) + { + ticksToReset--; + if (ticksToReset <= 0) + { + Reset(); + } + } + else if (ShieldState == ShieldState.Active) + { + // 护盾能量(层数)通过 Hediff_DamageShield 的 Tick 方法管理,这里不需要额外回复 + // 如果需要自动回复层数,可以在这里实现 + } + } + + public override void PostPreApplyDamage(ref DamageInfo dinfo, out bool absorbed) + { + absorbed = false; + // 获取 Hediff_DamageShield 实例 + Hediff_DamageShield damageShield = PawnOwner?.health?.hediffSet.GetFirstHediff(); + + if (ShieldState != ShieldState.Active || !IsActive || damageShield == null || damageShield.ShieldCharges <= 0) + { + return; + } + + // 如果是 EMP 伤害,且护盾没有 EMP 抗性(这里假设我们的护盾没有),则直接击穿 + // 为了简化,我们假设我们的次数盾没有 EMP 抗性,任何 EMP 伤害都会直接击穿 + if (dinfo.Def == DamageDefOf.EMP) + { + Energy = 0; // 能量归零 + Notify_ShieldBreak(); // 触发护盾击穿效果 + absorbed = true; + return; + } + + // 如果是远程或爆炸伤害,且护盾阻挡这些类型 + if (Props.blocksRangedWeapons && (dinfo.Def.isRanged || dinfo.Def.isExplosive)) + { + // 消耗一层护盾 + damageShield.ShieldCharges--; + + // 触发护盾吸收效果 + Notify_DamageAbsorbed(dinfo); + + // 护盾抖动效果 + PawnOwner.Drawer.renderer.wiggler.SetToCustomRotation(Rand.Range(-0.05f, 0.05f)); + // 移除文字提示 + // 移除粒子效果 + + absorbed = true; // 伤害被吸收 + + // 如果护盾层数归零,触发护盾击穿效果 + if (damageShield.ShieldCharges <= 0) + { + Notify_ShieldBreak(); + } + } + } + + public void Notify_DamageAbsorbed(DamageInfo dinfo) + { + // 复制自 CompShield.AbsorbedDamage + SoundDefOf.EnergyShield_AbsorbDamage.PlayOneShot(new TargetInfo(PawnOwner.Position, PawnOwner.Map)); + impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); + // 移除 FleckMaker.Static 和 FleckMaker.ThrowDustPuff + lastAbsorbDamageTick = Find.TickManager.TicksGame; + KeepDisplaying(); + } + + public void Notify_ShieldBreak() + { + // 复制自 CompShield.Break + if (parent.Spawned) + { + float scale = Mathf.Lerp(Props.minDrawSize, Props.maxDrawSize, Energy / MaxEnergy); // 根据当前能量比例调整大小 + EffecterDefOf.Shield_Break.SpawnAttached(parent, parent.MapHeld, scale); + // 移除 FleckMaker.Static 和 FleckMaker.ThrowDustPuff + } + ticksToReset = Props.startingTicksToReset; + // 护盾层数归零将由 Hediff_DamageShield 负责移除 Hediff + } + + private void Reset() + { + // 复制自 CompShield.Reset + if (PawnOwner.Spawned) + { + SoundDefOf.EnergyShield_Reset.PlayOneShot(new TargetInfo(PawnOwner.Position, PawnOwner.Map)); + // 移除 FleckMaker.ThrowLightningGlow + } + ticksToReset = -1; + // 能量恢复由 Hediff_DamageShield 负责,这里不需要设置 Energy + // 这里可以添加逻辑,让 Hediff_DamageShield 恢复层数 + Hediff_DamageShield hediff = PawnOwner?.health?.hediffSet.GetFirstHediff(); + if (hediff != null) + { + hediff.ShieldCharges = (int)hediff.def.initialSeverity; // 重置时恢复到初始层数 + } + } + + public void KeepDisplaying() + { + lastKeepDisplayTick = Find.TickManager.TicksGame; + } + + public override void PostDraw() + { + base.PostDraw(); + Draw(); + } + + private void Draw() + { + if (ShieldState == ShieldState.Active && ShouldDisplay) + { + float num = Mathf.Lerp(Props.minDrawSize, Props.maxDrawSize, Energy / MaxEnergy); // 根据当前能量比例调整大小 + Vector3 drawPos = PawnOwner.Drawer.DrawPos; + drawPos.y = AltitudeLayer.MoteOverhead.AltitudeFor(); + int num2 = Find.TickManager.TicksGame - lastAbsorbDamageTick; + if (num2 < JitterDurationTicks) // 使用 JitterDurationTicks + { + float num3 = (float)(JitterDurationTicks - num2) / JitterDurationTicks * MaxDamagedJitterDist; // 使用 MaxDamagedJitterDist + drawPos += impactAngleVect * num3; + num -= num3; + } + float angle = Rand.Range(0, 360); + Vector3 s = new Vector3(num, 1f, num); + Matrix4x4 matrix = default(Matrix4x4); + matrix.SetTRS(drawPos, Quaternion.AngleAxis(angle, Vector3.up), s); + Graphics.DrawMesh(MeshPool.plane10, matrix, BubbleMat, 0); + } + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/HarmonyPatches/DamageShieldPatch.cs b/Source/WulaFallenEmpire/HarmonyPatches/DamageShieldPatch.cs deleted file mode 100644 index e6f28aec..00000000 --- a/Source/WulaFallenEmpire/HarmonyPatches/DamageShieldPatch.cs +++ /dev/null @@ -1,40 +0,0 @@ -using HarmonyLib; -using Verse; -using System.Reflection; -using UnityEngine; // Add UnityEngine for MoteMaker and Color - -namespace WulaFallenEmpire.HarmonyPatches -{ - [HarmonyPatch(typeof(Pawn_HealthTracker), "PreApplyDamage")] - public static class DamageShieldPatch - { - // 使用 Harmony 的 AccessTools.Field 来获取私有的 pawn 字段 - private static readonly FieldInfo PawnField = AccessTools.Field(typeof(Pawn_HealthTracker), "pawn"); - - public static bool Prefix(Pawn_HealthTracker __instance, ref DamageInfo dinfo, out bool absorbed) - { - // 获取 Pawn 实例 - Pawn pawn = (Pawn)PawnField.GetValue(__instance); - - // 查找 Pawn 身上是否有 Hediff_DamageShield - Hediff_DamageShield damageShield = pawn.health.hediffSet.GetFirstHediff(); - - if (damageShield != null && damageShield.ShieldCharges > 0) - { - // 如果有护盾层数,则消耗一层并抵挡伤害 - damageShield.ShieldCharges--; - // MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "伤害被护盾抵挡!", Color.cyan, 1.2f); // 视觉反馈,明确指定 Verse.MoteMaker,此行将被删除 - - // 设置 absorbed 为 true,表示伤害被完全吸收 - absorbed = true; - - // 返回 false,阻止原始方法执行,即伤害不会被应用 - return false; - } - - // 如果没有护盾 Hediff 或者层数用尽,则正常处理伤害 - absorbed = false; - return true; // 继续执行原始方法 - } - } -} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Hediff_DamageShield.cs b/Source/WulaFallenEmpire/Hediff_DamageShield.cs index cc870ff8..640035f3 100644 --- a/Source/WulaFallenEmpire/Hediff_DamageShield.cs +++ b/Source/WulaFallenEmpire/Hediff_DamageShield.cs @@ -1,20 +1,40 @@ using Verse; +using System; // Add for Activator using System.Text; using RimWorld; using UnityEngine; +using HarmonyLib; // Needed for AccessTools if you use it here directly namespace WulaFallenEmpire { public class Hediff_DamageShield : HediffWithComps { // 伤害抵挡层数 - // 直接将 severityInt 作为 ShieldCharges,这样外部对 severity 的修改会直接影响 ShieldCharges public int ShieldCharges { get => (int)severityInt; set => severityInt = value; } + // 获取或创建 DRMDamageShield 组件 + public DRMDamageShield ShieldComp + { + get + { + DRMDamageShield comp = pawn.GetComp(); + if (comp == null) + { + comp = (DRMDamageShield)Activator.CreateInstance(typeof(DRMDamageShield)); + comp.parent = pawn; + comp.props = new DRMCompShieldProp(); // 确保有属性,即使是默认的 + pawn.AllComps.Add(comp); + comp.Initialize(comp.props); + } + return comp; + } + } + + public override string LabelInBrackets { get @@ -54,10 +74,25 @@ namespace WulaFallenEmpire public override void PostAdd(DamageInfo? dinfo) { base.PostAdd(dinfo); - // 初始层数由 XML 中的 initialSeverity 控制 - // 如果需要一个固定的初始值,可以在这里设置 - // 例如:如果 hediffDef.initialSeverity 设为 0,这里可以强制给一个默认值 - // 如果 initialSeverity 在 XML 中已经设置为 10,这里就不需要额外处理 + // 确保 Pawn 拥有 DRMCompShield 组件 + DRMDamageShield comp = ShieldComp; // 访问属性以确保组件被添加 + if (comp != null) + { + comp.IsActive = true; // 激活护盾组件 + // 能量同步将在 Tick() 中完成 + } + } + + public override void PostRemoved() + { + base.PostRemoved(); + // 当 Hediff 被移除时,移除对应的 DRMDamageShield 组件 + DRMDamageShield comp = pawn.GetComp(); + if (comp != null) + { + pawn.AllComps.Remove(comp); + comp.IsActive = false; // 确保禁用 + } } public override void Tick() @@ -68,6 +103,13 @@ namespace WulaFallenEmpire { pawn.health.RemoveHediff(this); } + // 同步能量到 ShieldComp + DRMDamageShield comp = pawn.GetComp(); // 每次 Tick 获取,确保是最新的 + if (comp != null && comp.IsActive) + { + comp.Energy = ShieldCharges; + comp.MaxEnergy = (int)def.maxSeverity; + } } } } \ No newline at end of file diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index 409b5b8e..77647a51 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -183,7 +183,7 @@ - +