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

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

MyDC.ru _ Помощь по скриптам для PtokaX _ Вопрос по написанию скрипта

Автор: Uncle_Dif 5.7.2009, 19:53

Монтирую скрипт.
Пишет ошибку:[22:46] Синтаксис [string "..."]:11: attempt to index global 'CoreAll' (a nil value)
Перевод:[22:46] Синтаксис [натягивают "..."]:11: пытайтесь индексировать глобальную переменную 'CoreAll' (нулевое значение)
11 строка:local f = io.open( Core.GetPtokaXPath():gsub("/", "\\").."scripts\\"..filename, "r" )
Пробовал так:local f = io.open( CoreAll.GetPtokaXPath():gsub("/", "\\").."scripts\\"..filename, "r" )
Пишет:[22:55] Синтаксис ...e_Dif-Hub\InstaHub-0.23\InstaHub\scripts\Ворожея.lua:11: attempt to index global 'CoreAll' (a nil value). Сам скрипт не запускается.
Объясните смысл и что сделать тут?
Пасяб.

Автор: Wariner 5.7.2009, 20:14

объясни суть того что ты пытаешься сделать.

Автор: Setuper 5.7.2009, 20:14

Что за бред пишешь?
В данной строчке нет ошибки

Код
local f = io.open( Core.GetPtokaXPath():gsub("/", "\\").."scripts\\"..filename, "r" )

Автор: Uncle_Dif 5.7.2009, 20:29

Цитата(Wariner @ 5.7.2009, 21:14) *
объясни суть того что ты пытаешься сделать.


Я переделал скрипт Гадалка в скрипт Колдунчик (прибавил рандомов, см. в Корзине).
Он два дня поработал и теперь пишет ошибку про ядро.
Теперь пытаюсь сделать следующую модификацию скрипта(назвал Ворожея), который бы гадал не себе (или не только себе), но и намеченному юзеру или случайному. Начал с решения вышеописанной ошибки. Высмотрел на форуме ситуацию, чем-то похожую на мою и переписал 11 строку так:
local f = io.open( Core.GetOnlineUsers():gsub("/", "\\").."scripts\\"..filename, "r" )
и теперь мне пишет уже другую ошибку:
[23:15] Синтаксис ...e_Dif-Hub\InstaHub-0.23\InstaHub\scripts\Ворожея.lua:11: attempt to call method 'gsub' (a nil value)
перевожу:
[23:15] Синтаксис... e_Dif-Hub\InstaHub-0.23\InstaHub\scripts\Ворожея.lua:11: пытайтесь называть(вызывать) метод 'gsub' (нулевое значение)
Та же строка, ошибка сдвинулась....
Что такое 'gsub' и как задать не нулевое значение?

Автор: Setuper 5.7.2009, 21:10

Ты вообще не понимаешь что делаешь!
Читай описания функций: http://mydc.ru/index.html?showtopic=118&view=findpost&p=2697

Функция Core.GetOnlineUsers() возвращает таблицу, а не строку. Метод gsub может работать только со строками.

Автор: Uncle_Dif 5.7.2009, 21:34

Цитата(Setuper @ 5.7.2009, 21:10) *
Ты вообще не понимаешь что делаешь!
Читай описания функций: http://mydc.ru/index.html?showtopic=118&view=findpost&p=2697

Функция Core.GetOnlineUsers() возвращает таблицу, а не строку. Метод gsub может работать только со строками.


И впрямь, с свиным рылом а калашный ряд(((....
Видишь ли, моя пуля в голове зашевелилась, после того, как я переделал, черт бы её побрал, Гадалку в Колдунчика. Колдунчик честно поработал два дня и сдох. Выдает в чат только команду !колдуй (одновременно еще парочка скриптов отказала)....
Гадалка тоже только команду стала выдавать. Не знаю куда и думать...

Автор: Wariner 5.7.2009, 21:42

если команда проскакивает значит полюбому есть ошибка!

Автор: Uncle_Dif 5.7.2009, 22:09

Цитата(Wariner @ 5.7.2009, 21:42) *
если команда проскакивает значит полюбому есть ошибка!


Ха-Ха 3 раза, вот что мне нужно было, так это твой пост тут http://mydc.ru/topic1164.html?p=12198&#entry12198 -прописать абсолютные пути, т.е. папки поименовать надлежаще. Спасибо за тот пост. Кстати я там приколюшку кавайную нарыл- Доброе время суток)))
Попер мой колдунчик. Где теперь разместить вопрос: Как заставить Колдунчика гадать на намеченного юзера и писать в чат не единой строкой а как бутылочка:
-Колдуй баба..
-Колдуй дед...
т.е. выдавать многострочное сообщение? а? )))
Спасибо, что тему эту в козину не отправили, теперь уже можно)))

