コード例 #1
0
        //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;
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        /// <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();
            }
        }
コード例 #5
0
        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();
        }