|
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
![]() ![]()
Сообщение
#1
|
|
![]() RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз ![]() |
Разработчикам скриптов предлагается универсальный скрипт для написания скриптов под обе версии api одновременно.
Принцип работы скрипта: Скрипт переопределяет все функции обеих версий api. Использование: использовать скрипт довольно легко. Достаточно поместить данный скрипт в папку с файлом PtokaX.exe (не используем папку scripts только из-за того, чтобы файл там не мешался). После того как вы поместили файл px.api в папку с файлом PtokaX.exe можно приступать к написанию скриптов. Создаём как обычно в папке scripts свой скрипт. Назовём его например test.lua. При написании скрипта первой строчкой пишем: Код if Core then dofile(Core.GetPtokaXPath().."px.api") elseif frmHub then dofile(frmHub:GetPtokaXLocation().."px.api") end После этого пишем обычный скрипт под api2, НО ОДНО НО: вместо обычных для api2 таблиц:Цитата Core. SetMan. RegMan. BanMan. ProfMan. TmrMan. UDPDbg. ScriptMan. IP2Country. следует писать tPX: А также вместо всех функций: OnStartup(), UserConnected(tUser) и тд. следует писать методы: tPX:OnStartup(), tPX:UserConnected(tUser) и тд. Приведу пример скрипта: Код if Core then dofile(Core.GetPtokaXPath().."px.api") elseif frmHub then dofile(frmHub:GetPtokaXLocation().."px.api") end function tPX:OnStartup() tPX:SendToAll("Функция, выполняемая при запуске скрипта") end function tPX:UserConnected(tUser) tPX:SendToUser(tUser,"Добро пожаловать на хаб!") end tPX.RegConnected=tPX.UserConnected tPX.OpConnected=tPX.UserConnected написанная функция использует (не считая добавки tPX:) интерфейс api2, но работает на обеих api !!!!! Теперь немного о различиях в версиях api: в api2 исчезли поля юзера iBlimit, bRegistered, bHasTag, в отличии от версии api1, в которых они были. Некие различия в использовании данного скрипта: 1). В api2 чтобу получить версию PtokaX надо было писать Core.Version. В данном скрипте это действие выполняется НЕ ПОЛЕМ ТАБЛИЦЫ, А МЕТОДОМ: tPX:Version() 2). Для выполнения функции ScriptMan.Restart() надо писать метод tPX:Restart(true) 3). В api2 существуют функции: SetMan.Save(), RegMan.Save() и BanMan.Save(). В данном скрипте их выполнение заменено на метод: tPX:Save(iNum), где iNum может принимать следующие значения: если iNum=nil, то выполняются все 3 функции SetMan.Save(), RegMan.Save() и BanMan.Save(), если iNum=1, то выполняется SetMan.Save(), если iNum=2, то выполняется RegMan.Save(), если iNum=3, то выполняется BanMan.Save() 4). Для api1 установлен интервал выполнения функции tPX:OnTimer(nTimerId) - 1 сек. Думаю, что никто не использует в своих проектах время меньше 1 сек. В соответствие с этим, в функциях tPX:AddTimer(nTimerInterval), tPX:AddTimer(nTimerInterval, sFunctionName) параметр nTimerInterval следует указывать в секундах, а не в миллисекундах! Расширение возможностей: 1). Цитата Core.SendToAll(sData) -> tPX:SendToAll(sData, User, Sender) Core.SendToNick(sNick, sData) -> tPX:SendToNick(sNick, sData, Nick, Sender) Core.SendToOps(sData) -> tPX:SendToOps(sData, Nick, Sender) Core.SendToProfile(nProfileNumber, sData) -> tPX:SendToProfile(nProfileNumber, sData, User, Sender) Core.SendToUser(tUser, sData) -> tPX:SendToUser(tUser, sData, Nick, Sender) Разберём например последнюю функцию (остальные по аналогии): То есть можно написать так: Код tPX:SendToUser(tUser, "привет", "NICK_BOT", "BOT") В этом примере пользователь tUser получит сообщение "привет" от бота BOT с ником NICK_BOT, то есть сообщение будет таким: "<NICK_BOT> привет", а в закладке личного сообщения будет написано "BOT" Первый параметр - это таблица пользователя как обычно Второй параметр - это сообщение, опять же как обычно Третий параметр - это Ник от кого пришло сообщение Четвёртый параметр - это отправитель личного сообщения Если третий и четвёртый параметр не указаны, то сообщение юзеру отправляется в чат без ника, если не указан только четвёртый параметр, то сообщение юзеру отправляется в чат от ника, который равен третьему параметру, если указаны все параметры, то сообщение отправляется от ника, который равен четвёртому параметру (будет отображаться в закладке ЛС), а в самом сообщении будет ник, который равен третьему параметру (<третий_параметр> сообщение). Ещё одна удобность данных функций отправки сообщений: как видите параметр Nick я не написал используя венгерскую нотацию как sNick. Почему я написал Nick, а не sNick? Разве sNick не является строковой переменной? В том то всё и дело, что Nick может быть как строкой, так и таблицей пользователя. То же самое относится и к параметру Sender, и даже к параметру tUser, хоть тут я и написал tUser, а не просто User. tUser я написал только из соображений того, что кто-то уже привык к стандартным функциям, поэтому первые 2 параметра оставил как и в описании для интерфейса api2. 2). Следующие расширенные возможности касаются таблицы пользователя: В таблицу пользователя добавлено поле iIP, отвечающее за числовое значение ip адреса пользователя. tUser.sNick => "Вася" tUser.sIP => "10.10.128.120" tUser.iIP => 168460408 Поле iIP очень удобно. Его можно применять для сравнения рангов или в качестве ключа таблицы БД. 3). Следующая возможность - это путь к папке со скриптами. Теперь для того чтобы выполнить функцию dofile("путь_к_папке_scripts".."дальнейшие_директории".."имя_файла") достаточно написать: dofile(tPX.sScriptsPath.."дальнейшие_директории".."имя_файла") То есть существует универсальная переменная tPX.sScriptsPath под любые версии PtokaX и api. Данный скрипт находится под защитой авторских прав, однако разрешено копирование, использование и модификация скрипта, НО ОБЯЗАТЕЛЬНО НЕОБХОДИМО УКАЗЫВАТЬ email И имя АВТОРА. В архиве файл с русским описанием функций. Функции у которых написано (только API2) означает, что они могут быть использованы только в скриптах api2, использование из на api1 ничего не даст, то есть при написании скриптов под обе api необходимо это учитывать Файл с открытым кодом: ![]() Хотя код является открытым, но тем не менее прикладываю бинарный код. Ведь бинарный код - машинный код, поэтому интерпретатору lua не надо делать лишнюю работу по переводу в бинарный код. Это является оптимизацией выполнения скрипта: ![]() |
|
|
![]()
Сообщение
#2
|
|
![]() RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз ![]() |
Создал новую тему: "Метод Быстрого Перевода Скриптов Под Api_1", переместил в неё все обсуждения и прикрепил её в этом форуме: http://mydc.ru/topic605.html
А то раньше многие путались. |
|
|
![]() ![]() |
Похожие темы
![]() |
Сейчас: 8.9.2024, 2:29 |