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

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

MyDC.ru _ Разработчикам [PtokaX] _ Перевод Скриптов Под API 2

Автор: Infernus-pro 3.7.2008, 19:14

Все чаще и чаще появляються синтаксические ошибки при переводе скритов с API 1 на API 2, вот хотелось бы спросить что значит эта ошибка и как ее исправить?

Цитата
[21:55] Синтаксис BirthdayMan.v4.07_newapi.lua:179: attempt to call global 'GetItemByName' (a nil value)

Открывал scripting-interface но непомогло confuse.gif ..

Автор: Wariner 3.7.2008, 19:20

Хех, у меня таже самая проблема...
правда был у меня BirthdayMan.v4.08 но я его куда то дел:'-(

PS как найду отпишусь

Автор: Setuper 3.7.2008, 19:52

Цитата(Infernus-pro @ 3.7.2008, 20:14) *
Все чаще и чаще появляються синтаксические ошибки при переводе скритов с API 1 на API 2, вот хотелось бы спросить что значит эта ошибка и как ее исправить?

Открывал scripting-interface но непомогло confuse.gif ..

Это означает что глобальная функция GetItemByName равна пустому значению (nil)!
В старом api эта функция возвращала таблицу онлайн пользователя (например вот так GetItemByName(sNick))
В новом api, во-первых, эта функция стала членом таблицы Core и, во-вторых, изменилось её название:
Код
Core.GetUser(sNick, true)

Автор: Wariner 3.7.2008, 22:06

К сожалению исходного рабочего BirthdayMan.v4.08 так и не нашёл... а тот который остался изрядно мной изуродован((( А самое иинтересное не помню где взял.. Весь инет перерыл beat_brick.gif

Автор: Infernus-pro 4.7.2008, 3:42

Спс Setuper та ошибка исчезла но появилась другая))

Цитата
[06:40] Синтаксис BirthdayMan.v4.07_newapi.lua:179: bad argument #1 to 'GetUser' (string expected, got nil)

Вот эта строчка
n = n + 1; if Core.GetUser(sNick, true) then sStatus= "*Онлайн*" end;

Автор: Setuper 4.7.2008, 6:47

Абалдеть... просто нет слов... ну нельзя же так просто бездумно переписывать!
Вместо sNick надо поставить ник пользователя. Я не знаю структуры вашего скрипта и названия ваших переменных, поэтому я и написал sNick.
Возможно, что у вас будет чтото вроде user.sNick или User.sNick или tUser.sNick. В общем мозгами хоть немного пошевелите и посмотрите как называется таблица пользователя.

Автор: Wariner 4.7.2008, 11:01

[attachment=221:Birthday...8_newapi.lua]Ну вот держите)))) v.4.07 переконвертировал и поправил сам(спасибо Setuper`у), а ещё всётаки отрыл v.4.08
Сильных отличий в них не вижу(кстати обе сыроваты не работает одна функция), поэтому выкладываю обе...

 BirthdayMan.v4.07_newapi.lua ( 16.69 килобайт ) : 10
 BirthdayMan.v4.08_newapi.lua ( 18.24 килобайт ) : 32
 

Автор: KauH 4.7.2008, 18:33

Цитата(Wariner @ 4.7.2008, 11:01) *
[attachment=221:Birthday...8_newapi.lua]Ну вот держите)))) v.4.07 переконвертировал и поправил сам(спасибо Setuper`у), а ещё всётаки отрыл v.4.08
Сильных отличий в них не вижу(кстати обе сыроваты не работает одна функция), поэтому выкладываю обе...

Код
    -- Название базы данных ДР
    fBirth = "BirthdayBot/tBirthday.tbl",
    -- Название базы данных изв. людей
    fCelebrity = "BirthdayBot/tCelebrity.tbl"

изменил на
Код
    -- Название базы данных ДР
    fBirth = "scripts/BirthdayBot/tBirthday.tbl",
    -- Название базы данных изв. людей
    fCelebrity = "scripts/BirthdayBot/tCelebrity.tbl"

плюс добавил старый файл базы данных tBirthday.tbl и файл tCelebrity.tbl в созданную папку /BirthdayBot
всё работает , не вылетает , старая база активна

Автор: Infernus-pro 28.7.2008, 20:51

Кто подскажет как исправить вот эту ошибку:

Цитата
[20:51] Синтаксис DopeWarz.v1.1.LUA5-PtokaX.ru_newapi.lua:646: attempt to call field 'msgMain' (a nil value)

Вот эта строка:
Код
Core.SendPmToNick(user.sNick,tVar.sBot, tPics.msgTop("С возвращением, "..user.sNick).."\r\n"..tPics.msgIntro()..tMenu.msgMain());

Автор: Setuper 5.8.2008, 11:10

в таблице tMenu поле msgMain не определено, а должно быть определено как функция!
ищи в скрипте такую строчку:

Код
tMenu.msgMain = function()

или такую:
Код
tMenu["msgMain"] = function()

или вот так:
Код
tMenu={
...
["msgMain"] = function()
...
}

если ничего подобного нет, то в этом ошибка и состоит))

Автор: Infernus-pro 5.8.2008, 19:49

