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);
        }
Example #2
0
        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);
        }