myDC.ru

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

 
53 страниц V  « < 21 22 23 24 25 > »   
Ответить в данную темуНачать новую тему

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

Setuper
сообщение 14.5.2009, 16:13
Сообщение #441


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

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




Да. Так лучше, так как нет привязки к идентификаторам таймеров, которые, как я уже говорил, не желательно использовать big_smile.gif

Но в данном варианте есть и плохая сторона, которая заключается в пробегании цикла каждую секунду.
Go to the top of the page
+Quote Post
vicious
сообщение 14.5.2009, 16:25
Сообщение #442


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Да...именно это я понимаю..поэтому и интересуюсь насколько это хреново? я видел тут ка то скрипт...который менял дискрипцию юзеров отправляю строук MyInfo кажду секунду и вроде не грузил сильно ничего.
Но все равно интересно насколько большой это сильно ли это отобразиться на ресурсоемкости? ежесекундный таймер будет только один...плюс еще каждый 30 минут будут отсылаться общие новости, в крайнем случае может еще где нить таймер нарисуется потом, но вряд ли! Что скажешь???

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

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

+ может стоить добавить break в цикл...после нахождения первого юзера удовлетворяющего условиям?
Go to the top of the page
+Quote Post
Setuper
сообщение 14.5.2009, 16:41
Сообщение #443


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

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




Скажу, что лучше делать не так, а вот как:

Код
local tTimers, iTime, sMsg = {}, 5, "blablabla"

function OnStartup()
  TmrMan.AddTimer(iTime*1000, "ChekTimers")
end

function UserConnected(tUser)
  tTimers[tUser.sNick] = os.time()
end

function UserDisconnected(tUser)
  tTimers[tUser.sNick] = nil
end

function ChekTimers()
  for k, v in pairs(tTimers) do
    if os.time() - v > iTime then
      Core.SendToNick(k, sMsg)
      tTimers[k] = nil
    end
  end
end


Заметь, что тут установлен таймер, который срабатывает каждые 5 секунд. То есть сообщение пользователю отправляется не через 10 секунд после входа, а через какое-то количество секунд, которое колеблется от 5 до 10 секунд. Работает это следующим образом: допустим таймер срабатывает каждые 5 секунд, тогда пусть пользователь вошёл в 5.1 сек, тогда на 10 секунде: (10 - 5.1) = 4.9 < 5, то есть пользователю не отправится сообщение, то есть сообщение отправится после 9.9 секунд после входа. Если пользователь войдёт на 4.9 секунде, то сообщение отправится спустя 5.1 секунд после входа. Я думаю тебе не так уж и важны точные секунды, поэтому интервал от 5 до 10 секунд - это оптимальное решение.

Плюс ко всему следует убрать цикл в функции дисконнекта пользователя, как это сделал я (см. код)

Сообщение тоже следует выносить за функцию, чтоб оно постоянно не инициализировалось.
Go to the top of the page
+Quote Post
vicious
сообщение 14.5.2009, 17:16
Сообщение #444


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Да мне это нравится...)))
Но я бы хотел не меньше 10 секунд (так как этот минимум сколько надо чтобы мельком пробежаться по приветствию которое отсылается юзеру при подключении)...
В таком случае думаю можно сделать вот так??? :
Код
    if os.time() - v - 5 >= iTime then
      Core.SendToNick(k, sMsg)
      tTimers[k] = nil
    end


И получится что сообщение будет слаться в интервале 10 - 15 секунд, правильно?

И еще одно :
Код
function UserDisconnected(tUser)
  tTimers[tUser.sNick] = nil
end

здесь не надо делать проверку "if tTimers[tUser.sNick] then" ???
Go to the top of the page
+Quote Post
Setuper
сообщение 14.5.2009, 17:24
Сообщение #445


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

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




-5 - правильно

Проверку лучше конечно делать, так как она будет выполняться быстрее, чем присвоение nil big_smile.gif
Go to the top of the page
+Quote Post
vicious
сообщение 14.5.2009, 17:27
Сообщение #446


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Ну чтож...спасибо! пойду ковырять дальше)))

а кстати, разве вне функции можно объявлять переменные через local ? и как это работать то тогда будет?
Go to the top of the page
+Quote Post
Setuper
сообщение 14.5.2009, 17:49
Сообщение #447


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

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




Будет работать также как и глобальная, но при этом доступ к ней будет быстрее, так как она будет являться локальной. Дело в том, что глобальные переменные доступны везде, а локальные переменные доступны только в текущем окружении. В данном случае такая локальная переменная будет доступна везде в пределах данного файла (окружением данной локальной переменной является файл).

Если ты объявляешь локальную переменную внутри функции, то её окружением является эта функция, если внутри цикла, то окружение - данный цикл.
Go to the top of the page
+Quote Post
vicious
сообщение 14.5.2009, 17:49
Сообщение #448


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




ок! спасибо
Go to the top of the page
+Quote Post
Nickolya
сообщение 15.5.2009, 11:11
Сообщение #449


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




А... Чем вас вот такая конструкция не устраивает?
Код
local tTimers, iTime, sMsg = {}, 10, "blablabla"