Не нашел, ошибка возникла при конвертации на API 2 :(

Автор: Mol 7.11.2008, 20:01

Скажите пожалуйсто, как сделать так 4тобы команды не были видны ? тоесть такого:

Цитата(Ptokax)
[20:59:35] <FBI> *** Error: There are no saved Birthdays!
[20:59:35] <`SunDayBoy™> !birthdays

Автор: Setuper 7.11.2008, 20:06

в старом api надо возвращать 1 (т.е. надо писать return 1)
в новом api надо возвращать true (т.е. надо писать return true)

Автор: Mol 7.11.2008, 21:41

Цитата(Setuper @ 7.11.2008, 20:06) *
в старом api надо возвращать 1 (т.е. надо писать return 1)
в новом api надо возвращать true (т.е. надо писать return true)


Спасибо, ошибка исправилась.

Автор: Danilko 13.2.2009, 17:32

Цитата(Infernus-pro @ 3.7.2008, 19:14) *
Все чаще и чаще появляються синтаксические ошибки при переводе скритов с API 1 на API 2, вот хотелось бы спросить что значит эта ошибка и как ее исправить?

Открывал scripting-interface но непомогло confuse.gif ..


помоемому с именем связанно напиши мне в асю постораюсь помочь 380-852-240
или выложи скрипт я попробую подправлю

Автор: Wariner 14.2.2009, 9:47

Хм ему ответили в третем посте! Чем ты ещё хочешь помочЬ?!

Автор: PRIZrak 3.3.2009, 20:35

attempt to call global 'GetTimer' (a nil value) - выдаёт такую ошибку после конвертации из API 1 в 2 (PtokaX LUA API Converter v0.9c). Где нужно подправить?

Скрипт лежит тута (оригинал): http://mydc.ru/ipb.html?s=&showtopic=250&view=findpost&p=1759

Автор: alex82 3.3.2009, 20:45

Цитата(PRIZrak @ 3.3.2009, 19:35) *
attempt to call global 'GetTimer' (a nil value) - выдаёт такую ошибку после конвертации из API 1 в 2 (PtokaX LUA API Converter v0.9c). Где нужно подправить?

Скрипт лежит тута (оригинал): http://mydc.ru/ipb.html?s=&showtopic=250&view=findpost&p=1759

В API2 нету аналога этой функции.

Проверить наличие таймера можно по его ID.

Автор: Wariner 3.3.2009, 20:54

думаю надо бы расписать

Код
function OnStartup()
       tmr = TmrMan.AddTimer(TimeOverWrite*1000)
end

function MyINFOArrival(curUser,data)
      if tmr  then
             tmr = TmrMan.AddTimer(TimeOverWrite*1000)
      end
end

function OnTimer()
       OverWrite(HubBot)
       TmrMan.RemoveTimer(tmr)
           tmr = nil
end

Автор: alex82 3.3.2009, 21:19

Неполхо бы так:

Код
TmrMan.RemoveTimer(tmr); tmr = nil

Переменная ведь не удаляется при удалении таймера.

Автор: Wariner 3.3.2009, 21:20

поправил

Автор: Setuper 3.3.2009, 21:40

Переменная удалиться автоматически при уборке мусора, но если хотите принудительно её удалить то да.

Автор: PRIZrak 3.3.2009, 21:40

УРААААА!!! Кажется работает!! ОГРОМНОЕ СПАСИБО ВАМ.

Автор: alex82 3.3.2009, 21:49

Цитата(Setuper @ 3.3.2009, 20:40) *
Переменная удалиться автоматически при уборке мусора

С какой стати?

Автор: Setuper 3.3.2009, 22:07

Хотя да. Я не прав. Пардон, не подумал. В данном случае переменная не удаляется уборщиком.

Автор: Wariner 4.3.2009, 19:42

я там описался в одном месте. вот правильный код

Код
function OnStartup()
       tmr = TmrMan.AddTimer(TimeOverWrite*1000)
end

function MyINFOArrival(curUser,data)
      if not tmr  then
             tmr = TmrMan.AddTimer(TimeOverWrite*1000)
      end
end

function OnTimer()
       OverWrite(HubBot)
       TmrMan.RemoveTimer(tmr)
           tmr = nil
end

Автор: PRIZrak 5.3.2009, 9:56

Хотел было написать, что скрипт то работает, то нет, как глянул этот топик, исправил - пока всё ОК, спасибо, что откликнулись, просто давно хотел перейти на PtokaX 4***, да вот не мог найти или переконвертировать нормально сам, нужные мне скрипты.

Автор: Хабыч 15.1.2010, 23:27

ошибка [23:24] Синтаксис C:\SERVER\ChebZONE Hub\scripts\тест.lua:1398: bad argument #1 to 'output' (rssfeed/rssfeed.tbl: No such file or directory
)
сама строка
io.output(tVar.sFolder.."/"..tVar.sFile);

[23:26] Синтаксис C:\SERVER\ChebZONE Hub\scripts\тест.lua:882: attempt to index global 'WSA' (a nil value)
строка WSA.Dispose();
пожскажите плиз как исправить?

Автор: Setuper 16.1.2010, 1:36

Функция output отвечает за поток вывода. Ты уверен что ты хочешь её использовать?
Глобальная переменная WSA не определена.

Автор: Хабыч 16.1.2010, 1:37

не пойму как сделать лучше будет. подскажи пожалуйста) рсс скрипт перевожу. собственно вот тут http://mydc.ru/topic2962.html он, правда оригинал.
 ____.lua ( 72.17 килобайт ) : 3
а это то что я сделал уже в нём baffle.gif