Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 25.05.2014, 13:19   #1
Заблокирован
 Сержант
Аватар для Alp€rium
 
Alp€rium сломал счётчик популярности :(Alp€rium сломал счётчик популярности :(Alp€rium сломал счётчик популярности :(Alp€rium сломал счётчик популярности :(Alp€rium сломал счётчик популярности :(Alp€rium сломал счётчик популярности :(Alp€rium сломал счётчик популярности :(Alp€rium сломал счётчик популярности :(Alp€rium сломал счётчик популярности :(Alp€rium сломал счётчик популярности :(Alp€rium сломал счётчик популярности :(
Регистрация: 11.11.2011
Сообщений: 98
Популярность: 33905
Золото Zhyk.Ru: 70
Сказал(а) спасибо: 792
Поблагодарили 342 раз(а) в 205 сообщениях
Отправить сообщение для Alp€rium с помощью ICQ Отправить сообщение для Alp€rium с помощью Skype™
 
По умолчанию [Delphi] HL/CS Server Info Parser

Всем привет. Недавно я задумался и решил, что было бы хорошо, если в обществе было бы больше людей, которые более-менее разбираются в устройстве движка GoldSource (нет, не в написании читов). Плюс ко мне часто поступают просьбы дать какую-нибудь программу для изучения и саморазвития. Опираясь на всем этом я решил написать простую программу, функция которой - опрос и сбор информации с игрового сервера HL/CS. Исходный код также будет к ней приложен.
В интернете можно найти похожие программы с исходным кодом, но в свои времена они практически не помогли мне, так что я написал свою, более правильно реализованную на мой взгляд версию, чтобы молодому поколению было проще понимать устройство всего этого.
Программа написана на Borland Delphi 7.
Функции:
- Парсинг основной информации (имя сервера, карта, директория игры...)
- Парсинг списка правил
- Парсинг игроков
Также в качестве побочной функции была добавлена собственная небольшая реализация программы HLServerInfo, целью которой является проверка списка правил сервера на наличие отклонений в переменных. Реализовано всё "на коленке" и может работать неправильно, но пока что особых ошибок в работе замечено не было.
Получение основной информации сервера также работает и на серверах движка Source, так как строение пакета в GoldSource идентично Source.


Также ниже я приведу описание всех функций, дабы избежать лишних комментариев в коде.

Функции чтения пакета:
В GoldSource (да и в Source тоже) есть два типа функций с префиксом MSG_: первые - это те, которые читают данные, и вторые - те, которые записывают данные. Нам нужны лишь первые, так что описаны будут именно они.
Каждая функция после возвращения результата удаляет из передаваемого параметра то, что возвращает. На самом деле работать все это должно немного иначе за счет использования смещений, но я адаптировал функции на свой лад, чтобы весь этот код было более-менее легче понимать и ориентироваться в нем.
MSG_ReadChar - функция, которая возвращает символ из строки.
MSG_ReadByte - функция, которая возвращает номер символа по стандарту ASCII.
MSG_ReadString - функция, которая возвращает строку данных, пока не встретит нулевой символ (#0).
MSG_ReadBuffer - функция, которая возвращает указанное количество символов из строки.
MSG_ReadLong - функция, которая возвращает данные типа LongWord.
MSG_ReadWord - функция, которая возвращает данные типа Word.
MSG_ReadFloat - функция, которая возвращает данные типа Float.
MSG_ReadInt64 - функция, которая возвращает данные типа Int64. В движке ее нет, была написана для парсинга GameID сервера, который имеет тип LongLong. Что-то мне подсказывает, что она работает неправильно, но испытания показали, что в целом функция работоспособна.

Функции парсинга данных:
ParseMainServerInfo_New - данная функция парсит серверную информацию, которая используется в новых протоколах игры GoldSource/Source. Данные практически идентичны тем, что использовались в более ранних версиях игры, за исключением того, что в пакете нового протокола не хранится информация о моде, который использует сервер, но хранятся дополнительные данные (так: ID игры, версия сервера, количество ботов, EDF...),
ParseMainServerInfo_Old - функция необходима для парсинга пакетов, которые использользуются в протоколах 47 и ниже. Должно использоваться только в GoldSource.
ParsePlayers - функция, которая парсит игроков, которые в данный момент находятся на сервере.
ParseExtraDataFlag - функция, цель которой парсить дополнительную информацию сервера (порт сервера, SteamID сервера, ключевые слова...). Не знаю, для чего данная информация хранится в пакетах, но реализовать ее обработку в программе все-таки решил. Ее можно не использовать.
ParseChallenge - функция, необходимая для получения "ключа", который позволит получать список правил и игроков сервера.
ParseRules - функция для парсинга правил сервера.
SV_ConnectionlessPacket - чтобы сделать код более читаемым и заставить программу правильно обрабатывать разбитые на части пакеты, была написана эта функция. Ее цель - обработка всех пакетов, имеющих префикс $FFFFFFFF.
SV_SplitPacket - функция, которая собирает разбитый пакет и впоследствии передает собранный пакет в SV_ConnectionlessPacket.

Побочные функции:
RemoveNotNumbers - функция, целью которой является очистить все символы, кроме цифр, а также заменить точку на запятую. Зачем - об этом мы узнаем позже.
VulnerabilityChecker - процедура, которая проверяет значение определенной переменной на наличие "уязвимости". То есть, если версия DProto, к примеру, будет 0.9.87 или ниже, то программа выдаст соответствующее сообщение об этом.
Чтобы данная процедура работала корректно - стандартное значение получаемой переменной проходит очистку от ненужных символов: Если "Value" равно 1.2.3, то после обработки функцией RemoveNotNumbers - результат будет 123. Это "универсальный" метод для проверки переменных сервера на отклонения от нормы.
SecToTime - функция, которая конвертирует секунды во время формата HH:MM:SS. Необходима для корректного отображения времени, которое игрок провел на сервере.
WriteLog - функция, которая записывает строку в Memo. Сделано для того, чтобы лишить себя необходимости постоянно писать Form1.Memo1...
SendPacket - функция, которая отправляет нужный нам пакет на сервер, который был указан в Edit1.
ParseSplitPacketBits - функция, цель которой парсить информацию о разделенном пакете из байта (старшие четыре бита - номер текущего пакета, начиная с ноля, младшие четыре бита - общее количество пакетов).


05.04.14
- Исправил несколько ошибок в коде, добавил правильную обработку правил сервера и разделенных пакетов.


[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Продам] Продам JLeGiOH Origin Brute/Checker info+Battlelog Parser/Check cabushka Steam, Origin, Uplay и другие системы 1 09.10.2013 17:49
[Продам] Origin Brute/Checker info+Battlelog Parser/Checker info от Легиона alt3R1 Steam, Origin, Uplay и другие системы 0 13.11.2012 16:14

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 20:25.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net