leihebi Posted February 15, 2021 Share Posted February 15, 2021 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 More sharing options...
LeeC22 Posted February 15, 2021 Share Posted February 15, 2021 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 More sharing options...
leihebi Posted February 15, 2021 Author Share Posted February 15, 2021 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 More sharing options...
leihebi Posted February 15, 2021 Author Share Posted February 15, 2021 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 More sharing options...
LeeC22 Posted February 15, 2021 Share Posted February 15, 2021 (edited) 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 February 15, 2021 by LeeC22 Link to comment Share on other sites More sharing options...
leihebi Posted February 15, 2021 Author Share Posted February 15, 2021 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 More sharing options...
leihebi Posted February 15, 2021 Author Share Posted February 15, 2021 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 More sharing options...
LeeC22 Posted February 15, 2021 Share Posted February 15, 2021 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 More sharing options...
leihebi Posted February 15, 2021 Author Share Posted February 15, 2021 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now