Advertisement
Guest User

Untitled

a guest
Oct 21st, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.59 KB | None | 0 0
  1. <?php
  2.  
  3. namespace anomalii;
  4.  
  5. use anomalii\Task;
  6. use pocketmine\Player;
  7. use pocketmine\inventory\Inventory;
  8. use pocketmine\item\Item;
  9. use pocketmine\event\block\BlockBreakEvent;
  10. use pocketmine\event\player\PlayerInteractEvent;
  11. use pocketmine\event\player\PlayerJoinEvent;
  12. use pocketmine\event\Listener;
  13. use pocketmine\plugin\PluginBase;
  14. use pocketmine\utils\Config;
  15. use pocketmine\command\CommandSender;
  16. use pocketmine\command\Command;
  17.  
  18. class Main extends PluginBase implements Listener{
  19.  
  20. public $anomalies;
  21. public $detectors;
  22. public $users = [];
  23.  
  24. public function onEnable(){
  25. if(!is_dir($this->getDataFolder())){
  26. mkdir($this->getDataFolder());
  27. }
  28.  
  29. $this->getServer()->getPluginManager()->registerEvents($this, $this);
  30.  
  31. $this->getLogger()->info("Anplug loaded");
  32. $this->anomalies = new Config($this->getDataFolder()."anomalies.json", Config::JSON, "");
  33. $this->detectors = new Config($this->getDataFolder()."detectors.json", Config::JSON, "");
  34. }
  35.  
  36. public function onDisable() {
  37. $this->anomalies->save();
  38. }
  39.  
  40. public function onJoin(PlayerJoinEvent $event) {
  41. $event->getPlayer()->setAllowMovementCheats(true);
  42. if (!$this->detectors->exists($event->getPLayer()->getName()) or $this->detectors->get($event->getPlayer()->getName()) < 1) {
  43. $event->getPlayer()->getInventory()->remove(Item::get(405));
  44. $this->detectors->set($event->getPlayer()->getName(), mt_rand(15, 20));
  45. $this->detectors->save();
  46. }
  47. }
  48.  
  49. public function onBreak(BlockBreakEvent $event) {
  50. if ($this->checkBlock($event)) {
  51. $event->setCancelled(true);
  52. }
  53. }
  54.  
  55. public function onInteract(PlayerInteractEvent $event){
  56. if (isset($this->users[$event->getPlayer()->getName()])) {
  57. if ($this->checkBlock($event)) {
  58. $event->getPlayer()->sendMessage("В этом месте уже есть другая аномалия, выберите другое место!");
  59. } else {
  60. $this->anomalies->set($this->users[$event->getPlayer()->getName()], [
  61. "X" => $event->getBlock()->getX(),
  62. "Y" => $event->getBlock()->getY(),
  63. "Z" => $event->getBlock()->getZ()
  64. ]);
  65. $event->getPlayer()->sendMessage("Аномалия §l§4{$this->users[$event->getPlayer()->getName()]} установлена!");
  66. $this->anomalies->save();
  67. unset($this->users[$event->getPlayer()->getName()]);
  68. }
  69. }
  70. if ($this->checkBlock($event) and $event->getItem()->getId() == 405) {
  71. $event->getPlayer()->sendMessage("Начался поиск артефактов, подождите 10 секунд");
  72. $this->getServer()->getScheduler()->scheduleDelayedTask(new Task($this, $event), 200);
  73. }
  74. }
  75.  
  76. public function foo($event) {
  77. $this->detectors->set($event->getPlayer()->getName(), $this->detectors->get($event->getPlayer()->getName())-1);
  78. $this->detectors->save();
  79. if ($this->detectors->get($event->getPlayer()->getName()) < 0) {
  80. $event->getPlayer()->getInventory()->remove(Item::get(405));
  81. $event->getPlayer()->sendMessage("Детектор разряжен");
  82. $this->detectors->set($event->getPlayer()->getName(), mt_rand(15, 20));
  83. $this->detectors->save();
  84. } else {
  85. $a = $this->getAnomal($event);
  86. if (isset($a["drop"])) {
  87. $drops = $a["drop"];
  88. mt_srand($this->make_seed());
  89. $luck = mt_rand(1, 100);
  90. if ($luck <= 20) {
  91. $el = $drops[array_rand($drops)];
  92. $amount = mt_rand(1, $el['amount']);
  93. $event->getPlayer()->getInventory()->addItem(Item::get($el["id"], 0, $amount));
  94. $event->getPlayer()->sendMessage("Вы нашли артефакт!");
  95. } else {
  96. $event->getPlayer()->sendMessage("Артефакты не обнаружены!");
  97. }
  98. } else {
  99. $event->getPlayer()->sendMessage("Артефакты не обнаружены!");
  100. }
  101. }
  102. }
  103.  
  104. public function checkBlock($event) {
  105. foreach ($this->anomalies->getAll() as $a) {
  106. if($a["X"] == $event->getBlock()->getX() and
  107. $a["Y"] == $event->getBlock()->getY() and
  108. $a["Z"] == $event->getBlock()->getZ()) {
  109. return true;
  110. }
  111. }
  112. return false;
  113. }
  114.  
  115. public function getAnomal($event) {
  116. foreach ($this->anomalies->getAll() as $a) {
  117. if($a["X"] == $event->getBlock()->getX() and
  118. $a["Y"] == $event->getBlock()->getY() and
  119. $a["Z"] == $event->getBlock()->getZ()) {
  120. return $a;
  121. }
  122. }
  123. return null;
  124. }
  125.  
  126. function make_seed() {
  127. list($usec, $sec) = explode(' ', microtime());
  128. return $sec + $usec * 1000000;
  129. }
  130.  
  131. public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) {
  132. if ($cmd->getName() == "san" and $sender->hasPermission("anomalii.command")) {
  133. if ($args != null and count($args) == 1) {
  134. if (!$this->anomalies->exists($args[0])){
  135. $sender->sendMessage("Тапните на аномалию");
  136. $this->users[$sender->getName()] = $args[0];
  137. } else {
  138. $sender->sendMessage("Аномалия §l§4{$args[0]} уже существует!");
  139. }
  140. } else {
  141. $sender->sendMessage("Использование: §l§4/san §o§c[название]");
  142. }
  143. } elseif ($cmd->getName() == "sanp" and $sender->hasPermission("anomalii.command")) {
  144. if ($args != null and count($args) > 2) {
  145. if ($this->anomalies->exists($args[0])) {
  146. switch ($args[1]) {
  147. case "add":
  148. if (!isset($this->anomalies->get($args[0])["drop"])) {
  149. $k = 0;
  150. $values = $this->anomalies->get($args[0])+["drop"=>[]];
  151. } else {
  152. $k = count($this->anomalies->get($args[0])["drop"]);
  153. $values = $this->anomalies->get($args[0]);
  154. }
  155. for ($i = 2; $i < count($args); $i++) {
  156. $arg = explode(':', $args[$i]);
  157. if (count($arg) == 3) {
  158. $values["drop"][$k] = ["id"=>$arg[0], "amount"=>$arg[1], "chance"=>$arg[2]];
  159. } else {
  160. $sender->sendMessage("Использование: §l§4/sanp §o§c[название] [add|rem] [[[id1:maxamount1:chance1] [idN:maxamountN:chanceN]]|[id]]");
  161. }
  162. $k++;
  163. }
  164. $this->anomalies->set($args[0], $values);
  165. $this->anomalies->save();
  166. $sender->sendMessage("Аномалия изменена.");
  167. break;
  168. case "rem":
  169. if (isset($this->anomalies->get($args[0])["drop"])) {
  170. $k = 0;
  171. $f = false;
  172. $drops = $this->anomalies->get($args[0]);
  173. if (count($args) == 3) {
  174. foreach ($drops["drop"] as $drop) {
  175. if ($drop['id'] == $args[2]) {
  176. $f = true;
  177. break;
  178. } else {
  179. $k++;
  180. }
  181. }
  182. if ($f) {
  183. unset($drops["drop"][$k]);
  184. sort($drops["drop"]);
  185. $this->anomalies->set($args[0], $drops);
  186. $this->anomalies->save();
  187. $sender->sendMessage("Аномалия изменена.");
  188. } else {
  189. $sender->sendMessage("Предмет не найден.");
  190. }
  191. } else {
  192. $sender->sendMessage("Использование: §l§4/sanp §o§c[название] [add|rem] [[[id1:maxamount1:chance1] [idN:maxamountN:chanceN]]|[id]]");
  193. }
  194.  
  195. } else {
  196. $sender->sendMessage("Дроп для аномалии не установлен.");
  197. }
  198. break;
  199. default:
  200. $sender->sendMessage("Неизвестная команда");
  201. break;
  202. }
  203. } else {
  204. $sender->sendMessage("Аномалия не найдена!");
  205. }
  206.  
  207. } else {
  208. $sender->sendMessage("Использование: §l§4/sanp §o§c[название] [add|rem] [id1:maxamount1:chance1] [idN:maxamountN:chanceN]");
  209. }
  210. } elseif($cmd->getName() == "dan" and $sender->hasPermission("anomalii.command")) {
  211. if ($args != null and count($args) == 1) {
  212. if ($this->anomalies->exists($args[0])) {
  213. $this->anomalies->remove($args[0]);
  214. $this->anomalies->save();
  215. $sender->sendMessage("Аномалия удалена.");
  216. } else {
  217. $sender->sendMessage("Аномалия не найдена!");
  218. }
  219. } else {
  220. $sender->sendMessage("Использование: §l§4/dan §o§c[название]");
  221. }
  222. }
  223. }
  224.  
  225. }
  226. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement