コード例 #1
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();
            }
        }
コード例 #2
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();
        }