Flag npc as dead when their health ratio hits 0

Sometimes npcs despawn without their HP var visible after death
This commit is contained in:
Adam
2018-05-31 18:18:29 -04:00
parent fd3a27f8b6
commit 8a6fc94239
4 changed files with 38 additions and 4 deletions

View File

@@ -65,4 +65,11 @@ public interface NPC extends Actor
* @return the transformed NPC
*/
NPCComposition getTransformedComposition();
/**
* Returns true if this NPC has died
*
* @return
*/
boolean isDead();
}

View File

@@ -54,6 +54,7 @@ import net.runelite.rs.api.RSCombatInfo2;
import net.runelite.rs.api.RSCombatInfoList;
import net.runelite.rs.api.RSCombatInfoListHolder;
import net.runelite.rs.api.RSModel;
import net.runelite.rs.api.RSNPC;
import net.runelite.rs.api.RSNode;
@Mixin(RSActor.class)
@@ -235,12 +236,19 @@ public abstract class RSActorMixin implements RSActor
@MethodHook("setCombatInfo")
public void setCombatInfo(int combatInfoId, int gameCycle, int var3, int var4, int healthRatio, int health)
{
if (healthRatio == 0 && this == client.getLocalPlayer())
if (healthRatio == 0)
{
log.debug("You died!");
if (this == client.getLocalPlayer())
{
log.debug("You died!");
LocalPlayerDeath event = new LocalPlayerDeath();
eventBus.post(event);
LocalPlayerDeath event = new LocalPlayerDeath();
eventBus.post(event);
}
else if (this instanceof RSNPC)
{
((RSNPC) this).setDead(true);
}
}
}
}

View File

@@ -47,6 +47,9 @@ public abstract class RSNPCMixin implements RSNPC
@Inject
private int npcIndex;
@Inject
private boolean dead;
@Inject
@Override
public int getId()
@@ -149,4 +152,18 @@ public abstract class RSNPCMixin implements RSNPC
}
return composition;
}
@Inject
@Override
public boolean isDead()
{
return dead;
}
@Inject
@Override
public void setDead(boolean dead)
{
this.dead = dead;
}
}

View File

@@ -37,4 +37,6 @@ public interface RSNPC extends RSActor, NPC
int getIndex();
void setIndex(int id);
void setDead(boolean dead);
}