Advertisement
Guest User

Redemption.php

a guest
Jul 22nd, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  1. <?php
  2.  
  3. namespace Kitsune\ClubPenguin;
  4.  
  5. use Kitsune\Logging\Logger;
  6. use Kitsune\ClubPenguin\Handlers;
  7. use Kitsune\DatabaseManager;
  8. use Kitsune\ClubPenguin\Packets\Packet;
  9.  
  10. final class Redemption extends ClubPenguin {
  11.  
  12. protected $worldHandlers = array(
  13. "red" => array(
  14. "rjs" => "handleJoinRedemption",
  15. "rsc" => "handleSendCode"
  16. )
  17. );
  18.  
  19. public function __construct() {
  20. parent::__construct();
  21.  
  22. Logger::Fine("Redemption server is online");
  23. }
  24.  
  25. protected function handleLogin($socket) {
  26. $penguin = $this->penguins[$socket];
  27.  
  28. $this->databaseManager->add($penguin);
  29.  
  30. $username = Packet::$Data['body']['login']['nick'];
  31. $loginKey = Packet::$Data['body']['login']['pword'];
  32.  
  33. if(!$penguin->database->usernameExists($username)) {
  34. $penguin->send("%xt%e%-1%101%");
  35. return $this->removePenguin($penguin);
  36. }
  37.  
  38. $penguinData = $penguin->database->getColumnsByName($username, array("ID", "Username", "LoginKey"));
  39. $id = $penguinData["ID"];
  40. $username = $penguinData["Username"];
  41. $dbLoginKey = $penguinData["LoginKey"];
  42. $loginHash = Hashing::encryptPassword($dbLoginKey . $penguin->randomKey) . $dbLoginKey;
  43. if($loginHash != $loginKey) {
  44. $penguin->send("%xt%e%-1%101%");
  45. return $this->removePenguin($penguin);
  46. } else {
  47. $penguin->id = $id;
  48. $penguin->username = $username;
  49. $penguin->identified = true;
  50. $penguin->send("%xt%l%-1%");
  51. }
  52. }
  53.  
  54. protected function handleJoinRedemption($socket) {
  55. $penguin = $this->penguins[$socket];
  56. $packetId = Packet::$Data[2];
  57. $loginKey = Packet::$Data[3];
  58.  
  59. if($penguin->id != $packetId || $loginKey == "") {
  60. $penguin->send("%xt%e%-1%1");
  61. return $this->removePenguin($penguin);
  62. }
  63.  
  64. $dbLoginKey = $penguin->database->getColumnById($penguin->id, "LoginKey");
  65.  
  66. if($dbLoginKey != $loginKey) {
  67. $penguin->send("%xt%e%-1%101");
  68. return $this->removePenguin($penguin);
  69. }
  70.  
  71. $penguin->send("%xt%rjs%-1%%1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17%0%");
  72. }
  73.  
  74. protected function handleSendCode($socket) {
  75. $penguin = $this->penguins[$socket];
  76. $code = Packet::$Data[2];
  77.  
  78. if(!$penguin->database->redemptionCodeExists($code)) {
  79. return $penguin->send("%xt%e%-1%720%");
  80. }
  81.  
  82. $expirationDate = $penguin->database->getRedemptionColumnByCode($code, "Expires");
  83. if(!$expirationDate == 0 && $expirationDate < time()) {
  84. return $penguin->send("%xt%e%-1%726%");
  85. }
  86.  
  87. $usesRemaining = $penguin->database->getRedemptionColumnByCode($code, "Uses");
  88. if($usesRemaining == 0) {
  89. return $penguin->send("%xt%e%-1%726%");
  90. }
  91.  
  92. $redeemedCodes = $penguin->database->getColumnById($penguin->id, "Redeemed");
  93. if(strpos($redeemedCodes, $code.",") !== false) {
  94. return $penguin->send("%xt%e%-1%721%");
  95. }
  96.  
  97. $type = $penguin->database->getRedemptionColumnByCode($code, "Type");
  98. if ($type == "BLANKET") {
  99. $items = $penguin->database->getRedemptionColumnByCode($code, "Items");
  100. if ($items != "") {
  101. foreach (explode(',', $items) as $item) {
  102. if(is_numeric($item)) {
  103. $inventory = $penguin->database->getColumnById($penguin->id, "Inventory");
  104. if(strpos($inventory, "%" . $item) === false) {
  105. $penguin->database->updateColumnById($penguin->id, "Inventory", $inventory . "%" . $item);
  106. }
  107. }
  108. }
  109. }
  110.  
  111. $redemptionCoins = $penguin->database->getRedemptionColumnByCode($code, "Coins");
  112. if ($redemptionCoins != 0) {
  113. $coins = $penguin->database->getColumnById($penguin->id, "Coins");
  114. $totalCoins = $coins + $redemptionCoins;
  115. $penguin->database->updateColumnById($penguin->id, "Coins", $totalCoins);
  116. }
  117.  
  118. $penguin->database->updateColumnById($penguin->id, "Redeemed", $redeemedCodes . $code . ",");
  119.  
  120. $uses = $penguin->database->getRedemptionColumnByCode($code, "Uses");
  121. if ($uses != -1) {
  122. $penguin->database->updateRedemptionColumn($code, "Uses", $uses - 1);
  123. }
  124.  
  125. return $penguin->send("%xt%rsc%-1%{$type}%{$items}%{$redemptionCoins}%");
  126. } else {
  127. return $penguin->send("%xt%e%-1%1%");
  128. }
  129. }
  130.  
  131. public function removePenguin($penguin) {
  132. $this->removeClient($penguin->socket);
  133.  
  134. $this->databaseManager->remove($penguin);
  135.  
  136. unset($this->penguins[$penguin->socket]);
  137. }
  138.  
  139. protected function handleDisconnect($socket) {
  140. $penguin = $this->penguins[$socket];
  141.  
  142. $this->removePenguin($penguin);
  143.  
  144. Logger::Info("Player disconnected from redemption server");
  145. }
  146.  
  147. }
  148.  
  149. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement