91 lines
3.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|