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 | ?> |