Уважаемые пользователи как реализовать команды. Например я хочу чтоб была команда: /ban ид кол-во ( пишешь это в чат и пользователя банило ) Система бана есть. Команды в чат чтоб писать. Проблемы индейцев - вождя не волнуют....
Вот пользователь вводит что-то в чат, и строка отправляется на сервер. На сервере, перед тем, как отправлять остальным игрокам, проверятся первый символ строки - если "/", то это команда. Если команда, то строка не отправляется другим игрокам в чат и все остальные символы (после "/") обрабатываются как команда. Как-то так: если 2-4 символы = "ban", и 5 - пробел, то проверяем с 6 символа и до следующего пробела (1 слово) - это имя игрока, которого нужно забанить. Если команда правильная, находим и баним игрока. По той же схеме добавляешь остальные команды. Если пишешь на PHP, то в нём есть специальная функция explode - она разбивает строку на массив строк-частей исходной строки, используя заданный разделитель. Если, например, задать разделитель - пробел, то строка разделится на "слова". Тогда первое слово будет собственно командой ("ban"), а второе и остальные слова - параметры (имя игрока, время бана, причина бана).
Сообщение отредактировал TimKruz - Пятница, 27 Июля 2012, 19:16
Tim Я тебя уважаю за твои старания но можешь пожалуйста для дерева написать в ЛС скрипт в php ибо я сам не составлю. Проблемы индейцев - вождя не волнуют....
Вот, для примера... Там такая возможность реализована Классическая ошибка, которую совершают проектировщики абсолютно надёжных систем, - недооценка изобретательности клинических идиотов.
Там простейшая логика. Вот, для примера написал, смотри функцию cmd():
Code
<?php //"Толкаем" сообщение дальше в чат, //зависит от того, какая у тебя система function push_chat_msg($msg) { echo $msg; } //Баним пользователя (тоже зависит от системы) //Возвращает true, если пользователь успешно забанен, //или false в противном случае function ban($player,$time) { return true; } //Ищет пользователя в базе данных, //если находит - возвращает true function find_player($player) { return true; } //Функция обработки команд function cmd($text) { //Разделяем сообщение $a=explode(' ',$text); //Основной выбор - определяется команда switch($a[0]) { case '/ban': //Если команда "/ban" //при этом пользователь найден в базе //и время бана больше либо равно 0 (0 - бан навсегда) if(find_player($a[1]) and ($a[2]>=0)) { //Если успешно забанили if(ban($a[1],$a[2])) { //Возвращаем сообщение о бане return "Player $a[1] has been banned!"; } else { //Либо об ошибке бана return "Player $a[1] can't be banned."; } } else { //Если ошибка в параметрах команды: return 'Invalid player or banning time!'; } break; default: //Если в функцию попала какая-то строка, //начинающаяся на "/", но это не команда: return 'Unknown command!'; } } //Это для примера использования: $chat_msg='/ban cheater 1000'; //Если первый символ ='/', то: if(strpos($chat_msg,'/')===0) { //Обрабатываем команду $chat_msg=cmd($chat_msg); } //Отправляем сообщение в чат push_chat_msg($chat_msg); ?>
VipCat, ты конечно извини, но мне в таком коде разбираться, просто, впадлу TimKruz, по-моему, привел достаточно наглядный и простой для понимания пример Классическая ошибка, которую совершают проектировщики абсолютно надёжных систем, - недооценка изобретательности клинических идиотов.
VipCat, чего конкретно ты не можешь написать? Ты же сказал, что
Quote (VipCat)
Система бана есть.
Способ распознавания команд тебе показали, вот и приделай одно к другому... Напиши функцию ban(), которая будет добавлять пользователя "в чёрный список". Потом просто вызывай эту функцию с нужными параметрами после <case '/ban'>. Какая там у тебя система бана, как ею управлять - ты знаешь, а нам придётся перерыть кучу кода...
<?php session_start(); //запускаем сессию. Обязательно в начале страницы include ("bd.php"); // соединяемся с базой, укажите свой путь, если у вас уже есть соединение
if (!empty($_SESSION['login']) and !empty($_SESSION['password'])) { //если существует логин и пароль в сессиях, то проверяем, действительны ли они $login = $_SESSION['login']; $password = $_SESSION['password']; $result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password' AND groups='1'",$db); $myrow2 = mysql_fetch_array($result2); if (isset($_POST['u_id'])) {$u_id = $_POST['u_id'];
}
if (empty($myrow2['id'])) { //если логин или пароль не действителен echo "<script>location.href='..';</script>"; exit;
} } else { //Проверяем, зарегистрирован ли вошедший echo "<script>location.href='..';</script>"; exit;} if (isset($_POST['names'])) {$names = $_POST['names'];}
Добавлено (28.07.2012, 02:22) --------------------------------------------- Извините за мой тупизм.....=(Ибо щас ночь я плохо понимаю (4часа ночи по Караганде ) Но просто уж очень хочется реализовать данную команду. Хотя бы что ли для удобства
Проблемы индейцев - вождя не волнуют....
Сообщение отредактировал VipCat - Суббота, 28 Июля 2012, 02:03