Exemple #1
0
 public function handleWorldPacket($penguin, $beforeCall = true)
 {
     if (isset($this->worldHandlers[Packet::$Extension]) && isset($this->worldHandlers[Packet::$Extension][Packet::$Handler])) {
         list($methodName) = $this->worldHandlers[Packet::$Extension][Packet::$Handler];
         if (method_exists($this, $methodName)) {
             call_user_func(array($this, $methodName), $penguin);
         } else {
             Logger::Warn("Method '{$methodName}' doesn't exist in plugin '{$this->pluginName}'");
         }
     }
 }
Exemple #2
0
 protected function handleSaveMyMusicTrack($socket)
 {
     $penguin = $this->penguins[$socket];
     list($trackName, $trackPattern, $trackHash) = array_slice(Packet::$Data, 2);
     $encodedPattern = $this->encodeMusicTrack($trackPattern);
     if ($encodedPattern == $trackHash) {
         $trackId = $penguin->database->savePlayerTrack($penguin->id, $trackName, $trackPattern, $trackHash);
         $penguin->send("%xt%savemymusictrack%-1%{$trackId}%");
     } else {
         Logger::Warn("Track hashes don't match! {$trackHash} and {$encodedPattern}");
         $this->removePenguin($penguin);
     }
 }
Exemple #3
0
 protected function handleWorldPacket($socket)
 {
     // p#getdigcooldown is received before xml sometimes.. dunno why
     if ($this->penguins[$socket]->identified == true || Packet::$Handler == "p#getdigcooldown") {
         // Bot detection - there's probably a better way of doing this
         if (Packet::$Handler !== "p#getdigcooldown") {
             if (Packet::$Handler !== "j#js" && $this->penguins[$socket]->room === null) {
                 return $this->removePenguin($this->penguins[$socket]);
             }
         }
         $worldPacket = Packet::GetInstance();
         $penguin = $this->penguins[$socket];
         foreach ($this->loadedPlugins as $loadedPlugin) {
             if ($loadedPlugin->worldStalker) {
                 $loadedPlugin->handleWorldPacket($penguin);
             } elseif (isset($loadedPlugin->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler])) {
                 list($handlerCallback, $callInformation) = $loadedPlugin->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler];
                 if ($callInformation == Plugin::Before || $callInformation == Plugin::Both) {
                     $loadedPlugin->handleWorldPacket($penguin);
                 }
             }
         }
         if (isset($this->worldHandlers[$worldPacket::$Extension])) {
             if (!empty($this->worldHandlers[$worldPacket::$Extension])) {
                 if (isset($this->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler])) {
                     $handlerCallback = $this->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler];
                     if (is_array($handlerCallback)) {
                         call_user_func($handlerCallback, $penguin);
                     } elseif (method_exists($this, $handlerCallback)) {
                         call_user_func(array($this, $handlerCallback), $socket);
                     } else {
                         Logger::Warn("Method for {$worldPacket::$Extension}%{$worldPacket::$Handler} is un-callable!");
                     }
                 } else {
                     Logger::Warn("Method for {$worldPacket::$Extension}%{$worldPacket::$Handler} doesn't exist/has not been set");
                 }
             } else {
                 Logger::Warn("There are no handlers for {$worldPacket::$Extension}");
             }
         } else {
             Logger::Warn("The packet extension '{$worldPacket::$Extension}' is not handled");
         }
         foreach ($this->loadedPlugins as $loadedPlugin) {
             if ($loadedPlugin->worldStalker) {
                 $loadedPlugin->handleWorldPacket($penguin, false);
             } elseif (isset($loadedPlugin->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler])) {
                 list($handlerCallback, $callInformation) = $loadedPlugin->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler];
                 if ($callInformation == Plugin::After || $callInformation == Plugin::Both) {
                     $loadedPlugin->handleWorldPacket($penguin, false);
                 }
             }
         }
     } else {
         $this->removePenguin($this->penguins[$socket]);
     }
 }
Exemple #4
0
 protected function handleSendMove($socket)
 {
     $penguin = $this->penguins[$socket];
     if ($penguin->waddleRoom !== null) {
         array_shift(Packet::$Data);
         $penguin->room->send("%xt%zm%" . implode('%', Packet::$Data) . '%');
     } elseif ($penguin->tableId !== null) {
         $tableId = $penguin->tableId;
         $isPlayer = array_search($penguin, $this->playersByTableId[$tableId]) < 2;
         $gameReady = count($this->playersByTableId[$tableId]) >= 2;
         if ($isPlayer && $gameReady) {
             $chipColumn = Packet::$Data[2];
             $chipRow = Packet::$Data[3];
             $seatId = array_search($penguin, $this->playersByTableId[$tableId]);
             $libraryId = $seatId + 1;
             if ($this->gamesByTableId[$tableId]->currentPlayer === $libraryId) {
                 // Prevents player from placing multiple chips on a single turn
                 $gameStatus = $this->gamesByTableId[$tableId]->placeChip($chipColumn, $chipRow);
                 foreach ($this->playersByTableId[$tableId] as $recipient) {
                     $recipient->send("%xt%zm%{$recipient->room->internalId}%{$seatId}%{$chipColumn}%{$chipRow}%");
                 }
                 $opponentSeatId = $seatId == 0 ? 1 : 0;
                 if ($gameStatus === FindFour::FoundFour) {
                     $penguin->addCoins(10);
                     $this->playersByTableId[$tableId][$opponentSeatId]->addCoins(5);
                 } elseif ($gameStatus === FindFour::Tie) {
                     $penguin->addCoins(10);
                     $this->playersByTableId[$tableId][$opponentSeatId]->addCoins(10);
                 }
             } else {
                 Logger::Warn("Attempted to drop multiple chips");
             }
         } else {
             Logger::Warn("Player {$penguin->id} is a spectator or is trying to drop a chip before connecting to a player!");
         }
     }
 }
Exemple #5
0
 protected function handleSendPufflePlay($socket)
 {
     Logger::Warn("Need to log packets");
 }
Exemple #6
0
 public function getColumnById($id, $column)
 {
     try {
         $getStatement = $this->prepare("SELECT {$column} FROM `penguins` WHERE ID = :ID");
         $getStatement->bindValue(":ID", $id);
         $getStatement->execute();
         $getStatement->bindColumn($column, $value);
         $getStatement->fetch(\PDO::FETCH_BOUND);
         $getStatement->closeCursor();
         return $value;
     } catch (\PDOException $pdoException) {
         Logger::Warn($pdoException->getMessage());
     }
 }