public EnemyState( AIDirectorZombieManagementComponent aiComponent, Asset asset, Entity player) { this.asset = asset; this.player = player; var qry = from tz in aiComponent.trackedZombies.list where tz.Zombie.IsAlive() select tz.Zombie; zombies = qry.ToList(); }
static void Postfix(AIDirectorZombieManagementComponent __instance, double _dt) { timeAfterTick += _dt; if (timeAfterTick < timeIntervalUpdate) { return; } else { timeAfterTick -= timeIntervalUpdate; } if (esp == null) { return; } var enemyState = new EnemyState(__instance, asset, player); int zombieCnt = enemyState.Count(); int attackingEnemeies = enemyState.CountAttacking(); int investigatingEnemies = enemyState.CountInvestigating(); bool hasRunner = enemyState.HasRunner(); bool hasFlyer = enemyState.HasFlyer(); float nearestDist = enemyState.NearestDist(); string uiStr = "NO ENEMIES"; Color OrangeColor = new Color(1.0f, 0.647f, 0f); Color uiStrColor = Color.green; // Reset indicator targets before every updates esp.targets.Clear(); // Add targets to indicator var enemyInfos = enemyState.GetEnemyInfos(); foreach (var info in enemyInfos) { int id = info.gameObject.GetInstanceID(); if (!esp.targets.ContainsKey(id)) { esp.targets.Add(id, info); } } // Update indicator esp.DoUpdate(Camera.main); if (zombieCnt > 0 && nearestDist < EnemyState.INF_DIST) { uiStr = zombieCnt + " ENEMIES" + " (" + nearestDist.ToString("0.00") + "M)"; uiStr += "\n"; if (attackingEnemeies > 0) { uiStr += attackingEnemeies + " ATTACKING"; uiStrColor = Color.red; } else if (investigatingEnemies > 0) { uiStr += investigatingEnemies + " INVESTIGATING"; uiStrColor = Color.yellow; } else { uiStr += "IDLE"; uiStrColor = Color.white; } if (hasRunner && hasFlyer) { uiStr += "\nRUN / FLY"; } else if (hasFlyer) { uiStr += "\nFLY"; } else if (hasRunner) { uiStr += "\nRUN"; } } else if (player == null) { uiStr = "No player found. Exit to main menu and reload the game."; uiStrColor = Color.white; } esp.UpdateText(uiStr, uiStrColor); }