Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
29.4.2009, 0:19
Сообщение
#381
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Никак
|
|
|
30.4.2009, 10:30
Сообщение
#382
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
У меня гдет ошибка в скрипте или я совсем рехнулся и dofile("patch") не загружает таблицу в память, если в этом файле записана таблица?
|
|
|
30.4.2009, 10:33
Сообщение
#383
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Прежде чем загружать функцией dofile, нужно проверить синтаксис функцией loadfile.
При загрузке таким образом, таблица должна быть исключительно глобальной. |
|
|
30.4.2009, 10:39
Сообщение
#384
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
Код function OnStartup() sFileH = Core.GetPtokaXPath().."scripts/Hello/Hello.tbl" sFileHU = Core.GetPtokaXPath().."scripts/Hello/tblUsers.tbl" if loadfile(sFileH) and loadfile(sFileHU) then dofile(sFileH) dofile(sFileHU) end end -------------------------------- -------------------------------- function Records(tUser) if tbl["MaxUsers"] < (Core.GetUsersCount() + 1) then Ошибка : "[11:32] Синтаксис ...nts\BACKUPS\30.03.09\PtokaX0.4.1.1\scripts\Hello.lua:122: attempt to compare nil with number" Не могу понять почему nil когда загружается таблица из файла: Код tbl = {
["MaxUsers"] = 1, ["MaxShare"] = 57327745242, ["MaxShareDate"] = "04/30/09 11:25:05", ["TopUS"] = { [2] = { ["iShare"] = 0, ["sNick"] = "Нету", }, [3] = { ["iShare"] = 0, ["sNick"] = "Нету", }, [1] = { ["iShare"] = 57327745242, ["sNick"] = "[len]vicious", }, [4] = { ["iShare"] = 0, ["sNick"] = "Нету", }, [5] = { ["iShare"] = 0, ["sNick"] = "Нету", }, }, ["MaxUsersDate"] = "04/30/09 11:25:05", } |
|
|
30.4.2009, 10:42
Сообщение
#385
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ну так посмотри в файле Hello.lua 122 строку
|
|
|
30.4.2009, 10:56
Сообщение
#386
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
я ее написал...вот она:
Код if tbl["MaxUsers"] < (Core.GetUsersCount() + 1) then Прикрепил заготовку скрита...чувствую что гдет маленькая ошибка... гляньте плз кто-нить! Чет я ковыряю и ковыряю...но никак не вкурю! нужен свежий взгляд!
Прикрепленные файлы
|
|
|
30.4.2009, 11:10
Сообщение
#387
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
каждый файл отдельно
Код if loadfile(sFileH) then
dofile(sFileH) end if loadfile(sFileHU) then dofile(sFileHU) end |
|
|
30.4.2009, 11:14
Сообщение
#388
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
В файле tblUsers.tbl удали строку: ["uptr"] = userdata: 0102E570,
|
|
|
30.4.2009, 11:27
Сообщение
#389
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
СПАСИБО! Сам ды не допер...я так понял он не воспринимает эту строку как поле таблицы и поэтому возвращается false ??? Кстати че означает эта строка и почему не воспринимается, если она присутствует в таблице tUser?
Кстати, как лучше записывать ТОП5 юзеров по шаре, и выводить юзеру их при подключении? А то чет мой алгоритм там помоему слишком "тяжелый" плюс там недоработка есть...если доработать еще тяжелее станет...может как получше можно? |
|
|
30.4.2009, 11:44
Сообщение
#390
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
В lua есть такое тип userdata (пользовательские данные). Этот тип позволяет хранить любые данных из C в переменных Lua. Значение этого типа является ссылкой на блок физической памяти и не имеет предопределенных операций в Lua, за исключением присваивания и проверки на равенство. Однако, используя метатаблицы, програмист может определить операции над значениями этого типа. Значения типа userdata не могут быть созданы или изменены непосредственно в Lua, это возможно только с помощью C API. Такой подход гарантирует целостность данных, принадлежащих ведущей программе.
|
|
|
4.5.2009, 13:58
Сообщение
#391
|
|
Продвинутый участник Группа: Пользователи Сообщений: 176 Регистрация: 11.7.2008 Пользователь №: 171 Спасибо сказали: 182 раза |
Доброго времени суток. Помогите записать в таблицу table содержание файла, к примеру такое:
Цитата 1 2 3 4 Спасибо. |
|
|
4.5.2009, 14:17
Сообщение
#392
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Код function Loader(sFile)
local t, f = {}, io.open(sFile) if f then local l = f:read() while l do table.insert(t, l) l = f:read() end f:flush() f:close() end return t end |
|
|
4.5.2009, 14:22
Сообщение
#393
|
|
Продвинутый участник Группа: Пользователи Сообщений: 176 Регистрация: 11.7.2008 Пользователь №: 171 Спасибо сказали: 182 раза |
Спасибо. Как я понял содержимое будет в таблице t ?
Код bad argument #1 to 'open' (string expected, got nil) строка local t, f = {}, io.open(File) local Path = Hex.GetScriptsFolder() if not File:find("^"..Path) then File = Path..File end if loadfile(File) then dofile(File) Это условие выполнено |
|
|
4.5.2009, 14:47
Сообщение
#394
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Я написал функцию, которая возвращает таблицу со строками файла.
Я не понимаю что ты хочешь сделать. Либо внятно говори, либо разбирайся сам. |
|
|
4.5.2009, 15:40
Сообщение
#395
|
|
Продвинутый участник Группа: Пользователи Сообщений: 176 Регистрация: 11.7.2008 Пользователь №: 171 Спасибо сказали: 182 раза |
Задача: При запуске скрипта записать в таблицу t данные из файла (пример содержимого файла приводил выше).
Вот кусок кода: Код File = "chathistory.dat" -- Save history to this file OnLoad = function() local Path = Hex.GetScriptsFolder() if not File:find("^"..Path) then File = Path..File end if loadfile(File) then dofile(File) t = {} loadhistory(File) -- ЧТО ТУТ ПИСАТЬ? end else t = {} savehistory(File,t,"t") end Hex.SetAboutString("Tsd, 2009") return true end function loadhistory(File) local t, f = {}, io.open(File) if f then local l = f:read() while l do table.insert(t, l) l = f:read() end f:flush() f:close() end return t end При перезапуске скрипта таблица t пустая, т.е. нет записи в таблицу. |
|
|
4.5.2009, 15:47
Сообщение
#396
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
А те как записать то надо? каждую строку в отдельное поле таблицы или тупо весь текст в какое нибудь поле таблицы? приведи пример таблицы которая должна получиться после записи...
как можно добавить таймер на функцию с переменной? т.е. вот что я хочу: Код tmr = TmrMan.AddTimer(10000,News(tUser)) но чет не канает!))) |
|
|
4.5.2009, 15:50
Сообщение
#397
|
|
Продвинутый участник Группа: Пользователи Сообщений: 176 Регистрация: 11.7.2008 Пользователь №: 171 Спасибо сказали: 182 раза |
Если к примеру файл содержит текстовое содержание:
Цитата [04.05.2009__15:42:13] <Tsd> 12 [04.05.2009__15:47:17] <Tsd> yt [04.05.2009__15:47:19] <Tsd> ui [04.05.2009__15:47:21] <Tsd> 134 то и таблица t должна иметь то же содержание. |
|
|
4.5.2009, 15:53
Сообщение
#398
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Это вполне логично, что таблица у тебя будет пустой, так как до записи дело не доходит.
условие Код if loadfile(File) then у тебя не выполняется, так как это условие будет выполняться, если в файле будет содержаться lua код. Так как у тебя в файле не содержится Lua кода, то функции loadfile и dofile использовать нельзя. Да и вообще какой смысл их использовать, когда я уже написал тебе полностью функцию.Код local File = "chathistory.dat"
OnLoad = function() loadhistory(Hex.GetScriptsFolder()..File) return true end function loadhistory(File) local t, f = {}, io.open(File) if f then local l = f:read() while l do table.insert(t, l) l = f:read() end f:flush() f:close() end return t end |
|
|
4.5.2009, 15:57
Сообщение
#399
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
какое то же то?
такая таблица должна получится: ??? Код t = { [1]="[04.05.2009__15:42:13] <Tsd> 12" [2]= "[04.05.2009__15:47:17] <Tsd> yt" [3]= "[04.05.2009__15:47:19] <Tsd> ui" [4]= "[04.05.2009__15:47:21] <Tsd> 134" } или какая? пардон, продублирую вопрос, а то может не заметили... как можно добавить таймер на функцию с переменной? т.е. вот что я хочу: Код tmr = TmrMan.AddTimer(10000,News(tUser)) но чет не канает!))) |
|
|
4.5.2009, 16:02
Сообщение
#400
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
А зачем тебе понадобился таймер с переменной?
Таймер с переменной сделать нельзя, но можно сделать отдельно таймер и переменную, и в таймере будет использоваться эта переменная. А для того чтобы не нарушать принцип многопоточности нужно создавать целую таблицу с этими переменными. |
|
|
Похожие темы
|
Сейчас: 27.11.2024, 19:35 |