mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-21 20:25:51 +12:00
Add ranches.
This commit is contained in:
parent
2e713f4fd5
commit
9f592fb51b
14 changed files with 918 additions and 159 deletions
|
@ -3208,6 +3208,22 @@ namespace HISP.Server
|
|||
return subscribedUntil;
|
||||
}
|
||||
}
|
||||
public static bool IsUserAdmin(int playerId)
|
||||
{
|
||||
using (MySqlConnection db = new MySqlConnection(ConnectionString))
|
||||
{
|
||||
db.Open();
|
||||
MySqlCommand sqlCommand = db.CreateCommand();
|
||||
|
||||
sqlCommand.CommandText = "SELECT Admin FROM Users WHERE Id=@playerId";
|
||||
sqlCommand.Parameters.AddWithValue("@playerId", playerId);
|
||||
sqlCommand.Prepare();
|
||||
bool admin = sqlCommand.ExecuteScalar().ToString() == "YES";
|
||||
sqlCommand.Dispose();
|
||||
|
||||
return admin;
|
||||
}
|
||||
}
|
||||
public static bool IsUserSubscribed(int playerId)
|
||||
{
|
||||
using (MySqlConnection db = new MySqlConnection(ConnectionString))
|
||||
|
@ -3365,6 +3381,21 @@ namespace HISP.Server
|
|||
}
|
||||
}
|
||||
|
||||
public static void RemoveAllItemTypesFromPlayerInventory(int playerId, int itemId)
|
||||
{
|
||||
using (MySqlConnection db = new MySqlConnection(ConnectionString))
|
||||
{
|
||||
db.Open();
|
||||
MySqlCommand sqlCommand = db.CreateCommand();
|
||||
|
||||
sqlCommand.CommandText = "DELETE FROM Inventory WHERE (PlayerId=@playerId AND ItemID=@itemId)";
|
||||
sqlCommand.Parameters.AddWithValue("@playerId", playerId);
|
||||
sqlCommand.Parameters.AddWithValue("@itemId", itemId);
|
||||
sqlCommand.Prepare();
|
||||
sqlCommand.ExecuteNonQuery();
|
||||
sqlCommand.Dispose();
|
||||
}
|
||||
}
|
||||
public static void RemoveItemFromInventory(int playerId, ItemInstance instance)
|
||||
{
|
||||
using (MySqlConnection db = new MySqlConnection(ConnectionString))
|
||||
|
|
|
@ -292,6 +292,9 @@ namespace HISP.Server
|
|||
case PacketBuilder.PACKET_WISH:
|
||||
GameServer.OnWish(this, Packet);
|
||||
break;
|
||||
case PacketBuilder.PACKET_RANCH:
|
||||
GameServer.OnRanchPacket(this, Packet);
|
||||
break;
|
||||
default:
|
||||
Logger.ErrorPrint("Unimplemented Packet: " + BitConverter.ToString(Packet).Replace('-', ' '));
|
||||
break;
|
||||
|
|
|
@ -575,19 +575,6 @@ namespace HISP.Server
|
|||
Workshop.Workshops.Add(wkShop);
|
||||
Logger.DebugPrint("Registered Workshop at X: " + wkShop.X + " Y: " + wkShop.Y);
|
||||
|
||||
}
|
||||
// Register Ranches
|
||||
int totalRanchLocations = gameData.ranch.ranch_locations.Count;
|
||||
for (int i = 0; i < totalRanchLocations; i++)
|
||||
{
|
||||
int x = gameData.ranch.ranch_locations[i].x;
|
||||
int y = gameData.ranch.ranch_locations[i].y;
|
||||
int id = gameData.ranch.ranch_locations[i].id;
|
||||
int value = gameData.ranch.ranch_locations[i].value;
|
||||
Ranch ranch = new Ranch(x, y, id, value);
|
||||
Ranch.Ranches.Add(ranch);
|
||||
Logger.DebugPrint("Registered Ranch at X: " + ranch.X + " Y: " + ranch.Y);
|
||||
|
||||
}
|
||||
// Register Ranch Buildings
|
||||
int totalRanchBuildings = gameData.ranch.ranch_buildings.buildings.Count;
|
||||
|
@ -630,6 +617,19 @@ namespace HISP.Server
|
|||
Ranch.RanchUpgrade.RanchUpgrades.Add(upgrade);
|
||||
Logger.DebugPrint("Registered Ranch Upgrade: " + upgrade.Title);
|
||||
|
||||
}
|
||||
// Register Ranches
|
||||
int totalRanchLocations = gameData.ranch.ranch_locations.Count;
|
||||
for (int i = 0; i < totalRanchLocations; i++)
|
||||
{
|
||||
int x = gameData.ranch.ranch_locations[i].x;
|
||||
int y = gameData.ranch.ranch_locations[i].y;
|
||||
int id = gameData.ranch.ranch_locations[i].id;
|
||||
int value = gameData.ranch.ranch_locations[i].value;
|
||||
Ranch ranch = new Ranch(x, y, id, value);
|
||||
Ranch.Ranches.Add(ranch);
|
||||
Logger.DebugPrint("Registered Ranch id " + id + " at X: " + ranch.X + " Y: " + ranch.Y);
|
||||
|
||||
}
|
||||
// Register Riddles
|
||||
int totalRiddles = gameData.riddle_room.Count;
|
||||
|
@ -670,7 +670,8 @@ namespace HISP.Server
|
|||
Messages.RanchUnownedRanchFormat = gameData.messages.meta.ranch.unowned_ranch;
|
||||
Messages.RanchYouCouldPurchaseThisRanch = gameData.messages.meta.ranch.you_could_purchase_this;
|
||||
Messages.RanchYouAllreadyOwnARanch = gameData.messages.meta.ranch.ranch_already_owned;
|
||||
|
||||
Messages.RanchSubscribersOnly = gameData.messages.meta.ranch.sub_only;
|
||||
Messages.RanchDescriptionOthersFormat = gameData.meta.ranch.ranch_desc_others;
|
||||
Messages.RanchUnownedRanchClicked = gameData.messages.meta.ranch.unowned_ranch_click;
|
||||
Messages.RanchClickMessageFormat = gameData.messages.meta.ranch.click_message;
|
||||
|
||||
|
@ -682,8 +683,11 @@ namespace HISP.Server
|
|||
Messages.RanchSavedRanchDescripton = gameData.messages.meta.ranch.saved_ranch;
|
||||
Messages.RanchDefaultRanchTitle = gameData.messages.meta.ranch.default_title;
|
||||
Messages.RanchEditDescriptionMetaFormat = gameData.messages.meta.ranch.edit_description;
|
||||
Messages.RanchYourRanchMetaFormat = gameData.messages.meta.ranch.your_ranch_meta;
|
||||
Messages.RanchDescriptionFormat = gameData.messages.meta.ranch.view_desc;
|
||||
Messages.RanchTitleFormat = gameData.messages.meta.ranch.your_ranch_meta;
|
||||
Messages.RanchYourDescriptionFormat = gameData.messages.meta.ranch.view_desc;
|
||||
|
||||
Messages.RanchSellAreYouSure = gameData.messages.meta.ranch.sell_confirm;
|
||||
Messages.RanchSoldFormat = gameData.messages.meta.ranch.sell_done;
|
||||
|
||||
// Ranch : Breed
|
||||
|
||||
|
@ -1306,10 +1310,6 @@ namespace HISP.Server
|
|||
GameServer.IdleWarning = gameData.messages.disconnect.client_timeout.warn_after;
|
||||
GameServer.IdleTimeout = gameData.messages.disconnect.client_timeout.kick_after;
|
||||
|
||||
// Inventory
|
||||
|
||||
Messages.DefaultInventoryMax = gameData.item.max_carryable;
|
||||
|
||||
// Competition Gear
|
||||
|
||||
Messages.EquipCompetitionGearFormat = gameData.messages.equips.equip_competition_gear_format;
|
||||
|
|
|
@ -1166,7 +1166,25 @@ namespace HISP.Server
|
|||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 11: // Ranch Description Edit
|
||||
if (dynamicInput.Length >= 2)
|
||||
{
|
||||
string title = dynamicInput[1];
|
||||
string desc = dynamicInput[2];
|
||||
if(sender.LoggedinUser.OwnedRanch != null)
|
||||
{
|
||||
sender.LoggedinUser.OwnedRanch.Title = title;
|
||||
sender.LoggedinUser.OwnedRanch.Description = desc;
|
||||
}
|
||||
byte[] descriptionEditedMessage = PacketBuilder.CreateChat(Messages.RanchSavedRanchDescripton, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(descriptionEditedMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (ranch description, wrong size)");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 12: // Abuse Report
|
||||
if (dynamicInput.Length >= 2)
|
||||
{
|
||||
|
@ -1386,6 +1404,14 @@ namespace HISP.Server
|
|||
metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildAwardList(sender.LoggedinUser));
|
||||
sender.SendPacket(metaPacket);
|
||||
break;
|
||||
case "27": // Ranch Edit
|
||||
if(sender.LoggedinUser.OwnedRanch != null)
|
||||
{
|
||||
sender.LoggedinUser.MetaPriority = true;
|
||||
metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildRanchEdit(sender.LoggedinUser.OwnedRanch));
|
||||
sender.SendPacket(metaPacket);
|
||||
}
|
||||
break;
|
||||
case "35": // Buddy List
|
||||
sender.LoggedinUser.MetaPriority = true;
|
||||
metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildBuddyList(sender.LoggedinUser));
|
||||
|
@ -1440,6 +1466,11 @@ namespace HISP.Server
|
|||
metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMiscStats(sender.LoggedinUser));
|
||||
sender.SendPacket(metaPacket);
|
||||
break;
|
||||
case "60": // Ranch Sell
|
||||
sender.LoggedinUser.MetaPriority = true;
|
||||
metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildRanchSellConfirmation());
|
||||
sender.SendPacket(metaPacket);
|
||||
break;
|
||||
case "28c1": // Abuse Report
|
||||
sender.LoggedinUser.MetaPriority = true;
|
||||
metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildAbuseReportPage());
|
||||
|
@ -2107,8 +2138,6 @@ namespace HISP.Server
|
|||
{
|
||||
sender.LoggedinUser.MetaPriority = true;
|
||||
string profilePage = sender.LoggedinUser.ProfilePage;
|
||||
profilePage = profilePage.Replace("<", "[");
|
||||
profilePage = profilePage.Replace(">", "]");
|
||||
byte[] profilePacket = PacketBuilder.CreateProfilePacket(profilePage);
|
||||
sender.SendPacket(profilePacket);
|
||||
}
|
||||
|
@ -2889,6 +2918,346 @@ namespace HISP.Server
|
|||
}
|
||||
|
||||
|
||||
}
|
||||
public static void OnRanchPacket(GameClient sender, byte[] packet)
|
||||
{
|
||||
if (!sender.LoggedIn)
|
||||
{
|
||||
Logger.ErrorPrint(sender.RemoteIp + " Sent ranch packet when not logged in.");
|
||||
return;
|
||||
}
|
||||
if (packet.Length < 4)
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid ranch packet.");
|
||||
return;
|
||||
}
|
||||
string packetStr = Encoding.UTF8.GetString(packet);
|
||||
byte method = packet[1];
|
||||
|
||||
if (method == PacketBuilder.RANCH_INFO)
|
||||
{
|
||||
string buildingIdStr = packetStr.Substring(2, packetStr.Length - 4);
|
||||
int buildingId = 0;
|
||||
try
|
||||
{
|
||||
buildingId = int.Parse(buildingIdStr);
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id NaN");
|
||||
return;
|
||||
}
|
||||
if (Ranch.RanchBuilding.RanchBuildingExists(buildingId))
|
||||
{
|
||||
Ranch.RanchBuilding building = Ranch.RanchBuilding.GetRanchBuildingById(buildingId);
|
||||
|
||||
byte[] ranchBuild = PacketBuilder.CreateChat(Messages.FormatBuildingInformaton(building.Title, building.Description), PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(ranchBuild);
|
||||
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id that didnt exist.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (method == PacketBuilder.RANCH_SELL)
|
||||
{
|
||||
string NanSTR = packetStr.Substring(2, packetStr.Length - 4);
|
||||
if (NanSTR == "NaN")
|
||||
{
|
||||
if (sender.LoggedinUser.OwnedRanch == null)
|
||||
{
|
||||
Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to sell there ranch when they didnt own one.");
|
||||
return;
|
||||
}
|
||||
int sellPrice = sender.LoggedinUser.OwnedRanch.GetSellPrice();
|
||||
sender.LoggedinUser.Money += sellPrice;
|
||||
byte[] sellPacket = PacketBuilder.CreateChat(Messages.FormatRanchSoldMessage(sellPrice), PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.LoggedinUser.OwnedRanch.OwnerId = -1;
|
||||
sender.SendPacket(sellPacket);
|
||||
|
||||
// Change map sprite.
|
||||
User[] users = GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true);
|
||||
foreach (User user in users)
|
||||
{
|
||||
byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true);
|
||||
user.LoggedinClient.SendPacket(MovementPacket);
|
||||
}
|
||||
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to sell there ranch without sending NaN.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (method == PacketBuilder.RANCH_UPGRADE)
|
||||
{
|
||||
string NanSTR = packetStr.Substring(2, packetStr.Length - 4);
|
||||
if (NanSTR == "NaN")
|
||||
{
|
||||
if (sender.LoggedinUser.OwnedRanch != null)
|
||||
{
|
||||
Ranch.RanchUpgrade currentUpgrade = sender.LoggedinUser.OwnedRanch.GetRanchUpgrade();
|
||||
|
||||
if (!Ranch.RanchUpgrade.RanchUpgradeExists(currentUpgrade.Id + 1))
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to upgrade there ranch when it was max upgrade.");
|
||||
return;
|
||||
}
|
||||
|
||||
Ranch.RanchUpgrade nextUpgrade = Ranch.RanchUpgrade.GetRanchUpgradeById(currentUpgrade.Id + 1);
|
||||
if (sender.LoggedinUser.Money >= nextUpgrade.Cost)
|
||||
{
|
||||
sender.LoggedinUser.Money -= nextUpgrade.Cost;
|
||||
sender.LoggedinUser.OwnedRanch.InvestedMoney += nextUpgrade.Cost;
|
||||
sender.LoggedinUser.OwnedRanch.UpgradedLevel++;
|
||||
|
||||
byte[] upgraded = PacketBuilder.CreateChat(Messages.UpgradedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(upgraded);
|
||||
|
||||
// Change map sprite.
|
||||
User[] users = GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true);
|
||||
foreach (User user in users)
|
||||
{
|
||||
byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true);
|
||||
user.LoggedinClient.SendPacket(MovementPacket);
|
||||
}
|
||||
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] cantAfford = PacketBuilder.CreateChat(Messages.UpgradeCannotAfford, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(cantAfford);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to upgrade there ranch when they didnt own one.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to upgrade there ranch without sending NaN.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (method == PacketBuilder.RANCH_REMOVE)
|
||||
{
|
||||
string buildingIdStr = packetStr.Substring(2, packetStr.Length - 4);
|
||||
int buildingId = 0;
|
||||
try
|
||||
{
|
||||
buildingId = int.Parse(buildingIdStr);
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id NaN");
|
||||
return;
|
||||
}
|
||||
if (Ranch.RanchBuilding.RanchBuildingExists(buildingId))
|
||||
{
|
||||
Ranch.RanchBuilding building = Ranch.RanchBuilding.GetRanchBuildingById(buildingId);
|
||||
int ranchBuild = sender.LoggedinUser.LastClickedRanchBuilding;
|
||||
if (ranchBuild == 0)
|
||||
return;
|
||||
if (sender.LoggedinUser.OwnedRanch != null)
|
||||
{
|
||||
if (ranchBuild > sender.LoggedinUser.OwnedRanch.GetRanchUpgrade().Limit)
|
||||
{
|
||||
Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to remove more buildings than the limit.");
|
||||
return;
|
||||
}
|
||||
Ranch.RanchBuilding ranchBuilding = sender.LoggedinUser.OwnedRanch.GetBuilding(ranchBuild - 1);
|
||||
if (ranchBuilding.Id == buildingId)
|
||||
{
|
||||
sender.LoggedinUser.OwnedRanch.SetBuilding(ranchBuild - 1, null);
|
||||
sender.LoggedinUser.Money += ranchBuilding.GetTeardownPrice();
|
||||
sender.LoggedinUser.OwnedRanch.InvestedMoney -= building.Cost;
|
||||
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatBuildingTornDown(ranchBuilding.GetTeardownPrice()), PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
|
||||
sender.SendPacket(chatPacket);
|
||||
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to remove bulidingid: " + buildingId + " from building slot " + ranchBuild + " but the building was not found there.");
|
||||
}
|
||||
|
||||
}
|
||||
Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to remove in a ranch when they dont own one.");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id that didnt exist.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (method == PacketBuilder.RANCH_BUILD)
|
||||
{
|
||||
string buildingIdStr = packetStr.Substring(2, packetStr.Length - 4);
|
||||
int buildingId = 0;
|
||||
try
|
||||
{
|
||||
buildingId = int.Parse(buildingIdStr);
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id NaN");
|
||||
return;
|
||||
}
|
||||
if (Ranch.RanchBuilding.RanchBuildingExists(buildingId))
|
||||
{
|
||||
Ranch.RanchBuilding building = Ranch.RanchBuilding.GetRanchBuildingById(buildingId);
|
||||
int ranchBuild = sender.LoggedinUser.LastClickedRanchBuilding;
|
||||
if (ranchBuild == 0)
|
||||
return;
|
||||
if (sender.LoggedinUser.OwnedRanch != null)
|
||||
{
|
||||
if (ranchBuild > sender.LoggedinUser.OwnedRanch.GetRanchUpgrade().Limit)
|
||||
{
|
||||
Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to build more buildings than the limit.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (sender.LoggedinUser.Money >= building.Cost)
|
||||
{
|
||||
sender.LoggedinUser.OwnedRanch.SetBuilding(ranchBuild - 1, building);
|
||||
sender.LoggedinUser.OwnedRanch.InvestedMoney += building.Cost;
|
||||
sender.LoggedinUser.Money -= building.Cost;
|
||||
byte[] chatPacket = PacketBuilder.CreateChat(Messages.RanchBuildingComplete, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(chatPacket);
|
||||
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
|
||||
return;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] chatPacket = PacketBuilder.CreateChat(Messages.RanchCantAffordThisBuilding, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(chatPacket);
|
||||
return;
|
||||
}
|
||||
}
|
||||
Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to build in a ranch when they dont own one.");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id that didnt exist.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (method == PacketBuilder.RANCH_BUY)
|
||||
{
|
||||
string nan = packetStr.Substring(2, packetStr.Length - 4);
|
||||
if (nan == "NaN")
|
||||
{
|
||||
if (Ranch.IsRanchHere(sender.LoggedinUser.X, sender.LoggedinUser.Y))
|
||||
{
|
||||
Ranch ranch = Ranch.GetRanchAt(sender.LoggedinUser.X, sender.LoggedinUser.Y);
|
||||
if (sender.LoggedinUser.Money >= ranch.Value)
|
||||
{
|
||||
byte[] broughtRanch = PacketBuilder.CreateChat(Messages.FormatRanchBroughtMessage(ranch.Value), PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(broughtRanch);
|
||||
sender.LoggedinUser.Money -= ranch.Value;
|
||||
ranch.OwnerId = sender.LoggedinUser.Id;
|
||||
ranch.InvestedMoney += ranch.Value;
|
||||
sender.LoggedinUser.OwnedRanch = ranch;
|
||||
sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(Item.DorothyShoes));
|
||||
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] cantAfford = PacketBuilder.CreateChat(Messages.RanchCantAffordRanch, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(cantAfford);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to buy a non existant ranch.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent RANCH_BUY without \"NaN\".");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (method == PacketBuilder.RANCH_CLICK)
|
||||
{
|
||||
if (packet.Length < 6)
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid ranch click packet.");
|
||||
return;
|
||||
}
|
||||
byte action = packet[2];
|
||||
if (action == PacketBuilder.RANCH_CLICK_BUILD)
|
||||
{
|
||||
if (Ranch.IsRanchHere(sender.LoggedinUser.X, sender.LoggedinUser.Y))
|
||||
{
|
||||
Ranch ranch = Ranch.GetRanchAt(sender.LoggedinUser.X, sender.LoggedinUser.Y);
|
||||
if (sender.LoggedinUser.OwnedRanch != null)
|
||||
{
|
||||
if (sender.LoggedinUser.OwnedRanch.Id == ranch.Id)
|
||||
{
|
||||
int buildSlot = packet[3] - 40;
|
||||
sender.LoggedinUser.LastClickedRanchBuilding = buildSlot;
|
||||
|
||||
if (buildSlot == 0)
|
||||
{
|
||||
byte[] buildingsAvalible = PacketBuilder.CreateMetaPacket(Meta.BuildRanchUpgrade(ranch));
|
||||
sender.SendPacket(buildingsAvalible);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] buildingsAvalible = PacketBuilder.CreateMetaPacket(Meta.BuildRanchBuildingsAvalible(ranch, buildSlot));
|
||||
sender.SendPacket(buildingsAvalible);
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to build in a ranch they didnt own.");
|
||||
return;
|
||||
}
|
||||
else if (action == PacketBuilder.RANCH_CLICK_NORM)
|
||||
{
|
||||
if (Ranch.IsRanchHere(sender.LoggedinUser.X, sender.LoggedinUser.Y))
|
||||
{
|
||||
Ranch ranch = Ranch.GetRanchAt(sender.LoggedinUser.X, sender.LoggedinUser.Y);
|
||||
int buildSlot = packet[3] - 40;
|
||||
if (buildSlot == 0) // Main Building
|
||||
{
|
||||
byte[] upgradeDescription = PacketBuilder.CreateMetaPacket(Meta.BuildRanchBuilding(ranch, ranch.GetRanchUpgrade()));
|
||||
sender.SendPacket(upgradeDescription);
|
||||
}
|
||||
else // Other Building
|
||||
{
|
||||
byte[] buildingDescription = PacketBuilder.CreateMetaPacket(Meta.BuildRanchBuilding(ranch, ranch.GetBuilding(buildSlot - 1)));
|
||||
sender.SendPacket(buildingDescription);
|
||||
}
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " sent an Unknown ranch packet " + BitConverter.ToString(packet).Replace("-", " "));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " sent an Unknown ranch packet " + BitConverter.ToString(packet).Replace("-", " "));
|
||||
}
|
||||
}
|
||||
public static void OnChatPacket(GameClient sender, byte[] packet)
|
||||
{
|
||||
|
@ -3015,6 +3384,21 @@ namespace HISP.Server
|
|||
if (tile.Title != null)
|
||||
returnedMsg = tile.Title;
|
||||
}
|
||||
if(Ranch.IsRanchHere(x, y))
|
||||
{
|
||||
Ranch ranch = Ranch.GetRanchAt(x, y);
|
||||
if(ranch.OwnerId == -1)
|
||||
{
|
||||
returnedMsg = Messages.RanchUnownedRanchClicked;
|
||||
}
|
||||
else
|
||||
{
|
||||
string title = ranch.Title;
|
||||
if (title == null || title == "")
|
||||
title = Messages.RanchDefaultRanchTitle;
|
||||
returnedMsg = Messages.FormatRanchClickMessage(Database.GetUsername(ranch.OwnerId), title);
|
||||
}
|
||||
}
|
||||
|
||||
byte[] tileInfoPacket = PacketBuilder.CreateClickTileInfoPacket(returnedMsg);
|
||||
sender.SendPacket(tileInfoPacket);
|
||||
|
@ -3220,6 +3604,53 @@ namespace HISP.Server
|
|||
sender.SendPacket(itemRemovedMessage);
|
||||
}
|
||||
|
||||
break;
|
||||
case PacketBuilder.ITEM_USE:
|
||||
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 itm = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId);
|
||||
if(itm.ItemId == Item.DorothyShoes)
|
||||
{
|
||||
if(World.InIsle(sender.LoggedinUser.X, sender.LoggedinUser.Y))
|
||||
{
|
||||
World.Isle isle = World.GetIsle(sender.LoggedinUser.X, sender.LoggedinUser.Y);
|
||||
if(isle.Name == "Prison Isle")
|
||||
{
|
||||
byte[] dontWorkHere = PacketBuilder.CreateChat(Messages.RanchDorothyShoesPrisonIsleMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(dontWorkHere);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(sender.LoggedinUser.OwnedRanch == null) // How????
|
||||
{
|
||||
Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use Dorothy Shoes when they did *NOT* own a ranch.");
|
||||
sender.LoggedinUser.Inventory.Remove(itm.ItemInstances[0]);
|
||||
break;
|
||||
}
|
||||
byte[] noPlaceLIke127001 = PacketBuilder.CreateChat(Messages.RanchDorothyShoesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(noPlaceLIke127001);
|
||||
|
||||
sender.LoggedinUser.Teleport(sender.LoggedinUser.OwnedRanch.X, sender.LoggedinUser.OwnedRanch.Y);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + "Tried to use item with undefined action- ID: " + itm.ItemId);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PacketBuilder.ITEM_WEAR:
|
||||
packetStr = Encoding.UTF8.GetString(packet);
|
||||
|
@ -3772,7 +4203,7 @@ namespace HISP.Server
|
|||
}
|
||||
|
||||
}
|
||||
else if(sender.LoggedinUser.Inventory.Count + 1 > Messages.DefaultInventoryMax)
|
||||
else if(sender.LoggedinUser.Inventory.Count + 1 > sender.LoggedinUser.MaxItems)
|
||||
{
|
||||
goto showError;
|
||||
}
|
||||
|
@ -4372,13 +4803,13 @@ namespace HISP.Server
|
|||
|
||||
|
||||
}
|
||||
public static void UpdateAreaForAll(int x, int y)
|
||||
public static void UpdateAreaForAll(int x, int y, bool ignoreMetaPrio=false)
|
||||
{
|
||||
foreach(GameClient client in ConnectedClients)
|
||||
{
|
||||
if (client.LoggedIn)
|
||||
if (client.LoggedinUser.X == x && client.LoggedinUser.Y == y)
|
||||
if(!client.LoggedinUser.MetaPriority)
|
||||
if(!client.LoggedinUser.MetaPriority || ignoreMetaPrio)
|
||||
UpdateArea(client);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ namespace HISP.Server
|
|||
public const byte PACKET_USERINFO = 0x81;
|
||||
public const byte PACKET_WORLD = 0x7A;
|
||||
public const byte PACKET_BASE_STATS = 0x7B;
|
||||
public const byte PACKET_RANCH = 0x23;
|
||||
public const byte PACKET_SWF_CUTSCENE = 0x29;
|
||||
public const byte PACKET_SWF_MODULE_FORCE = 0x28;
|
||||
public const byte PACKET_SWF_MODULE_GENTLE = 0x2A;
|
||||
|
@ -46,6 +47,16 @@ namespace HISP.Server
|
|||
public const byte PACKET_WISH = 0x2C;
|
||||
public const byte PACKET_SWFMODULE = 0x50;
|
||||
|
||||
public const byte RANCH_BUY = 0x14;
|
||||
public const byte RANCH_INFO = 0x16;
|
||||
public const byte RANCH_CLICK = 0x17;
|
||||
public const byte RANCH_UPGRADE = 0x18;
|
||||
public const byte RANCH_SELL = 0x15;
|
||||
public const byte RANCH_BUILD = 0x19;
|
||||
public const byte RANCH_REMOVE = 0x1A;
|
||||
public const byte RANCH_CLICK_NORM = 0x14;
|
||||
public const byte RANCH_CLICK_BUILD = 0x15;
|
||||
|
||||
public const byte HORSE_LIST = 0x0A;
|
||||
public const byte HORSE_LOOK = 0x14;
|
||||
public const byte HORSE_FEED = 0x15;
|
||||
|
@ -138,6 +149,7 @@ namespace HISP.Server
|
|||
public const byte ITEM_BINOCULARS = 0x5C;
|
||||
public const byte ITEM_MAGNIFYING = 0x5D;
|
||||
public const byte ITEM_CRAFT = 0x64;
|
||||
public const byte ITEM_USE = 0x5F;
|
||||
public const byte ITEM_RAKE = 0x5B;
|
||||
public const byte ITEM_SHOVEL = 0x5A;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue