private async Task <Ped[]> SpawnBodyguards(Ped targetPed, int amount)
        {
            PedGroup group = new PedGroup();

            group.Add(targetPed, true);
            group.FormationType   = FormationType.Default;
            group.SeparationRange = 1f;

            RelationshipGroup relationship = World.AddRelationshipGroup("_ASSASSIN_TARGETS");

            relationship.SetRelationshipBetweenGroups(new RelationshipGroup(Util.GetHashKey("COP")), Relationship.Respect, true);
            relationship.SetRelationshipBetweenGroups(new RelationshipGroup(Util.GetHashKey("SECURITY_GUARD")), Relationship.Respect, true);
            targetPed.RelationshipGroup = relationship;

            Random random = new Random();

            Ped[] bodyguards = new Ped[amount];
            for (int i = 0; i < amount; i++)
            {
                float   x         = Util.GetRandomFloat(random, -2, 2);
                float   y         = Util.GetRandomFloat(random, -2, 2);
                Vector3 spawnPos  = targetPed.GetOffsetPosition(new Vector3(x, y, 0f));
                Ped     bodyguard = await Util.CreatePed(PedHash.FibOffice01SMM, spawnPos);

                bodyguard.Armor = 300;
                bodyguard.Weapons.Give(WeaponHash.CarbineRifle, int.MaxValue, true, true);

                bodyguard.RelationshipGroup = new RelationshipGroup(Util.GetHashKey("SECURITY_GUARD"));
                group.Add(bodyguard, false);

                bodyguards[i] = bodyguard;
            }

            return(bodyguards);
        }
Beispiel #2
0
 public static void Recruit(this Ped ped, Ped leader)
 {
     if (leader != null)
     {
         PedGroup currentPedGroup = leader.CurrentPedGroup;
         ped.LeaveGroup();
         InputArgument[] arguments = new InputArgument[] { ped.Handle, false };
         Function.Call(Hash._0xF0A4F1BBF4FA7497, arguments);
         ped.Task.ClearAll();
         currentPedGroup.SeparationRange = 2.147484E+09f;
         if (!currentPedGroup.Contains(leader))
         {
             currentPedGroup.Add(leader, true);
         }
         if (!currentPedGroup.Contains(ped))
         {
             currentPedGroup.Add(ped, false);
         }
         ped.IsPersistent      = true;
         ped.RelationshipGroup = leader.RelationshipGroup;
         ped.NeverLeavesGroup  = true;
         Blip currentBlip = ped.CurrentBlip;
         if (currentBlip.Type != 0)
         {
             currentBlip.Remove();
         }
         Blip blip2 = ped.AddBlip();
         blip2.Color = BlipColor.Green;
         blip2.Scale = 0.65f;
         blip2.Name  = "Group";
         PlayerGroup.SetPedTasks(ped, PedTasks.Follow);
     }
 }
Beispiel #3
0
 public static void Recruit(this Ped ped, Ped leader)
 {
     if (!(leader == null))
     {
         PedGroup group = leader.CurrentPedGroup;
         ped.LeaveGroup();
         Function.Call(Hash.SET_PED_RAGDOLL_ON_COLLISION, ped.Handle, false);
         ped.Task.ClearAll();
         group.SeparationRange = 2.14748365E+09f;
         if (!group.Contains(leader))
         {
             group.Add(leader, true);
         }
         if (!group.Contains(ped))
         {
             group.Add(ped, false);
         }
         ped.IsPersistent      = true;
         ped.RelationshipGroup = leader.RelationshipGroup;
         ped.NeverLeavesGroup  = true;
         Blip currentBlip = ped.CurrentBlip;
         if (currentBlip.Type != 0)
         {
             currentBlip.Remove();
         }
         Blip blip = ped.AddBlip();
         blip.Color = BlipColor.Green;
         blip.Scale = 0.65f;
         blip.Name  = "Group";
         PlayerGroup.SetPedTasks(ped, PedTasks.Follow);
     }
 }
        public override void SpawnEntities()
        {
            int     rand  = Database.Random.Next(3, 6);
            Vector3 spawn = GetSpawnPoint();

            if (IsValidSpawn(spawn))
            {
                for (int i = 0; i <= rand; i++)
                {
                    Ped ped = World.CreateRandomPed(spawn.Around(5f));
                    if (!(ped == null))
                    {
                        Blip blip = ped.AddBlip();
                        blip.Color            = GTA.BlipColor.Blue;
                        blip.Name             = "Friendly";
                        ped.RelationshipGroup = Relationships.FriendlyRelationship;
                        ped.Task.FightAgainstHatedTargets(9000f);
                        ped.SetAlertness(Alertness.FullyAlert);
                        ped.SetCombatAttributes(CombatAttributes.AlwaysFight, true);
                        ped.Weapons.Give(Database.WeaponHashes[Database.Random.Next(Database.WeaponHashes.Length)], 25, true, true);
                        _pedGroup.Add(ped, i == 0);
                        _pedGroup.FormationType = 0;
                        _peds.Add(ped);
                        EntityEventWrapper eventWrapper = new EntityEventWrapper(ped);
                        eventWrapper.Died     += EventWrapperOnDied;
                        eventWrapper.Disposed += EventWrapperOnDisposed;
                    }
                }
                UI.Notify("~b~Friendly~s~ survivors nearby.", true);
            }
        }
