terraria-source-code/GameContent/Events/CultistRitual.cs
2021-10-26 12:45:26 -04:00

91 lines
3.2 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.Events.CultistRitual
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
using Microsoft.Xna.Framework;
using Terraria.ID;
namespace Terraria.GameContent.Events
{
public class CultistRitual
{
public const int delayStart = 86400;
public const int respawnDelay = 43200;
private const int timePerCultist = 3600;
private const int recheckStart = 600;
public static int delay;
public static int recheck;
public static void UpdateTime()
{
if (Main.netMode == 1)
return;
CultistRitual.delay -= Main.dayRate;
if (CultistRitual.delay < 0)
CultistRitual.delay = 0;
CultistRitual.recheck -= Main.dayRate;
if (CultistRitual.recheck < 0)
CultistRitual.recheck = 0;
if (CultistRitual.delay != 0 || CultistRitual.recheck != 0)
return;
CultistRitual.recheck = 600;
if (NPC.AnyDanger())
CultistRitual.recheck *= 6;
else
CultistRitual.TrySpawning(Main.dungeonX, Main.dungeonY);
}
public static void CultistSlain() => CultistRitual.delay -= 3600;
public static void TabletDestroyed() => CultistRitual.delay = 43200;
public static void TrySpawning(int x, int y)
{
if (WorldGen.PlayerLOS(x - 6, y) || WorldGen.PlayerLOS(x + 6, y) || !CultistRitual.CheckRitual(x, y))
return;
NPC.NewNPC(x * 16 + 8, (y - 4) * 16 - 8, 437);
}
private static bool CheckRitual(int x, int y)
{
if (CultistRitual.delay != 0 || !Main.hardMode || !NPC.downedGolemBoss || !NPC.downedBoss3 || y < 7 || WorldGen.SolidTile(Main.tile[x, y - 7]) || NPC.AnyNPCs(437))
return false;
Vector2 Center = new Vector2((float) (x * 16 + 8), (float) (y * 16 - 64 - 8 - 27));
Point[] pointArray = (Point[]) null;
ref Point[] local = ref pointArray;
return CultistRitual.CheckFloor(Center, out local);
}
public static bool CheckFloor(Vector2 Center, out Point[] spawnPoints)
{
Point[] pointArray = new Point[4];
int num1 = 0;
Point tileCoordinates = Center.ToTileCoordinates();
for (int index1 = -5; index1 <= 5; index1 += 2)
{
if (index1 != -1 && index1 != 1)
{
for (int index2 = -5; index2 < 12; ++index2)
{
int num2 = tileCoordinates.X + index1 * 2;
int num3 = tileCoordinates.Y + index2;
if ((WorldGen.SolidTile(num2, num3) || TileID.Sets.Platforms[(int) Framing.GetTileSafely(num2, num3).type]) && (!Collision.SolidTiles(num2 - 1, num2 + 1, num3 - 3, num3 - 1) || !Collision.SolidTiles(num2, num2, num3 - 3, num3 - 1) && !Collision.SolidTiles(num2 + 1, num2 + 1, num3 - 3, num3 - 2) && !Collision.SolidTiles(num2 - 1, num2 - 1, num3 - 3, num3 - 2)))
{
pointArray[num1++] = new Point(num2, num3);
break;
}
}
}
}
if (num1 != 4)
{
spawnPoints = (Point[]) null;
return false;
}
spawnPoints = pointArray;
return true;
}
}
}