<?php __HALT_COMPILER(); ?>
q                     src/pawarenessc/slot/Main.php]*  -\]*  	h/      
   plugin.yml=  -\=  PY      <?php

namespace pawarenessc\slot;

use pocketmine\utils\Config;
use pocketmine\utils\TextFormat;

use pocketmine\event\Listener;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\Player;

use pocketmine\scheduler\Task;

use pocketmine\plugin\PluginBase;

use pocketmine\Server;

use pocketmine\command\Command;
use pocketmine\command\CommandSender;

use pocketmine\block\Block;

use pocketmine\math\Vector3;

use pocketmine\level\sound\PopSound;
use pocketmine\level\sound\AnvilFallSound;
use pocketmine\level\sound\EndermanTeleportSound;

use pocketmine\event\server\DataPacketReceiveEvent;

use pocketmine\network\mcpe\protocol\ModalFormRequestPacket;
use pocketmine\network\mcpe\protocol\ModalFormResponsePacket;
use MixCoinSystem\MixCoinSystem;
use metowa1227\moneysystem\api\core\API;

class Main extends pluginBase implements Listener
{
		public $slot = NULL;
		public $slota = NULL;
		
		
		public function onEnable()
    	{
    		$this->getLogger()->info("=========================");
 			$this->getLogger()->info("SLOTを読み込みました");
 			$this->getLogger()->info("制作者: PawarenessC");
 			$this->getLogger()->info("ライセンス: NYSL Version 0.9982");
 			$this->getLogger()->info("http://www.kmonos.net/nysl/");
 			$this->getLogger()->info("バージョン:{$this->getDescription()->getVersion()}");
 			$this->getLogger()->info("=========================");
       
        	$this->config = new Config($this->getDataFolder()."Setup.yml", Config::YAML,
			[
			
			"説明" > "プラグインは使用する経済プラグイン(EconomyAPI,MoneySystem,MixCoinSystem)から選んで記入してください、値段は一回スロットをする値段、ジャックポット以外の賞金は777以外のゾロ目が当たった時の値段を設定してください、ジャックポットは弄らない方がいいです",
			"プラグイン" => "EconomyAPI",
			"値段" => 100,
			"ジャックポット以外の賞金" => 1000,
			"初期ジャックポット" => 10000,
			"ジャックポット" => 10000,
			]);
			
			$this->auto = new Config($this->getDataFolder() ."auto.yml", Config::YAML);
			
				$this->system = $this->getServer()->getPluginManager()->getPlugin("EconomyAPI");
			$this->slot = NULL;
			$this->slota = NULL;
  		}
  		
  		public function onJoin(PlayerJoinEvent $event)
  		{
  			$player = $event->getPlayer();
  			$name = $player->getName();
  			$this->slot[$name] = false;
  			$this->slota[$name] = false;
  			$player->sendMessage("aaa");
  		}
  	