function UserConnected(tUser, sData)
    local iTimerId = TmrMan.AddTimer(iTime*1000)
    tTimers[iTimerId] = tUser.sNick
end
RegConnected, OpConnected = UserConnected, UserConnected

function OnTimer(iTimerId)
    if tTimers[iTimerId] then
        Core.SendToNick(tTimers[iTimerId], sMsg)
        TmrMan.RemoveTimer(iTimerId)
        tTimers[iTimerId] = nil
    end
end

Тут все само собой, да и никаких проблем с таймерами у меня не возникло, потом не надо удалять ник при выходе пользователя, функция SendToNick не требует наличия его на хабе, при отсутсвии такого ника в списке пользователей он просто не получит сообщение...
Go to the top of the page
+Quote Post
Setuper
сообщение 15.5.2009, 11:26
Сообщение #450


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

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




Хорошо, что не возникает проблем с таймерами, думаю, что можно и такой код юзать. По поводу удаления ника может возникнуть такая ситуация, что пользователь вошёл, а потом перезашёл на хаб, и в итоге ему отправится 2 сообщения.
Go to the top of the page
+Quote Post
vicious
сообщение 15.5.2009, 12:24
Сообщение #451


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Спасибо...я попробую и эту...
тока тут надо вот так:
Код
local tTimers, iTime, sMsg = {}, 10, "blablabla"
function OnStartup()
    TmrMan.AddTimer(30*60000,"OnTimer")
end

function UserConnected(tUser, sData)
    local iTimerId = TmrMan.AddTimer(iTime*1000,"OnTimer")
    tTimers[iTimerId] = tUser.sNick
end
RegConnected, OpConnected = UserConnected, UserConnected

function OnTimer(iTimerId)
    if tTimers[iTimerId] then
        Core.SendToNick(tTimers[iTimerId], sMsg)
        TmrMan.RemoveTimer(iTimerId)
        tTimers[iTimerId] = nil
        else
        Core.SendToAll(sMsg)
    end
end


а вот тут какие-то траблы возникали...правда чуть чуть другой код был

впринципе отличие от первоначальной функции только в следующем:

1-ый вариант было условие
Код
if tmr and tTimers[tmr] then


во этом варианте условие
Код
if tTimers[iTimerId] then


если только трабла в этом была..хотя не вижу чес говоря принципиально разницы...т.к. tmr всегда есть...при обоих таймерах...
Go to the top of the page
+Quote Post
Nickolya
сообщение 15.5.2009, 13:36
Сообщение #452


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Вот не пойму зачем ты приписываешь OnTimer вторым аргументом
Код
local iTimerId = TmrMan.AddTimer(iTime*1000,"OnTimer")
эта функция вызывается по умолчанию.
А еще меня интересует момент возвращения идентификатора функцией добавления таймера, если посмотреть, то он как-то уменьшается ежесекундно с определенного числа, может в реализации этого какой-то косяк...
Go to the top of the page
+Quote Post
vicious
сообщение 15.5.2009, 14:29
Сообщение #453


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Цитата(Nickolya @ 15.5.2009, 14:36) *
Вот не пойму зачем ты приписываешь OnTimer вторым аргументом
Код
local iTimerId = TmrMan.AddTimer(iTime*1000,"OnTimer")
эта функция вызывается по умолчанию.
А еще меня интересует момент возвращения идентификатора функцией добавления таймера, если посмотреть, то он как-то уменьшается ежесекундно с определенного числа, может в реализации этого какой-то косяк...


1) Пардон, я просто не знал что автоматом вызывается если функция называется "OnTimer".
2) Про момент возвращения не понял...поясни пожалуйста более простым языком)))
Go to the top of the page
+Quote Post
zangriEBP
сообщение 15.5.2009, 17:15
Сообщение #454


Участник
**

Группа: Пользователи
Сообщений: 47
Регистрация: 20.4.2009
Пользователь №: 3 112
Спасибо сказали: 1 раз




