public override void NPCLoot(NPC npc) { EventWorld world = ModContent.GetInstance <EventWorld>(); if (useTuple) { if (InvasionList.ContainsKey(npc.type)) { world.CurrentEvent.TimeLeft -= InvasionList[npc.type].Item2; } } if (Main.netMode == 1) { return; } if (IsItemPoolOverrided && ItemPool != null) { var rand = new WeightedRandom <int>(); foreach (KeyValuePair <int, float> it in ItemPool) { rand.Add(it.Key, it.Value); } if (rand.random.NextFloat(100) > 55) { Item.NewItem(npc.position, npc.Size, rand.Get()); } } }
public GameTickClock(EventWorld world, bool autosub = true) { this.world = world; if (autosub) { world.TickUpdate += SubTick; } Rate = 1; }
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(); }
protected override void ReadBody(ByteReader reader) { this.EventWorld = reader.ReadEventWorld(); }