public void CryptoStasis() { Hediff_CryptoStasis revertMentalState = null; if (!Wearer.health.hediffSet.HasHediff(SS_HediffDefOf.Crypto_Stasis)) { Wearer.health.AddHediff(SS_HediffDefOf.Crypto_Stasis); revertMentalState = Wearer.health.hediffSet.GetFirstHediffOfDef(SS_HediffDefOf.Crypto_Stasis) as Hediff_CryptoStasis; revertMentalState.SaveMemory(); } if (!Wearer.Spawned || Wearer.Downed) { armed = false; RevertMentalState(); return; } if (Wearer.mindState.mentalStateHandler.CurStateDef != SS_MentalStateDefOf.CryptoStasis) { Wearer.mindState.mentalStateHandler.TryStartMentalState(SS_MentalStateDefOf.CryptoStasis, null, true, false, null, true); } if (Rand.Value < 0.33f) { MoteMaker.ThrowTornadoDustPuff(Wearer.TrueCenter() + Vector3Utility.RandomHorizontalOffset(0.5f), Wearer.Map, Rand.Range(0.25f, 1f), new Color(0.65f, 0.9f, 0.93f)); } }
private void AbsorbedDamage(DamageInfo dinfo) { PhysicalShield.SoundAbsorbDamage.PlayOneShot(new TargetInfo(Wearer.Position, Wearer.Map)); impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); Vector3 vector = Wearer.TrueCenter() + impactAngleVect.RotatedBy(180f) * 0.5f; lastAbsorbDamageTick = Find.TickManager.TicksGame; KeepDisplaying(); }
// Token: 0x0600005D RID: 93 RVA: 0x00003F90 File Offset: 0x00002190 private void Reset() { if (Wearer.Spawned) { SoundDefOf.EnergyShield_Reset.PlayOneShot(new TargetInfo(Wearer.Position, Wearer.Map, false)); MoteMaker.ThrowLightningGlow(Wearer.TrueCenter(), Wearer.Map, 3f); } this.ticksToReset = -1; this.energy = this.EnergyOnReset; }
// Token: 0x0600005C RID: 92 RVA: 0x00003EBC File Offset: 0x000020BC private void Break() { SoundDefOf.EnergyShield_Broken.PlayOneShot(new TargetInfo(Wearer.Position, Wearer.Map, false)); MoteMaker.MakeStaticMote(Wearer.TrueCenter(), Wearer.Map, ThingDefOf.Mote_ExplosionFlash, 12f); for (int i = 0; i < 6; i++) { Rand.PushState(); MoteMaker.ThrowDustPuff(Wearer.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle((float)Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f), Wearer.Map, Rand.Range(0.8f, 1.2f)); Rand.PopState(); } this.energy = 0f; this.ticksToReset = this.StartingTicksToReset; cloakMode = CloakMode.Off; }
private void Break() { SoundDefOf.EnergyShield_Broken.PlayOneShot(new TargetInfo(Wearer.Position, Wearer.Map)); FleckMaker.Static(Wearer.TrueCenter(), Wearer.Map, FleckDefOf.ExplosionFlash, 12f); for (var i = 0; i < 6; i++) { var loc = Wearer.TrueCenter() + (Vector3Utility.HorizontalVectorFromAngle(Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f)); FleckMaker.ThrowDustPuff(loc, Wearer.Map, Rand.Range(0.8f, 1.2f)); } energy = 0f; ticksToReset = StartingTicksToReset; }
private void AbsorbedDamage(DamageInfo dinfo) { SoundDefOf.EnergyShield_AbsorbDamage.PlayOneShot(new TargetInfo(Wearer.Position, Wearer.Map)); impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); var loc = Wearer.TrueCenter() + (impactAngleVect.RotatedBy(180f) * 0.5f); var num = Mathf.Min(10f, 2f + (dinfo.Amount / 10f)); FleckMaker.Static(loc, Wearer.Map, FleckDefOf.ExplosionFlash, num); var num2 = (int)num; for (var i = 0; i < num2; i++) { FleckMaker.ThrowDustPuff(loc, Wearer.Map, Rand.Range(0.8f, 1.2f)); } lastAbsorbDamageTick = Find.TickManager.TicksGame; KeepDisplaying(); }
// Token: 0x0600005B RID: 91 RVA: 0x00003DCC File Offset: 0x00001FCC private void AbsorbedDamage(DamageInfo dinfo) { SoundDefOf.EnergyShield_AbsorbDamage.PlayOneShot(new TargetInfo(Wearer.Position, Wearer.Map, false)); this.impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); UnityEngine.Vector3 loc = Wearer.TrueCenter() + this.impactAngleVect.RotatedBy(180f) * 0.5f; float num = Mathf.Min(10f, 2f + (float)dinfo.Amount / 10f); MoteMaker.MakeStaticMote(loc, Wearer.Map, ThingDefOf.Mote_ExplosionFlash, num); int num2 = (int)num; for (int i = 0; i < num2; i++) { Rand.PushState(); MoteMaker.ThrowDustPuff(loc, Wearer.Map, Rand.Range(0.8f, 1.2f)); Rand.PopState(); } this.lastAbsorbDamageTick = Find.TickManager.TicksGame; this.KeepDisplaying(); }
public override bool CheckPreAbsorbDamage(DamageInfo dinfo) { if (ShieldMax <= 0 || shieldInit > 0) { //受到伤害时重置启动倒计时 shieldInit = shieldInitSec.SecondsToTicks(); return(false); } dinfo.SetAmount(dinfo.Amount / shieldDamagedRate); float impact = dinfo.Amount; if (impact > shieldCur) { dinfo.SetAmount(-shieldCur); shieldCur = 0; shieldInit = shieldInitSec.SecondsToTicks(); //剩余护盾相对冲击量越高,抵挡最后一次伤害的概率就越高 return(Rand.Chance(shieldCur / impact)); } else { shieldCur -= impact; SoundDefOf.EnergyShield_AbsorbDamage.PlayOneShot(new TargetInfo(Wearer.Position, Wearer.Map, false)); impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); Vector3 loc = Wearer.TrueCenter() + impactAngleVect.RotatedBy(180f) * 0.5f; float num = Mathf.Min(10f, 2f + dinfo.Amount / 10f); MoteMaker.MakeStaticMote(loc, Wearer.Map, ThingDefOf.Mote_ExplosionFlash, num); int num2 = (int)num; for (int i = 0; i < num2; i++) { MoteMaker.ThrowDustPuff(loc, Wearer.Map, Rand.Range(0.8f, 1.2f)); } int gt = Find.TickManager.TicksGame; lastAbsorbDamageTick = gt; lastKeepDisplayTick = gt; } return(true); }