Exemplo n.º 1
0
 private void NPC_UpdateNPC(On.Terraria.NPC.orig_UpdateNPC orig, NPC self, int i)
 {
     if ((!TimeStopped || TimeStopStockOwner(self)))
     {
         orig.Invoke(self, i);
     }
     else
     {
         for (int k = 0; k < self.immune.Length; k++)
         {
             if (self.immune[k] > 0)
             {
                 self.immune[k]--;
             }
         }
     }
 }
        private static void NPC_UpdateNPC(On.Terraria.NPC.orig_UpdateNPC orig, NPC self, int i)
        {
            double time           = Main.time;
            bool   nighttime      = Main.dayTime;
            bool   nighttimeCheck = false;
            bool   invertCheck    = false;


            if (self != null && self.active && self.SGANPCs().treatAsNight)
            {
                nighttime      = Main.dayTime;
                Main.dayTime   = false;
                nighttimeCheck = true;
            }

            if (!nighttimeCheck && Items.Placeable.CelestialMonolithManager.queueRenderTargetUpdate > 0 && self != null && self.active)
            {
                if (self.SGANPCs().invertedTime > 0)
                {
                    Main.dayTime = !nighttime;
                    Main.time    = Items.Placeable.CelestialMonolithManager.GetInvertedTime(time);
                    invertCheck  = true;
                }
            }

            /*
             * NPCUtils.TargetClosestOldOnesInvasion(this);
             * NPCAimedTarget targetData = self.GetTargetData();
             * targetData.Center
             */

            bool oldOnes = NPCID.Sets.BelongsToInvasionOldOnesArmy[self.type];

            if (!oldOnes && self.HasValidTarget && Main.player[self.target].active)
            {
                /*if (oldOnes)
                 * {
                 *      NPCAimedTarget targetData = self.GetTargetData();
                 *      if (targetData.Type == Terraria.Enums.NPCTargetType.Player)
                 * {
                 *              Player nearest = Main.player[Player.FindClosest(targetData.Center,64,64)];
                 *              SGAPlayer sgaply = nearest.SGAPly();
                 *              Vector2 newPos = sgaply.centerOverridePosition;
                 *
                 *              if ((newPos - self.Center).LengthSquared() < 2560000)
                 *              {
                 *                      Vector2 oldPos = sgaply.player.MountedCenter;
                 *                      //targetData.Type = Terraria.Enums.NPCTargetType.NPC;
                 *
                 *                      sgaply.player.MountedCenter = newPos;
                 *                      orig(self, i);
                 *                      sgaply.player.MountedCenter = oldPos;
                 *              }
                 *
                 *      }
                 *
                 * }
                 * else
                 */
                SGAPlayer sgaply = Main.player[self.target].SGAPly();
                if (sgaply.centerOverrideTimer > 0)
                {
                    Vector2 newPos = sgaply.centerOverridePosition;
                    if ((newPos - self.Center).LengthSquared() < 2560000)
                    {
                        Vector2 oldPos = sgaply.player.MountedCenter;
                        sgaply.player.MountedCenter = newPos;

                        orig(self, i);
                        sgaply.player.MountedCenter = oldPos;
                        return;
                    }
                }
            }

            orig(self, i);

            if (nighttimeCheck)
            {
                Main.dayTime = nighttime;
                return;
            }
            if (invertCheck)
            {
                Main.dayTime = nighttime;
                Main.time    = time;
            }
        }