diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json
index bd503e7..199f825 100755
--- a/DataCollection/gamedata.json
+++ b/DataCollection/gamedata.json
@@ -85,6 +85,13 @@
"event_end":"WATER BALLOON FIGHT OVER: Here were the winners:",
"event_winner":"
%USERNAME% was hit %AMOUNT% times."
},
+ "isle_card_trading_game":{
+ "event_start":"ISLE CARD TRADING GAME: You have just been given FOUR Isle Trading Cards. They are identical. To win at this game, you will need exactly one of each stallion, mare, colt and filly card in 5 minutes (60 game minutes).",
+ "event_disqualified":"ISLE CARDS TIME IS UP: You are disqualified for having over 4 cards!",
+ "event_one_type":"ISLE CARDS TIME IS UP: You only have one type of card. Removing cards.",
+ "event_no_cards":"ISLE CARDS TIME IS UP: You don't have any isle cards!",
+ "event_win":"ISLE CARDS TIME IS UP: You have all four cards! Great work! Prize=$25,000"
+ },
"real_time_riddle":{
"event_start":"CHAT RIDDLE: %RIDDLETEXT% (answer first via any chat method)",
"event_end":"TIME IS UP: No one answered the Chat Riddle in time.",
@@ -9518,7 +9525,13 @@
"water_balloon":334,
"birthday_token":1082,
"magic_droplet":1567,
- "magic_bean":1566
+ "magic_bean":1566,
+
+
+ "stallion_trading_card":520,
+ "mare_trading_card":521,
+ "colt_trading_card":522,
+ "filly_trading_card":523
},
"throwable":[
{"id":144,"message_hit":"SMACK!! %USERNAME% hit you with a Snowball, blanketing wet snow on you.", "message_throw":"SMACK!! You nailed %USERNAME% with a Snowball, blanketing wet snow on them.", "message_hit_yourself":"You toss the Snowball high into the air! SMACK! It comes back down and hits you on the head, blanketing wet snow on you."},
diff --git a/Horse Isle Server/HorseIsleServer/Game/Events/IsleCardTradingGame.cs b/Horse Isle Server/HorseIsleServer/Game/Events/IsleCardTradingGame.cs
new file mode 100644
index 0000000..ccdc742
--- /dev/null
+++ b/Horse Isle Server/HorseIsleServer/Game/Events/IsleCardTradingGame.cs
@@ -0,0 +1,108 @@
+using HISP.Game.Items;
+using HISP.Server;
+using System.Threading;
+
+namespace HISP.Game.Events
+{
+ public class IsleCardTradingGame
+ {
+ public bool Active;
+ private Timer tradingTimeout;
+ private const int TRADING_TIMEOUT = 5;
+
+
+
+ public void StartEvent()
+ {
+ Active = true;
+ tradingTimeout = new Timer(new TimerCallback(tradeTimedOut), null, TRADING_TIMEOUT * 60 * 1000, TRADING_TIMEOUT * 60 * 1000);
+ byte[] msg = PacketBuilder.CreateChat(Messages.EventStartIsleTradingGame, PacketBuilder.CHAT_BOTTOM_RIGHT);
+
+ foreach (GameClient client in GameServer.ConnectedClients)
+ if (client.LoggedIn)
+ client.SendPacket(msg);
+
+ // Give Trading Cards
+
+ int[] allUsers = Database.GetUsers();
+ foreach (int userid in allUsers)
+ {
+ int tradingCardId = Item.TradingCards[GameServer.RandomNumberGenerator.Next(0, Item.TradingCards.Length)];
+ for (int i = 0; i < 4; i++)
+ {
+ ItemInstance itm = new ItemInstance(tradingCardId);
+
+ if (GameServer.IsUserOnline(userid))
+ GameServer.GetUserById(userid).Inventory.AddWithoutDatabase(itm);
+
+ Database.AddItemToInventory(userid, itm);
+ }
+ }
+
+
+ }
+
+ public void EndEvent()
+ {
+ Active = false;
+
+ foreach(GameClient client in GameServer.ConnectedClients)
+ {
+ if(client.LoggedIn)
+ {
+ int totalCards = 0;
+
+ foreach (int itemId in Item.TradingCards)
+ if (client.LoggedinUser.Inventory.HasItemId(itemId))
+ totalCards += client.LoggedinUser.Inventory.GetItemByItemId(itemId).ItemInstances.Count;
+
+ bool win = (client.LoggedinUser.Inventory.HasItemId(Item.ColtTradingCard) &&
+ client.LoggedinUser.Inventory.HasItemId(Item.FillyTradingCard) &&
+ client.LoggedinUser.Inventory.HasItemId(Item.MareTradingCard) &&
+ client.LoggedinUser.Inventory.HasItemId(Item.StallionTradingCard));
+
+ if(totalCards > 4)
+ {
+ byte[] disqualifiedTooManyCards = PacketBuilder.CreateChat(Messages.EventDisqualifiedIsleTradingGame, PacketBuilder.CHAT_BOTTOM_RIGHT);
+ client.SendPacket(disqualifiedTooManyCards);
+ }
+ else if(!win && totalCards <= 0)
+ {
+ byte[] noCardsMessage = PacketBuilder.CreateChat(Messages.EventNoneIsleTradingGame, PacketBuilder.CHAT_BOTTOM_RIGHT);
+ client.SendPacket(noCardsMessage);
+ }
+ else if(!win && totalCards >= 1)
+ {
+ byte[] onlyOneTypeOfCardMesage = PacketBuilder.CreateChat(Messages.EventOnlyOneTypeIsleTradingGame, PacketBuilder.CHAT_BOTTOM_RIGHT);
+ client.SendPacket(onlyOneTypeOfCardMesage);
+ }
+ else if (win && totalCards >= 4) // it should be impossible to have this if you dont have one of each,
+ {
+ client.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.IsleCardsGameWin).Count++;
+
+ byte[] wonIsleCardGame = PacketBuilder.CreateChat(Messages.EventWonIsleTradingGame, PacketBuilder.CHAT_BOTTOM_RIGHT);
+ client.SendPacket(wonIsleCardGame);
+
+ client.LoggedinUser.Money += 25000;
+
+ }
+
+
+ }
+ }
+
+ // Remove all trading cards from the game
+ foreach (int itemId in Item.TradingCards)
+ GameServer.RemoveAllItemsOfIdInTheGame(itemId);
+
+ tradingTimeout.Dispose();
+ tradingTimeout = null;
+ }
+
+ private void tradeTimedOut(object state)
+ {
+ EndEvent();
+ }
+ }
+
+}
diff --git a/Horse Isle Server/HorseIsleServer/Game/Events/WaterBalloonGame.cs b/Horse Isle Server/HorseIsleServer/Game/Events/WaterBalloonGame.cs
index 2967023..7e41dca 100644
--- a/Horse Isle Server/HorseIsleServer/Game/Events/WaterBalloonGame.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Events/WaterBalloonGame.cs
@@ -53,20 +53,8 @@ namespace HISP.Game.Events
{
ThrownCounter[] winnerCounter = getWinners();
resetEvent();
- // Remove from all online players
- foreach(GameClient connectedClient in GameServer.ConnectedClients)
- {
- if(connectedClient.LoggedIn)
- if(connectedClient.LoggedinUser.Inventory.HasItemId(Item.WaterBalloon))
- {
- InventoryItem invItm = connectedClient.LoggedinUser.Inventory.GetItemByItemId(Item.WaterBalloon);
- foreach (ItemInstance itm in invItm.ItemInstances.ToArray())
- connectedClient.LoggedinUser.Inventory.Remove(itm);
- }
- }
- DroppedItems.DeleteAllItemsWithId(Item.WaterBalloon); // Delete all dropped items
- Database.DeleteAllItemsFromUsers(Item.WaterBalloon); // Delete from offline players
+ GameServer.RemoveAllItemsOfIdInTheGame(Item.WaterBalloon);
// Build event over message
string winMsg = Messages.EventEndWaterBalloonGame;
diff --git a/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs b/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs
index 73d4602..70c088e 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs
@@ -75,6 +75,20 @@ namespace HISP.Game.Items
public static int BirthdayToken;
public static int MagicBean;
public static int MagicDroplet;
+
+ public static int StallionTradingCard;
+ public static int MareTradingCard;
+ public static int ColtTradingCard;
+ public static int FillyTradingCard;
+
+ public static int[] TradingCards
+ {
+ get
+ {
+ return new int[4] { StallionTradingCard, MareTradingCard, ColtTradingCard, FillyTradingCard };
+ }
+ }
+
public static ItemInformation[] GetAllWishableItems()
{
List itemInfo = new List();
diff --git a/Horse Isle Server/HorseIsleServer/Game/Messages.cs b/Horse Isle Server/HorseIsleServer/Game/Messages.cs
index 75ea7fd..c0cd5bc 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Messages.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Messages.cs
@@ -69,6 +69,13 @@ namespace HISP.Game
public static string SocialTypeFormat;
public static string SocialPlayerNoLongerNearby;
+ // Events : Isle Cards Trading Game
+ public static string EventStartIsleTradingGame;
+ public static string EventDisqualifiedIsleTradingGame;
+ public static string EventOnlyOneTypeIsleTradingGame;
+ public static string EventNoneIsleTradingGame;
+ public static string EventWonIsleTradingGame;
+
// Events : Water Balloon Game
public static string EventStartWaterBallonGame;
public static string EventWonWaterBallonGame;
diff --git a/Horse Isle Server/HorseIsleServer/Program.cs b/Horse Isle Server/HorseIsleServer/Program.cs
index 5c89821..5571bd0 100755
--- a/Horse Isle Server/HorseIsleServer/Program.cs
+++ b/Horse Isle Server/HorseIsleServer/Program.cs
@@ -12,29 +12,49 @@ namespace HISP
{
static void Main(string[] args)
{
- Console.Title = "HISP - Horse Isle Server Emulator";
- ConfigReader.OpenConfig();
- CrossDomainPolicy.GetPolicy();
- Database.OpenDatabase();
- GameDataJson.ReadGamedata();
+ #if (!DEBUG)
+ try
+ {
+ #endif
+ Console.Title = "HISP - Horse Isle Server Emulator";
+ ConfigReader.OpenConfig();
+ CrossDomainPolicy.GetPolicy();
+ Database.OpenDatabase();
+ GameDataJson.ReadGamedata();
- Map.OpenMap();
- World.ReadWorldData();
- Treasure.Init();
+ Map.OpenMap();
+ World.ReadWorldData();
+ Treasure.Init();
- DroppedItems.Init();
- WildHorse.Init();
+ DroppedItems.Init();
+ WildHorse.Init();
- Drawingroom.LoadAllDrawingRooms();
- Brickpoet.LoadPoetryRooms();
- Multiroom.CreateMultirooms();
+ Drawingroom.LoadAllDrawingRooms();
+ Brickpoet.LoadPoetryRooms();
+ Multiroom.CreateMultirooms();
- Auction.LoadAllAuctionRooms();
+ Auction.LoadAllAuctionRooms();
- Item.DoSpecialCases();
+ Item.DoSpecialCases();
- GameServer.StartServer();
+ GameServer.StartServer();
+ #if (!DEBUG)
+ }
+ catch(Exception e)
+ {
+ Logger.ErrorPrint("Server has crashed! :(");
+ Logger.ErrorPrint("");
+ Logger.ErrorPrint("");
+ Logger.ErrorPrint("UNCAUGHT EXCEPTION!");
+ Logger.ErrorPrint("");
+ Logger.ErrorPrint("");
+ Logger.ErrorPrint(e.Message);
+ Logger.ErrorPrint("");
+ Logger.ErrorPrint(e.StackTrace);
+ while(true){};
+ }
+ #endif
}
}
diff --git a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs
index f12ce8e..1f0e422 100755
--- a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs
@@ -876,6 +876,11 @@ namespace HISP.Server
Item.MagicBean = gameData.item.special.magic_bean;
Item.MagicDroplet = gameData.item.special.magic_droplet;
+ Item.StallionTradingCard = gameData.item.special.stallion_trading_card;
+ Item.MareTradingCard = gameData.item.special.mare_trading_card;
+ Item.ColtTradingCard = gameData.item.special.colt_trading_card;
+ Item.FillyTradingCard = gameData.item.special.filly_trading_card;
+
GameServer.IdleWarning = Convert.ToInt32(gameData.messages.disconnect.client_timeout.warn_after);
GameServer.IdleTimeout = Convert.ToInt32(gameData.messages.disconnect.client_timeout.kick_after);
@@ -888,6 +893,7 @@ namespace HISP.Server
Map.NewUserStartY = gameData.messages.new_user.starting_y;
// Timed Messages
+
Messages.PlaytimeMessageFormat = gameData.messages.timed_messages.playtime_message;
Messages.RngMessages = gameData.messages.timed_messages.rng_message.ToObject();
@@ -903,7 +909,6 @@ namespace HISP.Server
Messages.NowMutingPlayerFormat = gameData.messages.meta.mute_command.now_ignoring_player;
Messages.StoppedMutingPlayerFormat = gameData.messages.meta.mute_command.stop_ignoring_player;
-
Messages.PlayerIgnoringYourPrivateMessagesFormat = gameData.messages.meta.mute_command.player_ignoring_your_pm;
Messages.PlayerIgnoringYourBuddyRequests = gameData.messages.meta.mute_command.player_ignoring_your_br;
Messages.PlayerIgnoringYourSocials = gameData.messages.meta.mute_command.player_ignoring_your_socials;
@@ -959,6 +964,13 @@ namespace HISP.Server
// Message Queue
Messages.MessageQueueHeader = gameData.messages.message_queue;
+ // Events : Isle Trading Game
+ Messages.EventStartIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_start;
+ Messages.EventDisqualifiedIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_disqualified;
+ Messages.EventOnlyOneTypeIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_one_type;
+ Messages.EventNoneIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_no_cards;
+ Messages.EventWonIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_win;
+
// Events : Water Ballon Game
Messages.EventStartWaterBallonGame = gameData.messages.events.water_balloon_game.event_start;
Messages.EventWonWaterBallonGame = gameData.messages.events.water_balloon_game.event_won;
diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
index 26ce2be..0019de3 100755
--- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
@@ -43,6 +43,7 @@ namespace HISP.Server
public static TackShopGiveaway TackShopGiveawayEvent = null;
public static RealTimeQuiz QuizEvent = null;
public static WaterBalloonGame WaterBalloonEvent = new WaterBalloonGame();
+ public static IsleCardTradingGame IsleCardTrading;
/*
* Private stuff
@@ -134,29 +135,30 @@ namespace HISP.Server
}
}
// Isle Card Trading Game
- if(totalMinutesElapsed % (60 + 50) == 0)
+ if(totalMinutesElapsed % ((60 + 50)+5) == 0)
{
-
+ IsleCardTrading = new IsleCardTradingGame();
+ IsleCardTrading.StartEvent();
}
// Water Balloon Game
- if(totalMinutesElapsed % (60 * 2) == 0)
+ if(totalMinutesElapsed % ((60 * 2)+5) == 0)
{
WaterBalloonEvent.StartEvent();
}
// Tack Shop Giveaway
- if(totalMinutesElapsed % (60 * 3) == 0)
+ if(totalMinutesElapsed % ((60 * 3)+2) == 0)
{
TackShopGiveawayEvent = new TackShopGiveaway();
TackShopGiveawayEvent.StartEvent();
}
// Real Time Riddle
- if(totalMinutesElapsed % 30 == 0)
+ if(totalMinutesElapsed % (30+5) == 0)
{
RiddleEvent = RealTimeRiddle.GetRandomRiddle();
RiddleEvent.StartEvent();
}
// Real Time Quiz
- if(totalMinutesElapsed % (60 + 15) == 0)
+ if(totalMinutesElapsed % ((60 + 15)+5) == 0)
{
QuizEvent = new RealTimeQuiz();
QuizEvent.StartEvent();
@@ -7523,6 +7525,24 @@ namespace HISP.Server
}
}
}
+
+ public static void RemoveAllItemsOfIdInTheGame(int id)
+ {
+ // Remove from all online players
+ foreach (GameClient connectedClient in GameServer.ConnectedClients)
+ {
+ if (connectedClient.LoggedIn)
+ if (connectedClient.LoggedinUser.Inventory.HasItemId(id))
+ {
+ InventoryItem invItm = connectedClient.LoggedinUser.Inventory.GetItemByItemId(id);
+ foreach (ItemInstance itm in invItm.ItemInstances.ToArray())
+ connectedClient.LoggedinUser.Inventory.Remove(itm);
+ }
+ }
+ DroppedItems.DeleteAllItemsWithId(Item.WaterBalloon); // Delete all dropped items
+ Database.DeleteAllItemsFromUsers(Item.WaterBalloon); // Delete from offline players
+ }
+
public static void StartRidingHorse(GameClient sender, int horseRandomId)
{
HorseInstance horseMountInst = sender.LoggedinUser.HorseInventory.GetHorseById(horseRandomId);