mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-10 07:05:41 +12:00
Add all the other arenas / competitions
This commit is contained in:
parent
8f0ed68110
commit
7feec48b0c
5 changed files with 106 additions and 77 deletions
|
@ -47,7 +47,6 @@
|
||||||
"messages":{
|
"messages":{
|
||||||
"welcome_format":"Welcome to the land of Horse Isle, %USERNAME%!!",
|
"welcome_format":"Welcome to the land of Horse Isle, %USERNAME%!!",
|
||||||
"motd_format":"<FONT COLOR='#FF0000'><B>Today's Note:</B> %MOTD%</FONT>",
|
"motd_format":"<FONT COLOR='#FF0000'><B>Today's Note:</B> %MOTD%</FONT>",
|
||||||
"mail_received":"A message has been sent to you from another player. It is in your inventory now.",
|
|
||||||
"login_format":"Player %USERNAME% has logged in",
|
"login_format":"Player %USERNAME% has logged in",
|
||||||
"logout_format":"Player %USERNAME% has disconnected",
|
"logout_format":"Player %USERNAME% has disconnected",
|
||||||
"profile_save":"Your profile changes were saved.",
|
"profile_save":"Your profile changes were saved.",
|
||||||
|
@ -56,6 +55,7 @@
|
||||||
"click_nothing_message":"Nothing interesting here...",
|
"click_nothing_message":"Nothing interesting here...",
|
||||||
"playtime_timeout":"You have run out of playtime for now. In one minute you will be disconnected. You gain one minute of playtime every 8 minutes. Please come back later!",
|
"playtime_timeout":"You have run out of playtime for now. In one minute you will be disconnected. You gain one minute of playtime every 8 minutes. Please come back later!",
|
||||||
"random_movement":"You are sooo <B>%STAT%</B>. You wander dizzily in a different direction.",
|
"random_movement":"You are sooo <B>%STAT%</B>. You wander dizzily in a different direction.",
|
||||||
|
"movement_key":[{"stat":"THIRSTY", "msg":"dizzily"},{"stat":"HUNGERY", "msg":"stumble"}],
|
||||||
"incorrect_password":"Incorrect. You will have to find the correct answer somewhere...",
|
"incorrect_password":"Incorrect. You will have to find the correct answer somewhere...",
|
||||||
"player_here":"%USERNAME% here",
|
"player_here":"%USERNAME% here",
|
||||||
"no_telescope":"You do not have a telescope to use! You try making circles with your hands and placing them in front of one eye, but it is of minimal aid...",
|
"no_telescope":"You do not have a telescope to use! You try making circles with your hands and placing them in front of one eye, but it is of minimal aid...",
|
||||||
|
|
|
@ -5,9 +5,7 @@ using HISP.Server;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace HISP.Game
|
namespace HISP.Game
|
||||||
{
|
{
|
||||||
|
@ -90,49 +88,48 @@ namespace HISP.Game
|
||||||
return "jumpingarena2.swf?BONUS=" + bonus + "&STRENGTH=" + strengthCalculator.Total + "&SPEED=" + speedCalculator.Total + "&ENDURANCE=" + enduranceCalculator.Total + "&JUNK=";
|
return "jumpingarena2.swf?BONUS=" + bonus + "&STRENGTH=" + strengthCalculator.Total + "&SPEED=" + speedCalculator.Total + "&ENDURANCE=" + enduranceCalculator.Total + "&JUNK=";
|
||||||
case "CONFORMATION":
|
case "CONFORMATION":
|
||||||
int baseScore = conformationCalculator.Total + ((entry.EnteredHorse.BasicStats.Groom > 750) ? 1000 : 500);
|
int baseScore = conformationCalculator.Total + ((entry.EnteredHorse.BasicStats.Groom > 750) ? 1000 : 500);
|
||||||
int pos = GetUserPos(entry.EnteredUser);
|
|
||||||
string swf = "dressagearena.swf?BASESCORE=" + baseScore;
|
string swf = "dressagearena.swf?BASESCORE=" + baseScore;
|
||||||
int i = 1;
|
int i = 1;
|
||||||
foreach (ArenaEntry ent in Entries.ToArray())
|
foreach (ArenaEntry ent in Entries.ToArray())
|
||||||
|
{
|
||||||
swf += "&HN" + i.ToString() + "=" + ent.EnteredUser.Username;
|
swf += "&HN" + i.ToString() + "=" + ent.EnteredUser.Username;
|
||||||
swf += "&POS="+pos+"&JUNK=";
|
if (ent.EnteredUser.Id == entry.EnteredUser.Id)
|
||||||
|
swf += "&POS=" + i.ToString();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
swf += "&JUNK=";
|
||||||
return swf;
|
return swf;
|
||||||
case "DRAFT":
|
case "DRAFT":
|
||||||
int draftAbility = Convert.ToInt32(Math.Round((((double)entry.EnteredHorse.BasicStats.Health * 2.0 + (double)entry.EnteredHorse.BasicStats.Shoes * 2.0) + (double)entry.EnteredHorse.BasicStats.Hunger + (double)entry.EnteredHorse.BasicStats.Thirst) / 6.0 + (double)strengthCalculator.Total + ((double)enduranceCalculator.Total / 2.0)));
|
int draftAbility = Convert.ToInt32(Math.Round((((double)entry.EnteredHorse.BasicStats.Health * 2.0 + (double)entry.EnteredHorse.BasicStats.Shoes * 2.0) + (double)entry.EnteredHorse.BasicStats.Hunger + (double)entry.EnteredHorse.BasicStats.Thirst) / 6.0 + (double)strengthCalculator.Total + ((double)enduranceCalculator.Total / 2.0)));
|
||||||
pos = GetUserPos(entry.EnteredUser);
|
|
||||||
swf = "draftarena.swf?DRAFTABILITY=" + draftAbility;
|
swf = "draftarena.swf?DRAFTABILITY=" + draftAbility;
|
||||||
i = 1;
|
i = 1;
|
||||||
foreach (ArenaEntry ent in Entries.ToArray())
|
foreach (ArenaEntry ent in Entries.ToArray())
|
||||||
|
{
|
||||||
swf += "&HN" + i.ToString() + "=" + ent.EnteredUser.Username;
|
swf += "&HN" + i.ToString() + "=" + ent.EnteredUser.Username;
|
||||||
swf += "&POS="+pos+"&J=";
|
if (ent.EnteredUser.Id == entry.EnteredUser.Id)
|
||||||
|
swf += "&POS=" + i.ToString();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
swf += "&J=";
|
||||||
return swf;
|
return swf;
|
||||||
case "RACING":
|
case "RACING":
|
||||||
int baseSpeed = Convert.ToInt32(Math.Round((((double)entry.EnteredHorse.BasicStats.Health * 2.0 + (double)entry.EnteredHorse.BasicStats.Shoes * 2.0) + (double)entry.EnteredHorse.BasicStats.Hunger + (double)entry.EnteredHorse.BasicStats.Thirst) / 6.0 + (double)speedCalculator.Total));
|
int baseSpeed = Convert.ToInt32(Math.Round((((double)entry.EnteredHorse.BasicStats.Health * 2.0 + (double)entry.EnteredHorse.BasicStats.Shoes * 2.0) + (double)entry.EnteredHorse.BasicStats.Hunger + (double)entry.EnteredHorse.BasicStats.Thirst) / 6.0 + (double)speedCalculator.Total));
|
||||||
pos = GetUserPos(entry.EnteredUser);
|
|
||||||
swf = "racingarena.swf?BASESPEED=" + baseSpeed + "&ENDURANCE=" + enduranceCalculator.Total;
|
swf = "racingarena.swf?BASESPEED=" + baseSpeed + "&ENDURANCE=" + enduranceCalculator.Total;
|
||||||
i = 1;
|
i = 1;
|
||||||
foreach (ArenaEntry ent in Entries.ToArray())
|
foreach (ArenaEntry ent in Entries.ToArray())
|
||||||
|
{
|
||||||
swf += "&HN" + i.ToString() + "=" + ent.EnteredUser.Username;
|
swf += "&HN" + i.ToString() + "=" + ent.EnteredUser.Username;
|
||||||
swf += "&POS=" + pos + "&JUNK=";
|
if (ent.EnteredUser.Id == entry.EnteredUser.Id)
|
||||||
|
swf += "&POS=" + i.ToString();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
swf += "&JUNK=";
|
||||||
return swf;
|
return swf;
|
||||||
default:
|
default:
|
||||||
return "test.swf";
|
return "test.swf";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
public int GetUserPos(User user)
|
|
||||||
{
|
|
||||||
int pos = 0;
|
|
||||||
foreach (ArenaEntry entry in Entries.ToArray())
|
|
||||||
{
|
|
||||||
pos++;
|
|
||||||
if (entry.EnteredUser.Id != user.Id)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
if(Entries.Count <= 0)
|
if(Entries.Count <= 0)
|
||||||
|
@ -183,6 +180,7 @@ namespace HISP.Game
|
||||||
}
|
}
|
||||||
byte[] startingUpEventPacket = PacketBuilder.CreateChat(message, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
byte[] startingUpEventPacket = PacketBuilder.CreateChat(message, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||||
byte[] swfModulePacket = PacketBuilder.CreateSwfModulePacket(swf, PacketBuilder.PACKET_SWF_CUTSCENE);
|
byte[] swfModulePacket = PacketBuilder.CreateSwfModulePacket(swf, PacketBuilder.PACKET_SWF_CUTSCENE);
|
||||||
|
Logger.DebugPrint(entry.EnteredUser.Username + " Loading swf: " + swf);
|
||||||
entry.EnteredUser.LoggedinClient.SendPacket(swfModulePacket);
|
entry.EnteredUser.LoggedinClient.SendPacket(swfModulePacket);
|
||||||
entry.EnteredUser.LoggedinClient.SendPacket(startingUpEventPacket);
|
entry.EnteredUser.LoggedinClient.SendPacket(startingUpEventPacket);
|
||||||
}
|
}
|
||||||
|
|
|
@ -333,7 +333,8 @@ namespace HISP.Server
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Logger.ErrorPrint("Exception occured: " + e.Message);
|
if(!(e is SocketException))
|
||||||
|
Logger.ErrorPrint("Exception occured: " + e.Message);
|
||||||
Disconnect();
|
Disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -944,70 +944,72 @@ namespace HISP.Server
|
||||||
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
|
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
|
||||||
{
|
{
|
||||||
HorseInstance horseInstance = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
|
HorseInstance horseInstance = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
|
||||||
World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y);
|
if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y))
|
||||||
if (tile.Code.StartsWith("ARENA-"))
|
|
||||||
{
|
{
|
||||||
string[] arenaInfo = tile.Code.Split('-');
|
World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y);
|
||||||
int arenaId = int.Parse(arenaInfo[1]);
|
if (tile.Code.StartsWith("ARENA-"))
|
||||||
Arena arena = Arena.GetAreaById(arenaId);
|
|
||||||
if(!Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))
|
|
||||||
{
|
{
|
||||||
if(horseInstance.BasicStats.Thirst <= 300)
|
string[] arenaInfo = tile.Code.Split('-');
|
||||||
|
int arenaId = int.Parse(arenaInfo[1]);
|
||||||
|
Arena arena = Arena.GetAreaById(arenaId);
|
||||||
|
if (!Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))
|
||||||
{
|
{
|
||||||
byte[] tooThirsty = PacketBuilder.CreateChat(Messages.ArenaTooThirsty, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
if (horseInstance.BasicStats.Thirst <= 300)
|
||||||
sender.SendPacket(tooThirsty);
|
{
|
||||||
break;
|
byte[] tooThirsty = PacketBuilder.CreateChat(Messages.ArenaTooThirsty, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||||
}
|
sender.SendPacket(tooThirsty);
|
||||||
else if (horseInstance.BasicStats.Hunger <= 300)
|
break;
|
||||||
{
|
}
|
||||||
byte[] tooHungry = PacketBuilder.CreateChat(Messages.ArenaTooHungry, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
else if (horseInstance.BasicStats.Hunger <= 300)
|
||||||
sender.SendPacket(tooHungry);
|
{
|
||||||
break;
|
byte[] tooHungry = PacketBuilder.CreateChat(Messages.ArenaTooHungry, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||||
}
|
sender.SendPacket(tooHungry);
|
||||||
else if (horseInstance.BasicStats.Shoes <= 300)
|
break;
|
||||||
{
|
}
|
||||||
byte[] needsFarrier = PacketBuilder.CreateChat(Messages.ArenaNeedsFarrier, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
else if (horseInstance.BasicStats.Shoes <= 300)
|
||||||
sender.SendPacket(needsFarrier);
|
{
|
||||||
break;
|
byte[] needsFarrier = PacketBuilder.CreateChat(Messages.ArenaNeedsFarrier, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||||
}
|
sender.SendPacket(needsFarrier);
|
||||||
else if (horseInstance.BasicStats.Tiredness <= 300)
|
break;
|
||||||
{
|
}
|
||||||
byte[] tooTired = PacketBuilder.CreateChat(Messages.ArenaTooTired, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
else if (horseInstance.BasicStats.Tiredness <= 300)
|
||||||
sender.SendPacket(tooTired);
|
{
|
||||||
break;
|
byte[] tooTired = PacketBuilder.CreateChat(Messages.ArenaTooTired, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||||
}
|
sender.SendPacket(tooTired);
|
||||||
else if (horseInstance.BasicStats.Health <= 300)
|
break;
|
||||||
{
|
}
|
||||||
byte[] needsVet = PacketBuilder.CreateChat(Messages.ArenaNeedsVet, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
else if (horseInstance.BasicStats.Health <= 300)
|
||||||
sender.SendPacket(needsVet);
|
{
|
||||||
break;
|
byte[] needsVet = PacketBuilder.CreateChat(Messages.ArenaNeedsVet, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||||
}
|
sender.SendPacket(needsVet);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (sender.LoggedinUser.Money >= arena.EntryCost)
|
if (sender.LoggedinUser.Money >= arena.EntryCost)
|
||||||
{
|
{
|
||||||
arena.AddEntry(sender.LoggedinUser, horseInstance);
|
arena.AddEntry(sender.LoggedinUser, horseInstance);
|
||||||
sender.LoggedinUser.Money -= arena.EntryCost;
|
sender.LoggedinUser.Money -= arena.EntryCost;
|
||||||
|
|
||||||
byte[] enteredIntoCompetition = PacketBuilder.CreateChat(Messages.ArenaEnteredInto, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
byte[] enteredIntoCompetition = PacketBuilder.CreateChat(Messages.ArenaEnteredInto, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||||
sender.SendPacket(enteredIntoCompetition);
|
sender.SendPacket(enteredIntoCompetition);
|
||||||
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
|
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
byte[] cantAffordEntryFee = PacketBuilder.CreateChat(Messages.ArenaCantAfford, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||||
|
sender.SendPacket(cantAffordEntryFee);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
byte[] cantAffordEntryFee = PacketBuilder.CreateChat(Messages.ArenaCantAfford, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
byte[] allreadyEntered = PacketBuilder.CreateChat(Messages.ArenaAlreadyEntered, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||||
sender.SendPacket(cantAffordEntryFee);
|
sender.SendPacket(allreadyEntered);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
byte[] allreadyEntered = PacketBuilder.CreateChat(Messages.ArenaAlreadyEntered, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
|
||||||
sender.SendPacket(allreadyEntered);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2486,6 +2488,9 @@ namespace HISP.Server
|
||||||
|
|
||||||
if(Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))
|
if(Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))
|
||||||
{
|
{
|
||||||
|
byte[] waitingOnResults = PacketBuilder.CreateChat(Messages.FormatArenaYourScore(score), PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||||
|
sender.SendPacket(waitingOnResults);
|
||||||
|
|
||||||
Arena enteredArena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser);
|
Arena enteredArena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser);
|
||||||
enteredArena.SubmitScore(sender.LoggedinUser, score);
|
enteredArena.SubmitScore(sender.LoggedinUser, score);
|
||||||
}
|
}
|
||||||
|
@ -2888,6 +2893,21 @@ namespace HISP.Server
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case PacketBuilder.SWFMODULE_ARENA:
|
||||||
|
if (Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))
|
||||||
|
{
|
||||||
|
Arena arena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser);
|
||||||
|
byte[] response = PacketBuilder.CreateForwardedSwfRequest(packet);
|
||||||
|
foreach (Arena.ArenaEntry entry in arena.Entries.ToArray())
|
||||||
|
{
|
||||||
|
if (entry.EnteredUser.Id == sender.LoggedinUser.Id)
|
||||||
|
continue;
|
||||||
|
if(entry.EnteredUser.LoggedinClient.LoggedIn)
|
||||||
|
entry.EnteredUser.LoggedinClient.SendPacket(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Logger.DebugPrint("Unknown moduleid : " + module + " packet dump: " + BitConverter.ToString(packet).Replace("-"," "));
|
Logger.DebugPrint("Unknown moduleid : " + module + " packet dump: " + BitConverter.ToString(packet).Replace("-"," "));
|
||||||
|
|
|
@ -89,6 +89,7 @@ namespace HISP.Server
|
||||||
public const byte HORSE_ESCAPE = 0x1E;
|
public const byte HORSE_ESCAPE = 0x1E;
|
||||||
public const byte HORSE_CAUGHT = 0x1D;
|
public const byte HORSE_CAUGHT = 0x1D;
|
||||||
|
|
||||||
|
public const byte SWFMODULE_ARENA = 0x52;
|
||||||
public const byte SWFMODULE_BRICKPOET = 0x5A;
|
public const byte SWFMODULE_BRICKPOET = 0x5A;
|
||||||
public const byte SWFMODULE_DRAWINGROOM = 0x5B;
|
public const byte SWFMODULE_DRAWINGROOM = 0x5B;
|
||||||
|
|
||||||
|
@ -184,7 +185,17 @@ namespace HISP.Server
|
||||||
public const byte DIRECTION_TELEPORT = 4;
|
public const byte DIRECTION_TELEPORT = 4;
|
||||||
public const byte DIRECTION_NONE = 10;
|
public const byte DIRECTION_NONE = 10;
|
||||||
|
|
||||||
|
public static byte[] CreateForwardedSwfRequest(byte[] request)
|
||||||
|
{
|
||||||
|
MemoryStream ms = new MemoryStream();
|
||||||
|
ms.WriteByte(PacketBuilder.PACKET_SWFMODULE);
|
||||||
|
ms.Write(request, 0x2, request.Length - 0x4);
|
||||||
|
ms.WriteByte(PacketBuilder.PACKET_TERMINATOR);
|
||||||
|
ms.Seek(0x00, SeekOrigin.Begin);
|
||||||
|
byte[] response = ms.ToArray();
|
||||||
|
ms.Dispose();
|
||||||
|
return response;
|
||||||
|
}
|
||||||
public static byte[] CreateBirdMap(int playerX, int playerY)
|
public static byte[] CreateBirdMap(int playerX, int playerY)
|
||||||
{
|
{
|
||||||
MemoryStream ms = new MemoryStream();
|
MemoryStream ms = new MemoryStream();
|
||||||
|
@ -899,7 +910,6 @@ namespace HISP.Server
|
||||||
ms.Seek(0x00, SeekOrigin.Begin);
|
ms.Seek(0x00, SeekOrigin.Begin);
|
||||||
byte[] Packet = ms.ToArray();
|
byte[] Packet = ms.ToArray();
|
||||||
ms.Dispose();
|
ms.Dispose();
|
||||||
Logger.DebugPrint("Sending load "+(char)type + swf + " packet");
|
|
||||||
return Packet;
|
return Packet;
|
||||||
}
|
}
|
||||||
public static byte[] CreateAnnouncement(string announcement)
|
public static byte[] CreateAnnouncement(string announcement)
|
||||||
|
|
Loading…
Add table
Reference in a new issue