Add presents and fix bugs

This commit is contained in:
SilicaAndPina 2021-02-15 17:22:53 +13:00
parent d9cdd05acb
commit 0cf1665a11
12 changed files with 273 additions and 123 deletions

View file

@ -25,9 +25,9 @@ namespace HISP.Server
string BuddyTable = "CREATE TABLE BuddyList(Id INT, IdFriend INT, Pending BOOL)";
string WorldTable = "CREATE TABLE World(Time INT, Day INT, Year INT)";
string WeatherTable = "CREATE TABLE Weather(Area TEXT(1028), Weather TEXT(64))";
string InventoryTable = "CREATE TABLE Inventory(PlayerID INT, RandomID INT, ItemID INT)";
string InventoryTable = "CREATE TABLE Inventory(PlayerID INT, RandomID INT, ItemID INT, Data INT)";
string ShopInventory = "CREATE TABLE ShopInventory(ShopID INT, RandomID INT, ItemID INT)";
string DroppedItems = "CREATE TABLE DroppedItems(X INT, Y INT, RandomID INT, ItemID INT, DespawnTimer INT)";
string DroppedItems = "CREATE TABLE DroppedItems(X INT, Y INT, RandomID INT, ItemID INT, DespawnTimer INT, Data INT)";
string TrackedQuest = "CREATE TABLE TrackedQuest(playerId INT, questId INT, timesCompleted INT)";
string OnlineUsers = "CREATE TABLE OnlineUsers(playerId INT, Admin TEXT(3), Moderator TEXT(3), Subscribed TEXT(3))";
string CompetitionGear = "CREATE TABLE CompetitionGear(playerId INT, headItem INT, bodyItem INT, legItem INT, feetItem INT)";
@ -3455,7 +3455,7 @@ namespace HISP.Server
db.Open();
MySqlCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = "SELECT ItemId,RandomId FROM Inventory WHERE PlayerId=@playerId";
sqlCommand.CommandText = "SELECT ItemId,RandomId,Data FROM Inventory WHERE PlayerId=@playerId";
sqlCommand.Parameters.AddWithValue("@playerId", playerId);
sqlCommand.Prepare();
MySqlDataReader reader = sqlCommand.ExecuteReader();
@ -3463,7 +3463,7 @@ namespace HISP.Server
while (reader.Read())
{
instances.Add(new ItemInstance(reader.GetInt32(0), reader.GetInt32(1)));
instances.Add(new ItemInstance(reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2)));
}
sqlCommand.Dispose();
return instances;
@ -3477,10 +3477,11 @@ namespace HISP.Server
db.Open();
MySqlCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = "INSERT INTO Inventory VALUES(@playerId,@randomId,@itemId)";
sqlCommand.CommandText = "INSERT INTO Inventory VALUES(@playerId,@randomId,@itemId, @data)";
sqlCommand.Parameters.AddWithValue("@playerId", playerId);
sqlCommand.Parameters.AddWithValue("@randomId", instance.RandomId);
sqlCommand.Parameters.AddWithValue("@itemId", instance.ItemId);
sqlCommand.Parameters.AddWithValue("@data", instance.Data);
sqlCommand.Prepare();
sqlCommand.ExecuteNonQuery();
sqlCommand.Dispose();
@ -3738,6 +3739,7 @@ namespace HISP.Server
droppedItem.X = reader.GetInt32(0);
droppedItem.Y = reader.GetInt32(1);
droppedItem.DespawnTimer = reader.GetInt32(4);
droppedItem.Data = reader.GetInt32(5);
itemList.Add(droppedItem);
}
sqlCommand.Dispose();
@ -3768,12 +3770,13 @@ namespace HISP.Server
MySqlCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = "INSERT INTO DroppedItems VALUES(@x, @y, @randomId, @itemId, @despawnTimer)";
sqlCommand.CommandText = "INSERT INTO DroppedItems VALUES(@x, @y, @randomId, @itemId, @despawnTimer, @data)";
sqlCommand.Parameters.AddWithValue("@x", item.X);
sqlCommand.Parameters.AddWithValue("@y", item.Y);
sqlCommand.Parameters.AddWithValue("@randomId", item.Instance.RandomId);
sqlCommand.Parameters.AddWithValue("@itemId", item.Instance.ItemId);
sqlCommand.Parameters.AddWithValue("@despawnTimer", item.DespawnTimer);
sqlCommand.Parameters.AddWithValue("@data", item.Data);
sqlCommand.Prepare();
sqlCommand.ExecuteNonQuery();
sqlCommand.Dispose();