Когда я пытаюсь добавить значение в таблицу вылазит ошибка, если до этого это место в таблице = nil
sServerUrl[#sServerUrl+1].url=string
вот та то же побывал table.insert(sServerUrl,{url=string} но это не помогло(какае-то другая ошибка).
как правильно добавить значение в таблицу?
Go to the top of the page
+Quote Post
Setuper
сообщение 15.5.2009, 17:31
Сообщение #455


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

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




Код
sServerUrl[table.maxn(sServerUrl) + 1].url = "wsda"
Go to the top of the page
+Quote Post
zangriEBP
сообщение 15.5.2009, 17:36
Сообщение #456


Участник
**

Группа: Пользователи
Сообщений: 47
Регистрация: 20.4.2009
Пользователь №: 3 112
Спасибо сказали: 1 раз




sServerUrl[table.maxn(sServerUrl) + 1].url =string и sServerUrl[#sServerUrl+1].url=string одно и тоже и одна и таже ошибка =\

Еще раз повтарю: код работает без ошибок только, если на данном месте в таблице уже что-то было (не nil).
Go to the top of the page
+Quote Post
Wariner
сообщение 15.5.2009, 18:02
Сообщение #457


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

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




мы же не экстрасенсы! код ошибки в студию!
возможно дело в создании таблицы
Код
sServerUrl[table.maxn(sServerUrl) + 1] = {}
sServerUrl[table.maxn(sServerUrl) + 1].url = "wsda"
Go to the top of the page
+Quote Post
zangriEBP
сообщение 16.5.2009, 6:01
Сообщение #458


Участник
**

Группа: Пользователи
Сообщений: 47
Регистрация: 20.4.2009
Пользователь №: 3 112
Спасибо сказали: 1 раз




Если сделать как ты предложил то
Цитата
lua:45: attempt to index field '?' (a nil value)

Дело как раз в создании или можно воспользоваться другой функцией, но я не знаю как.
Вот сама таблица
Код
local sServerUrl={{url="95.154.113.73",port="27015"},{url="95.154.113.73",port="27015"}}

Нужно в конец таблицы добавить еще значения.
И лучше всего это сделать вот этой функцией:
Код
table.insert (table, [pos,] value)

Вставляет элемент value в позицию pos в table, сдвигая вверх остальные элементы. Значение по умолчанию для pos равно n+1, где n это длина таблицы, таким образом вызов table.insert(t,x) добавляет x в конец таблицы t.

Разобрался
Код
table.insert(sServerUrl,{url=tbl[1],port=tbl[2]})
не в этом коде...
Go to the top of the page
+Quote Post
Wariner
сообщение 16.5.2009, 10:11
Сообщение #459


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

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




если разобрался молодец и просьба на будущее выделяй свой текст кодами и цитатами а то не понятно что у тя вообще написано! пример выше!
Go to the top of the page
+Quote Post
vicious
сообщение 18.5.2009, 21:06
Сообщение #460


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Не подскажите, как скриптом поменять статус пользователя на хабе:
-server
-firewall
-normal
Можно менять в настройках грейлинка к примеру, а в скрипте как? я так понимаю это наверное в MyInfo отсылается...

хм...тока что проверил...это не в MyInfoArrival отсылается....хм...а где???
Go to the top of the page
+Quote Post

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

Collapse

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

  Тема Ответов Автор Просмотров Последнее сообщение
No new ВАЖНО: Topic has attachmentsМодули для скриптов RusHub
26 Setuper 43 712 21.3.2017, 17:31 Посл. сообщение: Alexey
No new ВАЖНО: Topic has attachmentsВаши Вопросы И Предложения По Поводу Форума
447 Svyat 305 724 20.10.2015, 19:39 Посл. сообщение: Ksan
No New Posts От: Вопросы Разработчикам Скриптов
От темы с ID: 173
0 MIKHAIL 4 082 23.1.2015, 0:56 Посл. сообщение: MIKHAIL
No new Topic has attachmentsВопросы по протоколу NMDC
Делаю программу
26 Master255 27 810 12.1.2015, 0:38 Посл. сообщение: Master255
No New Posts Вопросы к Phazeus по Экзекутору
Мастер может забанить мастера, как решить в Экзекуторе?
1 AndreiDC 5 067 31.10.2014, 19:20 Посл. сообщение: Ksan
No New Posts От: Установка скриптов
От темы с ID: 5657
0 MIKHAIL 4 529 29.7.2014, 23:37 Посл. сообщение: MIKHAIL
No New Posts Установка скриптов
Нужна помощь по установке
2 _wRz_ 6 894 29.7.2014, 16:11 Посл. сообщение: Артём
No new От: Вопросы Разработчикам Скриптов
От темы с ID: 173
29 Wariner 24 719 28.1.2014, 13:11 Посл. сообщение: Alexey
No new Topic has attachmentsВопросы по RusHub
Технические вопросы
316 Jaska 254 014 19.12.2013, 13:59 Посл. сообщение: mod
No new Topic has attachmentsМелкие вопросы
44 Wariner 48 836 19.9.2013, 12:34 Посл. сообщение: Alexey
No New Posts От: Ваши Вопросы И Предложения По Поводу Форума
От темы с ID: 753
3 anila 8 633 28.3.2013, 16:02 Посл. сообщение: настя
No New Posts Единая платформа для скриптов
Обсуждения вопроса создания единой платформы скриптов
5 Enyby 8 521 18.1.2012, 20:15 Посл. сообщение: Setuper
No new Topic has attachmentsПеределка скриптов
Прошу помощи
47 Fe(one)X 39 136 26.12.2011, 15:04 Посл. сообщение: Ksan
No new Topic has attachmentsВопросы Разработчикам Скриптов с SQL
вопросы по скриптам (мелкие вопросы)
101 Wariner 57 918 6.12.2011, 0:34 Посл. сообщение: Enyby
No New Posts От: Вопросы по RusHub
От темы с ID: 2902
4 Otshelnik-Fm 8 021 19.10.2011, 9:23 Посл. сообщение: Mangust

 



RSS Сейчас: 6.5.2024, 13:42