Beispiel #5
0
 public static void Recruit(this Ped ped, Ped leader, bool canBeTargeted, bool invincible, int accuracy)
 {
     if (!(leader == null))
     {
         ped.LeaveGroup();
         ped.SetRagdollOnCollision(false);
         ped.Task.ClearAll();
         PedGroup group = leader.CurrentPedGroup;
         group.SeparationRange = 2.14748365E+09f;
         if (!group.Contains(leader))
         {
             group.Add(leader, true);
         }
         if (!group.Contains(ped))
         {
             group.Add(ped, false);
         }
         ped.CanBeTargetted    = canBeTargeted;
         ped.Accuracy          = accuracy;
         ped.IsInvincible      = invincible;
         ped.IsPersistent      = true;
         ped.RelationshipGroup = leader.RelationshipGroup;
         ped.NeverLeavesGroup  = true;
         Blip currentBlip = ped.CurrentBlip;
         if (currentBlip.Type != 0)
         {
             currentBlip.Remove();
         }
         Blip blip = ped.AddBlip();
         blip.Color = GTA.BlipColor.Blue;
         blip.Scale = 0.7f;
         blip.Name  = "Friend";
         EntityEventWrapper wrapper = new EntityEventWrapper(ped);
         wrapper.Died += delegate(EntityEventWrapper sender, Entity entity)
         {
             Blip currentBlip2 = entity.CurrentBlip;
             if (currentBlip2.Type != 0)
             {
                 currentBlip2.Remove();
             }
             wrapper.Dispose();
         };
         ped.PlayAmbientSpeech("GENERIC_HI", SpeechModifier.Standard);
     }
 }
        public override void SpawnEntities()
        {
            Vector3 spawn = GetSpawnPoint();

            if (IsValidSpawn(spawn))
            {
                DropType[] dropTypes = (DropType[])Enum.GetValues(typeof(DropType));
                DropType   randDrop  = _dropType = dropTypes[Database.Random.Next(dropTypes.Length)];
                string     model     = (_dropType == DropType.Weapons) ? "prop_mil_crate_01" : "ex_prop_crate_closed_bc";
                _prop = World.CreateProp(model, spawn, Vector3.Zero, false, false);
                if (_prop == null)
                {
                    Complete();
                }
                else
                {
                    Vector3 position = _prop.Position;
                    _blip       = World.CreateBlip(position.Around(45f), 145f);
                    _blip.Color = GTA.BlipColor.Yellow;
                    _blip.Alpha = 150;
                    _dropZone   = _blip.Position;
                    position    = _prop.Position;
                    Vector3 particlePos = position.Around(5f);
                    _particle       = WorldExtended.CreateParticleEffectAtCoord(particlePos, "exp_grd_flare");
                    _particle.Color = Color.LightGoldenrodYellow;
                    int rand = Database.Random.Next(3, 6);
                    for (int i = 0; i <= rand; i++)
                    {
                        Vector3 pedSpawn = spawn.Around(10f);
                        PedHash pedHash  = _pedHashes[Database.Random.Next(_pedHashes.Length)];
                        Ped     ped      = World.CreatePed(pedHash, pedSpawn);
                        if (!(ped == null))
                        {
                            if (i > 0)
                            {
                                ped.Weapons.Give(_weapons[Database.Random.Next(_weapons.Length)], 45, true, true);
                            }
                            else
                            {
                                ped.Weapons.Give(GTA.Native.WeaponHash.SniperRifle, 15, true, true);
                            }
                            ped.Accuracy = 100;
                            ped.Task.GuardCurrentPosition();
                            ped.RelationshipGroup = Relationships.MilitiaRelationship;
                            _pedGroup.Add(ped, i == 0);
                            _peds.Add(ped);
                            EntityEventWrapper pedWrapper = new EntityEventWrapper(ped);
                            pedWrapper.Died += PedWrapperOnDied;
                        }
                    }
                    Model val = "mesa3";
                    position = _prop.Position;
                    World.CreateVehicle(val, World.GetNextPositionOnStreet(position.Around(25f)));
                    UI.Notify(string.Format("~y~Merryweather~s~ {0} drop nearby.", (_dropType == DropType.Loot) ? "loot" : "weapons"));
                }
            }
        }
        public static void Recruit(this Ped ped, Ped leader, bool canBeTargeted, bool invincible, int accuracy)
        {
            if (Entity.op_Equality((Entity)leader, (Entity)null))
            {
                return;
            }
            ped.LeaveGroup();
            ped.SetRagdollOnCollision(false);
            ped.get_Task().ClearAll();
            PedGroup currentPedGroup = leader.get_CurrentPedGroup();

            currentPedGroup.set_SeparationRange((float)int.MaxValue);
            if (!currentPedGroup.Contains(leader))
            {
                currentPedGroup.Add(leader, true);
            }
            if (!currentPedGroup.Contains(ped))
            {
                currentPedGroup.Add(ped, false);
            }
            ped.set_CanBeTargetted(canBeTargeted);
            ped.set_Accuracy(accuracy);
            ((Entity)ped).set_IsInvincible(invincible);
            ((Entity)ped).set_IsPersistent(true);
            ped.set_RelationshipGroup(leader.get_RelationshipGroup());
            ped.set_NeverLeavesGroup(true);
            ((Entity)ped).get_CurrentBlip()?.Remove();
            Blip blip = ((Entity)ped).AddBlip();

            blip.set_Color((BlipColor)3);
            blip.set_Scale(0.7f);
            blip.set_Name("Friend");
            EntityEventWrapper wrapper = new EntityEventWrapper((Entity)ped);

            wrapper.Died += (EntityEventWrapper.OnDeathEvent)((sender, entity) =>
            {
                entity.get_CurrentBlip()?.Remove();
                wrapper.Dispose();
            });
            ped.PlayAmbientSpeech("GENERIC_HI", SpeechModifier.Standard);
        }
