Пример #1
0
 private static void MoveToHorrifyPoint(TargetArea area)
 {
     CombatMovement.Queue(new CombatMovement
     {
         Name        = "Horrify Position",
         Destination = area.Position,
         OnUpdate    = m =>
         {
             // Only change destination if the new target is way better
             if (TikHorrifyCriteria(Enemies.BestLargeCluster) &&
                 Enemies.BestLargeCluster.Position.Distance(m.Destination) > 15f)
             {
                 m.Destination = Enemies.BestLargeCluster.Position;
             }
         },
         Options = new CombatMovementOptions
         {
             AcceptableDistance      = 12f,
             Logging                 = LogLevel.Verbose,
             ChangeInDistanceLimit   = 2f,
             SuccessBlacklistSeconds = 3,
             FailureBlacklistSeconds = 7,
             TimeBeforeBlocked       = 500
         }
     });
 }
Пример #2
0
 private static void MoveToSoulHarvestPoint(TargetArea area)
 {
     CombatMovement.Queue(new CombatMovement
     {
         Name        = "Jade Harvest Position",
         Destination = area.Position,
         OnUpdate    = m =>
         {
             // Only change destination if the new target is way better
             if (IdealSoulHarvestCriteria(Enemies.BestLargeCluster) &&
                 Enemies.BestLargeCluster.Position.Distance(m.Destination) > 10f)
             {
                 m.Destination = Enemies.BestLargeCluster.Position;
             }
         },
         OnFinished = m =>
         {
             if (MinimumSoulHarvestCriteria(Enemies.CloseNearby))
             {
                 //LogTargetArea("--- Harvesting (CombatMovement)", area);
                 Skills.WitchDoctor.SoulHarvest.Cast();
             }
         },
         Options = new CombatMovementOptions
         {
             Logging = LogLevel.Verbose,
         }
     });
 }
 public static void SetCombatMovement(this Ped ped, CombatMovement movement)
 {
     Function.Call((Hash)5592521861259579479L, new InputArgument[2]
     {
         InputArgument.op_Implicit(((Entity)ped).get_Handle()),
         InputArgument.op_Implicit((int)movement)
     });
 }
Пример #4
0
 public static void SetCombatMovement(this Ped ped, CombatMovement movement)
 {
     Function.Call(GTA.Native.Hash.SET_PED_COMBAT_MOVEMENT, (InputArgument[])new InputArgument[2]
     {
         ped.Handle,
         (int)movement
     });
 }
Пример #5
0
 void Update()
 {
     PlayerCollisionHandler.StartCollisions(HorizontalMovement.HorizontalMovementState,
                                            PlayerStatusVariables.facingDirection);
     HorizontalMovement.StartMovement();
     HorizontalMovement.PressMovementHandler();
     VerticalMovement.StartMovement();
     VerticalMovement.PressMovementHandler();
     MiscellaneousMovement.StartMovement();
     MiscellaneousMovement.PressMovementHandler();
     CombatMovement.StartMovement();
     CombatMovement.PressMovementHandler();
 }
Пример #6
0
 // Start is called before the first frame update
 void Start()
 {
     _cMove = GetComponent <CombatMovement>();
 }
