private EcsEntity CreateAnimal(GswWorldComponent gswWorld, Ped ped) { EcsEntity entity = _ecsWorld.CreateEntityWith(out GswPedComponent gswPed, out AnimalMarkComponent _); gswPed.ThisPed = ped; gswPed.DefaultAccuracy = ped.Accuracy; gswWorld.PedsToEntityDict.Add(ped, entity); return entity; }
private int CreateAnimal(GswWorldComponent gswWorld, Ped ped) { int entity = _ecsWorld.CreateEntityWith( out GswPedComponent gswPed, out NewPedMarkComponent _, out AnimalMarkComponent _); gswPed.ThisPed = ped; gswWorld.PedsToEntityDict.Add(ped, entity); return(entity); }
public void Run() { GswWorldComponent gswWorld = _world.Components1[0]; foreach (int i in _pedsToRemove) { Ped ped = _pedsToRemove.Components1[i].ThisPed; EcsEntity pedEntity = _pedsToRemove.Entities[i]; gswWorld.PedsToEntityDict.Remove(ped); _ecsWorld.RemoveEntity(pedEntity); #if DEBUG _logger.MakeLog($"{pedEntity.GetEntityName()} was removed"); #endif } }
public void Run() { if (_world.EntitiesCount <= 0) { return; } GswWorldComponent gswWorld = _world.Components1[0]; foreach (int i in _pedsToRemove) { Ped ped = _pedsToRemove.Components1[i].ThisPed; int pedEntity = _pedsToRemove.Entities[i]; gswWorld.PedsToEntityDict.Remove(ped); _ecsWorld.RemoveEntity(pedEntity); } }
private EcsEntity CreateHuman(GswWorldComponent gswWorld, Ped ped) { EcsEntity entity = _ecsWorld.CreateEntityWith(out GswPedComponent gswPed); gswPed.ThisPed = ped; if (!gswWorld.HumanAccuracy.IsDisabled()) { ped.Accuracy = (int) _random.NextMinMax(gswWorld.HumanAccuracy); } if (!gswWorld.HumanShootRate.IsDisabled()) { int rate = (int) _random.NextMinMax(gswWorld.HumanShootRate); NativeFunction.Natives.SET_PED_SHOOT_RATE(ped, rate); } gswPed.DefaultAccuracy = ped.Accuracy; gswWorld.PedsToEntityDict.Add(ped, entity); return entity; }
private void FillWithDefaultValues(GswWorldComponent stats) { stats.HumanDetectingEnabled = true; stats.AnimalDetectingEnabled = true; stats.HumanAccuracy = new MinMax { Min = 10, Max = 30 }; stats.HumanShootRate = new MinMax { Min = 10, Max = 30 }; stats.ScanOnlyDamaged = false; stats.MaxDetectTimeInMs = 5; }
public void Run() { GswWorldComponent gswWorld = _world.Components1[0]; bool detectingEnabled = gswWorld.MaxPedCountPerFrame > 0 && (gswWorld.HumanDetectingEnabled || gswWorld.AnimalDetectingEnabled); if (gswWorld.NeedToCheckPeds.Count <= 0) { foreach (int i in _forceCreateEvents) { Ped targetPed = _forceCreateEvents.Components1[i].TargetPed; if (gswWorld.ForceCreatePeds.Contains(targetPed)) continue; gswWorld.ForceCreatePeds.Add(targetPed); gswWorld.NeedToCheckPeds.Enqueue(targetPed); _ecsWorld.RemoveEntity(_forceCreateEvents.Entities[i]); } foreach (int i in _gswPeds) { GswPedComponent gswPed = _gswPeds.Components1[i]; Ped ped = gswPed.ThisPed; if (IsExistsAndAlive(ped)) continue; EcsEntity pedEntity = _gswPeds.Entities[i]; _ecsWorld.AddComponent<RemovedPedMarkComponent>(pedEntity); } if (detectingEnabled) { NativeFunction.Natives.SET_AI_MELEE_WEAPON_DAMAGE_MODIFIER(0.01f); foreach (Ped ped in World.GetAllPeds()) { gswWorld.NeedToCheckPeds.Enqueue(ped); } } } for (int i = 0; i < gswWorld.MaxPedCountPerFrame; i++) { if(gswWorld.NeedToCheckPeds.Count <= 0) break; Ped ped = gswWorld.NeedToCheckPeds.Dequeue(); if (IsNotExistsOrDead(ped)) continue; if (GswPedAlreadyExist(ped)) continue; bool forceCreatePed = gswWorld.ForceCreatePeds.Contains(ped); if (!forceCreatePed && IsNotDamaged(ped)) continue; EcsEntity? entity = null; if (ped.IsHuman && (forceCreatePed || gswWorld.HumanDetectingEnabled)) { entity = CreateHuman(gswWorld, ped); } else if (!ped.IsHuman && (forceCreatePed || gswWorld.AnimalDetectingEnabled)) { entity = CreateAnimal(gswWorld, ped); } if (entity == null) { throw new Exception($"Ped is not supported! {ped.Model.Name} is not animal or human!"); } NativeFunction.Natives.SET_PED_SUFFERS_CRITICAL_HITS(ped, false); NativeFunction.Natives.SET_PED_CONFIG_FLAG(ped, 281, true); _ecsWorld.AddComponent<NewPedMarkComponent>(entity.Value); if (!forceCreatePed) continue; #if DEBUG _logger.MakeLog($"Ped {entity.Value.GetEntityName()} was force created"); #endif gswWorld.ForceCreatePeds.Remove(ped); } #if DEBUG if (!_debugText.IsEmpty()) { _debugText.Components1[0].UpdateDebugText("Peds", _gswPeds.GetEnumerator().GetCount().ToString()); } #endif }
public void Run() { if (_world.EntitiesCount <= 0) { throw new Exception("World was not init!"); } GswWorldComponent gswWorld = _world.Components1[0]; bool detectingEnabled = gswWorld.HumanDetectingEnabled || gswWorld.AnimalDetectingEnabled; _stopwatch.Restart(); if (gswWorld.NeedToCheckPeds.Count <= 0) { foreach (int i in _forceCreateEvents) { Ped targetPed = _forceCreateEvents.Components1[i].TargetPed; gswWorld.NeedToCheckPeds.Enqueue(targetPed); gswWorld.ForceCreatePeds.Add(targetPed); _ecsWorld.RemoveEntity(_forceCreateEvents.Entities[i]); } foreach (int i in _gswPeds) { GswPedComponent gswPed = _gswPeds.Components1[i]; Ped ped = gswPed.ThisPed; if (IsExistsAndAlive(ped)) { continue; } int pedEntity = _gswPeds.Entities[i]; _ecsWorld.AddComponent <RemovedPedMarkComponent>(pedEntity); } if (detectingEnabled) { foreach (Ped ped in World.GetAllPeds()) { gswWorld.NeedToCheckPeds.Enqueue(ped); } } } while (!TimeIsOver() && gswWorld.NeedToCheckPeds.Count > 0) { Ped ped = gswWorld.NeedToCheckPeds.Dequeue(); if (IsNotExistsOrDead(ped)) { continue; } if (GswPedAlreadyExist(ped)) { continue; } bool forceCreatePed = gswWorld.ForceCreatePeds.Contains(ped); if (!forceCreatePed && IsNotDamaged(ped)) { continue; } int entity; if (ped.IsHuman && (forceCreatePed || gswWorld.HumanDetectingEnabled)) { entity = CreateHuman(gswWorld, ped); } else if (!ped.IsHuman && (forceCreatePed || gswWorld.AnimalDetectingEnabled)) { entity = CreateAnimal(gswWorld, ped); } else { entity = -1; } if (!forceCreatePed) { continue; } #if DEBUG _logger.MakeLog($"Ped {ped.Name(entity)} was force created"); #endif gswWorld.ForceCreatePeds.Remove(ped); } #if DEBUG string pedCounter = "Peds: " + _gswPeds.EntitiesCount; pedCounter.ShowInGsw(0.165f, 0.94f, 0.25f, Color.White); string worldTime = "World Time: " + _stopwatch.ElapsedMilliseconds; worldTime.ShowInGsw(0.165f, 0.955f, 0.25f, Color.White); #endif _stopwatch.Stop(); }
public void Run() { PlayerConfigComponent config = _playerConfig.Components1[0]; foreach (int i in _playerPeds) { Ped ped = _playerPeds.Components1[i].ThisPed; EcsEntity entity = _playerPeds.Entities[i]; if (Game.LocalPlayer.Character.Equals(ped)) { continue; } _ecsWorld.RemoveComponent <PlayerMarkComponent>(entity); #if DEBUG _logger.MakeLog($"PlayerMark removed from ped {entity.GetEntityName()}, 'cause different characters"); #endif } foreach (int i in _newPeds) { Ped ped = _newPeds.Components1[i].ThisPed; EcsEntity entity = _newPeds.Entities[i]; if (!ped.IsLocalPlayer) { continue; } if (config.PlayerEnabled) { MarkEntityAsPed(entity); } else { _ecsWorld.RemoveComponent <NewPedMarkComponent>(entity); #if DEBUG _logger.MakeLog($"NewPedMark removed from ped {entity.GetEntityName()}, 'cause player is disabled"); #endif } } _ecsWorld.ProcessDelayedUpdates(); if (config.PlayerEnabled && _playerPeds.IsEmpty()) { Ped playerPed = Game.LocalPlayer.Character; GswWorldComponent gswWorld = _gswWorld.Components1[0]; if (!gswWorld.PedsToEntityDict.TryGetValue(playerPed, out EcsEntity entity)) { #if DEBUG _logger.MakeLog($"No players found! PlayerPed {playerPed.Model.Name} will force create!"); #endif _ecsWorld.CreateEntityWith(out ForceCreateGswPedEvent forceCreateEvent); forceCreateEvent.TargetPed = playerPed; return; } #if DEBUG _logger.MakeLog("Entity with Player Ped already exists and will be removed!"); #endif _ecsWorld.AddComponent <RemovedPedMarkComponent>(entity); } }