private void DismemberHead(Agent agent) { bool flag = agent.IsActive(); if (flag) { this.KillAgent(agent); } _ignoreAgents.Add(agent); agent.AgentVisuals.SetVoiceDefinitionIndex(-1, 0f); AgentBuildData agentBuildData = new AgentBuildData(agent.Character); agentBuildData.NoHorses(true); agentBuildData.NoWeapons(true); agentBuildData.NoArmor(false); agentBuildData.Team(Mission.Current.PlayerEnemyTeam); agentBuildData.TroopOrigin(agent.Origin); agentBuildData.InitialFrame(new MatrixFrame { origin = agent.Position + agent.LookDirection * -0.75f, rotation = agent.Frame.rotation }); Agent agent2 = Mission.Current.SpawnAgent(agentBuildData, false, 0); _ignoreAgents.Add(agent2); IEnumerable <object> meshes = agent2.AgentVisuals.GetSkeleton().GetAllMeshes(); foreach (Mesh current in meshes) { bool flag2 = !current.Name.ToLower().Contains("head") && !current.Name.ToLower().Contains("hair") && !current.Name.ToLower().Contains("beard") && !current.Name.ToLower().Contains("eyebrow") && !current.Name.ToLower().Contains("helmet") && !current.Name.ToLower().Contains("_cap_"); if (flag2) { current.SetVisibilityMask(VisibilityMaskFlags.EditModeAny); //current.ClearMesh(); } } agent2.AgentVisuals.GetEntity().ActivateRagdoll(); agent2.AgentVisuals.SetVoiceDefinitionIndex(-1, 0f); this.KillAgent(agent2); foreach (Mesh current2 in agent.AgentVisuals.GetSkeleton().GetAllMeshes()) { bool flag3 = current2.Name.ToLower().Contains("head") || current2.Name.ToLower().Contains("hair") || current2.Name.ToLower().Contains("beard") || current2.Name.ToLower().Contains("eyebrow") || current2.Name.ToLower().Contains("helmet") || current2.Name.ToLower().Contains("_cap_"); if (flag3) { current2.SetVisibilityMask(VisibilityMaskFlags.EditModeAny); //current2.ClearMesh(); } } MatrixFrame boneEntitialFrameWithIndex = agent.AgentVisuals.GetSkeleton().GetBoneEntitialFrameWithIndex((byte)agent.BoneMappingArray[HumanBone.Head]); Vec3 vec = agent.AgentVisuals.GetGlobalFrame().TransformToParent(boneEntitialFrameWithIndex.origin); agent.CreateBloodBurstAtLimb(13, ref vec, 0.5f + MBRandom.RandomFloat * 0.5f); boneEntitialFrameWithIndex = agent2.AgentVisuals.GetSkeleton().GetBoneEntitialFrameWithIndex((byte)agent2.BoneMappingArray[HumanBone.Head]); vec = agent2.AgentVisuals.GetGlobalFrame().TransformToParent(boneEntitialFrameWithIndex.origin); agent2.CreateBloodBurstAtLimb(13, ref vec, 0.5f + MBRandom.RandomFloat * 0.5f); }
private void DismemberAgent(Agent victim, Agent attacker, BodyPart bodyPart, bool isPlayerAttacker) { AgentBuildData bodyPartData = new AgentBuildData(victim.Character); bodyPartData.NoWeapons(true); bodyPartData.NoHorses(true); bodyPartData.Team(victim.Team); bodyPartData.TroopOrigin(victim.Origin); bodyPartData.InitialFrame(new MatrixFrame(victim.Frame.rotation, victim.Frame.origin)); Agent bodyPartAgent = Mission.SpawnAgent(bodyPartData); SetSkeletonParts(bodyPartAgent.AgentVisuals.GetSkeleton(), true); SetSkeletonParts(victim.AgentVisuals.GetSkeleton(), false); MakeDead(bodyPartAgent, attacker); bodyPartAgent.AgentVisuals.GetEntity().ActivateRagdoll(); //TODO:: Add blood spurt //if (isPlayerAttacker && Settings.Instance.ReportPlayerDecapitatedSomeoneEnabled) // ReportDismemberment(victim, bodyPart); }