View file

@ -519,7 +519,7 @@ namespace HISP.Server
int price = gameData.horses.pawneer_base_price[i].price;
Pawneer pawneerPricing = new Pawneer(id, price);
Pawneer.PawneerPriceModels.Add(pawneerPricing);
Logger.DebugPrint("Registered Pawneer Base Price " + pawneerPricing.BreedId + " for $" + pawneerPricing.BasePrice.ToString("N0"));
Logger.DebugPrint("Registered Pawneer Base Price " + pawneerPricing.BreedId + " for $" + pawneerPricing.BasePrice.ToString("N0", CultureInfo.InvariantCulture));
}
int totalCategories = gameData.horses.categorys.Count;
@ -924,6 +924,15 @@ namespace HISP.Server
Messages.FarrierPutOnSteelShoesAllMesssageFormat = gameData.messages.meta.farrier.put_on_steel_all;
Messages.FarrierShoesCantAffordMessage = gameData.messages.meta.farrier.cant_afford_farrier;
// Santa
Messages.SantaHiddenText = gameData.messages.meta.santa.hidden_text;
Messages.SantaWrapItemFormat = gameData.messages.meta.santa.wrap_format;
Messages.SantaWrappedObjectMessage = gameData.messages.meta.santa.wrapped_object;
Messages.SantaCantWrapInvFull = gameData.messages.meta.santa.wrap_fail_inv_full;
Messages.SantaItemOpenedFormat = gameData.messages.meta.santa.open_format;
Messages.SantaItemCantOpenInvFull = gameData.messages.meta.santa.open_format;
// Pawneer
Messages.PawneerUntackedHorsesICanBuy = gameData.messages.meta.pawneer.untacked_i_can_buy;
Messages.PawneerHorseFormat = gameData.messages.meta.pawneer.pawn_horse;
@ -1402,6 +1411,7 @@ namespace HISP.Server
Messages.ItemThrowButton = gameData.messages.meta.inventory.item_throw_button;
Messages.ItemConsumeButton = gameData.messages.meta.inventory.item_consume_button;
Messages.ItemUseButton = gameData.messages.meta.inventory.item_use_button;
Messages.ItemOpenButton = gameData.messages.meta.inventory.item_open_button;
Messages.ItemWearButton = gameData.messages.meta.inventory.item_wear_button;
Messages.ItemReadButton = gameData.messages.meta.inventory.item_read_button;

View file

