Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. Los Santos Drug Wars
      2. Updates
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Red Dead Online

      1. Blood Money
      2. Frontier Pursuits
      3. Find Lobbies & Outlaws
      4. Help & Support
    3. Crews

    1. Grand Theft Auto Series

      1. Bugs*
      2. St. Andrews Cathedral
    2. GTA VI

    3. GTA V

      1. Guides & Strategies
      2. Help & Support
    4. GTA IV

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
    5. GTA San Andreas

      1. Classic GTA SA
      2. Guides & Strategies
      3. Help & Support
    6. GTA Vice City

      1. Classic GTA VC
      2. Guides & Strategies
      3. Help & Support
    7. GTA III

      1. Classic GTA III
      2. Guides & Strategies
      3. Help & Support
    8. Portable Games

      1. GTA Chinatown Wars
      2. GTA Vice City Stories
      3. GTA Liberty City Stories
    9. Top-Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. Red Dead Redemption 2

      1. PC
      2. Help & Support
    2. Red Dead Redemption

    1. GTA Mods

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Red Dead Mods

      1. Documentation
    3. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    4. Featured Mods

      1. Design Your Own Mission
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Rockstar Games

    2. Rockstar Collectors

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Movies & TV
      5. Music
      6. Sports
      7. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Announcements

    2. Support

    3. Suggestions