Beispiel #8
0
        public void CreatePedGroup()
        {
            if (groupId == 0)
            {
                groupId = World.AddRelationshipGroup("EscortGroup");
            }
            target.RelationshipGroup = groupId;
            PedGroup targetGroup = new PedGroup();

            targetGroup.Add(target, true);
            foreach (Ped bodyGuard in escortPeds)
            {
                if (!inVehicle)
                {
                    targetGroup.Add(bodyGuard, false);
                }
                bodyGuard.RelationshipGroup = groupId;
                Function.Call(Hash.SET_PED_TO_INFORM_RESPECTED_FRIENDS, bodyGuard, 5000, -1);
            }
            World.SetRelationshipBetweenGroups(Relationship.Hate, Function.Call <int>(Hash.GET_PLAYER_GROUP, Game.Player), groupId);
        }
Beispiel #9
0
        /// <summary>
        /// Instantiate Heli with parameters.
        /// </summary>
        /// <param name="model">Model name of the helicopter to use</param>
        /// <param name="height">hover _height of the helicopter</param>
        /// <param name="radius">hover _radius of the helicopter</param>
        /// <param name="bulletproof">Whether the helicopter is _isBulletproof</param>
        public SupportHeli(string model, float height, float radius, bool bulletproof, bool spawnFarAway)
            : base(model, height, radius, bulletproof, spawnFarAway)
        {
            // get the player's current PedGroup (or create a new one if player is not in one)
            leaderPedGroup = _leader.PedGroup;
            if (leaderPedGroup == null)
            {
                leaderPedGroup = new PedGroup();
                leaderPedGroup.Add(_leader, true);
            }
            leaderPedGroup.SeparationRange = 99999f;
            leaderPedGroup.Formation       = Formation.Circle2;

            // set the list of seats (based on helicopter _model, but temporarily all the same)
            seatSelection = new VehicleSeat[] { VehicleSeat.LeftRear, VehicleSeat.RightRear };
        }
        public override void SpawnEntities()
        {
            Vector3 spawn = GetSpawnPoint();

            if (IsValidSpawn(spawn))
            {
                Vehicle vehicle = World.CreateVehicle(Database.GetRandomVehicleModel(), spawn, (float)Database.Random.Next(1, 360));
                if (vehicle == null)
                {
                    Complete();
                }
                else
                {
                    _vehicle = vehicle;
                    Blip vehicleBlip = _vehicle.AddBlip();
                    vehicleBlip.Name   = "Enemy Vehicle";
                    vehicleBlip.Sprite = GTA.BlipSprite.PersonalVehicleCar;
                    vehicleBlip.Color  = GTA.BlipColor.Red;
                    EntityEventWrapper vehicleWrapper = new EntityEventWrapper(_vehicle);
                    vehicleWrapper.Died    += VehicleWrapperOnDied;
                    vehicleWrapper.Updated += VehicleWrapperOnUpdated;
                    for (int i = 0; i < vehicle.PassengerSeats + 1; i++)
                    {
                        if (_group.MemberCount < 6 && vehicle.IsSeatFree(GTA.VehicleSeat.Any))
                        {
                            Ped ped = vehicle.CreateRandomPedOnSeat((i == 0) ? GTA.VehicleSeat.Driver : GTA.VehicleSeat.Any);
                            if (!(ped == null))
                            {
                                ped.Weapons.Give(Database.WeaponHashes[Database.Random.Next(Database.WeaponHashes.Length)], 25, true, true);
                                ped.SetCombatAttributes(CombatAttributes.AlwaysFight, true);
                                ped.SetAlertness(Alertness.FullyAlert);
                                ped.RelationshipGroup = Relationships.HostileRelationship;
                                _group.Add(ped, i == 0);
                                Blip blip = ped.AddBlip();
                                blip.Name = "Enemy";
                                _peds.Add(ped);
                                EntityEventWrapper pedWrapper = new EntityEventWrapper(ped);
                                pedWrapper.Died     += PedWrapperOnDied;
                                pedWrapper.Updated  += PedWrapperOnUpdated;
                                pedWrapper.Disposed += PedWrapperOnDisposed;
                            }
                        }
                    }
                    UI.Notify("~r~Hostiles~s~ nearby!");
                }
            }
        }
