From 363e18ae8c3db33a08f19a81c7dfcae6fc4e7f0d Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Sun, 27 Jun 2021 18:41:29 +1200 Subject: [PATCH] Add ItemPurchaseQueue --- .../HorseIsleServer/Game/Items/Item.cs | 5 + .../HorseIsleServer/Player/User.cs | 2 +- .../HorseIsleServer/Server/Database.cs | 58 ++++- .../HorseIsleServer/Server/GameServer.cs | 13 +- WebInterface/game-site/account.php | 34 ++- WebInterface/game-site/web/crosserver.php | 62 +++++ WebInterface/game-site/web/paypalgateway.php | 1 + WebInterface/game-site/web/ppemu.php | 221 ++++++++++++++++++ WebInterface/master-site/crosserver.php | 62 +++++ 9 files changed, 445 insertions(+), 13 deletions(-) create mode 100644 WebInterface/game-site/web/paypalgateway.php create mode 100644 WebInterface/game-site/web/ppemu.php diff --git a/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs b/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs index b6b576c..a2a6a48 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Items/Item.cs @@ -90,6 +90,11 @@ namespace HISP.Game.Items } } + public struct ItemPurchaseQueueItem + { + public int ItemId; + public int ItemCount; + } public static void UseItem(User user, ItemInstance item) { if (user.Inventory.HasItem(item.RandomId)) diff --git a/Horse Isle Server/HorseIsleServer/Player/User.cs b/Horse Isle Server/HorseIsleServer/Player/User.cs index dc7c97e..06b1a02 100755 --- a/Horse Isle Server/HorseIsleServer/Player/User.cs +++ b/Horse Isle Server/HorseIsleServer/Player/User.cs @@ -230,7 +230,7 @@ namespace HISP.Player if (value) Database.RemoveOnlineUser(this.Id); else - Database.AddOnlineUser(this.Id, this.Administrator, this.Moderator, this.Subscribed); + Database.AddOnlineUser(this.Id, this.Administrator, this.Moderator, this.Subscribed, this.NewPlayer); stealth = value; } diff --git a/Horse Isle Server/HorseIsleServer/Server/Database.cs b/Horse Isle Server/HorseIsleServer/Server/Database.cs index 3de2797..12c81c2 100755 --- a/Horse Isle Server/HorseIsleServer/Server/Database.cs +++ b/Horse Isle Server/HorseIsleServer/Server/Database.cs @@ -33,7 +33,7 @@ namespace HISP.Server string ShopInventory = "CREATE TABLE IF NOT EXISTS ShopInventory(ShopID INT, RandomID INT, ItemID INT)"; string DroppedItems = "CREATE TABLE IF NOT EXISTS DroppedItems(X INT, Y INT, RandomID INT, ItemID INT, DespawnTimer INT, Data INT)"; string TrackedQuest = "CREATE TABLE IF NOT EXISTS TrackedQuest(playerId INT, questId INT, timesCompleted INT)"; - string OnlineUsers = "CREATE TABLE IF NOT EXISTS OnlineUsers(playerId INT, Admin TEXT(3), Moderator TEXT(3), Subscribed TEXT(3))"; + string OnlineUsers = "CREATE TABLE IF NOT EXISTS OnlineUsers(playerId INT, Admin TEXT(3), Moderator TEXT(3), Subscribed TEXT(3), New TEXT(3))"; string CompetitionGear = "CREATE TABLE IF NOT EXISTS CompetitionGear(playerId INT, headItem INT, bodyItem INT, legItem INT, feetItem INT)"; string Awards = "CREATE TABLE IF NOT EXISTS Awards(playerId INT, awardId INT)"; string Jewelry = "CREATE TABLE IF NOT EXISTS Jewelry(playerId INT, slot1 INT, slot2 INT, slot3 INT, slot4 INT)"; @@ -57,8 +57,21 @@ namespace HISP.Server string AuctionTable = "CREATE TABLE IF NOT EXISTS Auctions(roomId INT, randomId INT, horseRandomId INT, ownerId INT, timeRemaining INT, highestBid INT, highestBidder INT, Done TEXT(3))"; string SolvedRealTimeRiddle = "CREATE TABLE IF NOT EXISTS SolvedRealTimeRiddles(playerId INT, riddleId INT)"; string MutedPlayers = "CREATE TABLE IF NOT EXISTS MutedPlayers(playerId INT, mutePlayerId INT)"; + string ItemQueue = "CREATE TABLE IF NOT EXISTS ItemPurchaseQueue(playerId INT, itemId INT, count INT)"; string DeleteOnlineUsers = "DELETE FROM OnlineUsers"; + try + { + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = ItemQueue; + sqlCommand.ExecuteNonQuery(); + sqlCommand.Dispose(); + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + try { MySqlCommand sqlCommand = db.CreateCommand(); @@ -611,6 +624,44 @@ namespace HISP.Server } } + public static void ClearItemPurchaseQueue(int playerId) + { + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM ItemPurchaseQueue WHERE playerId=@playerId"; + sqlCommand.Parameters.AddWithValue("@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + sqlCommand.Dispose(); + } + } + + public static Item.ItemPurchaseQueueItem[] GetItemPurchaseQueue(int playerId) + { + List queueItems = new List(); + + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM ItemPurchaseQueue WHERE playerId=@playerId"; + sqlCommand.Parameters.AddWithValue("@playerId", playerId); + sqlCommand.Prepare(); + MySqlDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + Item.ItemPurchaseQueueItem itm = new Item.ItemPurchaseQueueItem(); + itm.ItemId = reader.GetInt32(0); + itm.ItemCount = reader.GetInt32(1); + queueItems.Add(itm); + } + sqlCommand.Dispose(); + } + return queueItems.ToArray(); + } + public static void CreateDressupRoomPeice(int roomId, int peiceId, bool active, int x, int y) { using (MySqlConnection db = new MySqlConnection(ConnectionString)) @@ -3966,18 +4017,19 @@ namespace HISP.Server sqlCommand.Dispose(); } } - public static void AddOnlineUser(int playerId, bool Admin, bool Moderator, bool Subscribed) + public static void AddOnlineUser(int playerId, bool Admin, bool Moderator, bool Subscribed, bool New) { using (MySqlConnection db = new MySqlConnection(ConnectionString)) { db.Open(); MySqlCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO OnlineUsers VALUES(@playerId, @admin, @moderator, @subscribed)"; + sqlCommand.CommandText = "INSERT INTO OnlineUsers VALUES(@playerId, @admin, @moderator, @new)"; sqlCommand.Parameters.AddWithValue("@playerId", playerId); sqlCommand.Parameters.AddWithValue("@admin", Admin ? "YES" : "NO"); sqlCommand.Parameters.AddWithValue("@moderator", Moderator ? "YES" : "NO"); sqlCommand.Parameters.AddWithValue("@subscribed", Subscribed ? "YES" : "NO"); + sqlCommand.Parameters.AddWithValue("@new", New ? "YES" : "NO"); sqlCommand.Prepare(); sqlCommand.ExecuteNonQuery(); sqlCommand.Dispose(); diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs index 998fda2..10e2cb3 100755 --- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs +++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs @@ -3542,7 +3542,7 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Requested user information when not logged in."); return; } - Database.AddOnlineUser(sender.LoggedinUser.Id, sender.LoggedinUser.Administrator, sender.LoggedinUser.Moderator, sender.LoggedinUser.Subscribed); + Database.AddOnlineUser(sender.LoggedinUser.Id, sender.LoggedinUser.Administrator, sender.LoggedinUser.Moderator, sender.LoggedinUser.Subscribed, sender.LoggedinUser.NewPlayer); Logger.DebugPrint(sender.LoggedinUser.Username + " Requested user information."); @@ -3605,6 +3605,17 @@ namespace HISP.Server if (RiddleEvent.Active) RiddleEvent.ShowStartMessage(sender); + // Give Queued Itmes + Item.ItemPurchaseQueueItem[] queueItems = Database.GetItemPurchaseQueue(sender.LoggedinUser.Id); + foreach (Item.ItemPurchaseQueueItem queueItem in queueItems) + { + for(int i = 0; i < queueItems.Length; i++) + { + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(queueItem.ItemId)); + } + } + Database.ClearItemPurchaseQueue(sender.LoggedinUser.Id); + // Send Queued Messages string[] queuedMessages = Database.GetMessageQueue(sender.LoggedinUser.Id); foreach(string queuedMessage in queuedMessages) diff --git a/WebInterface/game-site/account.php b/WebInterface/game-site/account.php index fe66d03..52d8b3e 100755 --- a/WebInterface/game-site/account.php +++ b/WebInterface/game-site/account.php @@ -181,10 +181,10 @@ h+=60;//h += 96; $lastOn = 0.00; $current_time = time(); $difference = $current_time - $loginDate; - $lastOn = $difference/60; + $lastOn = $difference/3600; - echo('It has been: '.$lastOn.' hours since you were last online. You have logged in '.$totalLoginsStr.' times.
You have $'.$moneyStr.' in Horse Isle money on hand and $'.$bankmoneyStr.' in the bank.
You have earned '.(string)$questPoints.' of 63005 total quest points ('.(string)floor(($questPoints / 63005) * 100.0).'% Complete)
'); + echo('It has been: '.number_format((float)$lastOn, 2, '.', '').' hours since you were last online. You have logged in '.$totalLoginsStr.' times.
You have $'.$moneyStr.' in Horse Isle money on hand and $'.$bankmoneyStr.' in the bank.
You have earned '.(string)$questPoints.' of 63005 total quest points ('.(string)floor(($questPoints / 63005) * 100.0).'% Complete)
'); if(!$subbed) { echo('You have '.(string)$playtime.' minutes of playtime available. As a non-subscriber you get 1 additional minute every 8 minutes. (subject to change based on load) (why limited?)
'); @@ -196,11 +196,29 @@ h+=60;//h += 96;
-'S SUBSCRIPTION STATUS:
ACTIVE
(∞ days remain in your subscription) (Subscription Benefits) +'S SUBSCRIPTION STATUS:
ACTIVE'); + $current_time = time(); + $difference = $subTime - $current_time; + $daysRemain = floor($difference/86400); + $daysStr = (string)$daysRemain; + + if($all_users_subbed) + $daysStr = "∞"; + + echo('
('.$daysStr.' days remain in your subscription) '); + } + else + { + echo("NOT SUBSCRIBED
(You have not yet subscribed) "); + } +?>(Subscription Benefits)
BUY 1 Month Membership $5.00usd (adds 31 days membership time to the account that you are currently logged in with.) Non-refundable. -
+ @@ -226,7 +244,7 @@ h+=60;//h += 96;
BUY Full Year Membership $40.00usd (adds 366 days membership time to the account you are logged in with. saves $20.00 off monthly subscription) Non-refundable. - + @@ -281,7 +299,7 @@ h+=60;//h += 96; - +
BUY $100,000 Horse Isle Currency per $1.00usd
Select:
BUY Pawneer Order $8.00usd (allows you to order a custom breed/color/gender horse on server from Pawneer. This is not required, you can trade other players to get the breed you desire also.) Non-refundable. - + @@ -344,7 +362,7 @@ Select:
BUY 5 Pawneer Orders $30.00usd (save $10.00 - allows you to order 5 custom horses from Pawneer) Non-refundable. - + diff --git a/WebInterface/game-site/web/crosserver.php b/WebInterface/game-site/web/crosserver.php index 980fb5c..444a7e8 100644 --- a/WebInterface/game-site/web/crosserver.php +++ b/WebInterface/game-site/web/crosserver.php @@ -44,6 +44,42 @@ function getUserMoney($database, $id) } +function setUserMoney($database, $id, $money) +{ + include('config.php'); + $dbname = $database; + $connect = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("Unable to connect to '$dbhost'"); + $stmt = $connect->prepare("UPDATE UserExt SET Money=? WHERE Id=?"); + $stmt->bind_param("ii", $money, $id); + $stmt->execute(); +} + +function setUserSubbed($database, $id, $subbed) +{ + $subedV = ""; + if($subbed) + $subedV = "YES"; + else + $subbedV = "NO"; + + include('config.php'); + $dbname = $database; + $connect = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("Unable to connect to '$dbhost'"); + $stmt = $connect->prepare("UPDATE UserExt SET Subscriber=? WHERE Id=?"); + $stmt->bind_param("si", $subedV, $id); + $stmt->execute(); +} + +function setUserSubbedUntil($database, $id, $subbedUntil) +{ + include('config.php'); + $dbname = $database; + $connect = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("Unable to connect to '$dbhost'"); + $stmt = $connect->prepare("UPDATE UserExt SET SubscribedUntil=? WHERE Id=?"); + $stmt->bind_param("ii", $subbedUntil, $id); + $stmt->execute(); +} + function getUserBankMoney($database, $id) { include('config.php'); @@ -129,6 +165,19 @@ function getUserSubTimeRemaining($database, $id) } + +function addItemToPuchaseQueue($database, $playerId, $itemId, $itemCount) +{ + include('config.php'); + $dbname = $database; + $connect = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("Unable to connect to '$dbhost'"); + $stmt = $connect->prepare("INSERT INTO ItemPurchaseQueue VALUES(?,?,?)"); + $stmt->bind_param("iii", $playerId, $itemId, $itemCount); + $stmt->execute(); + $result = $stmt->get_result(); + +} + function getUserSubbed($database, $id) { include('config.php'); @@ -143,6 +192,19 @@ function getUserSubbed($database, $id) } +function isUserOnline($database, $id) +{ + include('config.php'); + + $dbname = $database; + $connect = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("Unable to connect to '$dbhost'"); + $stmt = $connect->prepare("SELECT COUNT(1) FROM OnlineUsers WHERE playerId=?"); + $stmt->bind_param("i", $userid); + $stmt->execute(); + $result = $stmt->get_result(); + $count = intval($result->fetch_row()[0]); + return $count>0; +} function getNoModPlayersOnlineInServer($database) { diff --git a/WebInterface/game-site/web/paypalgateway.php b/WebInterface/game-site/web/paypalgateway.php new file mode 100644 index 0000000..b0646c4 --- /dev/null +++ b/WebInterface/game-site/web/paypalgateway.php @@ -0,0 +1 @@ +PAYPAL [Jun26 21:22:15pm]: ----------------------------------------
PAYPAL [Jun26 21:22:15pm]: PayPal Gateway Running
PAYPAL [Jun26 21:22:15pm]: Did not receive proper data from PayPal!!
\ No newline at end of file diff --git a/WebInterface/game-site/web/ppemu.php b/WebInterface/game-site/web/ppemu.php new file mode 100644 index 0000000..9b95e7b --- /dev/null +++ b/WebInterface/game-site/web/ppemu.php @@ -0,0 +1,221 @@ += $cost) + { + setUserMoney($dbname, $_SESSION['PLAYER_ID'], $money-$cost); + setUserSubbed($dbname, $_SESSION['PLAYER_ID'], true); + setUserSubbedUntil($dbname, $_SESSION['PLAYER_ID'], $subbedUntil + 2678400); + + header("Location: ".$_GET["ret"]); + } + else + { + include("header.php"); + echo("Not enough money."); + include("footer.php"); + exit(); + } + + } + else if(strpos($itm, "Full Year Horse Isle Membership") === 0){ + $amount = 40; // NO CHEATING! + $cost = $amount*$EXHANGE_RATE; + if($money >= $cost) + { + setUserMoney($dbname, $_SESSION['PLAYER_ID'], $money-$cost); + setUserSubbed($dbname, $_SESSION['PLAYER_ID'], true); + setUserSubbedUntil($dbname, $_SESSION['PLAYER_ID'], $subbedUntil + 31622400); + + header("Location: ".$_GET["ret"]); + + } + else + { + include("header.php"); + echo("Not enough money."); + include("footer.php"); + exit(); + } + + + } + else if(strpos($itm, "100k Horse Isle Money") === 0){ // Why thou? + $amount = 1; // NO CHEATING! + $quantity = intval($_GET["qnt"]); + $cost = ($amount*$EXHANGE_RATE)*$quantity; + if($money >= $cost) + { + $amountGained = (100000 * $quantity); + if($quantity == 5) + $amountGained = 550000; + if($quantity == 10) + $amountGained = 1100000; + if($quantity == 10) + $amountGained = 1100000; + if($quantity == 20) + $amountGained = 2300000; + if($quantity == 50) + $amountGained = 5750000; + if($quantity == 100) + $amountGained = 12000000; + if($quantity == 250) + $amountGained = 31250000; + + setUserMoney($dbname, $_SESSION['PLAYER_ID'], $money-$cost); + $money-=$cost; + setUserMoney($dbname, $_SESSION['PLAYER_ID'], $money+=$amountGained); + header("Location: ".$_GET["ret"]); + + } + else + { + include("header.php"); + echo("Not enough money."); + include("footer.php"); + exit(); + } + + + } + else if(strpos($itm, "Pawneer Order") === 0){ + $amount = 8; // NO CHEATING! + $cost = $amount*$EXHANGE_RATE; + if($money >= $cost) + { + setUserMoney($dbname, $_SESSION['PLAYER_ID'], $money-$cost); + addItemToPuchaseQueue($dbname, $_SESSION['PLAYER_ID'], 559, 1); + + header("Location: ".$_GET["ret"]); + + } + else + { + include("header.php"); + echo("Not enough money."); + include("footer.php"); + exit(); + } + + + } + else if(strpos($itm, "Five Pawneer Order") === 0){ + $amount = 30; // NO CHEATING! + $cost = $amount*$EXHANGE_RATE; + if($money >= $cost) + { + setUserMoney($dbname, $_SESSION['PLAYER_ID'], $money-$cost); + addItemToPuchaseQueue($dbname, $_SESSION['PLAYER_ID'], 559, 5); + + header("Location: ".$_GET["ret"]); + + } + else + { + include("header.php"); + echo("Not enough money."); + include("footer.php"); + exit(); + } + + + } + + exit(); + } +} + +$quantity = 1; +if(!isset($_POST['item_name'], $_POST['amount'], $_POST['item_number'], $_POST['return'])) +{ + + include("header.php"); + echo("Some data was invalid"); + include("footer.php"); + exit(); +} +if(isset($_POST['quantity'])) + $quantity = intval($_POST['quantity']); + + +$hasIntl = function_exists('numfmt_create'); + +if($hasIntl) + $fmt = numfmt_create( 'en_US', NumberFormatter::DECIMAL ); + + +include("header.php"); +?> +

HISP - PayPal Emulator

+Purchase Information: + + + + + + + + + + + + + + + +
ItemQuantityItem numberPrice (USD)Price (HorseIsle)
+

NOTE: $1USD = $ HorseIsle Money! (you have $)


Do you want to purchase?

Yes | No + \ No newline at end of file diff --git a/WebInterface/master-site/crosserver.php b/WebInterface/master-site/crosserver.php index 980fb5c..444a7e8 100644 --- a/WebInterface/master-site/crosserver.php +++ b/WebInterface/master-site/crosserver.php @@ -44,6 +44,42 @@ function getUserMoney($database, $id) } +function setUserMoney($database, $id, $money) +{ + include('config.php'); + $dbname = $database; + $connect = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("Unable to connect to '$dbhost'"); + $stmt = $connect->prepare("UPDATE UserExt SET Money=? WHERE Id=?"); + $stmt->bind_param("ii", $money, $id); + $stmt->execute(); +} + +function setUserSubbed($database, $id, $subbed) +{ + $subedV = ""; + if($subbed) + $subedV = "YES"; + else + $subbedV = "NO"; + + include('config.php'); + $dbname = $database; + $connect = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("Unable to connect to '$dbhost'"); + $stmt = $connect->prepare("UPDATE UserExt SET Subscriber=? WHERE Id=?"); + $stmt->bind_param("si", $subedV, $id); + $stmt->execute(); +} + +function setUserSubbedUntil($database, $id, $subbedUntil) +{ + include('config.php'); + $dbname = $database; + $connect = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("Unable to connect to '$dbhost'"); + $stmt = $connect->prepare("UPDATE UserExt SET SubscribedUntil=? WHERE Id=?"); + $stmt->bind_param("ii", $subbedUntil, $id); + $stmt->execute(); +} + function getUserBankMoney($database, $id) { include('config.php'); @@ -129,6 +165,19 @@ function getUserSubTimeRemaining($database, $id) } + +function addItemToPuchaseQueue($database, $playerId, $itemId, $itemCount) +{ + include('config.php'); + $dbname = $database; + $connect = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("Unable to connect to '$dbhost'"); + $stmt = $connect->prepare("INSERT INTO ItemPurchaseQueue VALUES(?,?,?)"); + $stmt->bind_param("iii", $playerId, $itemId, $itemCount); + $stmt->execute(); + $result = $stmt->get_result(); + +} + function getUserSubbed($database, $id) { include('config.php'); @@ -143,6 +192,19 @@ function getUserSubbed($database, $id) } +function isUserOnline($database, $id) +{ + include('config.php'); + + $dbname = $database; + $connect = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("Unable to connect to '$dbhost'"); + $stmt = $connect->prepare("SELECT COUNT(1) FROM OnlineUsers WHERE playerId=?"); + $stmt->bind_param("i", $userid); + $stmt->execute(); + $result = $stmt->get_result(); + $count = intval($result->fetch_row()[0]); + return $count>0; +} function getNoModPlayersOnlineInServer($database) {