Программа для работы с протоколом PW, которая исполняет любой код из LUA. Для работы необходим файл main.lua с функцией Main в папке scripts. Данный способ позволяет редактировать код прямо в блокноте. Это бета версия. В скрипте, что идет в архиве, я сделал вывод чата в консоль и, если выбранный персонаж женского пола, автопринятие предложения «взять на руки». Для запуска необходимо указать логин и пароль в settings.lua Функции OOG в LUA: Console: Print(message, line) — выводит в консоль сообщение серого цвета, последний параметр указывать необязательно, если его указать как false, сообщение будет выведено в той же строке. Log(message) — выводит в консоль сообщение белого цвета с новой строки Warning(message) — выводит в консоль сообщение желтого цвета с новой строки Error(message) — выводит в консоль сообщение красного цвета с новой строки Success(message) — выводит в консоль сообщение зеленого цвета с новой строки ReceivedPacket: ReadBytes(count) — читает из потока заданное количество байт ReadByte() — читает байт ReadWord() — читает одно машинное слово (ushort) ReadDword() — читает двойное машинное слово (uint) ReadString() — берет из потока CUInt и читает текст этой длины в кодировке ANSI ReadUString() — берет из потока CUInt и читает текст этой длины в кодировке Unicode ReadUStringZ() — читает из поток строку длиной 62 байта и конвертирует её в Unicode, обрезая до первого нулевого байта ReadCUInt() — читает из потока CUInt Seek(count, dir) — пропускает заданное количество байт в потоке, последний параметр необязателен (по-умолчанию равен 2), 1 — с начала потока, 2 — с текущей позиции, 3 — с конца потока SendPacket: WriteCUInt(value) — пишет в поток CUInt WriteBytes(value) — пишет значения lua таблицы (массива) в поток WriteWord(value, swap) — пишет в поток одно машинное слово, последний параметр необязателен, если он равен true, будет изменен порядок байт на противоположный WriteDword(value, swap) — пишет в поток двойное машинное слово, последний параметр необязателен, если он равен true, будет изменен порядок байт на противоположный WriteByte(value) — пишет указанный байт WriteString(value) — пишет в поток текст в кодировке ANSI, дописывая перед ним длину в CUInt WriteUString(value) — пишет в поток текст в кодировке Unicode, дописывая перед ним длину в CUInt WriteUStringZ(value) — пишет в поток текст в кодировке Unicode длинной в 62 байта, где недостающие байты равны 0x00 PackContainer(opcode) — служит для упаковки текущего потока в контейнер, после необходимо вызывать SendPacket:Send(0x22) SendPacket(opcode) — пакует текущий поток в пакет и отправляет на сервер Protocol: Connect(link, port) — вызывает подключение по указанному адресу и порту Disconnect() — разрывает текущее соединение InitRC4(CMKey, SMKey, Hash, login) — создает объекты RC4 для автоматического шифрования и расшифровки трафика Crypt: GetHash(login, password, key, tablename) — создает хеш и заполняет им указанную lua таблицу Math: RandomTable(tablename, count) — заполняет указанную lua таблицу случайными данными длиной count luanet.import_type(assembly) — наследование dotNET сборки для использования в LUA. Пример: 代码: Form = luanet.import_type("System.Windows.Forms.Form") form1 = Form() form1:Show()
0.3b Понятия не имею, что там нового (компилировал 3 года назад). Вроде, контейнеры работали коряво и я что-то там чинил. В комплекте какие-то сраные скрипты, есть папка, которая работает под 1.3.6 Грузится та, что обозвана "scripts". Для новых версий, вероятно, придётся реализовать новую авторизацию в protocol.lua
Отправка сообщения в личку без ника отправителя. 代码: function PrivateChat(wid, nick, message) SendPacket:WriteByte(0x0A) SendPacket:WriteByte(0xE8) SendPacket:WriteByte(0x00) SendPacket:WriteDword(RoleID, true) SendPacket:WriteUString(nick) SendPacket:WriteDword(wid, true) SendPacket:WriteUString(message) SendPacket:WriteByte(0x00) SendPacket:WriteDword(wid, true) SendPacket:Send(0x60) Console:Log(string.format("to %s: %s", nick, message)) end