myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
53 страниц V  < 1 2 3 4 5 > »   
Ответить в данную темуНачать новую тему

> Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы)

Wariner
сообщение 26.8.2008, 11:25
Сообщение #41


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Вот тут в одной теме просили написать скрипт статистики.... Написал... вроде всё правильно, но есть ошибка:не сохраняются данные в файл(не таблица), а ещё как наилучшим способом реализовать чтоб шара удалялась из таблицы если пользователь не был какое то время или поменял её.
Прикрепленные файлы
Прикрепленный файл  Statistics.lua ( 7.73 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
+Quote Post
Setuper
сообщение 26.8.2008, 12:07
Сообщение #42


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




папку Statistics создай!
что касается изменения шары, то это можно взять из хуббабота, там при входе сканируется и изменяется таблица топа шары и устанавливается время очистки
Go to the top of the page
+Quote Post
Wariner
сообщение 26.8.2008, 15:09
Сообщение #43


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Папка была!!! При первом запуске скрипта создаётся два нужных файла. В файл с таблицей запись идёт а в во второй нет(((
Go to the top of the page
+Quote Post
Setuper
сообщение 26.8.2008, 15:37
Сообщение #44


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




во-первых, думаю, что следует написать так:
Код
local sSettings = "MaxUser = 0\r\nMaxUsersTime = 0\r\nMaxShara = 0\r\nMaxSharaTime = 0"
MaxUser,MaxUsersTime,MaxShara,MaxSharaTime = 0,0,0,0
local sHandle = io.open(gStat, "w+")
sHandle:write(sSettings)
sHandle:flush()
sHandle:close()

P.S. переменные MaxUser,MaxUsersTime,MaxShara и MaxSharaTime останутся в стеке скрипта.

во-вторых:
запись в этот файл производится по таймеру (каждые 30 секунд)
Код
TmrMan.AddTimer(30*1000,"UpdateHubStats")
Go to the top of the page
+Quote Post
Wariner
сообщение 10.9.2008, 13:08
Сообщение #45


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




давненько уже сам ничего не делал вот тут нашли ещё один баг в вышеприведённом скрипте статистики!
CODE

gPath = Core.GetPtokaXPath():gsub("/", "\\").."scripts\\Statistics\\" -- основная папка скрипта
gStat = gPath.."Statistics.tbl" -- таблица max статистики
gShara = gPath.."Sharatop.tbl" -- таблица шары пользователей

tShara = {}

function OnStartup() -- функции которые выполняются при загрузке скрипта
if loadfile(gStat) ~= nil then
dofile(gStat)
Core.SendToAll("Файл найден")
else
local sSettings = "MaxUser = 0\r\nMaxUsersTime = 0\r\nMaxShara = 0\r\nMaxSharaTime = 0"
MaxUser,MaxUsersTime,MaxShara,MaxSharaTime = 0,0,0,0
local sHandle = io.open(gStat, "w+")
sHandle:write(sSettings)
sHandle:flush()
sHandle:close()
Core.SendToAll("Файл не найден")
end
end

Он всегда не находит файл(хотя он там есть) и при перезагрузке обнуляет всю стату((( в чём проблема
Go to the top of the page
+Quote Post
Setuper
сообщение 10.9.2008, 15:00
Сообщение #46


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




попробуй так:
Код
gPath = "scripts\\Statistics\\"
Go to the top of the page
+Quote Post
Wariner
сообщение 11.9.2008, 15:16
Сообщение #47


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




не помогло((( попробовал и так:gPath = "scripts\\Statistics\\" и так: gPath = "Statistics\\" Собственно у меня птока 0400 поэтому первый вариант и так не подходит! Когда файла нет, он пишет файл не найден и создаёт его, но когда в него вносятся какие то изменения при перезагрузке скрипта он опять пишет файл не найден и воссоздаёт его в первоначальном виде(((
Go to the top of the page
+Quote Post
Wariner
сообщение 15.9.2008, 21:05
Сообщение #48


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




как создать папку если она прописана как
Код
gPath = Core.GetPtokaXPath():gsub("/", "\\").."scripts\\Hub files\\"

вроде это просто... черещ вот этот код
Код
        if os.execute("dir "..gPath) ~= 0 then
            os.execute("md "..gPath)    
        end
Go to the top of the page
+Quote Post
Setuper
сообщение 15.9.2008, 21:07
Сообщение #49


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




не совсем верно

есть 3 ошибки:
1). Нафига использовать полный путь? Незачем выполнять лишние действия и писать Core.GetPtokaXPath():gsub("/", "\\")
Функция os.execute вызывает командную строку (командная строка вызывается из папки, где лежит файл PtokaX.exe), поэтому ошибочным будет загонять полный путь.
2). В аргументе команды md недопустимы пробелы.
3). Действие os.execute("md "..gPath) создает папку, если она еще не была создана до этого, поэтому действие if os.execute("dir "..gPath) ~= 0 then также бессмысленно.

В итоге надо написать так:
Код
local gPath = "scripts\\Hub_files"
os.execute("md "..gPath)
Go to the top of the page
+Quote Post
Wariner
сообщение 16.9.2008, 22:34
Сообщение #50


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




А можно ли получить IP юзера по нику? Вот например когда делаем вот так:
CODE
function ChatArrival(sUser, sData)
sData = string.sub(sData,1,-2)
local _,_,cmd =string.find(sData, "%b<>%s+(%S+)")
if cmd == "!gagmainnick" then
local _,_,Nick = string.find(sData, "%b<>%s+%S+%s+(%S+)")
local IP = ???
end
end

если я напишу local IP = sUser.sIP, то IP будет присвоенно значение моего ип, а как сделать чтоб IP было равно айпишнику юзера с ником Nick?

И ещё вопросец, видемо к Setuper`у(ибо остальные куда то пропали) Ты был прав в скрипте гага я ошибся... Посмотри пожалуйста где я напортачил:
CODE
function ChatArrival...
if cmd == "!showgagmain" then
showgag(sUser, Main)
return true
end
if cmd == "!showgagpm" then
showgag(sUser, Pm)
return true
end

function showgag(sUser, tip)
local qwerty = nil
tNick = {}
tIP = {}
if tip == Main then
qwerty = "главном чате"
tNick = tGag.Main["Nick"]
tIP = tGag.Main["Ip"]
end
qwerty = "привате"
tNick = tGag.Pm["Nick"]
tIP = tGag.Pm["Ip"]
end
...
end

Почемуто когда нажиимаешь посмотреть заглушенных в мейне он всё равно показывает заглушенных в PM
Go to the top of the page
+Quote Post
Setuper
сообщение 16.9.2008, 22:57
Сообщение #51


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Код
function ChatArrival(sUser, sData)
    sData = string.sub(sData,1,-2)
    local _,_,cmd =string.find(sData, "%b<>%s+(%S+)")
    if cmd == "!gagmainnick" then
        local _,_,Nick = string.find(sData, "%b<>%s+%S+%s+(%S+)")
        local tUs=Core.GetUser(Nick)
        if tUs then
            local IP = tUs.sIP
        end
    end
end


Код
function ChatArrival...
    if cmd == "!showgagmain" then
        showgag(sUser, "Main")
        return true
    elseif cmd == "!showgagpm" then
        showgag(sUser, "Pm")
        return true
    end


function showgag(sUser, tip)
    local qwerty = nil
    tNick = {}
    tIP = {}
    if tip == "Main" then
        qwerty = "главном чате"
        tNick = tGag.Main["Nick"]
        tIP = tGag.Main["Ip"]
    elseif tip == "Pm" then
        qwerty = "привате"
        tNick = tGag.Pm["Nick"]
        tIP = tGag.Pm["Ip"]
    end
...
end
Go to the top of the page
+Quote Post
Wariner
сообщение 17.9.2008, 20:06
Сообщение #52


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Цитата(Setuper @ 15.9.2008, 22:07) *
3). Действие os.execute("md "..gPath) создает папку, если она еще не была создана до этого, поэтому действие if os.execute("dir "..gPath) ~= 0 then также бессмысленно.

не понимаю почему это действие бессмыслено, ведь dir это команда просмотра содержимого папки, поэтому если os.execute("dir "..gPath) ~= 0 (просмотр папки не удался), значит надо применять os.execute("md "..gPath). Или я не правильно понимаю?

А ещё
CODE
function ChatArrival(sUser, sData)
sData = string.sub(sData,1,-2)
local _,_,cmd =string.find(sData, "%b<>%s+(%S+)")
if cmd == "!gagmainnick" then
local _,_,Nick = string.find(sData, "%b<>%s+%S+%s+(%S+)")
local tUs=Core.GetUser(Nick)
if tUs then
local IP = tUs.sIP
end
end
end

не работает. Пишет что tUs равно nil(((

И ещё вопрос как сделать так чтоб изменение в скрипте применялись без перезагрузки. Т.е. если сделать переименование бота из меню чтобы после введения нового имении сразу становился с таким именем а не ждал перезагрузки скрипта
Go to the top of the page
+Quote Post
Setuper
сообщение 18.9.2008, 11:52
Сообщение #53


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Цитата(Wariner @ 17.9.2008, 21:06) *
не понимаю почему это действие бессмыслено, ведь dir это команда просмотра содержимого папки, поэтому если os.execute("dir "..gPath) ~= 0 (просмотр папки не удался), значит надо применять os.execute("md "..gPath). Или я не правильно понимаю?

Зачем просматривать содержимое папки, если команда os.execute("md "..gPath) создаёт папку в случае если она ещё не создана (в случае если папка уже создана команда ничего не делает). Просмотр содержимого папки - лишнее действие.

Цитата(Wariner @ 17.9.2008, 21:06) *
не работает. Пишет что tUs равно nil(((

Если пользователя с указанным ником не существует или он оффлайн, то будет nil. Данное действие применимо только к онлайн пользователям.

Цитата(Wariner @ 17.9.2008, 21:06) *
И ещё вопрос как сделать так чтоб изменение в скрипте применялись без перезагрузки. Т.е. если сделать переименование бота из меню чтобы после введения нового имении сразу становился с таким именем а не ждал перезагрузки скрипта

Со случаем переименования через меню можно сделать сразу после введения нового имени действие по регистрации нового бота и удаления старого.
Во всех других случаях можно воспользоваться таймером, который отслеживает изменения имени бота.
Go to the top of the page
+Quote Post
Wariner
сообщение 18.9.2008, 18:23
Сообщение #54


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Цитата(Setuper @ 18.9.2008, 12:52) *
Если пользователя с указанным ником не существует или он оффлайн, то будет nil. Данное действие применимо только к онлайн пользователям.

Это я понимаю и пробовал я на себе так что юзер по любому онлайн)))
Go to the top of the page
+Quote Post
Setuper
сообщение 18.9.2008, 20:42
Сообщение #55


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




незнаю почему у тебя не пашет. может быть api1 у тя?
Go to the top of the page
+Quote Post
Wariner
сообщение 18.9.2008, 21:25
Сообщение #56


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Ну блин я же не совсем нуБ(ну во всяком случае не до такой степени)!!! still_dreaming.gif Все тесты провожу на птоке 0.4.0.0
Go to the top of the page
+Quote Post
Setuper
сообщение 18.9.2008, 21:46
Сообщение #57


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




возможно ты нарушаешь правило локализации переменных

Код
function ChatArrival(sUser, sData)
    sData = string.sub(sData,1,-2)
    local _,_,cmd =string.find(sData, "%b<>%s+(%S+)")
    if cmd == "!gagmainnick" then
        local _,_,Nick = string.find(sData, "%b<>%s+%S+%s+(%S+)")
        local tUs=Core.GetUser(Nick)
        if tUs then
            local IP = tUs.sIP
//Тут IP ~= nil !!!
        end
//А тут уже IP == nil !!!
    end
end


Можно написать вот так:
Код
function ChatArrival(sUser, sData)
    sData = string.sub(sData,1,-2)
    local _,_,cmd =string.find(sData, "%b<>%s+(%S+)")
    if cmd == "!gagmainnick" then
        local _,_,Nick = string.find(sData, "%b<>%s+%S+%s+(%S+)")
        local tUs,IP=Core.GetUser(Nick)
        if tUs then
            IP = tUs.sIP
        end
    end
end
Go to the top of the page
+Quote Post
Wariner
сообщение 18.9.2008, 22:12
Сообщение #58


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




да с локальной переменной IP я ошибся, но всё дело в том что до этого места кода реализация не доходит!
CODE

function ChatArrival(sUser, sData)
sData = string.sub(sData,1,-2)
local _,_,msg =string.find(sData, "(.*)")
local _,_,cmd =string.find(sData, "%b<>%s+(%S+)")
if cmd == "!gagmainfull" then
local _,_,Nick = string.find(sData, "%b<>%s+%S+%s+(%S+)")
if Nick ~= nil then
Core.SendToAll("="..Nick.."=") -- ВОТ ТУТ ПРОВЕРИЛ, NICK = НИК БЕЗ ПРОБЕЛОВ И ЛИШНИХ СИМВОЛОВ
local tUs = Core.GetUser(Nick) -- ЗДЕСЬ ОШИБКИ НЕТ(так как если ника нет то возвращает nil), ПОЭТОМУ
Core.SendToAll(tUs) -- ВОТ ТУТ ПИШЕТ СТРИНГ ЭКСПЕКТИД ГОТ НИЛ(извини что по русски) собственно дальнейший код в данной ситуации не важен
if tUs then
local IP = tUs.sIP
Core.SendToAll(IP)
if (tGag.Main.Nick[Nick] ~= 1) and (tGag.Main.Ip[IP] ~= 1) then
tGag.Main.Nick[Nick] = 1
tGag.Main.Ip[IP] = 1
WriteFile(tGag, "tGag", gGag)
Core.SendPmToNick(Nick, gBot, "Вы были заглушены и теперь не можете общаться в главном чате!")
Core.SendToAll("<"..gBot.."> Юзер с ником "..Nick.." и ip "..IP.." был заглушен и теперь не может общаться в главном чате! Наказал: "..sUser.sNick)
...
Go to the top of the page
+Quote Post
Setuper
сообщение 18.9.2008, 22:23
Сообщение #59


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Core.SendToAll(tUs) --так нельзя писать

tUs является таблицей.

Если хочешь проверить тип переменной, то надо написать так: Core.SendToAll(type(tUs))
Если хочешь проверить значение переменной, то напиши лучше так: Core.SendToAll(tostring(tUs))
В последнем случае в чат отправится адрес памяти, в котором хранится данная таблица.
Если тебе известен язык си или с++, то там существуют структуры или класса - это аналоги таблиц.
Go to the top of the page
+Quote Post
Wariner
сообщение 19.9.2008, 9:29
Сообщение #60


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Спасибо, разобрался))) Заработало)))

PS: других языков фактически не знаю... в школе проходили бейсик, сам пробовал изучать паскаль, в универе один семестр было "C". В итоге везде нахватал верхушек.... бывает же still_dreaming.gif

А вот ещё вопросец: а может ли быть в скрипте несколько функций OnTaimer() или как сделать так чтобы в одной этой функции выполнялось несколько действий с разным интервалом времени?
Go to the top of the page
+Quote Post

53 страниц V  < 1 2 3 4 5 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No new ВАЖНО: Topic has attachmentsМодули для скриптов RusHub
26 Setuper 45 542 21.3.2017, 17:31 Посл. сообщение: Alexey
No new ВАЖНО: Topic has attachmentsВаши Вопросы И Предложения По Поводу Форума
447 Svyat 324 751 20.10.2015, 19:39 Посл. сообщение: Ksan
No New Posts От: Вопросы Разработчикам Скриптов
От темы с ID: 173
0 MIKHAIL 4 356 23.1.2015, 0:56 Посл. сообщение: MIKHAIL
No new Topic has attachmentsВопросы по протоколу NMDC
Делаю программу
26 Master255 29 971 12.1.2015, 0:38 Посл. сообщение: Master255
No New Posts Вопросы к Phazeus по Экзекутору
Мастер может забанить мастера, как решить в Экзекуторе?
1 AndreiDC 5 406 31.10.2014, 19:20 Посл. сообщение: Ksan
No New Posts От: Установка скриптов
От темы с ID: 5657
0 MIKHAIL 4 824 29.7.2014, 23:37 Посл. сообщение: MIKHAIL
No New Posts Установка скриптов
Нужна помощь по установке
2 _wRz_ 7 351 29.7.2014, 16:11 Посл. сообщение: Артём
No new От: Вопросы Разработчикам Скриптов
От темы с ID: 173
29 Wariner 26 179 28.1.2014, 13:11 Посл. сообщение: Alexey
No new Topic has attachmentsВопросы по RusHub
Технические вопросы
316 Jaska 270 694 19.12.2013, 13:59 Посл. сообщение: mod
No new Topic has attachmentsМелкие вопросы
44 Wariner 51 214 19.9.2013, 12:34 Посл. сообщение: Alexey
No New Posts От: Ваши Вопросы И Предложения По Поводу Форума
От темы с ID: 753
3 anila 9 188 28.3.2013, 16:02 Посл. сообщение: настя
No New Posts Единая платформа для скриптов
Обсуждения вопроса создания единой платформы скриптов
5 Enyby 9 100 18.1.2012, 20:15 Посл. сообщение: Setuper
No new Topic has attachmentsПеределка скриптов
Прошу помощи
47 Fe(one)X 41 679 26.12.2011, 15:04 Посл. сообщение: Ksan
No new Topic has attachmentsВопросы Разработчикам Скриптов с SQL
вопросы по скриптам (мелкие вопросы)
101 Wariner 62 998 6.12.2011, 0:34 Посл. сообщение: Enyby
No New Posts От: Вопросы по RusHub
От темы с ID: 2902
4 Otshelnik-Fm 8 528 19.10.2011, 9:23 Посл. сообщение: Mangust

 



RSS Сейчас: 23.12.2024, 12:00