  	public function onCommand(CommandSender $sender, Command $command, string $label, array $args) : bool{
		$name = $sender->getName();
		switch($label)
		{
			case "slot":
			$money = $this->getMoney($sender);
			$price = $this->config->get("値段");
			if($price > $money)
			{
				$sender->sendMessage("§b§lSLOT>> §cお金が足りません！ スロットを一回回すには§f{$price}円§c必要です");
				return true;
				break;
			}elseif($this->slot[$name] == true)
			{
				$sender->sendMessage("§b§lSLOT>> §cスロット中です。");
				return true;
			}else{
			
				$this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "slot1"], [$sender]),30);
				$sender->addTitle("§f[§e?§f]-[§e?§f]-[§e?§f]","§6抽選を開始します...");
				$this->oto($sender, "pop");
				$this->slot[$name] = true;
				return true;
			}
			break;
			
			
			return true;
			
			case "autoslot":
			if($this->slota[$name] == false)
			{
				$sender->sendMessage("§b§lSLOT>> §bスロットの自動化を有効にしました。");
				$this->slota[$name] = true;
				return true;
				break;
			}else{
				$sender->sendMessage("§b§lSLOT>> §bスロットの自動化を無効にしました。");
				$this->slota[$name] = false;
				break;
				return true;
			}
	}
	return true;
}
	
	public function slot1($p)
	{
		$s1 = mt_rand(0,10);
		if($s1 == 10){ $s1 = 1; }
		$p->addTitle("§f[§e{$s1}§f]-[§a?§f]-[§c?§f]");
		$this->oto($p, "pop");
		$this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "slot2"], [$p, $s1]),30);
	}
	
	public function fslot1($p) //再抽選用
	{
		$s1 = mt_rand(0,13);
		if($s1 == 10){ $s1 = 1; }
		if($s1 == 11){ $s1 = 1; }
		if($s1 == 12){ $s1 = 1; }
		if($s1 == 13){ $s1 = 1; }
		$p->addTitle("§f[§e{$s1}§f]-[§a?§f]-[§c?§f]");
		$this->oto($p, "pop");
		$this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "fslot2"], [$p, $s1]),10);
	}
	
	public function slot2($p,$s1)
	{
		$s2 = mt_rand(0,10);
		if($s2 == 10){ $s2 = 2; }
		$p->addTitle("§f[§e{$s1}§f]-[§a{$s2}§f]-[§c?§f]");
		$this->oto($p, "pop");
		$this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "slot3"], [$p, $s1, $s2]),30);
	}
	
	public function fslot2($p,$s1) //再抽選
	{
		$s2 = mt_rand(0,13);
		if($s2 == 10){ $s2 = 2; }
		if($s2 == 11){ $s2 = 2; }
		if($s2 == 12){ $s2 = 2; }
		if($s2 == 13){ $s2 = 2; }
		$p->addTitle("§f[§e{$s1}§f]-[§a{$s2}§f]-[§c?§f]");
		$this->oto($p, "pop");
		$this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "fslot3"], [$p, $s1, $s2]),10);
	}
	
	public function slot3($p,$s1,$s2)
	{
		$s3 = mt_rand(0,10);
		if($s3 == 10){ $s3 = 3; }
		$p->addTitle("§f[§e{$s1}§f]-[§a{$s2}§f]-[§c{$s3}§f]","",20,15,10);
		$this->oto($p, "pop");
		$this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "end"], [$p, $s1, $s2, $s3]),20);
	}
	
	public function fslot3($p,$s1,$s2) //再抽選
	{
		$s3 = mt_rand(0,13);
		if($s3 == 10){ $s3 = 3; }
		if($s3 == 11){ $s3 = 3; }
		if($s3 == 12){ $s3 = 3; }
		if($s3 == 13){ $s3 = 3; }
		$p->addTitle("§f[§e{$s1}§f]-[§a{$s2}§f]-[§c{$s3}§f]","",20,15,10);
		$this->oto($p, "pop");
		$this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "end"], [$p, $s1, $s2, $s3]),10);
	}
	
	public function end($p,$s1,$s2,$s3)
	{
		$money = $this->config->get("値段");
		$name = $p->getName();
		$this->cutMoney($p,$money);
		$this->slot[$name] = false;
		if($s1 == $s2 && $s1 == $s3)
		{
			switch($s1)
			{
				case 1:
				case 2:
				case 3:
				case 4:
				case 5:
				case 6:
				case 8:
				case 9:
				
				$money = $this->config->get("ジャックポット以外の賞金");
				$this->addMoney($money, $p);
				$this->oto($p, "teleport");
				
				$p->sendMessage("§b§lSLOT>> §6ゾロ目おめでとうございます！");
				$p->sendMessage("§b§lSLOT>> §6{$money}円§a手に入れた！");
				$p->sendMessage("§b§lSLOT>> §f当たったので再抽選を停止します");
				
				$this->config->set("ジャックポット", $this->config->get("ジャックポット") + $this->config->get("値段"));
				$this->config->save();
				break;
				
				case 7:
				$money = $this->config->get("ジャックポット");
				$this->addMoney($money, $p);
				$this->oto($p, "teleport");
				
				$p->sendMessage("§b§lSLOT>> §6ジャックポット§bおめでとうございます！");
				$p->sendMessage("§b§lSLOT>> §6{$money}円手に入れた！");
				$p->sendMessage("§b§lSLOT>> §f当たったので再抽選を停止します");
				
				$this->getServer()->broadcastMessage("§lSLOT>> §a{$p->getName()}さんがジャックポット {$money}円を手に入れました！");
				$this->getServer()->broadcastMessage("§lSLOT>> ジャックポットが{$this->config->get("初期ジャックポット")}に戻りました");
				
				
				$this->config->set("ジャックポット", $this->config->get("初期ジャックポット"));
				$this->config->save();
				break;
			}
		}else
		{
			$this->config->set("ジャックポット", $this->config->get("ジャックポット") + $this->config->get("値段"));
			$this->config->save();
			$p->sendMessage("§b§lSLOT>> §c残念...ハズレです...");
			$p->sendMessage("§b§lSLOT>> §c現在のジャックポット§e{$this->config->get("ジャックポット")}円");
			$this->oto($p,"fall");
			$money = $this->config->get("値段");
			if($this->slota[$name] == true)
			{
				if($this->getMoney($p) > $money)
				{
					$p->sendMessage("§l§bSLOT>> §a外れたので再抽選を行います");
					$this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "fslot1"], [$p]),20);
					$p->addTitle("§f[§e?§f]-[§e?§f]-[§e?§f]","§6抽選を開始します...");
					$this->oto($p, "pop");
					$this->slot[$name] = true;
				}else
				{
					$p->sendMessage("§l§bSLOT>> §c所持金が足りないので再抽選を行えません");
				}
			}
	}
}			
  	public function addMoney($money, $p)
  	{
 		$plugin = $this->config->get("プラグイン");
		$name = $p->getName();
 		
 		if($plugin == "EconomyAPI")
 		{
 	  		$this->system->addmoney($name ,$money);
 		}
 		
 		if($plugin == "MixCoinSystem")
 		{
 	 		MixCoinSystem::getInstance()->PlusCoin($name,$money);
 		}
 		
 		if($plugin == "MoneySystem")
 		{
 			API::getInstance()->increase($p, $money);
 		}
 	}
 	
 	public function getMoney($p)
 	{
 		$plugin = $this->config->get("プラグイン");
		$name = $p->getName();
 		if($plugin == "EconomyAPI")
 		{
 	  		return $this->system->myMoney($name);
 		}
 		
 		if($plugin == "MixCoinSystem")
 		{
 			return MixCoinSystem::getInstance()->GetCoin($name);
 		}
 		
 		if($plugin == "MoneySystem")
 		{
 			return API::getInstance()->get($p);
 		}
 	}
 	
 	public function cutMoney($p, $money)
 	{
 		$plugin = $this->config->get("プラグイン");
 		$name = $p->getName();
 		if($plugin == "EconomyAPI")
 		{
 	  		$this->system->reduceMoney($name, $money);
 		}
 		
 		if($plugin == "MixCoinSystem")
 		{
 			MixCoinSystem::getInstance()->MinusCoin($name,$money);
 		}
 		
 		if($plugin == "MoneySystem")
 		{
 			API::getInstance()->reduce($p, $money);
 		}
 	}
 	
 	public function oto($player, $id)
 	{
 		switch($id)
 		{
 			case "pop": //抽選中
 			$player->getLevel()->addSound(new PopSound(new Vector3($player->x, $player->y, $player->z)));
 			break;
 			
 			case "fall": //ハズレ
 			$player->getLevel()->addSound(new AnvilFallSound(new Vector3($player->x, $player->y, $player->z)));
 			break;
 			
 			case "teleport": //あたり...
 			$player->getLevel()->addSound(new EndermanTeleportSound(new Vector3($player->x, $player->y, $player->z)));
 			break;
 		}
 	}
}

class CallbackTask extends Task{

	public function __construct(callable $callable, array $args = []){
		$this->callable = $callable;
		$this->args = $args;
	}

	public function onRun($tick){
		call_user_func_array($this->callable, $this->args);
	}

}


name: SLOT
main: pawarenessc\slot\Main
version: 2.0
api: [4.0.0,3.0.0,3.5.0]
author: PawarenessC
load: POSTWORLD
description: play slot.
commands:
 slot:
  description: "スロットを楽しみましょう"
  usage: "/slot"
 autoslot:
  description: "スロットの自動化を設定します"
  usage: "/autoslot"
fYqf٬   GBMB