Автор: mariner 5.7.2009, 22:16

Цитата(Uncle_Dif @ 5.7.2009, 23:09) *
Ха-Ха 3 раза, вот что мне нужно было, так это твой пост тут http://mydc.ru/topic1164.html?p=12198&#entry12198 -прописать абсолютные пути, т.е. папки поименовать надлежаще. Спасибо за тот пост. Кстати я там приколюшку кавайную нарыл- Доброе время суток)))
Попер мой колдунчик. Где теперь разместить вопрос: Как заставить Колдунчика гадать на намеченного юзера и писать в чат не единой строкой а как бутылочка:
-Колдуй баба..
-Колдуй дед...
т.е. выдавать многострочное сообщение? а? )))
Спасибо, что тему эту в козину не отправили, теперь уже можно)))


еще раз повторюсь - я всего лишь требовал выполнения правил. Ты мог же (на сколько я помню настройки этого форума это разрешают) привести первое сообщение к нормальному виду. Дней 5 точно было.

Автор: Wariner 5.7.2009, 22:17

так посмотри как в бутылочке это реализовано (с помощью таймера) и сделай)))

Автор: Uncle_Dif 6.7.2009, 0:16

Разве я не исправил сообщение(пост)? Оно еще в корзине.... Я, повторяю, не мог исправить название темы и её описание.

Цитата(Wariner @ 5.7.2009, 22:17) *
так посмотри как в бутылочке это реализовано (с помощью таймера) и сделай)))


Канеш я и сам в первую очередь об этом подумал. Уже сделал вот такой вид:
[03:13:50] <Ворожея> Колдуй баба, колдуй дед..
[03:13:50] трое сбоку - ваших нет!
[03:13:50] Туз бубновый, гроб сосновый-
[03:13:50] Про планиду дай ответ!
[03:13:50] Леший говорит: Uncle_Dif обопьётся пивом 26 Октября 2095 года по причине : Самоубийство лузера
Но выдается это одним махом.
Из бутылочки пытался вырезать таймер(как я его понял), вставил- лажа, кароч- не то что-то.
На форуме гденить был код таймера?

Автор: Wariner 6.7.2009, 7:58

таймер задаётся так:

Код
TmrMan.AddTimer(iTime, sFunction)

iTime - время в милисекундах Например:
Код
TmrMan.AddTimer(1000, sFunction)

говорит о том что функция будет выполнятся раз в секунду
sFunction - функция которая выполняется по таймеру. Если не указанна, то используется функция OnTimer. Например:
Код
TmrMan.AddTimer(1000, "Test")

говорит о том что функция Test будет выполнятся раз в секунду, естественно в теле скрипта должна быть эта фкнуция

Автор: Uncle_Dif 6.7.2009, 11:52

Спасибо. Теперь буду думать эту мысль.

Автор: Uncle_Dif 8.7.2009, 10:30

