Esempio n. 1
0
 public function onCommand(CommandSender $sender, Command $cmd, $label, array $param)
 {
     switch ($cmd->getName()) {
         case "startp":
             if (!$sender instanceof Player) {
                 $sender->sendMessage("Please run this command in-game.");
                 return true;
             }
             $x = (int) $sender->x;
             $z = (int) $sender->z;
             $level = $sender->getLevel()->getFolderName();
             $this->start[$sender->getName()] = array("x" => $x, "z" => $z, "level" => $level);
             $sender->sendMessage($this->getMessage("first-position-saved"));
             return true;
         case "endp":
             if (!$sender instanceof Player) {
                 $sender->sendMessage("Please run this command in-game.");
                 return true;
             }
             if (!isset($this->start[$sender->getName()])) {
                 $sender->sendMessage($this->getMessage("set-first-position"));
                 return true;
             }
             if ($sender->getLevel()->getFolderName() !== $this->start[$sender->getName()]["level"]) {
                 $sender->sendMessage($this->getMessage("cant-set-position-in-different-world"));
                 return true;
             }
             $startX = $this->start[$sender->getName()]["x"];
             $startZ = $this->start[$sender->getName()]["z"];
             $endX = (int) $sender->x;
             $endZ = (int) $sender->z;
             $this->end[$sender->getName()] = array("x" => $endX, "z" => $endZ);
             if ($startX > $endX) {
                 $temp = $endX;
                 $endX = $startX;
                 $startX = $temp;
             }
             if ($startZ > $endZ) {
                 $temp = $endZ;
                 $endZ = $startZ;
                 $startZ = $temp;
             }
             $startX--;
             $endX++;
             $startZ--;
             $endZ++;
             $price = ($endX - $startX - 1) * ($endZ - $startZ - 1) * $this->config->get("price-per-y-axis");
             $sender->sendMessage($this->getMessage("confirm-buy-land", array($price, "%2", "%3")));
             return true;
         case "land":
             $sub = array_shift($param);
             switch ($sub) {
                 case "buy":
                     if (!$sender->hasPermission("economyland.command.land.buy")) {
                         return true;
                     }
                     if (!$sender instanceof Player) {
                         $sender->sendMessage("Please run this command in-game.");
                         return true;
                     }
                     if (in_array($sender->getLevel()->getFolderName(), $this->config->get("buying-disallowed-worlds"))) {
                         $sender->sendMessage($this->getMessage("not-allowed-to-buy"));
                         return true;
                     }
                     //	$result = $this->land->query("SELECT * FROM land WHERE owner = '{$sender->getName()}'");
                     $cnt = count($this->db->getLandsByOwner($sender->getName()));
                     if (is_numeric($this->config->get("player-land-limit"))) {
                         if ($cnt >= $this->config->get("player-land-limit")) {
                             $sender->sendMessage($this->getMessage("land-limit", array($cnt, $this->config->get("player-land-limit"), "%3", "%4")));
                             return true;
                         }
                         /*	while($result->fetchArray(SQLITE3_ASSOC) !== false){
                         				++$cnt;
                         				if($cnt >= $this->config->get("player-land-limit")){
                         					$sender->sendMessage($this->getMessage("land-limit", array($cnt, $this->config->get("player-land-limit"))));
                         					return true;
                         				}
                         			}*/
                     }
                     if (!isset($this->start[$sender->getName()])) {
                         $sender->sendMessage($this->getMessage("set-first-position"));
                         return true;
                     } elseif (!isset($this->end[$sender->getName()])) {
                         $sender->sendMessage($this->getMessage("set-second-position"));
                         return true;
                     }
                     $l = $this->start[$sender->getName()];
                     $endp = $this->end[$sender->getName()];
                     $startX = (int) $l["x"];
                     $endX = (int) $endp["x"];
                     $startZ = (int) $l["z"];
                     $endZ = (int) $endp["z"];
                     if ($startX > $endX) {
                         $backup = $startX;
                         $startX = $endX;
                         $endX = $backup;
                     }
                     if ($startZ > $endZ) {
                         $backup = $startZ;
                         $startZ = $endZ;
                         $endZ = $backup;
                     }
                     /*$result = $this->land->query("SELECT * FROM land WHERE startX <= $endX AND endX >= $endX AND startZ <= $endZ AND endZ >= $endZ AND level = '{$sender->getLevel()->getFolderName()}'")->fetchArray(SQLITE3_ASSOC);
                     		if(!is_bool($result)){
                     			$sender->sendMessage($this->getMessage("land-around-here", array($result["owner"], "", "")));
                     			return true;
                     		}*/
                     $result = $this->db->checkOverlap($startX, $endX, $startZ, $endZ, $sender->getLevel()->getFolderName());
                     if ($result) {
                         $sender->sendMessage($this->getMessage("land-around-here", array($result["owner"], "%2", "%3")));
                         return true;
                     }
                     $price = ($endX + 1 - ($startX - 1) - 1) * ($endZ + 1 - ($startZ - 1) - 1) * $this->config->get("price-per-y-axis");
                     if (EconomyAPI::getInstance()->reduceMoney($sender, $price, true, "EconomyLand") === EconomyAPI::RET_INVALID) {
                         $sender->sendMessage($this->getMessage("no-money-to-buy-land"));
                         return true;
                     }
                     //	$this->land->exec("INSERT INTO land (startX, endX, startZ, endZ, owner, level, price, invitee) VALUES ($startX, $endX, $startZ, $endZ, '{$sender->getName()}', '{$this->start[$sender->getName()]["level"]}', $price, ',')");
                     $this->db->addLand($startX, $endX, $startZ, $endZ, $sender->getLevel()->getFolderName(), $price, $sender->getName());
                     unset($this->start[$sender->getName()], $this->end[$sender->getName()]);
                     $sender->sendMessage($this->getMessage("bought-land", array($price, "%2", "%3")));
                     break;
                 case "list":
                     if (!$sender->hasPermission("economyland.command.land.list")) {
                         return true;
                     }
                     $page = isset($param[0]) ? (int) $param[0] : 1;
                     $land = $this->db->getAll();
                     $output = "";
                     $max = ceil(count($land) / 5);
                     $pro = 1;
                     $page = (int) $page;
                     $output .= $this->getMessage("land-list-top", array($page, $max, ""));
                     $current = 1;
                     foreach ($land as $l) {
                         $cur = (int) ceil($current / 5);
                         if ($cur > $page) {
                             continue;
                         }
                         if ($pro == 6) {
                             break;
                         }
                         if ($page === $cur) {
                             $output .= $this->getMessage("land-list-format", array($l["ID"], ($l["endX"] - $l["startX"]) * ($l["endZ"] - $l["startZ"]), $l["owner"]));
                             $pro++;
                         }
                         $current++;
                     }
                     $sender->sendMessage($output);
                     break;
                 case "whose":
                     if (!$sender->hasPermission("economyland.command.land.whose")) {
                         return true;
                     }
                     $player = array_shift($param);
                     $alike = true;
                     if (str_replace(" ", "", $player) === "") {
                         $player = $sender->getName();
                         $alike = false;
                     }
                     ///	$result = $this->land->query("SELECT * FROM land WHERE owner ".($alike ? "LIKE '%".$player."%'" : "= '".$player."'"));
                     if ($alike) {
                         $lands = $this->db->getLandsByKeyword($player);
                     } else {
                         $lands = $this->db->getLandsByOwner($player);
                     }
                     $sender->sendMessage("Results from query : {$player}\n");
                     //	while(($info = $result->fetchArray(SQLITE3_ASSOC)) !== false){
                     foreach ($lands as $info) {
                         $sender->sendMessage($this->getMessage("land-list-format", array($info["ID"], ($info["endX"] - $info["startX"]) * ($info["endZ"] - $info["startZ"]), $info["owner"])));
                     }
                     //}
                     break;
                 case "move":
                     if (!$sender instanceof Player) {
                         $sender->sendMessage("Please run this command in-game.");
                         return true;
                     }
                     if (!$sender->hasPermission("economyland.command.land.move")) {
                         return true;
                     }
                     $num = array_shift($param);
                     if (trim($num) == "") {
                         $sender->sendMessage("Usage: /land move <land num>");
                         return true;
                     }
                     if (!is_numeric($num)) {
                         $sender->sendMessage("Usage: /land move <land num>");
                         return true;
                     }
                     //$result = $this->land->query("SELECT * FROM land WHERE ID = $num");
                     //	$info = $result->fetchArray(SQLITE3_ASSOC);
                     $info = $this->db->getLandById($num);
                     if ($info === false) {
                         $sender->sendMessage($this->getMessage("no-land-found", array($num, "", "")));
                         return true;
                     }
                     if ($info["owner"] !== $sender->getName()) {
                         if (!$sender->hasPermission("economyland.land.move.others")) {
                             $sender->sendMessage($this->getMessage("no-permission-move", [$info["ID"], $info["owner"], "%3"]));
                             return true;
                         }
                     }
                     $level = $this->getServer()->getLevelByName($info["level"]);
                     if (!$level instanceof Level) {
                         $sender->sendMessage($this->getMessage("land-corrupted", array($num, "", "")));
                         return true;
                     }
                     $x = (int) $info["startX"] + ($info["endX"] - $info["startX"]) / 2;
                     $z = (int) $info["startZ"] + ($info["endZ"] - $info["startZ"]) / 2;
                     $cnt = 0;
                     for ($y = 1;; $y++) {
                         if ($level->getBlock(new Vector3($x, $y, $z))->getID() === 0) {
                             break;
                         }
                         if ($cnt === 5) {
                             break;
                         }
                         if ($y > 255) {
                             ++$cnt;
                             ++$x;
                             --$z;
                             $y = 1;
                             continue;
                         }
                     }
                     $sender->teleport(new Position($x, $y, $z, $level));
                     $sender->sendMessage($this->getMessage("success-moving", array($num, "", "")));
                     return true;
                 case "give":
                     if (!$sender instanceof Player) {
                         $sender->sendMessage("Please run this command in-game.");
                         return true;
                     }
                     if (!$sender->hasPermission("economyland.command.land.give")) {
                         return true;
                     }
                     $player = array_shift($param);
                     $landnum = array_shift($param);
                     if (trim($player) == "" or trim($landnum) == "" or !is_numeric($landnum)) {
                         $sender->sendMessage("Usage: /{$cmd} give <player> <land number>");
                         return true;
                     }
                     $username = $player;
                     $player = $this->getServer()->getPlayer($username);
                     if (!$player instanceof Player) {
                         $sender->sendMessage($this->getMessage("player-not-connected", [$username, "%2", "%3"]));
                         return true;
                     }
                     //	$info = $this->land->query("SELECT * FROM land WHERE ID = $landnum")->fetchArray(SQLITE3_ASSOC);
                     $info = $this->db->getLandById($landnum);
                     if ($info === false) {
                         $sender->sendMessage($this->getMessage("no-land-found", array($landnum, "%2", "%3")));
                         return true;
                     }
                     if ($sender->getName() !== $info["owner"] and !$sender->hasPermission("economyland.land.give.others")) {
                         $sender->sendMessage($this->getMessage("not-your-land", array($landnum, "%2", "%3")));
                     } else {
                         if ($sender->getName() === $player->getName()) {
                             $sender->sendMessage($this->getMessage("cannot-give-land-myself"));
                         } else {
                             //	$this->land->exec("UPDATE land SET owner = '{$player->getName()}' WHERE ID = {$info["ID"]}");
                             $this->db->setOwnerById($info["ID"], $player->getName());
                             $sender->sendMessage($this->getMessage("gave-land", array($landnum, $player->getName(), "%3")));
                             $player->sendMessage($this->getMessage("got-land", array($sender->getName(), $landnum, "%3")));
                         }
                     }
                     return true;
                 case "invite":
                     if (!$sender->hasPermission("economyland.command.land.invite")) {
                         $sender->sendMessage("You don't have permissions to use this command.");
                         return true;
                     }
                     $landnum = array_shift($param);
                     $player = array_shift($param);
                     if (trim($player) == "" or trim($landnum) == "") {
                         $sender->sendMessage("Usage : /land <invite> <land number> <[r:]player>");
                         return true;
                     }
                     if (!is_numeric($landnum)) {
                         $sender->sendMessage($this->getMessage("land-num-must-numeric", array($landnum, "%2", "%3")));
                         return true;
                     }
                     //$result = $this->land->query("SELECT * FROM land WHERE ID = $landnum");
                     //$info = $result->fetchArray(SQLITE3_ASSOC);
                     $info = $this->db->getLandById($landnum);
                     if ($info === false) {
                         $sender->sendMessage($this->getMessage("no-land-found", array($landnum, "%2", "%3")));
                         return true;
                     } elseif ($info["owner"] !== $sender->getName()) {
                         $sender->sendMessage($this->getMessage("not-your-land", array($landnum, "%2", "%3")));
                         return true;
                     } elseif (substr($player, 0, 2) === "r:") {
                         if (!$sender->hasPermission("economyland.command.land.invite.remove")) {
                             $sender->sendMessage("You don't have permissions to use this command.");
                             return true;
                         }
                         $player = substr($player, 2);
                         //$this->land->exec("UPDATE land SET invitee = '".str_replace($player.",", "", $info["invitee"])."' WHERE ID = {$info["ID"]};");
                         $result = $this->db->removeInviteeById($landnum, $player);
                         if ($result === false) {
                             $sender->sendMessage($this->getMessage("not-invitee", array($player, $landnum, "%3")));
                             return true;
                         }
                         $sender->sendMessage($this->getMessage("removed-invitee", array($player, $landnum, "%3")));
                     } else {
                         /*if(strpos($info["invitee"], ",".$player.",") !== false){
                         			$sender->sendMessage($this->getMessage("already-invitee", array($player, "", "")));
                         			return true;
                         		}
                         		$this->land->exec("UPDATE land SET invitee = '".$info["invitee"].$player.",' WHERE ID = {$info["ID"]};");*/
                         if (preg_match('#^[a-zA-Z0-9_]{3,16}$#', $player) == 0) {
                             $sender->sendMessage($this->getMessage("invalid-invitee", [$player, "%2", "%3"]));
                             return true;
                         }
                         $result = $this->db->addInviteeById($landnum, $player);
                         if ($result === false) {
                             $sender->sendMessage($this->getMessage("already-invitee", array($player, "%2", "%3")));
                             return true;
                         }
                         $sender->sendMessage($this->getMessage("success-invite", array($player, $landnum, "%3")));
                     }
                     return true;
                 case "invitee":
                     $landnum = array_shift($param);
                     if (trim($landnum) == "" or !is_numeric($landnum)) {
                         $sender->sendMessage("Usage: /land invitee <land number>");
                         return true;
                     }
                     $info = $this->db->getInviteeById($landnum);
                     if ($info === false) {
                         $sender->sendMessage($this->getMessage("no-land-found", array($landnum, "%2", "%3")));
                         return true;
                     }
                     $output = "Invitee of land #{$landnum} : \n";
                     $output .= implode(", ", $info);
                     $sender->sendMessage($output);
                     return true;
                 case "here":
                     if (!$sender instanceof Player) {
                         $sender->sendMessage("Please run this command in-game.");
                         return true;
                     }
                     $x = $sender->x;
                     $z = $sender->z;
                     $info = $this->db->getByCoord($x, $z, $sender->getLevel()->getFolderName());
                     if ($info === false) {
                         $sender->sendMessage($this->getMessage("no-one-owned"));
                         return true;
                     }
                     $sender->sendMessage($this->getMessage("here-land", array($info["ID"], $info["owner"], "%3")));
                     return true;
                 default:
                     $sender->sendMessage("Usage: " . $cmd->getUsage());
             }
             return true;
         case "landsell":
             $id = array_shift($param);
             switch ($id) {
                 case "here":
                     if (!$sender instanceof Player) {
                         $sender->sendMessage("Please run this command in-game.");
                         return true;
                     }
                     $x = $sender->getX();
                     $z = $sender->getZ();
                     //$result = $this->land->query("SELECT * FROM land WHERE (startX < $x AND endX > $x) AND (startZ < $z AND endZ > $z) AND level = '{$sender->getLevel()->getFolderName()}'");
                     //$info = $result->fetchArray(SQLITE3_ASSOC);
                     $info = $this->db->getByCoord($x, $z, $sender->getLevel()->getFolderName());
                     if ($info === false) {
                         $sender->sendMessage($this->getMessage("no-one-owned"));
                         return true;
                     }
                     if ($info["owner"] !== $sender->getName() and !$sender->hasPermission("economyland.landsell.others")) {
                         $sender->sendMessage($this->getMessage("not-my-land"));
                     } else {
                         EconomyAPI::getInstance()->addMoney($sender, $info["price"] / 2);
                         $sender->sendMessage($this->getMessage("sold-land", array($info["price"] / 2, "%2", "%3")));
                         //$this->land->exec("DELETE FROM land WHERE ID = {$info["ID"]}");
                         $this->db->removeLandById($info["ID"]);
                     }
                     return true;
                 default:
                     $p = $id;
                     if (is_numeric($p)) {
                         //$info = $this->land->query("SELECT * FROM land WHERE ID = $p")->fetchArray(SQLITE3_ASSOC);
                         $info = $this->db->getLandById($p);
                         if ($info === false) {
                             $sender->sendMessage($this->getMessage("no-land-found", array($p, "%2", "%3")));
                             return true;
                         }
                         if ($info["owner"] === $sender->getName() or $sender->hasPermission("economyland.landsell.others")) {
                             EconomyAPI::getInstance()->addMoney($sender, $info["price"] / 2, true, "EconomyLand");
                             $sender->sendMessage($this->getMessage("sold-land", array($info["price"] / 2, "", "")));
                             //$this->land->exec("DELETE FROM land WHERE ID = $p");
                             $this->db->removeLandById($p);
                         } else {
                             $sender->sendMessage($this->getMessage("not-your-land", array($p, $info["owner"], "%3")));
                         }
                     } else {
                         $sender->sendMessage("Usage: /landsell <here|land number>");
                     }
             }
             return true;
     }
     return false;
 }
Esempio n. 2
0
 public function addInvitee($landId, $player)
 {
     return $this->db->addInviteeById($landId, $player);
 }