Advertisement
Guest User

Untitled

a guest
Dec 9th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.86 KB | None | 0 0
  1. <?php
  2.  
  3. namespace SIvanov;
  4.  
  5. use pocketmine\block\Block;
  6. use pocketmine\entity\Effect;
  7. use pocketmine\entity\Entity;
  8. use pocketmine\event\block\BlockBreakEvent;
  9. use pocketmine\event\entity\EntityDamageByEntityEvent;
  10. use pocketmine\event\entity\EntityDamageEvent;
  11. use pocketmine\event\inventory\CraftItemEvent;
  12. use pocketmine\event\inventory\InventoryClickEvent;
  13. use pocketmine\event\inventory\InventoryPickupItemEvent;
  14. use pocketmine\event\Listener;
  15. use pocketmine\event\player\PlayerChatEvent;
  16. use pocketmine\event\player\PlayerDropItemEvent;
  17. use pocketmine\event\player\PlayerExhaustEvent;
  18. use pocketmine\event\player\PlayerInteractEvent;
  19. use pocketmine\event\player\PlayerJoinEvent;
  20. use pocketmine\event\player\PlayerMoveEvent;
  21. use pocketmine\event\player\PlayerQuitEvent;
  22. use pocketmine\inventory\WindowInventory;
  23. use pocketmine\item\Bed;use pocketmine\item\Item;
  24. use pocketmine\level\Position;
  25. use pocketmine\level\sound\MinecraftSound;
  26. use pocketmine\math\Vector3;
  27. use pocketmine\network\mcpe\protocol\ContainerClosePacket;
  28. use pocketmine\network\mcpe\protocol\LevelEventPacket;
  29. use pocketmine\Player;
  30. use pocketmine\plugin\PluginBase;
  31. use pocketmine\utils\TextFormat;
  32. use SIvanov\bossbar\API;
  33.  
  34. class BedWarsListener implements Listener
  35. {
  36.  
  37. public $bedWars;
  38. public $blocks;
  39. public $breakableBlocks = [24, 54, 49, 30, 65, 159, 35];
  40.  
  41. public function __construct(BedWars $bedWars)
  42. {
  43. $this->bedWars = $bedWars;
  44. }
  45.  
  46. public function getPlugin()
  47. {
  48. return $this->bedWars;
  49. }
  50.  
  51. public function onJoin(PlayerJoinEvent $event)
  52. {
  53. $player = $event->getPlayer();
  54. var_dump(1);
  55.  
  56. if ($this->getPlugin()->eid != null) {
  57. API::sendBossBarToPlayer($player, $this->getPlugin()->eid, 'Load');
  58. $this->getPlugin()->sendBB($player, " §bvk.com/hillens§a &§d hillens.ru\n\n§l§eHillens Network§r§7 :§c BedWars§b BETA");
  59. } else {
  60. $this->getPlugin()->eid = API::addBossBar($player, 'Load');
  61. $this->getPlugin()->sendBB($player, " §bvk.com/hillens§a &§d hillens.ru\n\n§l§eHillens Network§r§7 :§c BedWars§b BETA");
  62. }
  63. }
  64.  
  65. public function onMove(PlayerMoveEvent $event)
  66. {
  67. $player = $event->getPlayer();
  68. $arena = $this->getPlugin()->getArenaByLevel($player->getLevel());
  69.  
  70. if ($arena != null and $arena->inArena($player) and $arena->status == $arena::GAME_WAITING and $player->getY() <= 5) {
  71. $player->teleport(new Position($arena->lobby["x"] + 0.5, $arena->lobby["y"], $arena->lobby["z"] + 0.5, $this->getPlugin()->getServer()->getLevelByName($arena->world)));
  72. }
  73. }
  74.  
  75. public function onQuit(PlayerQuitEvent $event)
  76. {
  77. $player = $event->getPlayer();
  78. $arena = $this->getPlugin()->getArenaByLevel($player->getLevel());
  79.  
  80. if ($arena == null) return true;
  81.  
  82. if ($arena->inArena($player)) {
  83. $arena->removePlayer($player, true, true, true);
  84. }
  85. }
  86.  
  87. public function noHunger(PlayerExhaustEvent $event)
  88. {
  89. $player = $event->getPlayer();
  90. $arena = $this->getPlugin()->getArenaByLevel($player->getLevel());
  91.  
  92. if ($player->getLevel()->getFolderName() == $this->getPlugin()->getServer()->getDefaultLevel()->getFolderName()) {
  93. $event->setCancelled(true);
  94. $player->setFood(20);
  95. return true;
  96. }
  97. if ($arena != null) {
  98. if ($arena->status == $arena::END or $arena->status == $arena::GAME_WAITING) {
  99. $event->setCancelled(true);
  100. $player->setFood(20);
  101. return true;
  102. }
  103. }
  104. }
  105.  
  106. public function teleportTask(Player $player, $type)
  107. {
  108. $player->getInventory()->clearAll();
  109. $player->setHealth($player->getMaxHealth());
  110. $player->setFood($player->getMaxFood());
  111. $player->removeAllEffects();
  112. $player->setImmobile(false);
  113. $player->sendMessage("lllll");
  114. if($type == "4x4") {
  115. $arenas = ["Stonekeep"];
  116.  
  117. foreach ($arenas as $arenaName) {
  118. if ($this->getPlugin()->getArenaByLevel($this->getPlugin()->getServer()->getLevelByName($arenaName))->status == BedWarsArena::GAME_WAITING) {
  119. foreach ($this->getPlugin()->arenas as $arena) {
  120. if ($arena->name == $arenaName) {
  121. if (count($arena->players) >= 1) {
  122. $arena->join($player, false);
  123. return true;
  124. }
  125. }
  126. }
  127. }
  128. }
  129. foreach ($arenas as $arenaName) {
  130. if ($this->getPlugin()->getArenaByLevel($this->getPlugin()->getServer()->getLevelByName($arenaName))->status == BedWarsArena::GAME_WAITING) {
  131. foreach ($this->getPlugin()->arenas as $arena) {
  132. if ($arena->name == $arenaName) {
  133. $arena->join($player, false);
  134. return true;
  135. }
  136. }
  137. }
  138. }
  139. return $player->sendMessage("§cНет свободных арен!");
  140. }
  141. }
  142.  
  143. public function coords(PlayerInteractEvent $event)
  144. {
  145. $player = $event->getPlayer();
  146. $block = $event->getBlock();
  147. $item = $event->getItem();
  148.  
  149. if ($item->getId() == 289) {
  150. $arena = $this->getPlugin()->getArenaByLevel($player->getLevel());
  151. $arena->positions["name"][$player->getName()] = 6;
  152. $arena->positions["vector"][$player->getName()] = new Vector3($player->x, $player->y, $player->z);
  153.  
  154. $player->sendMessage("§bТелепортация на базу. Не двигайтесь!");
  155. $player->getInventory()->removeItem(Item::get(289, 0, 1));
  156. }
  157.  
  158. if($block->getId() == 41) {
  159. $this->getPlugin()->arenas["Christmas"]->join($player);
  160. }
  161.  
  162. if ($item->getId() == 58) $event->setCancelled();
  163.  
  164. if ($item->getId() == 378) return $player->sendMessage("X: {$block->getX()}\nY: {$block->getY()}\nZ: {$block->getZ()}\nБлок: {$block->getId()}:{$block->getDamage()}");
  165.  
  166. if ($item->getCustomName() == "§r§l§c Выйти в лобби!§r\n§7Нажмите, чтобы выйти с арены!") {
  167. $player->setNameTag($player->getName());
  168. $this->getPlugin()->getPerms()->updateTag($player);
  169. $this->getPlugin()->sendBB($player, " §bvk.com/hillens§a &§d hillens.ru\n\n§l§eHillens Network§r§7 :§c BedWars§b BETA");
  170. if ($this->getPlugin()->getArenaByLevel($player->getLevel()) == null) return true;
  171. if ($this->getPlugin()->getArenaByLevel($player->getLevel())->inArena($player)) {
  172. $this->getPlugin()->getArenaByLevel($player->getLevel())->removePlayer($player);
  173.  
  174. $player->teleport(new Position(125.5, 4, 127.5, $this->getPlugin()->getServer()->getDefaultLevel()));
  175. $player->removeAllEffects();
  176. $player->getInventory()->clearAll();
  177.  
  178. $pk = new LevelEventPacket();
  179. $pk->evid = 3001;
  180. $pk->data = 10000;
  181. $player->dataPacket($pk);
  182. }
  183. }
  184.  
  185. if ($item->getId() == 340) {
  186. $window = new class($player, TextFormat::AQUA . "Выберите команду") extends WindowInventory
  187. {
  188. /** @var Player */
  189. private $player;
  190. /** @var int */
  191. private $entityRuntimeId;
  192. /** @var int */
  193. private $slot;
  194. };
  195. foreach ($this->getPlugin()->arenas as $arena) {
  196. $teams = $arena->getTeams();
  197. foreach ($teams as $team) {
  198. $damage = $arena->convertTeamToDamage($team);
  199. $color = $arena->convertDamageToColor($damage);
  200. $name = $arena->convertTeamToRus($team);
  201. $players = "§7 -§{$color} " . implode("\n§7 - §{$color}", $arena->getPlayersName($team));
  202. $count = ($arena->getPlayersNum($team) == 0) ? 1 : $arena->getPlayersNum($team);
  203. if ($arena->getPlayersName($team) != null) {
  204. $window->addItem(Item::get(159, $damage, $count)->setCustomName("§r§7> Команда §{$color}{$name}\n\n{$players}"));
  205. } else {
  206. $window->addItem(Item::get(159, $damage, $count)->setCustomName("§r§7> Команда §{$color}{$name}"));
  207. }
  208. $player->addWindow($window);
  209. }
  210. }
  211. }
  212. }
  213.  
  214. public function onBreak(BlockBreakEvent $event)
  215. {
  216. $player = $event->getPlayer();
  217.  
  218. $block = $event->getBlock();
  219. $block2 = $player->getLevel()->getBlock(new Vector3($block->getX(), $block->getY() - 1, $block->getZ()), false);
  220. $arena = $this->getPlugin()->getArenaByLevel($player->getLevel());
  221.  
  222. if (!$arena instanceof BedWarsArena) return true;
  223.  
  224. if($arena->status == BedWarsArena::GAME) {
  225. if ($block->getId() == Block::BED_BLOCK and $arena->inArena($player)) {
  226.  
  227. $team = $arena->convertDamageToTeam($block2->getDamage());
  228.  
  229. if (!$arena->teams[$team]->inTeam($player)) {
  230. $event->setDrops([]);
  231. $arena->setStatus($team, "DEAD");
  232.  
  233. foreach ($arena->players as $players) {
  234. $players->getLevel()->addSound(new MinecraftSound(new Vector3($players->x, $players->y, $players->z), "mob.wither.death"), [$players]);
  235. $players->sendMessage("§7>§{$arena->convertDamageToColor($block2->getDamage())} Кровать {$arena->convertTeamToRus($team)}§7 была разрушена игроком {$player->getNameTag()}§7!");
  236. }
  237.  
  238. $arena->setBeds($player->getName(), $arena->getBeds($player->getName()) + 1);
  239. $this->getPlugin()->stats->getStats()->setBeds($player, $arena->getBeds($player->getName()));
  240. } else {
  241. $event->setCancelled();
  242. $player->sendMessage("§cНельзя сломать собственную кровать!");
  243. }
  244. }
  245.  
  246. if ($block->getId() != Block::BED_BLOCK and !in_array($block->getId(), $this->breakableBlocks) and $arena->inArena($player)) {
  247. $event->setCancelled();
  248. $player->sendMessage("§cЛомать можно только блоки поставленные игроками!");
  249. }
  250. if ($block->getId() == 5 and $block->getDamage() != 0) {
  251. $event->setCancelled();
  252. $player->sendMessage("§cЛомать можно только блоки поставленные игроками!");
  253. }
  254. }
  255. }
  256.  
  257. public function onClickEvent(InventoryClickEvent $event)
  258. {
  259. $player = $event->getPlayer();
  260.  
  261. $inventoryChest = $event->getInventory();
  262.  
  263. if ($inventoryChest instanceof WindowInventory) {
  264. if ($event->getItem()->getCustomName() == "§r§aСлучайная арена (4v4v4v4)\n\n§eНажмите, чтобы начать игру!") {
  265. $event->setCancelled();
  266.  
  267. $pk = new ContainerClosePacket();
  268. $pk->windowid = $player->getWindowId($inventoryChest);
  269. $player->dataPacket($pk);
  270.  
  271. $this->getPlugin()->getServer()->getScheduler()->scheduleDelayedTask(new \pocketmine\scheduler\CallbackTask(array($this, "teleportTask"), array($player)), 3 * 20);
  272.  
  273. $layer->sendMessage("§7>§a Поиск свободной арены...1111Я ЕБАЛ!!!ЧО НЕ РОБИТ ЭТО ГОВНО");
  274.  
  275. $player->setImmobile(true);
  276. $player->addEffect(Effect::getEffect(15)->setDuration(20 * 9999999)->setVisible(false));
  277. }
  278. if ($event->getItem()->getId() == 159) {
  279.  
  280. foreach ($this->getPlugin()->arenas as $arena) {
  281. $team = $arena->convertDamageToTeam($event->getItem()->getDamage());
  282. $damage = $arena->convertTeamToDamage($team);
  283. $color = $arena->convertDamageToColor($damage);
  284. $event->setCancelled();
  285. $name = $arena->convertTeamToRus($team);
  286. if (!$arena->teams[$team]->inTeam($player)) {
  287. if ($arena->getPlayersNum($team) <= $arena->maxplayers) {
  288. if ($arena->getPlayersNum($team) >= ceil(count($arena->players) / $arena->maxplayers)) {
  289. $player->sendMessage("§cСльшком много игроков в команде {$name}!");
  290.  
  291. $pk = new ContainerClosePacket();
  292. $pk->windowid = $player->getWindowId($inventoryChest);
  293. $player->dataPacket($pk);
  294. } else {
  295. $arena->removePlayerSelect($player);
  296. $arena->teams[$team]->setPlayers($player);
  297. $player->sendMessage("§7> Вы выбрали команду§{$color} {$name}§7!");
  298. $player->setNameTag("§{$color}{$player->getName()}");
  299.  
  300. $pk = new ContainerClosePacket();
  301. $pk->windowid = $player->getWindowId($inventoryChest);
  302. $player->dataPacket($pk);
  303. }
  304. } else {
  305. $player->sendMessage("§7> Команда§{$color} {$name}§7 заполнена!");
  306.  
  307. $pk = new ContainerClosePacket();
  308. $pk->windowid = $player->getWindowId($inventoryChest);
  309. $player->dataPacket($pk);
  310. }
  311. } else {
  312. $player->sendMessage("§7> Вы уже в команде§{$color} {$name}§7!");
  313.  
  314. $pk = new ContainerClosePacket();
  315. $pk->windowid = $player->getWindowId($inventoryChest);
  316. $player->dataPacket($pk);
  317. }
  318. }
  319. }
  320. }
  321. }
  322.  
  323. public function onPickUp(InventoryPickupItemEvent $event)
  324. {
  325. if ($event->getItem()->getItem()->getId() == 355) {
  326. $event->setCancelled();
  327. }
  328. }
  329.  
  330. public function onDrop(PlayerDropItemEvent $event)
  331. {
  332. $player = $event->getPlayer();
  333. $arena = $this->getPlugin()->getArenaByLevel($player->getLevel());
  334.  
  335. if ($arena != null) {
  336. if ($arena->status != BedWarsArena::GAME) {
  337. $event->setCancelled();
  338. }
  339. } else {
  340. $event->setCancelled();
  341. }
  342. }
  343.  
  344. public function onCraft(CraftItemEvent $event)
  345. {
  346. $event->setCancelled();
  347. }
  348.  
  349.  
  350. public function onKill(EntityDamageEvent $event)
  351. {
  352. if ($event->getCause() == EntityDamageEvent::CAUSE_FALL) $event->setCancelled();
  353. if ($event instanceof EntityDamageByEntityEvent) {
  354. $entity = $event->getEntity();
  355. $player = $event->getDamager();
  356. $arena = $this->getPlugin()->getArenaByLevel($player->getLevel());
  357.  
  358. if ($player->isImmobile()) {
  359. $event->setCancelled();
  360. return true;
  361. }
  362.  
  363. if ($entity->getNameTag() == "4x4" and $player instanceof Player) {
  364. $event->setCancelled();
  365. $this->getPlugin()->openSelect($player, "4x4");
  366. }
  367.  
  368. if (!$entity instanceof Player) return true;
  369. if (!$player instanceof Player) return true;
  370.  
  371. if ($player->getGamemode() == 3) $event->setCancelled(true);
  372.  
  373. if ($arena != null and $arena->inArena($player) and $arena->status == $arena::GAME_WAITING) {
  374. $event->setCancelled();
  375. }
  376.  
  377. if ($entity->getHealth() - $event->getFinalDamage() <= 2) {
  378. $arena = $this->getPlugin()->getArenaByLevel($player->getLevel());
  379.  
  380. /*
  381. $items = $entity->getInventory()->all(Item::get(266));
  382. var_dump($items);
  383. $id = null;
  384. $count = null;
  385. foreach ($items as $item){
  386. $id = $item->getId();
  387. $count = $item->getCount();
  388. }
  389. $entity->getLevel()->dropItem($entity->asVector3(), Item::get($id, 0, (int)($count / 2)));
  390. */
  391.  
  392. if (!$arena instanceof BedWarsArena) return true;
  393.  
  394. if ($arena->inArena($player)) {
  395. $entity->setHealth(20);
  396. $entity->setFood(20);
  397.  
  398. if ($arena->getStatus($arena->getTeam($entity)) == "ALIVE") {
  399. $this->getPlugin()->spectate[$arena->server][$entity->getName()] = 0;
  400. $arena->initPlayer($entity, false);
  401. $entity->setGamemode(3);
  402. $entity->teleport(new Vector3($arena->lobby["x"] + 0.5, $arena->lobby["y"] + 20, $arena->lobby["z"] + 0.5));
  403.  
  404. foreach ($arena->players as $players) {
  405. $players->sendMessage("§7> {$player->getNameTag()}§7 убил игрока {$entity->getNameTag()}§7.");
  406. }
  407.  
  408. $arena->setKills($player->getName(), $arena->getKills($player->getName()) + 1);
  409. $this->getPlugin()->stats->getStats()->setDeaths($entity, $this->getPlugin()->stats->getStats()->getDeaths($entity) +1);
  410. $this->getPlugin()->stats->getStats()->setKills($player, $arena->getKills($player->getName()));
  411. $player->sendMessage("§7> Убийство! Кол-во убийств за всю игру -§b {$arena->getKills($player->getName())}§7! В конце игры Вы получите -§e " . ($arena->getKills($player->getName()) * 20) . " монет§7!");
  412. $player->sendMessage("§7> Используя§a Множитель Монет x3§7, Вы получите вместо§e " . ($arena->getKills($player->getName()) * 20) . " монет§7,§e " . (($arena->getKills($player->getName()) * 20) * 3) . " монет§7!");
  413. } else {
  414. $arena->initPlayer($entity, false);
  415. $entity->setGamemode(3);
  416. $entity->teleport(new Vector3($arena->team[$arena->getTeam($entity)]["spawn"]["x"] + 0.5, $arena->team[$arena->getTeam($entity)]["spawn"]["y"] + 0.5, $arena->team[$arena->getTeam($entity)]["spawn"]["z"] + 0.5));
  417. foreach ($arena->players as $players) {
  418. $players->sendMessage("§7> {$player->getNameTag()}§7 убил игрока {$entity->getNameTag()}§7.§l§b FINAL KILL!§r");
  419. }
  420.  
  421. $player->sendMessage("§7> Убийство! Кол-во убийств за всю игру -§b {$arena->getKills($player->getName())}§7! В конце игры Вы получите -§e " . ($arena->getKills($player->getName()) * 20) . " монет§7!");
  422. $player->sendMessage("§7> Используя§a Множитель Монет x3§7, Вы получите вместо§e " . ($arena->getKills($player->getName()) * 20) . " монет§7,§e " . (($arena->getKills($player->getName()) * 20) * 3) . " монет§7!");
  423.  
  424. $arena->setKills($player->getName(), $arena->getKills($player->getName()) + 1);
  425. $this->getPlugin()->stats->getStats()->setFinalKills($player, $this->getPlugin()->stats->getStats()->getFinalKills($player) +1);
  426. $arena->removePlayerFromTeam($entity, $arena->getTeam($entity));
  427. $this->getPlugin()->stats->getStats()->setDeaths($entity, $this->getPlugin()->stats->getStats()->getDeaths($entity) +1);
  428. }
  429. }
  430. }
  431. } else {
  432. $player = $event->getEntity();
  433. if (!$player instanceof Player) return true;
  434.  
  435. foreach ($this->getPlugin()->arenas as $arena) {
  436. if (!$arena instanceof BedWarsArena) return true;
  437. if (($player->getHealth() - $event->getFinalDamage()) <= 2) {
  438. foreach ($arena->players as $players) {
  439. $player->setHealth(20);
  440. $player->setFood(20);
  441. $player->getInventory()->clearAll();
  442.  
  443. if ($arena->inArena($player)) {
  444.  
  445. if ($arena->getStatus($arena->getTeam($player)) == "ALIVE") {
  446. $this->getPlugin()->spectate[$arena->server][$player->getName()] = 0;
  447. $arena->initPlayer($player, false);
  448. $player->setGamemode(3);
  449.  
  450. if ($event->getCause() == EntityDamageEvent::CAUSE_LAVA) {
  451. $players->sendMessage("§7> {$player->getNameTag()}§7 умер в лаве!");
  452. $player->setDataProperty(Entity::DATA_FLAGS, Entity::DATA_FLAG_ONFIRE, false);
  453. } elseif ($event->getCause() == EntityDamageEvent::CAUSE_DROWNING) {
  454. $players->sendMessage("§7> {$player->getNameTag()}§7 задохнулся в воде!");
  455. } elseif ($event->getCause() == EntityDamageEvent::CAUSE_FIRE or $event->getCause() == EntityDamageEvent::CAUSE_FIRE_TICK) {
  456. $players->sendMessage("§7> {$player->getNameTag()}§7 сгорел!");
  457. $player->setDataProperty(Entity::DATA_FLAGS, Entity::DATA_FLAG_ONFIRE, false);
  458. } elseif ($event->getCause() == EntityDamageEvent::CAUSE_VOID) {
  459. $players->sendMessage("§7> {$player->getNameTag()}§7 упал в пустоту! qqqq");
  460. }
  461. $player->teleport(new Vector3($arena->lobby["x"] + 0.5, $arena->lobby["y"] + 20, $arena->lobby["z"] + 0.5));
  462. $this->getPlugin()->stats->getStats()->setDeaths($player, $this->getPlugin()->stats->getStats()->getDeaths($player) +1);
  463. } else {
  464. $arena->removePlayerFromTeam($player, $arena->getTeam($player));
  465. $arena->initPlayer($player, false);
  466. $player->setGamemode(3);
  467. $player->teleport(new Vector3($arena->team[$arena->getTeam($player)]["spawn"]["x"] + 0.5, $arena->team[$arena->getTeam($player)]["spawn"]["y"] + 0.5, $arena->team[$arena->getTeam($player)]["spawn"]["z"] + 0.5));
  468.  
  469. if ($event->getCause() == EntityDamageEvent::CAUSE_LAVA) {
  470. $players->sendMessage("§7> {$player->getNameTag()}§7 умер в лаве!§l§b FINAL KILL!§r");
  471. $player->setDataProperty(Entity::DATA_FLAGS, Entity::DATA_FLAG_ONFIRE, false);
  472. } elseif ($event->getCause() == EntityDamageEvent::CAUSE_DROWNING) {
  473. $players->sendMessage("§7> {$player->getNameTag()}§7 задохнулся в воде!§l§b FINAL KILL!§r");
  474. } elseif ($event->getCause() == EntityDamageEvent::CAUSE_FIRE or $event->getCause() == EntityDamageEvent::CAUSE_FIRE_TICK) {
  475. $players->sendMessage("§7> {$player->getNameTag()}§7 сгорел!§l§b FINAL KILL!§r");
  476. $player->setDataProperty(Entity::DATA_FLAGS, Entity::DATA_FLAG_ONFIRE, false);
  477. } elseif ($event->getCause() == EntityDamageEvent::CAUSE_VOID) {
  478. $players->sendMessage("§7> {$player->getNameTag()}§7 упал в пустоту!§l§b FINAL KILL!§r");
  479. }
  480. $this->getPlugin()->stats->getStats()->setDeaths($player, $this->getPlugin()->stats->getStats()->getDeaths($player) +1);
  481. break;
  482. }
  483. }
  484. }
  485. }
  486. }
  487. }
  488. }
  489.  
  490. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement