Exemple #1
0
        protected override void ProcessWound(Ped ped, EcsEntity pedEntity, EcsEntity woundEntity)
        {
            NaturalMotionMessagesDictComponent dict = _dict.Components1[0];

            var nmMessages = EcsWorld.GetComponent <NaturalMotionMessagesComponent>(woundEntity);

            if (nmMessages == null || nmMessages.MessageList.Count <= 0)
            {
                return;
            }

            var permanentRagdoll = EcsWorld.GetComponent <PermanentRagdollComponent>(pedEntity);

            if (permanentRagdoll != null && !nmMessages.PlayInPermanentRagdoll)
            {
                return;
            }
            if (permanentRagdoll != null && !permanentRagdoll.DisableOnlyOnHeal)
            {
                NativeFunction.Natives.SET_PED_TO_RAGDOLL(ped, 0, 0, 1, 0, 0, 0);
            }

            foreach (string messageName in nmMessages.MessageList)
            {
                NaturalMotionMessage nmMessage = dict.MessageDict[messageName];
                PlayNaturalMotionMessage(nmMessage, ped, _random);
            }
#if DEBUG
            Logger.MakeLog($"{pedEntity.GetEntityName()} have got NM-message {nmMessages}");
#endif
        }
Exemple #2
0
        public static void PlayNaturalMotionMessage(NaturalMotionMessage nmMessage, Ped ped, Random random)
        {
            EuphoriaMessage message = new EuphoriaMessage(nmMessage.Name, true);

            foreach (NmArgument argument in nmMessage.NmArguments)
            {
                message.SetArgument(argument.Name, argument.Value);
            }

            foreach (RandomFloatArgument argument in nmMessage.RandomFloatArguments)
            {
                message.SetArgument(argument.Name, random.NextMinMax(argument.Value));
            }

            foreach (RandomIntArgument argument in nmMessage.RandomIntArguments)
            {
                message.SetArgument(argument.Name, random.NextMinMax(argument.Value));
            }

            message.SendTo(ped);
        }
        public void PreInitialize()
        {
            EcsEntity statsEntity = GunshotWound3.StatsContainerEntity;
            var       dict        = EcsWorld.AddComponent <NaturalMotionMessagesDictComponent>(statsEntity);

            foreach (int i in _loadedConfig)
            {
                XElement root = _loadedConfig.Components1[i].ElementRoot;
                XElement list = root.Element("NaturalMotionMessageList");
                if (list == null)
                {
                    continue;
                }

                foreach (XElement element in list.Elements("NaturalMotionMessage"))
                {
                    var message = new NaturalMotionMessage
                    {
                        Name                 = element.Element("MessageName").GetAttributeValue("Value"),
                        NmArguments          = new List <NmArgument>(),
                        RandomFloatArguments = new List <RandomFloatArgument>(),
                        RandomIntArguments   = new List <RandomIntArgument>()
                    };

                    foreach (XElement boolElement in element.Elements("BoolArgument"))
                    {
                        message.NmArguments.Add(new NmArgument
                        {
                            Name  = boolElement.GetAttributeValue("Name"),
                            Value = boolElement.GetBool()
                        });
                    }

                    foreach (XElement intElement in element.Elements("IntArgument"))
                    {
                        message.NmArguments.Add(new NmArgument
                        {
                            Name  = intElement.GetAttributeValue("Name"),
                            Value = intElement.GetInt()
                        });
                    }

                    foreach (XElement floatElement in element.Elements("FloatArgument"))
                    {
                        message.NmArguments.Add(new NmArgument
                        {
                            Name  = floatElement.GetAttributeValue("Name"),
                            Value = floatElement.GetFloat()
                        });
                    }

                    foreach (XElement randomFloat in element.Elements("RandomFloatArgument"))
                    {
                        message.RandomFloatArguments.Add(new RandomFloatArgument
                        {
                            Name  = randomFloat.GetAttributeValue("Name"),
                            Value = randomFloat.GetMinMax()
                        });
                    }

                    foreach (XElement randomFloat in element.Elements("RandomIntArgument"))
                    {
                        message.RandomIntArguments.Add(new RandomIntArgument
                        {
                            Name  = randomFloat.GetAttributeValue("Name"),
                            Value = randomFloat.GetMinMaxInt()
                        });
                    }

                    dict.MessageDict.Add(element.GetAttributeValue("Name"), message);
                }
            }
        }