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))