Beispiel #11
0
        /// <summary>
        /// Apply configurations to ground crew
        /// </summary>
        /// <param name="crew"><c>Ped</c> to apply configuration to</param>
        /// <returns><c>true</c> if the specified <c>Ped</c> is in the leader's PedGroup</returns>
        protected bool configureGroundCrew(Ped crew)
        {
            // add to player's PedGroup if there is space
            leaderPedGroup.Add(crew, false);
            crew.NeverLeavesGroup = true;

            // verify that the crew is part of the player's PedGroup
            if (!crew.IsInGroup)
            {
                return(false);
            }

            // draw blip
            crew.AddBlip();
            crew.AttachedBlip.Scale = blipScale;
            crew.AttachedBlip.Color = BlipColor.Green;

            return(true);
        }
Beispiel #12
0
        public static void SurvivorGroupSpawn(Vector3 pos, GroupType groupType = 3, int groupSize = -1, PedTasks pedTasks = 1)
        {
            if (groupType == GroupType.Random)
            {
                int num = RandoMath.CachedRandom.Next(0, 3);
                if (num == 0)
                {
                    groupType = GroupType.Friendly;
                }
                if (num == 1)
                {
                    groupType = GroupType.Neutral;
                }
                if (num == 2)
                {
                    groupType = GroupType.Hostile;
                }
            }
            List <Ped> list  = new List <Ped>();
            PedGroup   group = new PedGroup();

            if (groupSize == -1)
            {
                groupSize = RandoMath.CachedRandom.Next(3, 9);
            }
            int num2 = 0;

            while (true)
            {
                if (num2 >= groupSize)
                {
                    foreach (Ped ped2 in list)
                    {
                        if (group.MemberCount < 1)
                        {
                            group.Add(ped2, true);
                            continue;
                        }
                        group.Add(ped2, false);
                    }
                    group.FormationType = FormationType.Default;
                    foreach (Ped ped3 in group.ToList(true))
                    {
                        PlayerGroup.SetPedTasks(ped3, pedTasks);
                    }
                    return;
                }
                SurvivorPed ped = SurvivorSpawn(pos);
                if (groupType == GroupType.Friendly)
                {
                    ped.pedEntity.RelationshipGroup = Relationships.FriendlyGroup;
                    ped.pedEntity.AddBlip();
                    ped.pedEntity.CurrentBlip.Color = BlipColor.Blue;
                    ped.pedEntity.CurrentBlip.Scale = 0.65f;
                    ped.pedEntity.CurrentBlip.Name  = "Friendly";
                }
                else if (groupType == GroupType.Neutral)
                {
                    ped.pedEntity.RelationshipGroup = Relationships.NeutralGroup;
                    ped.pedEntity.AddBlip();
                    ped.pedEntity.CurrentBlip.Color = BlipColor.Yellow;
                    ped.pedEntity.CurrentBlip.Scale = 0.65f;
                    ped.pedEntity.CurrentBlip.Name  = "Neutral";
                }
                else if (groupType == GroupType.Hostile)
                {
                    ped.pedEntity.RelationshipGroup = Relationships.HostileGroup;
                    ped.pedEntity.AddBlip();
                    ped.pedEntity.CurrentBlip.Color = BlipColor.Red;
                    ped.pedEntity.CurrentBlip.Scale = 0.65f;
                    ped.pedEntity.CurrentBlip.Name  = "Hostile";
                }
                list.Add(ped.pedEntity);
                num2++;
            }
        }
