Версия для печати темы
MyDC.ru _ Технические вопросы по PtokaX _ Решение Стандартных Ошибок Скриптов
Автор: dimetrius 22.7.2008, 19:11
Предлагаю в этой теме описывать все ошибки, которые попадаются наиболее часто при написании \ использовании скриптов!
Сегодня я узнал что...
если в вашем скрипте есть строки типа:
Код
Bot = SetMan.GetString(21),
или
Menu = SetMan.GetString(0),
то ваш скрипт может выдавать ошибку типа
Код
[19:07] Синтаксис C:\PtokaX\scripts\Lag_Check.lua:29: attempt to index global 'SetMan' (a nil value)
Исправление ошибки довольно простое!
Чтоб 100% всегда не выдавало ошибок вы можете вместо
Bot = SetMan.GetString(21),написать
Bot = "PtokaX"в таком случае имя вашего бота будет совпадать с именем системного бота и он будет отображаться, или нет, смотря как включена опция в настройках хаба! т.е. отображать, или не отображать этого бота на хабе в списке юзеров!
НО... Из-за чего же возникает данная ошибка!?
А всё просто, просто запускайте скрипт, когда хаб запущен, а не когда он отключен
Удачи вам в использовании и написании скриптов и жду дальнейшего развития темы!
Автор: mariner 22.7.2008, 19:20
хехе, а еще был юзер, которые имя бота просто стер и ничего не написал!
Автор: Setuper 15.8.2008, 20:50
2*FoxMalder* описанные ошибки ни о чем не говорят - нужно смотреть код
выложи хотябы фрагменты коды с этими ошибками, тем более номера строк известны))
Автор: *FoxMalder* 15.8.2008, 21:00
смотри выше)
у меня почемуто с 1 раза не загрузились файлы :(
с 4 и 5 разобрался остались 3
Автор: Setuper 15.8.2008, 21:09
Цитата(dimetrius @ 22.7.2008, 20:11)
Предлагаю в этой теме описывать все ошибки, которые попадаются наиболее часто при написании \ использовании скриптов!
Сегодня я узнал что...
если в вашем скрипте есть строки типа:
Код
Bot = SetMan.GetString(21),
или
Menu = SetMan.GetString(0),
то ваш скрипт может выдавать ошибку типа
Код
[19:07] Синтаксис C:\PtokaX\scripts\Lag_Check.lua:29: attempt to index global 'SetMan' (a nil value)
Исправление ошибки довольно простое!
Чтоб 100% всегда не выдавало ошибок вы можете вместо
Bot = SetMan.GetString(21),написать
Bot = "PtokaX"в таком случае имя вашего бота будет совпадать с именем системного бота и он будет отображаться, или нет, смотря как включена опция в настройках хаба! т.е. отображать, или не отображать этого бота на хабе в списке юзеров!
НО... Из-за чего же возникает данная ошибка!?
А всё просто, просто запускайте скрипт, когда хаб запущен, а не когда он отключен
Удачи вам в использовании и написании скриптов и жду дальнейшего развития темы!
Чушь собачья!
Для кого спрашивается дана функция OnStartup() ???
Думаете она просто так существует? Так вот открою вам секрет, она не просто так существует! Эта функция срабатывает при запуске скрипта (вне зависимости от состояния хаба) и данная функция объявляет и инициализирует глобальные таблицы и метатаблицы.
Поэтому во избежании данной ошибки следует писать так:
Код
function OnStartup()
Bot = SetMan.GetString(21)
Menu = SetMan.GetString(0)
end
Цитата(*FoxMalder* @ 15.8.2008, 22:00)
смотри выше)
у меня почемуто с 1 раза не загрузились файлы :(
с 4 и 5 разобрался остались 3
1. функция getcmdprefixarray() ничего не возвращает, а должна возвращать таблицу
2. я не проверял работу скрипта (даже не запускал), но полагаю, что в функции getcmdprefixarray() надо вернуть p (return p)
Автор: *FoxMalder* 15.8.2008, 21:17
и вот еще 1 RegBot_newapi.lua:39: bad argument #1 to 'GetReg' (string expected, got nil)
function UserConnected(user)
Core.GetUserAllData(user)
ошиба тут -> if not(RegMan.GetReg(user.sNick)) and not (RegMan.GetReg(user.sName)) then
local msg = "\r\n\r\n"..
"\t-·=»‡«=·- -·=»‡«=·- -·=»‡«=·- -·=»‡«=·- -·=»‡«=·- -·=»‡«=·- -·=»‡«=·- -·=»‡«=·-\r\n"..
"\t"..string.rep("-", 112).."\r\n"
Core.SendPmToNick(user.sNick,bot,msg)
end
UserMenu(user)
end
Цитата(Setuper @ 15.8.2008, 22:09)
1. функция getcmdprefixarray() ничего не возвращает, а должна возвращать таблицу
2. я не проверял работу скрипта (даже не запускал), но полагаю, что в функции getcmdprefixarray() надо вернуть p (return p)
так как эт все исправить?
Автор: Setuper 15.8.2008, 21:30
Цитата(*FoxMalder* @ 15.8.2008, 22:17)
и вот еще 1 RegBot_newapi.lua:39: bad argument #1 to 'GetReg' (string expected, got nil)
function UserConnected(user)
Core.GetUserAllData(user)
ошиба тут -> if not(RegMan.GetReg(user.sNick)) and not (RegMan.GetReg(user.sName)) then
local msg = "\r\n\r\n"..
"\t-·=»‡«=·- -·=»‡«=·- -·=»‡«=·- -·=»‡«=·- -·=»‡«=·- -·=»‡«=·- -·=»‡«=·- -·=»‡«=·-\r\n"..
"\t"..string.rep("-", 112).."\r\n"
Core.SendPmToNick(user.sNick,bot,msg)
end
UserMenu(user)
end
так как эт все исправить?
Код
if not(RegMan.GetReg(user.sName)) and not (RegMan.GetReg(user.sName)) then
- увидел разницу? Будь внимательнее
по поводу предыдущего:
Код
OnStartup = function()
function getcmdprefixarray()
local p = {}
for i=1,#SetMan.GetString(29) do
table.insert(p,SetMan.GetString(29):sub(i,i))
return p
end
end
for a,b in pairs(getcmdprefixarray()) do tPrefixes[b] = 1 end
end
хотя повторяю еще раз, что работу скрипта я не проверял
Автор: *FoxMalder* 15.8.2008, 21:54
Цитата(Setuper @ 15.8.2008, 22:30)
Код
if not(RegMan.GetReg(user.sName)) and not (RegMan.GetReg(user.sName)) then
- увидел разницу? Будь внимательнее
по поводу предыдущего:
Код
OnStartup = function()
function getcmdprefixarray()
local p = {}
for i=1,#SetMan.GetString(29) do
table.insert(p,SetMan.GetString(29):sub(i,i))
return p
end
end
for a,b in pairs(getcmdprefixarray()) do tPrefixes[b] = 1 end
end
хотя повторяю еще раз, что работу скрипта я не проверял
1 разницу увидел изменил теперь другая проблема :( лучше весь скрипт выложу
2 вроде работает
newapi.lua:70: bad argument #2 to 'AddReg' (string expected, got number)
opmeBot_newapi.lua ( 7.27 килобайт )
: 4
Автор: Setuper 15.8.2008, 22:11
Код
RegMan.AddReg(user.sNick, tostring(pass), 1)
Автор: *FoxMalder* 15.8.2008, 22:55
отлично
Record_newapi.lua:176: attempt to concatenate field 'sNick' (a nil value)
Код
function UserConnected(user)
Core.GetUserAllData(user)
if tSettings.tIgnore[user.sNick] ~= 1 then
local iUserCount, tTable = Core.GetUsersCount(), Record.tDB
tTable.iUsers = tTable.iUsers or 0; tTable.tUsers = tTable.tUsers or "*нет данных*"
if (iUserCount > tTable.iUsers) then
tTable.iUsers = iUserCount; tTable.tUsers = os.date()
if (Record.tSetup.pm == 1) then
Core.SendPmToNick(user.sNick, "Спасибо. Вы только что увеличили рекорд Юзеров на ХАБе!");
end;
if (Record.tSetup.main == 1) then
Core.SendToAll("<"..tSettings.Bot.sNick.."> "..user.sNick.." только что поднял рекодную планку Юзеров на ХАБе до: "..
ошибка тут -> tTable.iUsers.." юзеров на "..os.date().." :)");
SaveToFile(Record,"Record",tSettings.fRecord)
end;
end
tDelay[user] = {}
tDelay[user]["iTime"] = tSettings.iDelay*60
end
end
Автор: Setuper 15.8.2008, 23:48
учись понимать ошибки! переводи ошибки или бери англо-русский словарь (или воспользуйся переводчиком)!
"attempt to concatenate field 'sNick' (a nil value)" = "попытка конкатенации поля 'sNick' (это поле имеет значение nil)"
разберу эту ошибку подробно:
конкатенация - синоним склеивание (соединение строк),
поле - это элемент таблицы,
получаем предложение: "попытка соединить элемент таблицы 'sNick' со строкой (этот элемент таблицы равен nil)"
а как известно nil - это пустота. Нельзя строку соединять с пустотой!
Возможно ошибка тут:
Есть таблица: tSettings. В этой таблице существует другая подтаблица:tSettings.Bot и уже в этой подтаблице есть поле 'sNick'.
И по утверждению интерпретатора это поле равно nil, то есть tSettings.Bot.sNick = nil.
Вывод из всего сказанного: ищи в скрипте объявление и инициализацию поля: tSettings.Bot.sNick
Автор: *FoxMalder* 16.8.2008, 0:08
непонял
Автор: Setuper 16.8.2008, 0:10
что именно не понятно? вроде ясно изложил
Автор: *FoxMalder* 16.8.2008, 0:14
все...
можешь по полочкам разложить и разъяснить что именно надо изменить что бы избавиться от ошибки
Автор: Setuper 16.8.2008, 0:18
значение tSettings.Bot.sNick не существует
Автор: *FoxMalder* 16.8.2008, 0:50
аааа дошло)))))))) сделал и скрипт заработал
рано радовался :( теперь шару не показывает и ошибки нету никакой
[01:28:44] <Hub-Security>
----------------------------------------------------------------------------------------------------
Рекорды Результат Дата - Время
----------------------------------------------------------------------------------------------------
Шара 0 *нет данных*
Юзеров 140 08/16/08 01:27:08
СуперШар *нет данных* (0) *нет данных*
----------------------------------------------------------------------------------------------------
[01:28:44] !rb.show
Автор: Setuper 16.8.2008, 7:15
Код
function OnTimer(tmr)
for nick,v in pairs(tDelay) do
tDelay[nick]["iTime"] = tDelay[nick]["iTime"] - 1
if tDelay[nick]["iTime"] <= 0 then
if GetItemByName(nick.sNick) then
Core.GetUserAllData(nick)
................................
Автор: *FoxMalder* 16.8.2008, 9:57
ничего не изменилось
точнее шара в рекодах стала видна а вот новые рекорды шары он не отмечает
Автор: Setuper 16.8.2008, 10:12
во-первых, надо изменить строку:
Код
fRecord = "scripts/RecordBot/tRecord.txt", -- RecordBot Database
во-вторых, в папке scripts создать папку RecordBot, так как код скрипта не предусматривает ее автоматическое создание.
Автор: *FoxMalder* 16.8.2008, 11:17
это уже все есть
Автор: Infernus-pro 16.8.2008, 21:54
Есть несколько ошибок в скрипе Наркодиллер:
1. [00:31] Синтаксис DopeWarz.v1.1.LUA5-PtokaX.ru_newapi.lua:982: ')' expected near ']'
2. [00:32] Синтаксис DopeWarz.v1.1.LUA5-PtokaX.ru_newapi.lua:3394: unexpected symbol near '='
После того как исправил первые две ошибки вылезла следующая:
3. [00:35] Синтаксис DopeWarz.v1.1.LUA5-PtokaX.ru_newapi.lua:2108: attempt to call global 'GetItemByName' (a nil value)
Ее на исправил, вылезла еще когда попытался начать игру:
4. [00:35] Синтаксис DopeWarz.v1.1.LUA5-PtokaX.ru_newapi.lua:646: attempt to call field 'msgMain' (a nil value)
К тому же команды пропускает в чат. Поможете разобраться с ошибками? Скрипт прилагаю.
Автор: Setuper 16.8.2008, 22:54
1-я ошибка: решение в строке 982:
в конце строки поменять местами символы ]), вот так: )]
2-я ошибка: решение в последней строчке (3394):
разделить функции пробелом или переносом на следующую строку, вот так:
Код
RegConnected = UserConnected
RegDisconnected = UserDisconnected
3-я ошибка: решение в строке 2108:
заменить:
Код
GetItemByName
на:
Код
Core.GetUser
4-я ошибка: решение в строке 2354:
там написано:
Код
msgOnStartup = function() -- << Main Menu >>
вместо:
Код
msgMain = function() -- << Main Menu >>
Автор: Infernus-pro 17.8.2008, 15:11
Первые ошибки там все ясно и понятно их сразу исправил)) щас попробую остальные)
Спасибо Setuper, все работает
Автор: *FoxMalder* 19.8.2008, 10:23
ну так что с рекордами облом ?О.о :(
Автор: Setuper 19.8.2008, 11:21
Нужно запустить таймер
в старом апи он запускался набором команд:
Код
SetTimer(1000)
StartTimer()
в новом апи он запускается добавлением таймера, а работает засчет идентификатора таймера в функции OnTimer(tmr)
Таким образом в функцию OnStartup() надо добавить код:
Код
tmr=TmrMan.AddTimer(1000)
Автор: *FoxMalder* 20.8.2008, 18:30
если я тебя правельно понял то это надо добавить сюда
Код
function OnStartup()
if tSettings.bRegister then Core.RegBot(tSettings.Bot.sNick,tSettings.Bot.sDesc,tSettings.Bot.sMail,true) end
if loadfile(tSettings.fRecord) then dofile(tSettings.fRecord) end;
end
в результате Record_newapi.lua:191: attempt to call global 'GetItemByName' (a nil value) :(
Автор: Setuper 20.8.2008, 18:44
учись учись учись исправлять ошибки!
об этой ошибке я уже писал несколько постов выше.
Автор: *FoxMalder* 20.8.2008, 20:31
я много много раз смотрел что может быть не так... но не увидел(
Автор: Setuper 20.8.2008, 23:55
http://mydc.ru/topic217.html?view=findpost&p=1753
Автор: *FoxMalder* 21.8.2008, 11:49
как все оказалось просто)))
ну и напоследок с этим скриптом =) как сделать чтобы команды не были видны?
Автор: Wariner 21.8.2008, 13:31
Там где команда надо дописать return true:
CODE
function ChatArrival(sUser,sData)
sData = string.sub(sData,1,-2)
local _,_,cmd =string.find(sData, "%b<>%s+(%S+)")
if cmd == "!go" then
бла бла бла
return true
end
end
Автор: *FoxMalder* 21.8.2008, 15:00
спс =)
Автор: Infernus-pro 23.8.2008, 20:51
А можете пояснить что это за ошибка и как ее исправить?
Цитата
23.08.2008 20:13:19 - PtokX 0.4.1.1\scripts\BUKTOPUHA_newapi.lua:395: bad argument #2 to 'SendToNick' (string expected, got nil)
Вот строка:
Код
Core.SendToNick(curUser.sNick,self._Sets.botmyinfo)
Автор: Sephiroth_Lukaw 23.8.2008, 21:00
В качестве второго параметра функции SendToNick - объекта Core - ожидается строка, а получили NULL, ой, nil. Скорее всего self._Sets.botmyinfo - пустая. Возможно, я не прав. Я как-то больше на PHP -)
Автор: Wariner 23.8.2008, 23:53
проверь self._Sets.botmyinfo в ...\BUKTOPUHA\settings.dat
Автор: Infernus-pro 24.8.2008, 8:44
А что нужно изменить?
Цитата
-- TrivEx._Sets.botmyinfo = "$MyINFO $ALL "..TrivEx._Sets.bot.." [ИГРА] Викторина. Помощь "..HintTrigg.."$ $BOT$$0$" -- описание бота
Автор: Wariner 24.8.2008, 9:04
ну ты видишь что у тебя это строчка запостена.... поэтому когда викторина хочет её написать а не видет
убери перед строчкой --
Автор: Infernus-pro 24.8.2008, 12:50
мда... даже этого незаметил Спасибо
Автор: Infernus-pro 25.8.2008, 21:50
А что означает вот эта ошибка?
Цитата
[00:46] Синтаксис XO_newapi.lua:227: '=' expected near 'Core'
Вот сама строка:
Цитата
tInvite[string.lower(curUser.sNick)][2]Core.SendPmToNick(.sNick,tbot,"Ваше приглашение не приняли.")
tInvite[string.lower(curUser.sNick)] = nil
И как ее исправить?
Автор: 4eBA 14.11.2008, 10:50
Помогите
Код
...
14.11.2008 09:20:44 - attempt to call a boolean value
14.11.2008 09:20:44 - attempt to call a boolean value
...
И так он ругается постоянно(Script.txt)
Автор: Setuper 14.11.2008, 12:57
Это что такое и откуда? Приложил бы хотя бы сам скрипт!