View difference between Paste ID: eauNJfpY and PVSUxXEc
SHOW: | | - or go back to the newest paste.
1
<?php 
2
3
	namespace aAuth;
4
5
	use pocketmine\plugin\PluginBase;
6
	use pocketmine\utils\Config;
7
	use pocketmine\utils\TextFormat as F;
8
	use pocketmine\command\Command;
9
	use pocketmine\command\CommandSender;
10
	use pocketmine\event\Listener;
11
	use pocketmine\event\player\PlayerMoveEvent;
12
	use pocketmine\event\player\PlayerChatEvent;
13
  use pocketmine\event\player\PlayerDropItemEvent;
14
	use pocketmine\event\player\PlayerJoinEvent;
15
	use pocketmine\event\player\PlayerQuitEvent;
16
	use pocketmine\event\player\PlayerCommandPreprocessEvent;
17
	use pocketmine\Player;
18
	use pocketmine\Server;
19
 use pocketmine\event\block\BlockBreakEvent; 
20
use pocketmine\event\player\PlayerInteractEvent; 
21
22
	class wAuth extends PluginBase implements Listener {
23
		private $db, $users = array(), $reg = array();
24
25
		public function onEnable() {
26
			if(!is_dir($this->getDataFolder()))
27
				@mkdir($this->getDataFolder());
28
			$this->config = (new Config($this->getDataFolder()."config.yml", Config::YAML, ["salt" => "bbsecktechworld"]))->getAll();
29
			$this->db = new \SQLite3($this->getDataFolder()."users.db");
30
			$this->db->exec(stream_get_contents($this->getResource("database.sql")));
31
			$this->getServer()->getPluginManager()->registerEvents($this, $this);
32
			$this->getLogger()->info(F::GREEN."vAuth ON");
33
		}
34
35
		public function onPlayerMove(PlayerMoveEvent $event) {
36
			if(!isset($this->users[strtolower($event->getPlayer()->getName())])) 
37
				$event->setCancelled(true);
38
		}
39
public function onDrop(PlayerDropItemEvent $e){
40
			if(!isset($this->users[strtolower($e->getPlayer()->getName())])) 
41
				$e->setCancelled(true);
42
		}
43
public function onBreak(BlockBreakEvent $e){
44
			if(!isset($this->users[strtolower($e->getPlayer()->getName())])) 
45
				$e->setCancelled(true);
46
}
47
48
public function onTap(	PlayerInteractEvent $e){
49
			if(!isset($this->users[strtolower($e->getPlayer()->getName())])) 
50
				$e->setCancelled(true);
51
}
52
		public function onPlayerJoin(PlayerJoinEvent $event) {
53
			$player = $event->getPlayer();
54
			$sql = $this->db->prepare("SELECT * FROM `users` WHERE `nickname` = :nickname");
55
			$sql->bindValue(":nickname", strtolower($player->getName()), SQLITE3_TEXT);
56
			$sql = $sql->execute();
57
			$user = $sql->fetchArray(SQLITE3_ASSOC);
58
			if(isset($user["nickname"])) {
59
				$ip = $player->getAddress();
60
				if($ip == $user["ipLast"]) {
61
					$this->users[strtolower($player->getName())] = [
62
						"pass" => $user["password"],
63
						"ip" => $ip
64
					];
65
					$player->sendMessage("§7[§a§fTechnologyWorld§7] §cВаш IP adress уже был запечатлен сегодня на сервере,поэтому вам уже не надо логиниться§f! ");
66
				} else
67
					$player->sendMessage("§7[§a§fTechnologyWorld§7] §cНапиши свой пароль в чат, чтобы авторизироваться на проекте TechnologyWorld§f! ");
68
			} else $player->sendMessage("§7[§a§fTechnologyWorld§7] §cНапиши любой пароль в чат, а дальше запиши его на листочек или запомни§f! ");
69
			$sql->finalize();
70
		}
71
72
		public function onPlayerQuit(PlayerQuitEvent $event) {
73
			unset($this->users[strtolower($event->getPlayer()->getName())]);
74
		}
75
76
		public function onPlayerCommandPreprocess(PlayerCommandPreprocessEvent $event) {
77
			$login = "§7[§a§fTechnologyWorld§7] §cНапиши свой пароль в чат, чтобы авторизироваться на TechnologyWorld§f!";
78
			$player = $event->getPlayer();
79
			$name = strtolower($player->getName());
80
			$ip = $player->getAddress();
81
			$msg = $event->getMessage();
82
			if(!isset($this->users[$name])) {
83
				if(count(explode("/", $msg)) > 1) {
84
					$event->setCancelled(true);
85
					$player->sendMessage($login);
86
				} else {
87
					$msg = explode(" ", $msg);
88
					if(count($msg) == 1) {
89
						$sql = $this->db->prepare("SELECT * FROM `users` WHERE `nickname` = :nickname");
90
						$sql->bindValue(":nickname", $name, SQLITE3_TEXT);
91
						$sql = $sql->execute();
92
						if($sql instanceof \SQLite3Result) {
93
							$pass = crypt(md5($msg[0]), sha1($this->config["salt"]));
94
							$user = $sql->fetchArray(SQLITE3_ASSOC);
95
							if(!empty($user["nickname"])) {
96
								if($pass == $user["password"]) {
97
									$upd = $this->db->prepare("UPDATE `users` SET `ipLast` = :ip WHERE `nickname` = :nickname");
98
									$upd->bindValue(":ip", $ip);
99
									$upd->bindValue(":nickname", $name);
100
									$upd = $upd->execute();
101
									$upd->finalize();
102
									$this->users[$name] = [
103
										"pass" => $pass,
104
										"ip" => $ip
105
									];
106
									$player->sendMessage("§7[§a§fTechnologyWorld§7] §cВы успешно авторизировались на проекте TechnologyWorld§f!");
107
								} else $player->sendMessage(F::RED."§7[§a§fTechnologyWorld§7] §cТы ввел неправильный пароль. Не смей никого взламывать§f!");
108
							} else {
109
								if(!isset($this->reg[$name])) {
110
									$this->reg[$name] = $pass;
111
									$player->sendMessage(F::GRAY."§7[§a§fTechnologyWorld§7] §cДля подтверждения введи еще раз свой пароль§f! ");
112-
								} else 
112+
								} else {
113
									if($pass == $this->reg[$name]) {
114
										$add = $this->db->prepare("INSERT INTO `users`(`nickname`, `password`, `ipReg`, `ipLast`) VALUES(:nickname, :password, :ip, :ip)");
115
										$add->bindValue(":nickname", $name);
116
										$add->bindValue(":password", $pass);
117
										$add->bindValue(":ip", $ip);
118
										$add = $add->execute();
119
										$add->finalize();
120
										$this->users[$name] = [
121
											"pass" => $pass,
122
											"ip" => $ip
123
										];
124
										$player->sendMessage("§7[§a§fTechnologyWorld§7] §cВы успешно зарегистрировались на проекте TechnologyWorld§f!");
125
									} else {
126
										unset($this->reg[$name]);
127
										$player->sendMessage("§7[§a§fTechnologyWorld§7] §cТы ввел неверный пароль. Не смей никого взламывать.");
128
									}
129
								}
130
							}
131
						}
132
						$sql->finalize();
133
					} else $player->sendMessage($login);
134
				}
135
				$event->setCancelled(true);
136
			} else {
137
				if($ip != $this->users[$name]["ip"]) {
138
					$event->setCancelled(true);
139
					$player->sendMessage($login);
140
				}
141-
			
141+
			}
142-
		}}
142+
143
}
144-
	}
144+
145
?>