Автор: STRELOK 9.1.2010, 18:40
Название: Announcements
Версия хаба: RusHub 2.0.5 и выше
Версия lua плагина: 1.6 и выше
Версия скрипта: 1.1
Автор: STRELOK
Описание: Публикация объявления администрацией хаба. Выводит объявления юзеру при подключении к хабу
Возможности:
1. Показ объявления перед входом юзера
2. Показы даты и времени, когда было установлено объявление
3. Выбор кому будет доступно публиковать сообщения
4. Вывод сообщения о новом объявлении всем
5. Выбор сколько объявлений выводит при подключении пользователя
6. Удаление объявления по номеру.
Для работы скрипта необходимо скачать модуль files http://mydc.ru/index.html?showtopic=2937&view=findpost&p=25266
Автор: Setuper 9.1.2010, 19:44
Код
local tUser = Core.GetUser(UID, 2047)
local sUser = Core.GetUser(UID, 8)
Первая строка уже содержит почти все биты, поэтому вторую строку незачем писать.
Цитата
2^0 - ник (sNick)
2^1 - ip (sIP)
2^2 - UID (UID)
2^3 - профиль (iProfile)
2^4 - MyINFO строка (sMyINFO)
2^5 - пользовательские данные (sData)
2^6 - пользователь в оп-лите (bInOpList)
2^7 - пользователь полностью вошёл и добавлен в список пользователей (bInUserList)
2^8 - реальный порт (iPort)
2^9 - порт коннекта (iPortConn)
2^10 - мак адрес (sMacAddress)
2^11 - версия протокола (sVersion)
В двоичной системе:
000000000001 - ник (sNick)
000000000010 - ip (sIP)
000000000100 - UID (UID)
000000001000 - профиль (iProfile)
000000010000 - MyINFO строка (sMyINFO)
000000100000 - пользовательские данные (sData)
000001000000 - пользователь в оп-лите (bInOpList)
000010000000 - пользователь полностью вошёл и добавлен в список пользователей (bInUserList)
000100000000 - реальный порт (iPort)
001000000000 - порт коннекта (iPortConn)
010000000000 - мак адрес (sMacAddress)
100000000000 - версия протокола (sVersion)
Теперь, как перейти из двоичной системы в десятичную?
Всё очень просто: отсчитываем справа позицию, на которой стоит единица и возводим двойку в эту степень (отсчёт позиции происходит с 0, а не с 1). То есть для поля ника нулевая позиция, 2^0 = 1.
Код
local tUser = Core.GetUser(UID, 1)
Для профиля: третья позиция, следовательно для профиля 2^3 = 8
Код
local tUser = Core.GetUser(UID, 8)
А что если 1 не в одном поле, а в нескольких полях?
Пример: 101010101010.
Каждая позиция отвечает за добавление какого-то поля. Вот и смотрим по позициям какие поля добавятся. Для этих полей будет число (считаем справа на лева): 0*2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 1*2^5 + 0*2^6 + 1*2^7 + 0*2^8 + 1*2^9 + 0*2^10 + 1*2^11 = 2730
То есть для того, чтобы в таблицу tUser поместить поля sIP, iProfile, sData, bInUserList, iPortConn и sVersion (именно на позициях этих полей стоит 1 в нашем бинарном числе), нужно в функции написать число 2730:
Код
local tUser = Core.GetUser(UID, 2730)
Давай те теперь разберёмся чему же отвечает число 2047, которое используется в скрипте?
Оно отвечает следующей бинарной строке: 011111111111. То есть это число добавит в таблицу tUser все поля, кроме поля sVersion.
Каждому десятичному числу отвечает двоичное число. Например, мы рассматривали двоичное число 101010101010 и выяснили, что ему отвечает десятичное число 2730. А каком двоичному числу отвечает следующее десятичное число 2731? Естественно ему соответствует двоичное число 101010101011, то есть для числа 2731 в таблицу tUser добавятся теже самые поля, что и для числа 2730, но плюс ещё поле sNick.
1 = 000000000001
2 = 000000000010
3 = 000000000011
4 = 000000000100
5 = 000000000101
...
2730 = 101010101010
2731 = 101010101011
2732 = 101010101100
2733 = 101010101101
2734 = 101010101110
2735 = 101010101111
и тд.
Надеюсь, что я понятно объяснил работу с бинарными числами.
Функция Core.GetUser достаточно хорошо оптимизирует код, если правильно ею распоряжаться и вносить в таблицу tUser только те поля, которые мы собираемся использовать в данной области видимости.
У тебя в функции OnChat используется только 2 поля: поле sNick и поле iProfile, поэтому самый оптимальный код будет выглядеть так:
Код
local tUser = Core.GetUser(UID, 9)
таблица tUser будет содержать только эти 2 поля (sNick и iProfile). В функции OnUserEnter всё оптимально, и там ничего менять не нужно.
И ещё раз повторю, что не нужно к каждому скрипту делать свой модуль. Модуль должен быть один для всех скриптов, и называться он должен в соответствии с теми функциями, которые он содержит.
Автор: STRELOK 9.1.2010, 20:10
Цитата(Setuper @ 9.1.2010, 21:44)
И ещё раз повторю, что не нужно к каждому скрипту делать свой модуль. Модуль должен быть один для всех скриптов, и называться он должен в соответствии с теми функциями, которые он содержит.
Хорошо. Напишу единый модуль для всех своих скриптов
Автор: Wariner 9.1.2010, 20:20
Нет ты не совсем понял. будет несколько модулей которые использовать будут все скрипты!
Автор: Setuper 9.1.2010, 21:04
Ща все сделаем)))
Ну вот совсем другое дело))))
Автор: -=FugeN=- 2 16.6.2010, 7:11
немного кривой скрипт
пример:
вот у меня 7 объявлений, я хочу удалить допустим третье
08:04] <Hub-Security> Объявление №3 удалено!
[08:04] <Hub-Security> Объявление №3 удалено!
[08:04] <Hub-Security> Объявление №3 удалено!
[08:04] <Hub-Security> Объявление №3 удалено!
3 удаляется, а с ним ВСЕ следующие, такое уже замечал не один раз..
у всех также? или только у меня одного?
Автор: Accelerator 16.6.2010, 7:16
Да, ошибка действительно есть.
Исправил. Скрипт в первом посте, пробуйте.