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 }
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); } } }