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

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

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"

в таком случае имя вашего бота будет совпадать с именем системного бота и он будет отображаться, или нет, смотря как включена опция в настройках хаба! т.е. отображать, или не отображать этого бота на хабе в списке юзеров!

НО... Из-за чего же возникает данная ошибка!?

А всё просто, просто запускайте скрипт, когда хаб запущен, а не когда он отключен big_smile.gif
Удачи вам в использовании и написании скриптов и жду дальнейшего развития темы! still_dreaming.gif

Автор: mariner 22.7.2008, 19:20

хехе, а еще был юзер, которые имя бота просто стер и ничего не написал! big_smile1.gif

Автор: *FoxMalder* 15.8.2008, 20:42

решил перевести 2 хаб на 0411 большую часть скриптов перевел но с некоторыми проблема(

и так 1 вроде скрипт простой но с ошибкой -> mpps_newapi.lua:34: unexpected symbol near ','  mpps_newapi.lua ( 1.32 килобайт ) : 10


2 все ок но почему то не находит директорию О.о  анти_реклама_newapi.lua ( 2.49 килобайт ) : 4


3 работает но с ошибкой -> Призрак_newapi.lua:22: bad argument #1 to 'pairs' (table expected, got no value)  Призрак_newapi.lua ( 2.33 килобайт ) : 10


помогите)

P.S. может создать тему с такими ошибками и способы их решения??

Автор: Setuper 15.8.2008, 20:50

2*FoxMalder* описанные ошибки ни о чем не говорят - нужно смотреть код
выложи хотябы фрагменты коды с этими ошибками, тем более номера строк известны))

Автор: *FoxMalder* 15.8.2008, 21:00

смотри выше)
у меня почемуто с 1 раза не загрузились файлы :(
с 4 и 5 разобрался остались 3 big_smile.gif

Автор: 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"

в таком случае имя вашего бота будет совпадать с именем системного бота и он будет отображаться, или нет, смотря как включена опция в настройках хаба! т.е. отображать, или не отображать этого бота на хабе в списке юзеров!

НО... Из-за чего же возникает данная ошибка!?

А всё просто, просто запускайте скрипт, когда хаб запущен, а не когда он отключен big_smile.gif
Удачи вам в использовании и написании скриптов и жду дальнейшего развития темы! still_dreaming.gif


Чушь собачья!

Для кого спрашивается дана функция OnStartup() ???
Думаете она просто так существует? Так вот открою вам секрет, она не просто так существует! Эта функция срабатывает при запуске скрипта (вне зависимости от состояния хаба) и данная функция объявляет и инициализирует глобальные таблицы и метатаблицы.

Поэтому во избежании данной ошибки следует писать так:
Код
function OnStartup()
    Bot = SetMan.GetString(21)
    Menu = SetMan.GetString(0)
end



Цитата(*FoxMalder* @ 15.8.2008, 22:00) *
смотри выше)
у меня почемуто с 1 раза не загрузились файлы :(
с 4 и 5 разобрался остались 3 big_smile.gif

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)


так как эт все исправить? eyes_droped.gif

Автор: 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



так как эт все исправить? eyes_droped.gif


Код
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 вроде работает big_smile.gif


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

отлично big_smile.gif

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

непонял shocked.gif

Автор: Setuper 16.8.2008, 0:10

что именно не понятно? вроде ясно изложил what.gif

Автор: *FoxMalder* 16.8.2008, 0:14

все...
можешь по полочкам разложить и разъяснить что именно надо изменить что бы избавиться от ошибки

Автор: Setuper 16.8.2008, 0:18

значение tSettings.Bot.sNick не существует

Автор: *FoxMalder* 16.8.2008, 0:50

аааа дошло)))))))) сделал и скрипт заработал big_smile1.gif surrender.gif

рано радовался :( теперь шару не показывает и ошибки нету никакой
[01:28:44] <Hub-Security>
----------------------------------------------------------------------------------------------------
Рекорды Результат Дата - Время
----------------------------------------------------------------------------------------------------
Шара 0 *нет данных*
Юзеров 140 08/16/08 01:27:08
СуперШар *нет данных* (0) *нет данных*
----------------------------------------------------------------------------------------------------
[01:28:44] !rb.show

 Record_newapi.lua ( 9.62 килобайт ) : 12
 

Автор: 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)
К тому же команды пропускает в чат. Поможете разобраться с ошибками? Скрипт прилагаю.

 narkodiller.rar ( 32.39 килобайт ) : 5
 

Автор: 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, все работает big_smile.gif

Автор: *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

ну ты видишь что у тебя это строчка запостена.... поэтому когда викторина хочет её написать а не видет still_dreaming.gif
убери перед строчкой --

Автор: Infernus-pro 24.8.2008, 12:50

мда... даже этого незаметил beat_plaster.gif Спасибо big_smile.gif

Автор: 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

beat_brick.gif beat_brick.gif beat_brick.gif
Помогите

Код
...
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

Это что такое и откуда? Приложил бы хотя бы сам скрипт!