//protected override void OnTick() //{ // base.OnTick(); //} public override void OnWaveChange() { switch (Main.invasionProgressWave) { case 1: TwitchChat.Post("Vortex tower was awoken!", Color.ForestGreen); EventPlayer.LunarSky = LunarSkies.Vortex; if (Main.netMode != 1) { GlobalSpawnOverride.OverrideItemPool(InvadersDrop); } break; case 2: TwitchChat.Post("Vortex tower was defeated!", Color.ForestGreen); TwitchChat.Post("Solar tower was awoken!", Color.Orange); EventPlayer.LunarSky = LunarSkies.Solar; if (Main.netMode != 1) { GlobalSpawnOverride.OverrideItemPool(InvadersDrop); } break; case 3: TwitchChat.Post("Solar tower was defeated!", Color.Orange); TwitchChat.Post("Stardust tower was awoken!", Color.AliceBlue); EventPlayer.LunarSky = LunarSkies.Stardust; if (Main.netMode != 1) { GlobalSpawnOverride.OverrideItemPool(InvadersDrop); } break; case 4: TwitchChat.Post("Stardust tower was defeated!", Color.AliceBlue); TwitchChat.Post("Nebula tower was awoken!", Color.Violet); EventPlayer.LunarSky = LunarSkies.Nebula; if (Main.netMode != 1) { GlobalSpawnOverride.OverrideItemPool(InvadersDrop); } break; case 5: TwitchChat.Post("Nebula tower was defeated!", Color.Violet); TwitchChat.Post("Impeting doom approach...", Color.PaleGreen); EventPlayer.LunarSky = LunarSkies.None; if (Main.netMode != 1) { NPC.NewNPC(Main.spawnTileX, Main.spawnTileY, NPCID.MoonLordCore); GlobalSpawnOverride.OverrideItemPool(InvadersDrop); } break; } }
public override void Unload() { base.Unload(); if (Storage != null) { using (Stream p = Storage?.GetStream("EmoteIDs.json", FileAccess.Write)) using (StreamWriter s = new StreamWriter(p)) { s.Write(JsonConvert.SerializeObject(EmoticonHandler.convertingEmotes, Formatting.Indented)); } } if (Irc?.Connected ?? false) { Irc?.Disconnect(); } Irc?.Dispose(); Irc = null; OldConfig?.Load(); OldConfig?.Dispose(); OldConfig = null; Storage = null; Store?.Dispose(); Store = null; Textures?.Dispose(); Textures = null; RecentChatters = null; WorldGen.SpawnTownNPC -= SpawnTownNpcHook; if (ModContent.GetInstance <EventWorld>() != null) { ModContent.GetInstance <EventWorld>().WorldScheduler = new Scheduler(Thread.CurrentThread, new GameTickClock(ModContent.GetInstance <EventWorld>())); ModContent.GetInstance <EventWorld>().RealtimeScheduler = new Scheduler(); ModContent.GetInstance <EventWorld>().CurrentEvent = null; } Web = null; Instance = null; EventsPool?.Clear(); EventsPool = null; GlobalSpawnOverride.HandleCleanup(); TwitchBoss.ClearPool(); TwitchBoss.Boss = string.Empty; }
public void EventEnd(EventWorld world, TwitchChat mod) { if (Main.netMode == NetmodeID.Server) // Server { NetMessage.BroadcastChatMessage(NetworkText.FromKey(LanguageManager.Instance.GetTextValue(EndString)), StartColor); } else if (Main.netMode == NetmodeID.SinglePlayer) // Single Player { Main.NewText(Language.GetTextValue(LanguageManager.Instance.GetTextValue(EndString)), StartColor); } GlobalSpawnOverride.EndOverride(); GlobalSpawnOverride.DisablePoolOverride(); GlobalSpawnOverride.DisableItemPool(); if (Type == InvasionType.Invasion) { Main.invasionSize = 0; Main.invasionSizeStart = Main.invasionSize; Main.invasionProgress = 0; Main.invasionX = Main.spawnTileX; Main.invasionProgressIcon = 0; Main.invasionProgressWave = 0; Main.invasionProgressMax = Main.invasionSizeStart; Main.invasionWarn = 0; Main.invasionType = 0; Main.invasionDelay = 0; numPlayers = 0; } OnEnd(); if (Main.netMode == 2) { ModPacket netMessage = mod.GetPacket(); netMessage.Write((byte)NetPacketType.EventEnded); netMessage.Write(GetType().Name); netMessage.Send(); } }
/// <summary> /// Used by mod internally! Better use <see cref="EventWorld.StartWorldEvent(WorldEvent)" /> to start events! Use only /// if you KNOW what you do!! /// Start event starting sequence, and send event data for all players. Can break things if called outside /// <see cref="EventWorld" />! /// </summary> /// <param name="world"></param> /// <param name="mod"></param> internal void EventStart(EventWorld world, TwitchChat mod) { if (Main.netMode == NetmodeID.Server) // Server { NetMessage.BroadcastChatMessage(NetworkText.FromKey(LanguageManager.Instance.GetTextValue(StartString)), StartColor); } else if (Main.netMode == NetmodeID.SinglePlayer) // Single Player { Main.NewText(Language.GetTextValue(LanguageManager.Instance.GetTextValue(StartString)), StartColor); } //Post(Language.GetTextValue(LanguageManager.Instance.GetTextValue(StartString)), StartColor); started = true; TimeLeft = Length; //timeStart = Main.time; //Count Players for (var i = 0; i < 255; i++) { if (Main.player[i] != null && Main.player[i].active && Main.player[i].statLifeMax >= 200) { numPlayers++; } } if (Type == InvasionType.Invasion) { Main.invasionSize = MultiplyByPlayers ? InvasionSize * numPlayers : InvasionSize; Main.invasionProgressDisplayLeft = Main.invasionSize - Main.invasionProgress; Main.invasionSizeStart = Main.invasionSize; TimeLeft = Main.invasionSize; Main.invasionProgressWave = 1; Main.invasionProgress = 0; Main.invasionX = Main.spawnTileX; Main.invasionProgressIcon = 0 + 8; Main.invasionProgressMax = Main.invasionSizeStart; Main.invasionType = -1; OnWaveChange(); } OnStart(); if (Main.netMode != 1) //If we NOT the server client { GlobalSpawnOverride.StartOverrideSpawnRate(SpawnRateMul, MaxSpawnMul); if (Type == InvasionType.WorldEvent && Invaders != null) { GlobalSpawnOverride.OverridePool(Invaders, DisableOthers, true); } else { if (InvasionList != null && InvasionList.Count != 0) { GlobalSpawnOverride.OverridePool(GetListForCurWave, DisableOthers, true); } } if (InvadersDrop != null) { GlobalSpawnOverride.OverrideItemPool(InvadersDrop); } } if (Main.netMode == 2) { ModPacket netMessage = mod.GetPacket(); netMessage.Write((byte)NetPacketType.EventWasStarted); netMessage.Write(GetType().Name); netMessage.Write(TimeLeft); netMessage.Write((byte)Type); if (Type == InvasionType.Invasion) { WriteWaveData(ref netMessage); } netMessage.Send(); } }
public void PerformTick(EventWorld world, TwitchChat mod) { if (Main.invasionProgress >= 100) { if (Main.invasionProgressWave >= InvasionList.Count) { if (Main.netMode != 1) { EventEnd(world, mod); world.CurrentEvent = null; } Main.invasionProgressDisplayLeft = 20; return; } if (Main.netMode != 1) { if (Main.invasionProgressWave == 0) { return; } Main.invasionProgressWave++; Main.invasionProgress = 0; OnWaveChange(); Main.invasionSize = MultiplyByPlayers ? InvasionSize * numPlayers : InvasionSize; Main.invasionSizeStart = Main.invasionSize; tLeft = Main.invasionSize; GlobalSpawnOverride.OverridePool(GetListForCurWave, DisableOthers, true); if (Main.netMode == 2) { ModPacket netMessage = mod.GetPacket(); netMessage.Write((byte)NetPacketType.EventWaveUpdated); netMessage.Write(GetType().Name); netMessage.Write(TimeLeft); netMessage.Write((byte)Type); if (Type == InvasionType.Invasion) { WriteWaveData(ref netMessage); } netMessage.Send(); } } } else if (Type == InvasionType.Invasion) { if (Main.netMode == 2) { if (TimeLeft != oldProgressData) { ModPacket netMessage = mod.GetPacket(); netMessage.Write((byte)NetPacketType.EventWaveUpdated); netMessage.Write(GetType().Name); netMessage.Write(TimeLeft); netMessage.Write((byte)Type); if (Type == InvasionType.Invasion) { WriteWaveData(ref netMessage); } netMessage.Send(); } oldProgressData = TimeLeft; } Main.invasionProgress = (int)(100 * ((float)(Main.invasionSize - TimeLeft) / Main.invasionSize)); Main.invasionProgressDisplayLeft = 1000; } OnTick(); }