diff --git a/HorseIsleServer/HorseIsleServer/Game/Arena.cs b/HorseIsleServer/HorseIsleServer/Game/Arena.cs index 2c0cd97..ae54006 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Arena.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Arena.cs @@ -399,13 +399,17 @@ namespace HISP.Game return false; } - public static void StartArenas(int minutes) + public static void StartArenas(int Minutes) { foreach(Arena arena in Arenas) { - if (minutes % arena.RaceEvery == 0) - if(arena.Mode == "TAKINGENTRIES") - arena.Start(); + if ((Minutes % arena.RaceEvery) == 1) + { + if (arena.Mode == "TAKINGENTRIES") + { + arena.Start(); + } + } } } diff --git a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs index 3ea4ce2..9c87418 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs @@ -144,8 +144,8 @@ namespace HISP.Server // HI1 Packets are terminates by 0x00 so we have to read until we receive that terminator if (isDisconnecting || - ClientSocket == null || - ClientSocket.Poll(0, SelectMode.SelectRead) || + ClientSocket == null || + e.BytesTransferred <= 0 || !ClientSocket.Connected || e.SocketError != SocketError.Success) { @@ -154,13 +154,13 @@ namespace HISP.Server } int availble = e.BytesTransferred; - if (availble >= 1) + if (availble >= 1) // More than 1 byte transfered.. { for (int i = 0; i < availble; i++) { currentPacket.Add(e.Buffer[i]); - if (e.Buffer[i] == PacketBuilder.PACKET_TERMINATOR) + if (e.Buffer[i] == PacketBuilder.PACKET_TERMINATOR) // Read until \0... { parsePackets(currentPacket.ToArray()); currentPacket.Clear(); @@ -168,6 +168,9 @@ namespace HISP.Server } } + if (availble == 0) + Disconnect(); + if (isDisconnecting || ClientSocket == null) return; diff --git a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs index c33862d..13ef5d2 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs @@ -53,11 +53,15 @@ namespace HISP.Server World.TickWorldClock(); if(World.ServerTime.Minutes != lastServerTime) { + lastServerTime = World.ServerTime.Minutes; + + // Start all events with this RaceEvery set. Arena.StartArenas(World.ServerTime.Minutes); + // Decrement horse train timer Database.DecHorseTrainTimeout(); - // write time to database: + // Write time to database: Database.SetServerTime(World.ServerTime.Minutes, World.ServerTime.Days, World.ServerTime.Years); // Ranch Windmill Payments @@ -103,7 +107,6 @@ namespace HISP.Server } gameTimer.Change(gameTickSpeed, gameTickSpeed); - lastServerTime = World.ServerTime.Minutes; } } @@ -146,29 +149,34 @@ namespace HISP.Server { ModsRevengeEvent.StartEvent(); } + // Isle Card Trading Game if(totalMinutesElapsed % (60 *2) == 0) { IsleCardTrading = new IsleCardTradingGame(); IsleCardTrading.StartEvent(); } + // Water Balloon Game if(totalMinutesElapsed % (60 * 2) == 0) { WaterBalloonEvent.StartEvent(); } + // Tack Shop Giveaway if(totalMinutesElapsed % ((60 * 3)+5) == 0) { TackShopGiveawayEvent = new TackShopGiveaway(); TackShopGiveawayEvent.StartEvent(); } + // Real Time Riddle if(totalMinutesElapsed % (RealTimeRiddle.LastWon ? 20 : 15) == 0) { RiddleEvent = RealTimeRiddle.GetRandomRiddle(); RiddleEvent.StartEvent(); } + // Real Time Quiz if(totalMinutesElapsed % (60 + 30) == 0) {