diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json index a8372b3..6660a78 100755 --- a/DataCollection/gamedata.json +++ b/DataCollection/gamedata.json @@ -100,6 +100,7 @@ "event_win":"QUIZ COMPLETED: %USERNAME% answered all questions first!", "event_unavailable":"Realtime quiz is currently unavailable", "event_entered":"You have entered the Realtime Quiz. Good luck!", + "event_entered_already":"Realtime quiz was already entered.", "event_quit":"Realtime quiz was quit already. Only one try per Quiz.", }, }, diff --git a/Horse Isle Server/HorseIsleServer/Game/Chat/Command.cs b/Horse Isle Server/HorseIsleServer/Game/Chat/Command.cs index 4406d4c..34d880e 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Chat/Command.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Chat/Command.cs @@ -373,6 +373,12 @@ namespace HISP.Game.Chat public static bool Quiz(string message, string[] args, User user) { bool quizActive = (GameServer.QuizEvent != null); + if(user.InRealTimeQuiz) + { + byte[] cantEnterRealTimeQuiz = PacketBuilder.CreateChat(Messages.EventAlreadyEnteredRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(cantEnterRealTimeQuiz); + return false; + } if (quizActive) { string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)); diff --git a/Horse Isle Server/HorseIsleServer/Game/Events/RealTimeQuiz.cs b/Horse Isle Server/HorseIsleServer/Game/Events/RealTimeQuiz.cs index 1e27a54..86819fc 100644 --- a/Horse Isle Server/HorseIsleServer/Game/Events/RealTimeQuiz.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Events/RealTimeQuiz.cs @@ -25,21 +25,20 @@ namespace HISP.Game.Events public class Participent { - public Participent(User user) + public Participent(User user, RealTimeQuiz Quiz) { UserInstance = user; Won = false; Quit = false; CorrectAnswers = 0; MistakenAnswers = 0; + baseQuiz = Quiz; NextQuestion(); } public void NextQuestion() { - CorrectAnswers++; - QuizCategory chosenCategory = Categories[GameServer.RandomNumberGenerator.Next(0, Categories.Length)]; - OnQuestion = chosenCategory.Questions[GameServer.RandomNumberGenerator.Next(0, chosenCategory.Questions.Length)]; + OnQuestion = baseQuiz.Questions[CorrectAnswers++]; } public void UpdateParticipent() @@ -57,9 +56,9 @@ namespace HISP.Game.Events { if(answer.ToLower().Trim() == correctAnswer.ToLower().Trim()) { - if(CorrectAnswers == 8) + if(CorrectAnswers >= baseQuiz.Questions.Length) { - GameServer.QuizEvent.WinEvent(UserInstance); + baseQuiz.WinEvent(UserInstance); return; } @@ -69,7 +68,7 @@ namespace HISP.Game.Events } if (answer.ToLower().Trim() == "quit") { - GameServer.QuizEvent.LeaveEvent(UserInstance); + baseQuiz.QuitEvent(UserInstance); return; } } @@ -77,16 +76,17 @@ namespace HISP.Game.Events UpdateParticipent(); } + private RealTimeQuiz baseQuiz; public User UserInstance; public int CorrectAnswers; public int MistakenAnswers; public bool Quit; public bool Won; - public QuizQuestion OnQuestion; } public static QuizCategory[] Categories; + public QuizQuestion[] Questions; public bool Active; public const int QUIZ_TIMEOUT = 5; private Timer quizTimer; @@ -102,7 +102,14 @@ namespace HISP.Game.Events public RealTimeQuiz() { participents = new List(); + Questions = new QuizQuestion[8]; + for(int i = 0; i < 8; i++) + { + QuizCategory chosenCategory = Categories[GameServer.RandomNumberGenerator.Next(0, Categories.Length)]; + Questions[i] = chosenCategory.Questions[GameServer.RandomNumberGenerator.Next(0, chosenCategory.Questions.Length)]; + } Active = false; + } @@ -125,7 +132,7 @@ namespace HISP.Game.Events } catch (KeyNotFoundException) { }; - Participent newParticipent = new Participent(user); + Participent newParticipent = new Participent(user, this); user.InRealTimeQuiz = true; participents.Add(newParticipent); @@ -133,18 +140,26 @@ namespace HISP.Game.Events return newParticipent; } - public void LeaveEvent(User user, bool sendData=true) + public void LeaveEvent(User user) + { + try + { + Participent partcipent = getParticipent(user.Id); + user.InRealTimeQuiz = false; + participents.Remove(partcipent); + partcipent = null; + } + catch (KeyNotFoundException) { }; + } + + public void QuitEvent(User user) { try { Participent partcipent = getParticipent(user.Id); partcipent.Quit = true; user.InRealTimeQuiz = false; - - if(sendData) - if (user.LoggedinClient != null) - if(GameServer.IsUserOnline(user.Id)) - GameServer.UpdateArea(user.LoggedinClient); + GameServer.UpdateArea(user.LoggedinClient); } catch (KeyNotFoundException) { }; } diff --git a/Horse Isle Server/HorseIsleServer/Game/Messages.cs b/Horse Isle Server/HorseIsleServer/Game/Messages.cs index 933c2e8..03c3a05 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Messages.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Messages.cs @@ -78,6 +78,7 @@ namespace HISP.Game public static string EventWinRealTimeQuizFormat; public static string EventUnavailableRealTimeQuiz; public static string EventEnteredRealTimeQuiz; + public static string EventAlreadyEnteredRealTimeQuiz; public static string EventQuitRealTimeQuiz; // Events : Real Time Riddles @@ -2020,7 +2021,6 @@ namespace HISP.Game { return HorseCompanionEquipMessageFormat.Replace("%HORSENAME%", horseName).Replace("%ITEM%", itemName); } - public static string FormatPlaytimeMessage(int hours) { return PlaytimeMessageFormat.Replace("%TOTALHOURS%", hours.ToString()); diff --git a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs index 215ef08..522bc0d 100755 --- a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs +++ b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs @@ -966,6 +966,7 @@ namespace HISP.Server Messages.EventWinRealTimeQuizFormat = gameData.messages.events.real_time_quiz.event_win; Messages.EventUnavailableRealTimeQuiz = gameData.messages.events.real_time_quiz.event_unavailable; Messages.EventEnteredRealTimeQuiz = gameData.messages.events.real_time_quiz.event_entered; + Messages.EventAlreadyEnteredRealTimeQuiz = gameData.messages.events.real_time_quiz.event_entered_already; Messages.EventQuitRealTimeQuiz = gameData.messages.events.real_time_quiz.event_quit; // Events : Real Time Riddle diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs index 649719a..fb07182 100755 --- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs +++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs @@ -7003,9 +7003,9 @@ namespace HISP.Server sender.LoggedinUser.TradingWith = null; sender.LoggedinUser.PendingTradeTo = 0; - // Quit open quiz. + // Leave open quiz. if (QuizEvent != null) - QuizEvent.LeaveEvent(sender.LoggedinUser, false); + QuizEvent.LeaveEvent(sender.LoggedinUser); // Delete Arena Entries if (Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))