This commit is contained in:
SilicaAndPina 2021-02-06 12:04:35 +13:00
parent 7216ade563
commit 5e460923dc
8 changed files with 132 additions and 99 deletions

View file

@ -137,7 +137,7 @@ namespace HISP.Server
private bool receivePackets()
{
// HI1 Packets are terminates by 0x00 so we have to read until we receive that terminator
MemoryStream ms = new MemoryStream();
while(ClientSocket.Connected)
{
@ -146,29 +146,29 @@ namespace HISP.Server
try
{
if (ClientSocket.Available >= 1)
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = new byte[ClientSocket.Available];
ClientSocket.Receive(buffer);
foreach (Byte b in buffer)
if (ClientSocket.Available >= 1)
{
if(isDisconnecting)
break;
byte[] buffer = new byte[ClientSocket.Available];
ClientSocket.Receive(buffer);
ms.WriteByte(b);
if (b == 0x00)
foreach (Byte b in buffer)
{
ms.Seek(0x00, SeekOrigin.Begin);
byte[] fullPacket = ms.ToArray();
parsePackets(fullPacket);
if (isDisconnecting)
break;
ms.Close();
ms = new MemoryStream();
ms.WriteByte(b);
if (b == 0x00)
{
ms.Seek(0x00, SeekOrigin.Begin);
byte[] fullPacket = ms.ToArray();
parsePackets(fullPacket);
ms.Seek(0x00, SeekOrigin.Begin);
ms.SetLength(0);
}
}
}
}
}
catch(SocketException e)

View file

@ -1064,6 +1064,7 @@ namespace HISP.Server
Messages.InvalidSecCodeError = gameData.messages.sec_code.invalid_sec_code;
Messages.YouEarnedAnItemFormat = gameData.messages.sec_code.item_earned;
Messages.YouEarnedAnItemButInventoryWasFullFormat = gameData.messages.sec_code.item_earned_full_inv;
Messages.YouLostAnItemFormat = gameData.messages.sec_code.item_deleted;
Messages.YouEarnedMoneyFormat = gameData.messages.sec_code.money_earned;
Messages.BeatHighscoreFormat = gameData.messages.sec_code.highscore_beaten;

View file

@ -2296,9 +2296,19 @@ namespace HISP.Server
if (Item.ItemIdExist(value))
{
ItemInstance itm = new ItemInstance(value);
sender.LoggedinUser.Inventory.Add(itm);
Item.ItemInformation itemInfo = Item.GetItemById(value);
byte[] earnedItemMessage = PacketBuilder.CreateChat(Messages.FormatYouEarnedAnItemMessage(itemInfo.Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
string messageToSend = Messages.FormatYouEarnedAnItemMessage(itemInfo.Name);
try
{
sender.LoggedinUser.Inventory.Add(itm);
}
catch(InventoryException)
{
messageToSend = Messages.FormatYouEarnedAnItemButInventoryFullMessage(itemInfo.Name);
}
byte[] earnedItemMessage = PacketBuilder.CreateChat(messageToSend, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(earnedItemMessage);
}
else