Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
21.5.2009, 8:14
Сообщение
#481
|
|
Участник Группа: Пользователи Сообщений: 47 Регистрация: 20.4.2009 Пользователь №: 3 112 Спасибо сказали: 1 раз |
Удаление строки из файла:
Код function RemoveByStr(sFile, Str) local s='' for l in io.lines(sFile) do if l ~= Str then s = s..l..'\n' end end local h = io.open(sFile, "w") if h then h:write(s);h:flush();h:close() end end Подскажи самый быстрый способ вернуть 1 в случае успеха и 0 в противном случае. З.Ы. печально что нужно грузить весь файл в память... А вот еще запись строки в конец файла, можт кому пригодится, надеюсь она у меня рациональная. Код function AddByStr(sFile, Str)
local h=io.open (sFile,'r+') if not h then return 0 end if h:seek('end')~=0 then h:write('\n') end h:write(Str);h:close() end |
|
|
21.5.2009, 12:56
Сообщение
#482
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Цитата А вот еще запись строки в конец файла, можт кому пригодится, надеюсь она у меня рациональная. Хм...Код function AddByStr(sFile, Str) local h=io.open (sFile,'r+') if not h then return 0 end if h:seek('end')~=0 then h:write('\n') end h:write(Str);h:close() end Код f = io.open(filename,"ab")
if f then f:write(string.."\n") f:close() end |
|
|
21.5.2009, 14:29
Сообщение
#483
|
|
Участник Группа: Пользователи Сообщений: 47 Регистрация: 20.4.2009 Пользователь №: 3 112 Спасибо сказали: 1 раз |
Если файл пустой, то будет лишней переход на строку
|
|
|
21.5.2009, 15:40
Сообщение
#484
|
|
Продвинутый участник Группа: Пользователи Сообщений: 134 Регистрация: 18.6.2008 Из: подземелье Пользователь №: 41 Спасибо сказали: 7 раз |
Ребят, сильно ли влияют на нагрузку чата функции ChatArrival и ToArrival? Наример теже ранжировани сообщений, или история чата?
А то иногда чат "подлагивает" (мэйн естественно) |
|
|
21.5.2009, 16:33
Сообщение
#485
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
Насчёт функций надо смотреть что в них самих делается, но судя по названием скриптов вряд ли грузят функции! Сами по себе эти скрипты опять же грузить могут только в одном случае, если данные хранятся в таблицы и последняя сильно разрослась!
|
|
|
21.5.2009, 16:46
Сообщение
#486
|
|
Продвинутый участник Группа: Пользователи Сообщений: 134 Регистрация: 18.6.2008 Из: подземелье Пользователь №: 41 Спасибо сказали: 7 раз |
Ну я правильно понимаю? Например работа антирекламы реализована с помощью ChatArrival и проверки на "запрещённые выражения", перед отсылкой сообщения в чат она пробегает по этому "бэдлисту" и уже потом рассылает сообщения юзерам, на сколько это затратно?
|
|
|
21.5.2009, 17:29
Сообщение
#487
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
на столько затратно на сколько большой этот "бэдлист"
|
|
|
21.5.2009, 17:40
Сообщение
#488
|
|
Участник Группа: Пользователи Сообщений: 47 Регистрация: 20.4.2009 Пользователь №: 3 112 Спасибо сказали: 1 раз |
Я не видел скрипт антирекламы поэтому воспользуюсь анализом твоих данных,
если скрипт антирекламы считать идеальным(не делает лишних действий,не мусорит,не открывает файл каждый раз по новой 0о), то вруби ты хоть 100 таких ничего не заметишь. |
|
|
21.5.2009, 19:55
Сообщение
#489
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Код f = io.open(filename,"ab") Вообще-то правильнее наверное будет так: Код f = io.open(filename,"a") Ведь нам не нужен двоичный режим при открытии файла!Насчёт функций надо смотреть что в них самих делается, но судя по названием скриптов вряд ли грузят функции! Сами по себе эти скрипты опять же грузить могут только в одном случае, если данные хранятся в таблицы и последняя сильно разрослась! Хранение данных в таблицах никак не влияет на загруженность хаба, а влияет лишь на количество используемой памяти скриптом. Для того, чтобы хаб был быстрым, наоборот следует хранить всё в памяти. В памяти не следует хранить не используемые данные. Загруженность хаба возникает при плохой организации алгоритмов в скриптах. Например, много больших циклов, или постоянные обращения к элементам таблицы. Вот код, который требует оптимизации: Код for k, v in pairs(tTable) do Допустим, таблица tTable содержит около 5000 ников. В данном цикле кроме операции сравнения на каждом шаге выполняется операция взятия элемента таблицы, что, в свою очередь, порождает цепочку действий по отысканию метатаблицы для данной таблицы, поиск в этой метатаблице метода __index, вызов стандартной функции взятия элемента таблицы. Действий много, и все эти действия будут делаться на каждом шагу цикла. Оптимизацией кода будет помещение ника в отдельную локальную переменную, тем более, что в языке lua таблицы, и их элементы копируются по ссылке, а не по значению, то есть при создании локальной переменной с ником не будет выделяться дополнительная память под это переменную, в эту переменную запишется только адрес, по которому располагается необходимый нам ник.if v == tUser.sNick then ... end end Код local sNick = tUser.sNick for k, v in pairs(tTable) do if v == sNick then ... end end Поэтому, зачастую, производительность зависит от алгоритмов написания скриптов. Если алгоритмы фиговые, то конечно всё будет тормозить. |
|
|
21.5.2009, 21:31
Сообщение
#490
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
У меня вот назрел вопрос..давно хочу узнать...
Расскажите пожалуйста все об Код "$UserCommand x y" 1 1, 1 2, 1 3 знаю а вот все в целом хотелось бы...например для чего делать "$UserCommand 1 3 |" ну и другие вариации... |
|
|
21.5.2009, 22:07
Сообщение
#491
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
первая цифра:
0 - разделитель 1 - простая команда 2 - команда на один ник (запрещает отсылку всем) - обычно не реализуется клиентами 255 - команда затирания менюшек вторая цифра: десятичное представление двоичного числа. 1111 = двоичное представление десятичного числа 15 0001 = 1 0010 = 2 0011 = 3 0100 = 4 0101 = 5 0110 = 6 0111 = 7 1000 = 8 1001 = 9 1010 = 10 1011 = 11 1100 = 12 1101 = 13 1110 = 14 1111 = 15 Перевод из двоичной системы в десятичную очень прост. Допустим, есть некое число abcd, где каждая из букв может принимать значения 0 или 1. Тогда для того, чтобы перевести даное число в десятичный вид, делаем так: a*2^3 + b*2^2 + c*2^1 + d*2^0. Если a = 1, b = 1, c = 1, d = 1, то какраз по формуле и получаем число 15. Теперь представим, что a - это меню файл-листа, b - это меню поиска, c - это меню юзера, d - это меню хаба если число d принимает значение 1, то данная менюшка обязательно будет в меню хаба, если 0 - то не будет её там. Пример: 0011 = 0*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 3 то есть данная менюшка (число 3) будет находиться в меню хаба (так как d = 1), и в меню юзера (так как c = 1). Код $UserCommand 1 3 ... Ещё пример: 1001 = 1*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 9 то есть данная менюшка (число 9) будет находиться в меню хаба (так как d = 1), и в меню файл-листа (так как a = 1). Код $UserCommand 1 9 ...
|
|
|
21.5.2009, 22:18
Сообщение
#492
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
спасибо! А вот разделитель по какому принципу работает? Место разделителя определяется предыдущей строкой?...
нельзя просто брать вставлять разделители в любое место? А к примеру хочу сделать вот так: 1 подменю - несколько ветвей разделитель 2 подменю - несколько ветвей но получалось вот так: 1 подменю : - 1 ветвь - 2 ветвь - разделитель 2 подменю |
|
|
21.5.2009, 22:28
Сообщение
#493
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Да, разделитель ставится после последней менюшки.
Разделитель после подпункта установить можно - обманом, - вот так: Код Core.SendToUser(tUser,"$UserCommand 1 3 Меню\\Команда$<%[mynick]> !cmd||"..
"$UserCommand 1 3 $<%[mynick]>||$UserCommand 0 3|") |
|
|
21.5.2009, 22:45
Сообщение
#494
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
хе....спасибо большое! полезная штука!
а до подпункта нельзя обманом? |
|
|
21.5.2009, 23:03
Сообщение
#495
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Можно! Точно так же.
Код Core.SendToUser(tUser,"$UserCommand 1 3 $<%[mynick]>||$UserCommand 0 3|"..
"$UserCommand 1 3 Меню\\Команда$<%[mynick]> !cmd||".. "$UserCommand 1 3 $<%[mynick]>||$UserCommand 0 3|") |
|
|
21.5.2009, 23:08
Сообщение
#496
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
|
|
|
22.5.2009, 11:56
Сообщение
#497
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
а если надо:
меню - подменю1 - несколько ветвей меню - разделитель меню - подменю2 - несколько ветвей |
|
|
22.5.2009, 12:37
Сообщение
#498
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Так никак не сделать, так как в подменю нельзя никак сделай пустую строку))
|
|
|
22.5.2009, 15:26
Сообщение
#499
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
жаль...
|
|
|
24.5.2009, 14:54
Сообщение
#500
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
хм...подскажите какая функция происходит раньше чем юзер соединяется с хабом?
т.е. как сделать действие до того как юзеру в ДЦ будет написано "Соединен" ??? |
|
|
Похожие темы
|
Сейчас: 27.11.2024, 10:42 |