HISP/HorseIsleServer/LibHISP/Game/Riddler.cs

83 lines
2.5 KiB
C#
Executable file

using HISP.Player;
using HISP.Server;
using System.Collections.Generic;
namespace HISP.Game
{
public class Riddler
{
private static List<Riddler> riddlerRiddles = new List<Riddler>();
public static Riddler[] Riddles
{
get
{
return riddlerRiddles.ToArray();
}
}
public Riddler(int id, string riddle, string[] answers, string reason)
{
Id = id;
Riddle = riddle;
Answers = answers;
Reason = reason;
riddlerRiddles.Add(this);
}
public int Id;
public string Riddle;
public string[] Answers;
public string Reason;
public void AnswerSuccess(User user)
{
if (!Database.HasPlayerCompletedRiddle(this.Id, user.Id))
Database.CompleteRiddle(this.Id, user.Id);
byte[] riddleAnswerCorrectPacket = PacketBuilder.CreateChat(Messages.FormatRiddlerAnswerCorrect(this.Reason), PacketBuilder.CHAT_BOTTOM_RIGHT);
user.Client.SendPacket(riddleAnswerCorrectPacket);
user.AddMoney(10000);
if(HasCompletedAllRiddles(user))
user.Awards.AddAward(Award.GetAwardById(11)); // Riddlers Riddles
}
public void AnswerFail(User user)
{
byte[] riddleIncorrect = PacketBuilder.CreateChat(Messages.RiddlerIncorrectAnswer, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.Client.SendPacket(riddleIncorrect);
}
public bool CheckAnswer(User user, string txt)
{
foreach(string Answer in Answers)
{
if(Answer.ToLower() == txt.ToLower())
{
AnswerSuccess(user);
return true;
}
}
AnswerFail(user);
return false;
}
public static bool HasCompletedAllRiddles(User user)
{
if (Database.TotalRiddlesCompletedByPlayer(user.Id) >= Riddles.Length)
return true;
return false;
}
public static Riddler GetRandomRiddle(User user)
{
while(true)
{
int rng = GameServer.RandomNumberGenerator.Next(0, Riddles.Length);
if (Database.HasPlayerCompletedRiddle(Riddles[rng].Id, user.Id))
{
continue;
}
return Riddles[rng];
}
}
}
}