[C#]How to solve the blips that generate npc


leihebi
 Share

Recommended Posts

Here is how I generated ped and added blip to them

 

var npc1 = World.CreatePed("s_m_m_bouncer_01", (new Vector3(-1783.350f, 428.9650f, 128.1078f))); npc1.AddBlip();

 

 

Now I have a problem, after I kill them, their blips don't disappear, I tried to make the blips disappear with npc1.MarkAsNoLongerNeeded(); but it doesn't work at all. I hope that when I kill each ped, the blips on the map also go -1 with it

Link to comment
Share on other sites

14 minutes ago, leihebi said:

Here is how I generated ped and added blip to them

 

var npc1 = World.CreatePed("s_m_m_bouncer_01", (new Vector3(-1783.350f, 428.9650f, 128.1078f))); npc1.AddBlip();

 

 

Now I have a problem, after I kill them, their blips don't disappear, I tried to make the blips disappear with npc1.MarkAsNoLongerNeeded(); but it doesn't work at all. I hope that when I kill each ped, the blips on the map also go -1 with it

 

You have to create a reference to your Blip when you create it and then remove it if you want it to disappear when the ped is dead.

 

Blip npc1Blip = npc1.AddBlip();

if (npc1.IsDead)
{
    if (npc1Blip.Exists()) npc1Blip.Remove();
}

 

As far as I know, the Blip only gets removed when the Entity it is attached to gets deleted by you or the game, not when you mark the entity as no longer needed.

Link to comment
Share on other sites

28 minutes ago, LeeC22 said:

 

You have to create a reference to your Blip when you create it and then remove it if you want it to disappear when the ped is dead.

 

Blip npc1Blip = npc1.AddBlip();

if (npc1.IsDead)
{
    if (npc1Blip.Exists()) npc1Blip.Remove();
}

 

As far as I know, the Blip only gets removed when the Entity it is attached to gets deleted by you or the game, not when you mark the entity as no longer needed.

yeah,thanks

Link to comment
Share on other sites

1 hour ago, LeeC22 said:

 

You have to create a reference to your Blip when you create it and then remove it if you want it to disappear when the ped is dead.

 

Blip npc1Blip = npc1.AddBlip();

if (npc1.IsDead)
{
    if (npc1Blip.Exists()) npc1Blip.Remove();
}

 

As far as I know, the Blip only gets removed when the Entity it is attached to gets deleted by you or the game, not when you mark the entity as no longer needed.

My friend, I just tested it. It doesn't work, when I kill the npc, nothing happens.

Link to comment
Share on other sites

1 hour ago, leihebi said:

My friend, I just tested it. It doesn't work, when I kill the npc, nothing happens.

 

Works fine for me.

 

Edit: I know why it didn't work for you, you probably created your blip as Local scope instead of Global, so the reference disappeared when it exited the function. Any reference that needs to be available outside the function it is declared in, must be defined as a Global variable. My fault for giving a bad example, I should have specified that.

Edited by LeeC22
Link to comment
Share on other sites

43 minutes ago, LeeC22 said:

 

Works fine for me.

 

Edit: I know why it didn't work for you, you probably created your blip as Local scope instead of Global, so the reference disappeared when it exited the function. Any reference that needs to be available outside the function it is declared in, must be defined as a Global variable. My fault for giving a bad example, I should have specified that.

It's okay, I didn't understand what you meant before

Link to comment
Share on other sites

1 hour ago, LeeC22 said:

 

Works fine for me.

 

Edit: I know why it didn't work for you, you probably created your blip as Local scope instead of Global, so the reference disappeared when it exited the function. Any reference that needs to be available outside the function it is declared in, must be defined as a Global variable. My fault for giving a bad example, I should have specified that.

Can you give me an example, please?

Link to comment
Share on other sites

16 minutes ago, leihebi said:

Can you give me an example, please?

 

This short bit of code should show the difference between Global and Local variables. 

 

Function1 adds Blips to two Peds, one with a local variable and one with a Global variable. To be able to remove the Blip somewhere else in the code, the reference to that Blip has to be a Global variable.

 

public class MyClass
{
    // Global Variables
    Ped NPCped1 = new Ped(0);
    Ped NPCped2 = new Ped(1);
    Blip GlobalBlip;

    void Function1()
    {
        // Local Variable - this only exists inside Function1
        Blip localBlip = NPCped1.AddBlip();

        // Global variable - this will exist anywhere in the class
        GlobalBlip = NPCped2.AddBlip();
    }

    void Function2()
    {
        if (NPCped1.IsDead)
        {
            // This will fail because localBlip doesn't exist here and Visual Studio will give you an error
            if (localBlip.Exists()) localBlip.Remove();
        }

        if (NPCped2.IsDead)
        {
            // This will work because GlobalBlip exists in both functions
            if (GlobalBlip.Exists()) GlobalBlip.Remove();
        }
    }
}

 

So in the test mod I wrote to test this, I have this:

using System;
using GTA;
using GTA.Math;
using GTA.Native;

namespace TestDeadPeds
{
    public class cTestDeadPeds : Script
    {
        private Ped PlayerPed;

        private Blip PedBlip;
        private Ped NPCPed;

        public cTestDeadPeds()
        {
            Tick += onTick;
            Interval = 0;
        }

        private void onTick(object sender, EventArgs e)
        {
            // Exits from the loop if the game is loading
            if (Game.IsLoading) return;

            if (PlayerPed != Game.Player.Character) PlayerPed = Game.Player.Character;

            if (CheatEntered("dead peds"))
            {
                NPCPed = World.CreatePed(PedHash.Lost01GMY, PlayerPed.GetOffsetInWorldCoords(new Vector3(0, 5, 0)));
                PedBlip = NPCPed.AddBlip();
            }

            if (NPCPed != null)
            {
                if (NPCPed.IsDead)
                {
                    if (PedBlip.Exists()) PedBlip.Remove();
                    NPCPed.MarkAsNoLongerNeeded();
                    NPCPed = null;
                }
                else
                {
                    UI.ShowSubtitle("Ped is alive");
                }
            }
        }
        private bool CheatEntered(string cheatString)
        {
            return Function.Call<bool>(Hash._0x557E43C447E700A8, Game.GenerateHash(cheatString));
        }
    }
}

 

Link to comment
Share on other sites

8 minutes ago, LeeC22 said:

 

This short bit of code should show the difference between Global and Local variables. 

 

Function1 adds Blips to two Peds, one with a local variable and one with a Global variable. To be able to remove the Blip somewhere else in the code, the reference to that Blip has to be a Global variable.

 

public class MyClass
{
    // Global Variables
    Ped NPCped1 = new Ped(0);
    Ped NPCped2 = new Ped(1);
    Blip GlobalBlip;

    void Function1()
    {
        // Local Variable - this only exists inside Function1
        Blip localBlip = NPCped1.AddBlip();

        // Global variable - this will exist anywhere in the class
        GlobalBlip = NPCped2.AddBlip();
    }

    void Function2()
    {
        if (NPCped1.IsDead)
        {
            // This will fail because localBlip doesn't exist here and Visual Studio will give you an error
            if (localBlip.Exists()) localBlip.Remove();
        }

        if (NPCped2.IsDead)
        {
            // This will work because GlobalBlip exists in both functions
            if (GlobalBlip.Exists()) GlobalBlip.Remove();
        }
    }
}

 

So in the test mod I wrote to test this, I have this:

using System;
using GTA;
using GTA.Math;
using GTA.Native;

namespace TestDeadPeds
{
    public class cTestDeadPeds : Script
    {
        private Ped PlayerPed;

        private Blip PedBlip;
        private Ped NPCPed;

        public cTestDeadPeds()
        {
            Tick += onTick;
            Interval = 0;
        }

        private void onTick(object sender, EventArgs e)
        {
            // Exits from the loop if the game is loading
            if (Game.IsLoading) return;

            if (PlayerPed != Game.Player.Character) PlayerPed = Game.Player.Character;

            if (CheatEntered("dead peds"))
            {
                NPCPed = World.CreatePed(PedHash.Lost01GMY, PlayerPed.GetOffsetInWorldCoords(new Vector3(0, 5, 0)));
                PedBlip = NPCPed.AddBlip();
            }

            if (NPCPed != null)
            {
                if (NPCPed.IsDead)
                {
                    if (PedBlip.Exists()) PedBlip.Remove();
                    NPCPed.MarkAsNoLongerNeeded();
                    NPCPed = null;
                }
                else
                {
                    UI.ShowSubtitle("Ped is alive");
                }
            }
        }
        private bool CheatEntered(string cheatString)
        {
            return Function.Call<bool>(Hash._0x557E43C447E700A8, Game.GenerateHash(cheatString));
        }
    }
}

 

Thank you brother, I will try it

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.