Версия для печати темы
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 но непомогло
..
Автор: 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 но непомогло
..
Это означает что глобальная функция GetItemByName равна пустому значению (nil)!
В старом api эта функция возвращала таблицу онлайн пользователя (например вот так GetItemByName(sNick))
В новом api, во-первых, эта функция стала членом таблицы Core и, во-вторых, изменилось её название:
Код
Core.GetUser(sNick, true)
Автор: Wariner 3.7.2008, 22:06
К сожалению исходного рабочего BirthdayMan.v4.08 так и не нашёл... а тот который остался изрядно мной изуродован((( А самое иинтересное не помню где взял.. Весь инет перерыл
Автор: 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
Сильных отличий в них не вижу(кстати обе сыроваты не работает одна функция), поэтому выкладываю обе...
Автор: 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 но непомогло
..
помоемому с именем связанно напиши мне в асю постораюсь помочь 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
а это то что я сделал уже в нём