Quantcast

Jump to content

» «
Photo

Counting how many enemies are left!

3 replies to this topic
GameHacker666
  • GameHacker666

    Crackhead

  • Members
  • Joined: 02 Jul 2013
  • Slovenia

#1

Posted 2 weeks ago Edited by GameHacker666, 2 weeks ago.

Hello!
I want to create a mod for a custom deathmatch which would start by pressing C on the keyboard. Pressing C creates 5 pedestrians and makes them fight each other and the player aswell. The fighting system works fine but I can't figure out how to display the amount of remaining enemies. I've tried a lot of things, but no success whatsoever. I'm not sure what I'm doing wrong, because this was supposed to be the easy part, lol.  :facedesk:  :cry:
 
Anyway, below's a snippet of my code. As you can see, I make sure that the state of peds is being checked every single frame and if the said pedestrian is dead, the counter updates. I also make sure the substraction doesn't happen more than once by adding another boolean.

private void onTick(object sender, EventArgs e)
        {
            if (matchStart == true)
            {
                Function.Call(Hash._SET_TEXT_COMPONENT_FORMAT, "STRING");
                Function.Call(Hash._ADD_TEXT_COMPONENT_STRING, ("Enemies left: " + numOfEnemies));
                Function.Call(Hash._0x238FFE5C7B0498A6, 0, 0, 1, -1);

            if (ped1.IsDead == true && ped1DeathCheck == false)
            {
                numOfEnemies--;
                ped1DeadCheck = true;
            }
            //I check the other peds too obviously, this is just a snippet

           if(numOfEnemies == 0)
            {
                Function.Call(Hash._SET_TEXT_COMPONENT_FORMAT, "STRING");
                Function.Call(Hash._ADD_TEXT_COMPONENT_STRING, ("CONGRATULATIONS, YOU'VE WON!"));
                Function.Call(Hash._0x238FFE5C7B0498A6, 0, 0, 1, -1);
            }
          }
        }
 
private void onKeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.C)
            {
                numOfEnemies = 5;
                ped1 = World.CreatePed(PedHash.Bevhills01AMY, ped1Coords);
                ped1.Weapons.Give(WeaponHash.SniperRifle, 500, true, true);
 
                ped2 = World.CreatePed(PedHash.Bevhills02AMY, ped2Coords);
                ped2.Weapons.Give(WeaponHash.HeavySniper, 500, true, true);
 
                ped3 = World.CreatePed(PedHash.Cop01SMY, ped3Coords);
                ped3.Weapons.Give(WeaponHash.AssaultRifle, 500, true, true);
                //and a couple more peds
            }
        }

Bob_74
  • Bob_74

    Square Civilian

  • Members
  • Joined: 05 Jan 2018
  • None

#2

Posted 2 weeks ago

You set numOfPlayers and then check numOfEnemies.

Is it a mistake in your snippet or do you have this in your actual code?


GameHacker666
  • GameHacker666

    Crackhead

  • Members
  • Joined: 02 Jul 2013
  • Slovenia

#3

Posted 2 weeks ago Edited by GameHacker666, 2 weeks ago.

You set numOfPlayers and then check numOfEnemies.
Is it a mistake in your snippet or do you have this in your actual code?


It's just in the snippet. I accidentally deleted too much of the original code in the post and then made a mistake when rewriting.

if (ped1.IsDead == true && ped1DeathCheck == false)
            {
                numOfEnemies--;
                ped1DeadCheck = true;
            }

^^This code right here is the culprit it seems, because nothing happens if it goes through. I've put different things inside, such as set the health of my character to 50 etc. but when the enemy dies, this part just doesn't get executed for some reason. I tried creating another method and calling it inside the onTick(), but with no success.


Bob_74
  • Bob_74

    Square Civilian

  • Members
  • Joined: 05 Jan 2018
  • None

#4

Posted 2 weeks ago

Did you set matchStart to true?
 
Because this works nicely:

using System;
using System.Windows.Forms;

using GTA;
using GTA.Native;

namespace DebugScript
{
    public class MainScript : Script
    {
        private bool matchStart = false;
        private Ped ped1;
        private bool ped1DeathCheck = false;

        private int numOfEnemies = 0;

        public MainScript()
        {
            Tick += OnTick;
            KeyDown += OnKeyDown;
        }


        private void OnTick(object sender, EventArgs e)
        {
            if (matchStart == true)
            {
                Function.Call(Hash._SET_TEXT_COMPONENT_FORMAT, "STRING");
                Function.Call(Hash._ADD_TEXT_COMPONENT_STRING, ("Enemies left: " + numOfEnemies));
                Function.Call(Hash._0x238FFE5C7B0498A6, 0, 0, 1, -1);

                if (ped1.IsDead == true && ped1DeathCheck == false)
                {
                    numOfEnemies--;
                    ped1DeathCheck = true;
                }

                if (numOfEnemies == 0)
                {
                    Function.Call(Hash._SET_TEXT_COMPONENT_FORMAT, "STRING");
                    Function.Call(Hash._ADD_TEXT_COMPONENT_STRING, ("CONGRATULATIONS, YOU'VE WON!"));
                    Function.Call(Hash._0x238FFE5C7B0498A6, 0, 0, 1, -1);
                }
            }
        }

        private void OnKeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.C)
            {
                numOfEnemies = 1;
                ped1 = World.CreatePed(PedHash.Bevhills01AMY, Game.Player.Character.Position);
                ped1.Weapons.Give(WeaponHash.SniperRifle, 500, true, true);

                matchStart = true;
            }
        }


    }
}

The only issue is that you call _0x238FFE5C7B0498A6 twice when the player has won, so it switch between "Ennemies left..." and "CONGRATULATIONS...".

You can quickly fix it like this:

if (ped1.IsDead == true && ped1DeathCheck == false)
{
	numOfEnemies--;
	ped1DeathCheck = true;
}

if (numOfEnemies == 0)
{
	Function.Call(Hash._SET_TEXT_COMPONENT_FORMAT, "STRING");
	Function.Call(Hash._ADD_TEXT_COMPONENT_STRING, ("CONGRATULATIONS, YOU'VE WON!"));
	Function.Call(Hash._0x238FFE5C7B0498A6, 0, 0, 1, -1);
}
else
{
	Function.Call(Hash._SET_TEXT_COMPONENT_FORMAT, "STRING");
	Function.Call(Hash._ADD_TEXT_COMPONENT_STRING, ("Enemies left: " + numOfEnemies));
	Function.Call(Hash._0x238FFE5C7B0498A6, 0, 0, 1, -1);
}




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users