Wariner,изломал всю голову- в ней уже и пуля зашевелилась...((
Если не влом, посмотри что мне исправить, чтоб такое:
[13:23:31] <Ворожея>
[13:23:31] Колдуй баба, колдуй дед..
[13:23:31] трое сбоку - ваших нет!
[13:23:31] Туз бубновый, гроб сосновый-...
[13:23:31] Про планиду дай ответ!
[13:23:31] Билл Гейтц говорит: Uncle_Dif познакомиттца с любофью28 Июля 2029 года по причине : Альтернатива- Дом2.
выдавало бы так:
[13:23:31] <Ворожея>
[13:23:32] Колдуй баба, колдуй дед..
[13:23:33] трое сбоку - ваших нет!
[13:23:34] Туз бубновый, гроб сосновый-...
[13:23:35] Про планиду дай ответ!
[13:23:36] Билл Гейтц говорит: Uncle_Dif познакомиттца с любофью28 Июля 2029 года по причине : Альтернатива- Дом2.
Что тамс таймером у меня?

CODE

Bot = "Ворожея"
SpinCmd = "!ворожи"
SecondsInterval = 60
GameOn = 1
Time = 1

-- Загрузка списка из файла
function loadlist( filename )
local list = {}
local f = io.open( Core.GetPtokaXPath():gsub("/", "\\").."scripts\\"..filename, "r" )
if f then
local line = f:read("*line")
while line do
table.insert(list,line)
line = f:read("*line")
end
f:close()
end
return list
end

SpinData = loadlist("deathv/data.dat")
SpinMonth = loadlist("deathv/month.dat")
SpinYear = loadlist("deathv/year.dat")
SpinReason = loadlist("deathv/reason.dat")
SpinSpiritsv = loadlist("deathv/spiritsv.dat")
SpinKoldunv = loadlist("deathv/koldunv.dat")
SpinMake = loadlist("deathv/make.dat")
function OnTimer(tmr)
TmrMan.AddTimer(1000, sFunction)
--SendToAll("<"..Bot.."> Колдунчик осободился, наберите !колдуй что бы узнать свою-твою планиду")
GameOn = 1
end

function OnStartup()
--SendToAll("<"..Bot.."> На хаб пришел Колдунчик, наберите !колдуй.")
GameOn = 1
end

function ChatArrival(curUser,data)
Core.GetUserAllData(curUser)
data = string.sub(data,1,string.len(data)-1)
s,e,cmd = string.find(data,"%b<>%s+(%S+)")
if cmd == SpinCmd then
if GameOn == 1 then
local OnlineTable = Core.GetOnlineUsers(true)
if #OnlineTable < 2 then
Core.SendToAll("<"..Bot.."> Пользователей должно быть болше одного.")
return true
end

tmr = TmrMan.AddTimer(SecondsInterval*1000)
GameOn = 0
UsersNick = {}
for _,oUser in pairs(OnlineTable) do
table.insert(UsersNick,oUser.sNick )
end
i = #UsersNick
if i < 0 then i = 10 end
a = math.random(1,i)
b = math.random(1,i)
while a == b do
b = math.random(1,i)
end
sAnswer = "<"..Bot.."> "..SpinKoldunv[math.random(1,#SpinKoldunv)]..""..SpinSpiritsv[math.random(1,#SpinSpiritsv)].." "..curUser.sNick.." "..SpinMake[math.random(1,#SpinMake)]..""..SpinData[math.random(1,#SpinData)].." "..SpinMonth[math.random(1,#SpinMonth)].." "..SpinYear[math.random(1,#SpinYear)].." года по причине : "..SpinReason[math.random(1,#SpinReason)]..""

Core.SendToAll(sAnswer)
Time = ((os.date("%H") * 60 ) + os.date("%M")) * 60 + os.date("%S")
return true
else
local i = SecondsInterval - (((os.date("%H") * 60 ) + os.date("%M")) * 60 + os.date("%S") - Time)

Core.SendToNick(curUser.sNick,"<"..Bot.."> Ворожея будет свободна через "..i.." секунд.")
return true
end
end
end

---------------------- МЕНЮ --------------------------------------------
CMenu = "Меню Uncle_Dif-Hub\\Игры\\Ворожея" -- Начальный путь в меню

tProfiles = {
[0] = 1,
[1] = 1,
[2] = 1,
[3] = 1,
[-1] = 0,
}

function UserConnected(user)
if tProfiles[user.iProfile] == 1 then
Core.SendToUser(user,"$UserCommand 1 3 "..CMenu.."\\Ворожить\\Себе\\$<%[mynick]> !ворожи|")


end
end

OpConnected = UserConnected
RegConnected = UserConnected

Автор: Setuper 8.7.2009, 13:35

Код
TmrMan.AddTimer(1000, sFunction)


Что за переменная sFunction?

Автор: Uncle_Dif 8.7.2009, 14:02

Цитата(Setuper @ 8.7.2009, 14:35) *
Код
TmrMan.AddTimer(1000, sFunction)


Что за переменная sFunction?


Взято из поста Wariner`a, см.выше.

Автор: Setuper 8.7.2009, 15:19

Ну так нельзя бездумно переписывать!

Эта переменная должна содержать имя функции, которая должна выполняться в таймере.

Автор: Uncle_Dif 8.7.2009, 15:24

Цитата(Setuper @ 8.7.2009, 16:19) *
Ну так нельзя бездумно переписывать!

Эта переменная должна содержать имя функции, которая должна выполняться в таймере.


Как-то не понял последнего. Как или что написать-то? Там Выше кодом выложен скрипт, проблема с таймером, может напишешь где и как исправить...а?

Автор: Setuper 8.7.2009, 15:35

В приведённом коде таймер не запущен!

В твоём коде в таймерной функции создаётся ещё один таймер, кроме того, что таймерная функция будет просто пожирать память, так она ещё будет выводить в чат каждую секунду фразу: "<"..Bot.."> Колдунчик осободился, наберите !колдуй что бы узнать свою-твою планиду".

В общем бред, и не понятно чего тебе нужно.

Автор: Uncle_Dif 8.7.2009, 20:45

В общем бред, и не понятно чего тебе нужно.
[/quote]
Не знаю как еще объяснить мою затею. Мой бот выдает в чат одномоментно это:
[13:23:31] <Ворожея>
[13:23:31] Колдуй баба, колдуй дед..
[13:23:31] трое сбоку - ваших нет!
[13:23:31] Туз бубновый, гроб сосновый-...
[13:23:31] Про планиду дай ответ!
[13:23:31] Билл Гейтц говорит: Uncle_Dif познакомиттца с любофью28 Июля 2029 года по причине : Альтернатива- Дом2.

Как видно сообщение датировано временем 13.23.31. Я хочу чтоб сообщение выдавалось как в Бутылочке, с интервалом в 1 секунду и выдавало бы так:
[13:23:31] <Ворожея>
[13:23:32] Колдуй баба, колдуй дед..
[13:23:33] трое сбоку - ваших нет!
[13:23:34] Туз бубновый, гроб сосновый-...
[13:23:35] Про планиду дай ответ!
[13:23:36] Билл Гейтц говорит: Uncle_Dif познакомиттца с любофью28 Июля 2029 года по причине : Альтернатива- Дом2.

Вот не знаю как с таймером обращаться: правильный таймер установить и настроить его.

Автор: Wariner 8.7.2009, 21:48

ты хоть терминологию подучи или какие то основы... а то тебе говоришь а слова впустую
чтобы запустить таймер используешь фразу

Код
TmrMan.AddTimer(1000, "SendMsg")

в конце пишешь
Код
function SendMsg()
...
end

и в ней описываешь события по таймеру

Автор: Uncle_Dif 8.7.2009, 22:23

Замечание твое справедливо. Стараюсь как умею, канеш слабоват я в Lua...

Пост изменен.

Автор: Wariner 8.7.2009, 22:31

Извините вы в своём уме?!
1) я уже писал ранее не надо делать такие цитаты! вы не замечаете или не реагируете на замечания модератора +20% предов!
2) мы что идиоты?! нахрена переписывать одно и то же по сто раз?!

PS: есть скрипт бутылочка. открываешь и смотришь как сделано там!

Автор: Uncle_Dif 8.7.2009, 22:42

Цитата(Wariner @ 8.7.2009, 22:31) *
Извините вы в своём уме?!
1) я уже писал ранее не надо делать такие цитаты! вы не замечаете или не реагируете на замечания модератора +20% предов!
2) мы что идиоты?! нахрена переписывать одно и то же по сто раз?!

PS: есть скрипт бутылочка. открываешь и смотришь как сделано там!


Пытался я из бутылочки взять таймер, с ним мой не запускается. Не могу- вот сюда и вынес. Я уж и целиком код выложил тут.... может мне эту тему перенести в дугой форум?
В запросы скриптов?

Автор: Wariner 8.7.2009, 22:58

Вы не адекватны! Вы слова понимаете? Сколько раз говорить что не надо цитировать пост который написан перед вами!!! Если вы впредь будете нарушать это правило, будет применена предмодерациия сообщений или бан!

Автор: Uncle_Dif 8.7.2009, 23:09

Я полагал именно так и надо делать.... А как человек поймет что я ему отвечаю? Не всегда по теме двое пишут....

Автор: district 9.7.2009, 1:09

Цитата
А как человек поймет что я ему отвечаю?

Очень просто : нужно перед сообщением, адресованным человеку, поставить ник этого человека, или 2 <nick > ( "для ника такого-то"). И еще можно этот ник полужирным выделить ( крайняя левая кнопка с буквой b в окошке редактора ).