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

153 lines
5.6 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.Events.BirthdayParty
// 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 System;
using System.Collections.Generic;
using System.Linq;
using Terraria.Graphics.Effects;
using Terraria.ID;
using Terraria.Localization;
namespace Terraria.GameContent.Events
{
public class BirthdayParty
{
public static bool ManualParty;
public static bool GenuineParty;
public static int PartyDaysOnCooldown;
public static List<int> CelebratingNPCs = new List<int>();
private static bool _wasCelebrating;
public static bool PartyIsUp => BirthdayParty.GenuineParty || BirthdayParty.ManualParty;
public static void CheckMorning() => BirthdayParty.NaturalAttempt();
public static void CheckNight()
{
bool flag = false;
if (BirthdayParty.GenuineParty)
{
flag = true;
BirthdayParty.GenuineParty = false;
BirthdayParty.CelebratingNPCs.Clear();
}
if (BirthdayParty.ManualParty)
{
flag = true;
BirthdayParty.ManualParty = false;
}
if (!flag)
return;
Color color = new Color((int) byte.MaxValue, 0, 160);
WorldGen.BroadcastText(NetworkText.FromKey(Lang.misc[99].Key), color);
}
private static bool CanNPCParty(NPC n) => n.active && n.townNPC && n.aiStyle != 0 && n.type != 37 && n.type != 453 && n.type != 441 && !NPCID.Sets.IsTownPet[n.type];
private static void NaturalAttempt()
{
if (Main.netMode == 1 || !NPC.AnyNPCs(208))
return;
if (BirthdayParty.PartyDaysOnCooldown > 0)
{
--BirthdayParty.PartyDaysOnCooldown;
}
else
{
if (Main.rand.Next(10) != 0)
return;
List<NPC> source = new List<NPC>();
for (int index = 0; index < 200; ++index)
{
NPC n = Main.npc[index];
if (BirthdayParty.CanNPCParty(n))
source.Add(n);
}
if (source.Count < 5)
return;
BirthdayParty.GenuineParty = true;
BirthdayParty.PartyDaysOnCooldown = Main.rand.Next(5, 11);
NPC.freeCake = true;
BirthdayParty.CelebratingNPCs.Clear();
List<int> intList = new List<int>();
int num = 1;
if (Main.rand.Next(5) == 0 && source.Count > 12)
num = 3;
else if (Main.rand.Next(3) == 0)
num = 2;
List<NPC> list = source.OrderBy<NPC, int>((Func<NPC, int>) (i => Main.rand.Next())).ToList<NPC>();
for (int index = 0; index < num; ++index)
intList.Add(index);
for (int index = 0; index < intList.Count; ++index)
BirthdayParty.CelebratingNPCs.Add(list[intList[index]].whoAmI);
Color color = new Color((int) byte.MaxValue, 0, 160);
if (BirthdayParty.CelebratingNPCs.Count == 3)
WorldGen.BroadcastText(NetworkText.FromKey("Game.BirthdayParty_3", (object) Main.npc[BirthdayParty.CelebratingNPCs[0]].GetGivenOrTypeNetName(), (object) Main.npc[BirthdayParty.CelebratingNPCs[1]].GetGivenOrTypeNetName(), (object) Main.npc[BirthdayParty.CelebratingNPCs[2]].GetGivenOrTypeNetName()), color);
else if (BirthdayParty.CelebratingNPCs.Count == 2)
WorldGen.BroadcastText(NetworkText.FromKey("Game.BirthdayParty_2", (object) Main.npc[BirthdayParty.CelebratingNPCs[0]].GetGivenOrTypeNetName(), (object) Main.npc[BirthdayParty.CelebratingNPCs[1]].GetGivenOrTypeNetName()), color);
else
WorldGen.BroadcastText(NetworkText.FromKey("Game.BirthdayParty_1", (object) Main.npc[BirthdayParty.CelebratingNPCs[0]].GetGivenOrTypeNetName()), color);
NetMessage.SendData(7);
}
}
public static void ToggleManualParty()
{
int num1 = BirthdayParty.PartyIsUp ? 1 : 0;
if (Main.netMode != 1)
BirthdayParty.ManualParty = !BirthdayParty.ManualParty;
else
NetMessage.SendData(111);
int num2 = BirthdayParty.PartyIsUp ? 1 : 0;
if (num1 == num2 || Main.netMode != 2)
return;
NetMessage.SendData(7);
}
public static void WorldClear()
{
BirthdayParty.ManualParty = false;
BirthdayParty.GenuineParty = false;
BirthdayParty.PartyDaysOnCooldown = 0;
BirthdayParty.CelebratingNPCs.Clear();
BirthdayParty._wasCelebrating = false;
}
public static void UpdateTime()
{
if (BirthdayParty._wasCelebrating != BirthdayParty.PartyIsUp)
{
if (Main.netMode != 2)
{
if (BirthdayParty.PartyIsUp)
SkyManager.Instance.Activate("Party", new Vector2());
else
SkyManager.Instance.Deactivate("Party");
}
if (Main.netMode != 1 && BirthdayParty.CelebratingNPCs.Count > 0)
{
for (int index = 0; index < BirthdayParty.CelebratingNPCs.Count; ++index)
{
if (!BirthdayParty.CanNPCParty(Main.npc[BirthdayParty.CelebratingNPCs[index]]))
BirthdayParty.CelebratingNPCs.RemoveAt(index);
}
if (BirthdayParty.CelebratingNPCs.Count == 0)
{
BirthdayParty.GenuineParty = false;
if (!BirthdayParty.ManualParty)
{
Color color = new Color((int) byte.MaxValue, 0, 160);
WorldGen.BroadcastText(NetworkText.FromKey(Lang.misc[99].Key), color);
NetMessage.SendData(7);
}
}
}
}
BirthdayParty._wasCelebrating = BirthdayParty.PartyIsUp;
}
}
}