Пример #7
0
    /// <summary>
    /// Spawns a ped on the given team, ready to fight.
    /// </summary>
    /// <param name="alliedTeam">true=ally team / false=enemy team</param>
    /// <returns>The spawned ped</returns>
    private Ped SpawnRandomPed(bool alliedTeam)
    {
        Vector3    pedPosition = alliedTeam ? spawnpointAllies : spawnpointEnemies;
        string     pedName     = RandomChoice(alliedTeam ? pedsAllies : pedsEnemies);
        string     weaponName  = RandomChoice(alliedTeam ? weaponsAllies : weaponsEnemies);
        PedHash    pedSpawn;
        WeaponHash weaponGive;

        // TODO verify names from arrays on script startup
        if (!Enum.TryParse(pedName, true, out pedSpawn))
        {
            throw new FormatException("Ped name " + pedName + " does not exist!");
        }
        if (!Enum.TryParse(weaponName, true, out weaponGive))
        {
            throw new FormatException("Weapon name " + weaponName + " does not exist!");
        }

        Ped ped = World.CreatePed(pedSpawn, pedPosition);

        ped.Weapons.Give(weaponGive, 1, true, true);

        ped.Health              = ped.MaxHealth = alliedTeam ? healthAllies : healthEnemies;
        ped.Armor               = alliedTeam ? armorAllies : armorEnemies;
        ped.Money               = 0;
        ped.Accuracy            = alliedTeam ? accuracyAllies : accuracyEnemies;
        ped.RelationshipGroup   = alliedTeam ? relationshipGroupAllies : relationshipGroupEnemies;
        ped.DropsWeaponsOnDeath = dropWeaponOnDead;

        CombatRange combatRange = alliedTeam ? combatRangeAllies : combatRangeEnemies;

        if (combatRange != CombatRange.Disabled)
        {
            if (combatRange == CombatRange.Random)
            {
                combatRange = RandomChoice(randomizableCombatRanges);
            }
            Function.Call(Hash.SET_PED_COMBAT_RANGE, ped, (int)combatRange);
        }

        CombatMovement combatMovement = alliedTeam ? combatMovementAllies : combatMovementEnemies;

        if (combatMovement != CombatMovement.Disabled)
        {
            if (combatMovement == CombatMovement.Random)
            {
                combatMovement = RandomChoice(randomizableCombatMovements);
            }
            Function.Call(Hash.SET_PED_COMBAT_MOVEMENT, ped, (int)combatMovement);
        }

        Function.Call(Hash.SET_PED_COMBAT_ATTRIBUTES, ped, 46, true);  // force peds to fight
        Function.Call(Hash.SET_PED_SEEING_RANGE, ped, spawnpointsDistance);
        Function.Call(Hash.SET_PED_COMBAT_RANGE, ped, (int)(alliedTeam ? combatRangeAllies : combatRangeEnemies));
        Function.Call(Hash.SET_PED_COMBAT_MOVEMENT, ped, (int)(alliedTeam ? combatMovementAllies : combatMovementEnemies));

        if (showBlipsOnPeds)
        {
            Blip blip = ped.AddBlip();
            blip.Color = alliedTeam ? BlipColor.Blue : BlipColor.Orange;
            blip.Name  = alliedTeam ? "Ally team member" : "Enemy team member";
            blip.Scale = 0.5f;
        }

        ped.Task.ClearAllImmediately();
        ped.AlwaysKeepTask = true;  // TODO Investigate if this could be making peds avoid reloads

        if (alliedTeam)
        {
            spawnedAllies.Add(ped);
            spawnedAlliesCounter++;
        }
        else
        {
            spawnedEnemies.Add(ped);
            spawnedEnemiesCounter++;
        }

        return(ped);
    }