Beispiel #13
0
        public static void SurvivorGroupSpawn(Vector3 pos, GroupType groupType = GroupType.Random, int groupSize = -1, PedTasks pedTasks = PedTasks.Wander)
        {
            if (groupType == GroupType.Random)
            {
                int rndGroupType = RandoMath.CachedRandom.Next(0, 3);
                if (rndGroupType == 0)
                {
                    groupType = GroupType.Friendly;
                }
                if (rndGroupType == 1)
                {
                    groupType = GroupType.Neutral;
                }
                if (rndGroupType == 2)
                {
                    groupType = GroupType.Hostile;
                }
            }
            List <Ped> peds  = new List <Ped>();
            PedGroup   group = new PedGroup();

            if (groupSize == -1)
            {
                groupSize = RandoMath.CachedRandom.Next(3, 9);
            }
            for (int i = 0; i < groupSize; i++)
            {
                SurvivorPed sPed = SurvivorSpawn(pos);
                if (groupType == GroupType.Friendly)
                {
                    sPed.pedEntity.RelationshipGroup = Relationships.FriendlyGroup;
                    sPed.pedEntity.AddBlip();
                    sPed.pedEntity.CurrentBlip.Color = BlipColor.Blue;
                    sPed.pedEntity.CurrentBlip.Scale = 0.65f;
                    sPed.pedEntity.CurrentBlip.Name  = "Friendly";
                }
                else if (groupType == GroupType.Neutral)
                {
                    sPed.pedEntity.RelationshipGroup = Relationships.NeutralGroup;
                    sPed.pedEntity.AddBlip();
                    sPed.pedEntity.CurrentBlip.Color = BlipColor.Yellow;
                    sPed.pedEntity.CurrentBlip.Scale = 0.65f;
                    sPed.pedEntity.CurrentBlip.Name  = "Neutral";
                }
                else if (groupType == GroupType.Hostile)
                {
                    sPed.pedEntity.RelationshipGroup = Relationships.HostileGroup;
                    sPed.pedEntity.AddBlip();
                    sPed.pedEntity.CurrentBlip.Color = BlipColor.Red;
                    sPed.pedEntity.CurrentBlip.Scale = 0.65f;
                    sPed.pedEntity.CurrentBlip.Name  = "Hostile";
                }
                peds.Add(sPed.pedEntity);
            }
            foreach (Ped ped in peds)
            {
                if (group.MemberCount < 1)
                {
                    group.Add(ped, true);
                }
                else
                {
                    group.Add(ped, false);
                }
            }
            group.FormationType = 0;
            List <Ped> groupPeds = group.ToList(true);

            foreach (Ped ped in groupPeds)
            {
                PlayerGroup.SetPedTasks(ped, pedTasks);
            }
        }