Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Kорзина _ Универсальный Скрипт Совместимости Двух Версий Api

Автор: Setuper 15.10.2008, 14:57

Разработчикам скриптов предлагается универсальный скрипт для написания скриптов под обе версии 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 необходимо это учитывать

Файл с открытым кодом:  px.rar ( 16.46 килобайт ) : 22


Хотя код является открытым, но тем не менее прикладываю бинарный код. Ведь бинарный код - машинный код, поэтому интерпретатору lua не надо делать лишнюю работу по переводу в бинарный код. Это является оптимизацией выполнения скрипта:  px_bin.rar ( 22.63 килобайт ) : 10

Автор: Setuper 12.11.2008, 12:21

Создал новую тему: "Метод Быстрого Перевода Скриптов Под Api_1", переместил в неё все обсуждения и прикрепил её в этом форуме: http://mydc.ru/topic605.html

А то раньше многие путались.