Пример #8
0
    public SimpleGangWar()
    {
        Tick    += MainLoop;
        KeyUp   += OnKeyUp;
        Interval = idleInterval;

        ScriptSettings config = ScriptSettings.Load("scripts\\SimpleGangWar.ini");
        string         configString;

        healthAllies  = config.GetValue(SettingsHeader.Allies, "Health", healthAllies);
        healthEnemies = config.GetValue(SettingsHeader.Enemies, "Health", healthEnemies);

        armorAllies  = config.GetValue(SettingsHeader.Allies, "Armor", armorAllies);
        armorEnemies = config.GetValue(SettingsHeader.Enemies, "Armor", armorEnemies);

        accuracyAllies  = config.GetValue(SettingsHeader.Allies, "Accuracy", accuracyAllies);
        accuracyEnemies = config.GetValue(SettingsHeader.Enemies, "Accuracy", accuracyEnemies);

        configString          = config.GetValue <string>(SettingsHeader.Allies, "CombatMovement", "");
        combatMovementAllies  = EnumParse(configString, combatMovementAllies);
        configString          = config.GetValue <string>(SettingsHeader.Enemies, "CombatMovement", "");
        combatMovementEnemies = EnumParse(configString, combatMovementEnemies);

        configString       = config.GetValue <string>(SettingsHeader.Allies, "CombatRange", "");
        combatRangeAllies  = EnumParse(configString, combatRangeAllies);
        configString       = config.GetValue <string>(SettingsHeader.Enemies, "CombatRange", "");
        combatRangeEnemies = EnumParse(configString, combatRangeEnemies);

        configString   = config.GetValue <string>(SettingsHeader.Allies, "Weapons", "");
        weaponsAllies  = ArrayParse(configString, weaponsAllies);
        configString   = config.GetValue <string>(SettingsHeader.Enemies, "Weapons", "");
        weaponsEnemies = ArrayParse(configString, weaponsEnemies);

        configString = config.GetValue <string>(SettingsHeader.Allies, "Models", "");
        pedsAllies   = ArrayParse(configString, pedsAllies);
        configString = config.GetValue <string>(SettingsHeader.Enemies, "Models", "");
        pedsEnemies  = ArrayParse(configString, pedsEnemies);

        configString = config.GetValue <string>(SettingsHeader.General, "Hotkey", "");
        hotkey       = EnumParse(configString, hotkey);
        configString = config.GetValue <string>(SettingsHeader.General, "SpawnHotkey", "");
        spawnHotkey  = EnumParse(configString, spawnHotkey);

        maxPedsPerTeam   = config.GetValue(SettingsHeader.General, "MaxPedsPerTeam", maxPedsPerTeam);
        noWantedLevel    = config.GetValue(SettingsHeader.General, "NoWantedLevel", noWantedLevel);
        showBlipsOnPeds  = config.GetValue(SettingsHeader.General, "ShowBlipsOnPeds", showBlipsOnPeds);
        dropWeaponOnDead = config.GetValue(SettingsHeader.General, "DropWeaponOnDead", dropWeaponOnDead);
        removeDeadPeds   = config.GetValue(SettingsHeader.General, "RemoveDeadPeds", removeDeadPeds);
        runToSpawnpoint  = config.GetValue(SettingsHeader.General, "RunToSpawnpoint", runToSpawnpoint);
        processOtherRelationshipGroups = config.GetValue(SettingsHeader.General, "ProcessOtherRelationshipGroups", processOtherRelationshipGroups);
        neutralPlayer                = config.GetValue(SettingsHeader.General, "NeutralPlayer", neutralPlayer);
        spawnpointFloodLimitPeds     = config.GetValue(SettingsHeader.General, "SpawnpointFloodLimitPeds", spawnpointFloodLimitPeds);
        spawnpointFloodLimitDistance = config.GetValue(SettingsHeader.General, "SpawnpointFloodLimitDistance", spawnpointFloodLimitDistance);
        idleInterval   = config.GetValue(SettingsHeader.General, "IdleInterval", idleInterval);
        battleInterval = config.GetValue(SettingsHeader.General, "BattleInterval", battleInterval);

        maxPedsAllies       = config.GetValue(SettingsHeader.Allies, "MaxPeds", maxPedsPerTeam);
        maxPedsEnemies      = config.GetValue(SettingsHeader.Enemies, "MaxPeds", maxPedsPerTeam);
        maxSpawnPedsAllies  = config.GetValue(SettingsHeader.Allies, "MaxSpawnPeds", maxSpawnPedsAllies);
        maxSpawnPedsEnemies = config.GetValue(SettingsHeader.Enemies, "MaxSpawnPeds", maxSpawnPedsEnemies);

        relationshipGroupAllies  = World.AddRelationshipGroup("simplegangwar_allies");
        relationshipGroupEnemies = World.AddRelationshipGroup("simplegangwar_enemies");
        relationshipGroupPlayer  = Game.Player.Character.RelationshipGroup;
        SetRelationshipBetweenGroups(Relationship.Hate, relationshipGroupAllies, relationshipGroupEnemies);
        SetRelationshipBetweenGroups(Relationship.Respect, relationshipGroupAllies, relationshipGroupAllies);
        SetRelationshipBetweenGroups(Relationship.Respect, relationshipGroupEnemies, relationshipGroupEnemies);
        SetRelationshipBetweenGroups(Relationship.Respect, relationshipGroupAllies, relationshipGroupPlayer);
        if (!neutralPlayer)
        {
            SetRelationshipBetweenGroups(Relationship.Hate, relationshipGroupEnemies, relationshipGroupPlayer);
        }
        else
        {
            SetRelationshipBetweenGroups(Relationship.Respect, relationshipGroupEnemies, relationshipGroupPlayer);
        }
        // TODO processedRelationshipGroups not being used?
        processedRelationshipGroups.Add(relationshipGroupPlayer);
        processedRelationshipGroups.Add(relationshipGroupAllies);
        processedRelationshipGroups.Add(relationshipGroupEnemies);

        random = new Random();

        UI.Notify("SimpleGangWar loaded");
    }
Пример #9
0
 void FixedUpdate()
 {
     HorizontalMovement.HoldMovementHandler();
     VerticalMovement.HoldMovementHandler();
     CombatMovement.HoldMovementHandler();
 }