@ -87,14 +87,14 @@ namespace HISP.Server
if (!client.LoggedinUser.MetaPriority)
UpdateArea(client);
Treasure.AddValue();
Database.IncPlayerTirednessForOfflineUsers();
if (totalMinutesElapsed % 5 == 0)
{
Treasure.AddValue();
DroppedItems.DespawnItems();
DroppedItems.GenerateItems(false);
DroppedItems.GenerateItems();
}
WildHorse.Update();
@ -2344,6 +2344,7 @@ namespace HISP.Server
{
room.Drawing += drawingToAdd;
Database.SetLastPlayer("D" + room.Id.ToString(), sender.LoggedinUser.Id);
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
}
else
{
@ -2399,6 +2400,7 @@ namespace HISP.Server
{
room.Drawing += drawing;
Database.SetLastPlayer("D" + room.Id.ToString(), sender.LoggedinUser.Id);
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
}
else
{
@ -2501,7 +2503,7 @@ namespace HISP.Server
if (Database.GetLastPlayer("P" + roomId) != sender.LoggedinUser.Id)
{
Database.SetLastPlayer("P" + roomId, sender.LoggedinUser.Id);
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y);
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
}
break;
@ -3226,10 +3228,9 @@ namespace HISP.Server
return;
}
loggedInUser.Facing = direction + (onHorse * 5);
if (loggedInUser.Y != newY || loggedInUser.X != newX)
{
loggedInUser.Facing = direction + (onHorse * 5);
if (moveTwo)
direction += 20;
loggedInUser.Y = newY;
@ -4145,6 +4146,76 @@ namespace HISP.Server
sender.SendPacket(itemRemovedMessage);
}
break;
case PacketBuilder.ITEM_WRAP:
packetStr = Encoding.UTF8.GetString(packet);
randomIdStr = packetStr.Substring(2, packet.Length - 2);
randomId = 0;
try
{
randomId = Int32.Parse(randomIdStr);
}
catch (FormatException)
{
Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet.");
return;
}
if (sender.LoggedinUser.Inventory.HasItem(randomId))
{
ItemInstance curItem = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId).ItemInstances[0];
ItemInstance wrappedItem = new ItemInstance(Item.Present, -1, curItem.ItemId);
try
{
sender.LoggedinUser.Inventory.Add(wrappedItem);
sender.LoggedinUser.Inventory.Remove(curItem);
}
catch(InventoryException)
{
byte[] cantWrapPresent = PacketBuilder.CreateChat(Messages.SantaCantWrapInvFull, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(cantWrapPresent);
UpdateArea(sender);
break;
}
}
byte[] wrappedObjectMessage = PacketBuilder.CreateChat(Messages.SantaWrappedObjectMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(wrappedObjectMessage);
UpdateArea(sender);
break;
case PacketBuilder.ITEM_OPEN:
packetStr = Encoding.UTF8.GetString(packet);
randomIdStr = packetStr.Substring(2, packet.Length - 2);
randomId = 0;
try
{
randomId = Int32.Parse(randomIdStr);
}
catch (FormatException)
{
Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet.");
return;
}
if (sender.LoggedinUser.Inventory.HasItem(randomId))
{
InventoryItem item = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId);
int newItem = item.ItemInstances[0].Data;
try
{
sender.LoggedinUser.Inventory.Add(new ItemInstance(newItem));
sender.LoggedinUser.Inventory.Remove(item.ItemInstances[0]);
}
catch(InventoryException)
{
byte[] cantOpenInvFull = PacketBuilder.CreateChat(Messages.SantaItemCantOpenInvFull, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(cantOpenInvFull);
break;
}
byte[] itemOpened = PacketBuilder.CreateChat(Messages.FormatSantaOpenPresent(Item.GetItemById(newItem).Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(itemOpened);
UpdateInventory(sender);
}
break;
case PacketBuilder.ITEM_USE:
packetStr = Encoding.UTF8.GetString(packet);

View file

@ -1,4 +1,5 @@
using System;
using System.Globalization;
using System.IO;
using System.Text;
using HISP.Game;
@ -149,7 +150,9 @@ namespace HISP.Server
public const byte ITEM_BUY_5 = 0x35;
public const byte ITEM_BUY_25 = 0x37;
public const byte ITEM_SELL = 0x3C;
public const byte ITEM_WRAP = 0x17;
public const byte ITEM_SELL_ALL = 0x3D;
public const byte ITEM_OPEN = 0x16;
public const byte ITEM_WEAR = 0x46;
public const byte ITEM_REMOVE = 0x47;
public const byte ITEM_CONSUME = 0x51;
@ -813,9 +816,9 @@ namespace HISP.Server
public static byte[] CreatePlayerData(int money, int playerCount, int mail)
{
byte[] moneyStrBytes = Encoding.UTF8.GetBytes(money.ToString("N0"));
byte[] playerStrBytes = Encoding.UTF8.GetBytes(playerCount.ToString("N0"));
byte[] mailStrBytes = Encoding.UTF8.GetBytes(mail.ToString("N0"));
byte[] moneyStrBytes = Encoding.UTF8.GetBytes(money.ToString("N0", CultureInfo.InvariantCulture));
byte[] playerStrBytes = Encoding.UTF8.GetBytes(playerCount.ToString("N0", CultureInfo.InvariantCulture));
byte[] mailStrBytes = Encoding.UTF8.GetBytes(mail.ToString("N0", CultureInfo.InvariantCulture));
MemoryStream ms = new MemoryStream();
ms.WriteByte(PACKET_BASE_STATS);