コード例 #1
0
ファイル: EnemyState.cs プロジェクト: sjw0687/7dtd-esp-mod
        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();
        }
コード例 #2
0
ファイル: Patch.cs プロジェクト: sjw0687/7dtd-esp-mod
            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);
            }