Приветствую Всех! Как всегда, АРЕС подкидывает интересные идеи. В этот раз этому безумному человеку пришла мысль в голову создать систему обмена сообщений между пользователями, но отправка должна быть возможна, даже если игрок (получатель) не находится в данный момент на сервере. Что включено в это готовое решение: -Использование MySQL; -Отправка сообщения игроку, даже если он оффлайн; -Поиск получателя в базе: Можно использовать маску для поиска, т.е. если вы хотите найти игрока с ником Games, можно в поиск ввести следущее: "G%ES" % - означает произвольную длину символов, она может быть равна и нулю (кто сдает ЕГЭ по информатике, в задании А4 аналогичная вещь :ay:); -Чтение сообщений (входящих и исходящих), возможность удаления сообщений; -Все непрочитанные сообщения отмечены, а их кол-во указано в главном меню системы; -После первого спавна при наличии непрочитанных сообщений, в правом нижнем углу будет уведомление о новых письмах; -Также уведомление приходит, когда Вам отправил сообщение любой онлайн игрок на сервере; -Возможность отправки онлайн игрокам через клик в табе, при клике в табе на себя - происходит открытие главного меню;
Вид таблицы в СУБД:
Главное меню:
Построение списка сообщений:
Чтение сообщения:
Уведомление в правом нижнем углу экрана:
Видео:
Качество видео не самое лучшее, поэтому более подробно посмотрите сами в игре.
SQL запрос для создания таблиц:
Code
CREATE TABLE `messages` ( `mID` int(6) NOT NULL AUTO_INCREMENT, `Receiver` varchar(24) NOT NULL, `Sender` varchar(24) NOT NULL, `Date` varchar(32) NOT NULL, `Message` varchar(200) NOT NULL, `display` int(1) NOT NULL DEFAULT '0', PRIMARY KEY (`mID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `Names` ( `Name` VARCHAR( 24 ) NOT NULL ) ENGINE = MYISAM ;
Как вы могли заметить, таблицы в запросе создается 2. Первая - хранит сообщения, вторая - добавляет при коннекте ники в базу (используется для поиска Ник-Неймов). Если у вас аккуанты хранятся в MySQL, рекомендую заменить вторую таблицу на чтение данных из вашей таблицы с аккуантами. [bgcolor=#CCCCCC]СКАЧАТЬ[/bgcolor]
Авторы: Games & APEC
Сообщение отредактировал Apec - Вторник, 01.05.2012, 10:25
Apec, Молодцы ,хорошая работа. Только исправьте: строку:
Code
ShowPlayerDialog(playerid,ID_DIALOG+6,DIALOG_STYLE _INPUT,"Ввод текста","Введите текст сообщения:","Ок", "Отмена");
на:
Code
ShowPlayerDialog(playerid,ID_DIALOG+6,DIALOG_STYLE_INPUT,"Ввод текста","Введите текст сообщения:","Ок", "Отмена");
и строку:
Code
else if(listitem == 2) ShowPlayerDialog(playerid,ID_DIALOG+4,DIALOG_STYLE _INPUT,"Поиск имени получателя","Перед отправкой сообщения Вам необходимо ввести имя пользователя,\nкоторому вы хотите отправить сообшение.Вы можете ввести и часть имени.\nНапример, Вы хотите отправить сообшение игроку с ником Games.\nВ этом случае для поиска имени достаточно ввести, \"mes\" или \"game\""," .:Ок:."," .:Отмена:.");
на:
Code
else if(listitem == 2) ShowPlayerDialog(playerid,ID_DIALOG+4,DIALOG_STYLE_INPUT,"Поиск имени получателя","Перед отправкой сообщения Вам необходимо ввести имя пользователя,\nкоторому вы хотите отправить сообшение.Вы можете ввести и часть имени.\nНапример, Вы хотите отправить сообшение игроку с ником Games.\nВ этом случае для поиска имени достаточно ввести, \"mes\" или \"game\""," .:Ок:."," .:Отмена:.");
и строку:
Code
ShowPlayerDialog(playerid,ID_DIALOG+6,DIALOG_STYLE _INPUT,"Ввод текста","Введите текст сообщения:","Ок", "Отмена");
на:
Code
ShowPlayerDialog(playerid,ID_DIALOG+6,DIALOG_STYLE_INPUT,"Ввод текста","Введите текст сообщения:","Ок", "Отмена");
Молодцы конечно, код тчатеьлно не просматривал, это по всей видимости сделал Latron.
Речь идёт о тщательном просмотре кода, которое уже и так сделал Latron судя по его посту. Причём тут его отношение к разработке данного скрипта?
Quote (Fus1)
AirKite, скажи пожалуйста как именно можно взломать спомощью sql иньекции данный скрипт. Подключится к бд , вытащить данные ? (PS: в этом вообще 0 )
Я же прикрепил ссылку на википедию по SQL injection. Суть взлома что можно выполнить произвольный SQL запрос. (Добавить админа, отредактировать любые данные и т.д.) Взлом возможен при помощи построения специального кода в диалог окна ввода нового сообщения. [1337GAMES] Easy RP (SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)
Приветствую Вас, господа! Как вижу, здесь начинается холивар. Автор этого кода я... Тем более - авторы указаны в первом посту, так что не нужно тут что-либо придумывать. А теперь по порядку...
Latron, спасибо, действительно, в коде образовались пробелы. Причиной всего этого является прямое копирование кода из Pawno и его вставка непосредственно на сайт. Как видим, в результате этого и образовались пробелы. Поэтому, как альтернатива - была опубликована ссылка на скачивание pwn-файла.
Quote (AirKite)
Молодцы конечно, код тчатеьлно не просматривал, это по всей видимости сделал Latron.
Надеюсь, Вы поняли, что авторы этой работы Games и Арес
Quote (AirKite)
И самое главное скрипт открывает уязвимость SQL Injection для базы к которой он подключен.
Действительна, уязвимость есть. Для этого в плагине MySQL есть замечательная ф-ия mysql_real_escape_string, которую я кстати и использовал в SQL-запросе при поиске Ник-Неймов в СУБД. Но в форме ввода текста, к сожалению, я забыл её прописать.
В моем коде есть и еще один недостаток, если отправить пустой запрос при поиске имени - то отобразится весь список Ник-Неймов, т.к. все эти имена будут удовлетворять условию поиска "%%". Но, проверка на пустой текст всё равно не поможет, ведь можно просто ввести "%%%%" к примеру, и тогда результат будет такой же, как и в первом случае.
Для этого я написал ф-ию bool:CheckInput(source[]), которая будет требовать наличие как минимум 2 символов, будь это a-z, A-Z или 0-9.
Исправленный код можно скачать здесь: www.cruelgame.ru/offmsg/offmsg1.1.rar