private void ReadStatus(IReadMessage msg) { bool isDead = msg.ReadBoolean(); if (isDead) { CauseOfDeathType causeOfDeathType = (CauseOfDeathType)msg.ReadRangedInteger(0, Enum.GetValues(typeof(CauseOfDeathType)).Length - 1); AfflictionPrefab causeOfDeathAffliction = null; if (causeOfDeathType == CauseOfDeathType.Affliction) { string afflictionName = msg.ReadString(); if (!AfflictionPrefab.Prefabs.ContainsKey(afflictionName)) { string errorMsg = $"Error in CharacterNetworking.ReadStatus: affliction not found ({afflictionName})"; causeOfDeathType = CauseOfDeathType.Unknown; GameAnalyticsManager.AddErrorEventOnce("CharacterNetworking.ReadStatus:AfflictionIndexOutOfBounts", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); } else { causeOfDeathAffliction = AfflictionPrefab.Prefabs[afflictionName]; } } byte severedLimbCount = msg.ReadByte(); if (!IsDead) { if (causeOfDeathType == CauseOfDeathType.Pressure) { Implode(true); } else { Kill(causeOfDeathType, causeOfDeathAffliction?.Instantiate(1.0f), true); } } for (int i = 0; i < severedLimbCount; i++) { int severedJointIndex = msg.ReadByte(); if (severedJointIndex < 0 || severedJointIndex >= AnimController.LimbJoints.Length) { string errorMsg = $"Error in CharacterNetworking.ReadStatus: severed joint index out of bounds (index: {severedJointIndex}, joint count: {AnimController.LimbJoints.Length})"; GameAnalyticsManager.AddErrorEventOnce("CharacterNetworking.ReadStatus:JointIndexOutOfBounts", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); } else { AnimController.SeverLimbJoint(AnimController.LimbJoints[severedJointIndex]); } } } else { if (IsDead) { Revive(); } CharacterHealth.ClientRead(msg); } }
private void ReadStatus(NetBuffer msg) { bool isDead = msg.ReadBoolean(); if (isDead) { CauseOfDeathType causeOfDeathType = (CauseOfDeathType)msg.ReadRangedInteger(0, Enum.GetValues(typeof(CauseOfDeathType)).Length - 1); AfflictionPrefab causeOfDeathAffliction = null; if (causeOfDeathType == CauseOfDeathType.Affliction) { int afflictionIndex = msg.ReadRangedInteger(0, AfflictionPrefab.List.Count - 1); causeOfDeathAffliction = AfflictionPrefab.List[afflictionIndex]; } byte severedLimbCount = msg.ReadByte(); if (!IsDead) { if (causeOfDeathType == CauseOfDeathType.Pressure) { Implode(true); } else { Kill(causeOfDeathType, causeOfDeathAffliction, true); } } for (int i = 0; i < severedLimbCount; i++) { int severedJointIndex = msg.ReadByte(); AnimController.SeverLimbJoint(AnimController.LimbJoints[severedJointIndex]); } } else { if (IsDead) { Revive(); } CharacterHealth.ClientRead(msg); bool ragdolled = msg.ReadBoolean(); IsRagdolled = ragdolled; } }
private void ReadStatus(NetBuffer msg) { bool isDead = msg.ReadBoolean(); if (isDead) { causeOfDeath = (CauseOfDeath)msg.ReadByte(); byte severedLimbCount = msg.ReadByte(); if (!IsDead) { if (causeOfDeath == CauseOfDeath.Pressure) { Implode(true); } else { Kill(causeOfDeath, true); } } for (int i = 0; i < severedLimbCount; i++) { int severedJointIndex = msg.ReadByte(); AnimController.SeverLimbJoint(AnimController.LimbJoints[severedJointIndex]); } } else { this.isDead = false; health = msg.ReadRangedSingle(minHealth, maxHealth, 8); bool lowOxygen = msg.ReadBoolean(); if (lowOxygen) { Oxygen = msg.ReadRangedSingle(-100.0f, 100.0f, 8); } else { Oxygen = 100.0f; } bool isBleeding = msg.ReadBoolean(); if (isBleeding) { bleeding = msg.ReadRangedSingle(0.0f, 5.0f, 8); } else { bleeding = 0.0f; } bool stunned = msg.ReadBoolean(); if (stunned) { float newStunTimer = msg.ReadRangedSingle(0.0f, 60.0f, 8); SetStun(newStunTimer, true, true); } else { SetStun(0.0f, true, true); } bool ragdolled = msg.ReadBoolean(); IsRagdolled = ragdolled; bool huskInfected = msg.ReadBoolean(); if (huskInfected) { HuskInfectionState = Math.Max(HuskInfectionState, 0.01f); } else { HuskInfectionState = 0.0f; } } }
private void ReadStatus(NetBuffer msg) { if (GameMain.Server != null) { DebugConsole.ThrowError("Server attempted to read character status from a networked message"); return; } bool isDead = msg.ReadBoolean(); if (isDead) { causeOfDeath = (CauseOfDeath)msg.ReadByte(); byte severedLimbCount = msg.ReadByte(); if (causeOfDeath == CauseOfDeath.Pressure) { Implode(true); } else { Kill(causeOfDeath, true); } for (int i = 0; i < severedLimbCount; i++) { int severedJointIndex = msg.ReadByte(); AnimController.SeverLimbJoint(AnimController.LimbJoints[severedJointIndex]); } } else { health = msg.ReadRangedSingle(minHealth, maxHealth, 8); bool lowOxygen = msg.ReadBoolean(); if (lowOxygen) { Oxygen = msg.ReadRangedSingle(-100.0f, 100.0f, 8); } else { Oxygen = 100.0f; } bool isBleeding = msg.ReadBoolean(); if (isBleeding) { bleeding = msg.ReadRangedSingle(0.0f, 5.0f, 8); } else { bleeding = 0.0f; } bool stunned = msg.ReadBoolean(); if (stunned) { float newStunTimer = msg.ReadRangedSingle(0.0f, 60.0f, 8); SetStun(newStunTimer, true, true); } else { SetStun(0.0f, true, true); } bool huskInfected = msg.ReadBoolean(); if (huskInfected) { HuskInfectionState = Math.Max(HuskInfectionState, 0.01f); } else { HuskInfectionState = 0.0f; } } }