Перейти к содержанию
Авторизация  
Zxe

Как создать временный предмет в Interlude/L2jfrozen 1132 ?

Рекомендуемые сообщения

Друзья, всем привет!,

Я создал 2 предмета, к которым хотел бы добавить ограниченный срок действия (временный итэм как шэдоу но который тикает находясь в инвентаре). Идея использования: Как тип доната, где предмет, находящийся в инвентаре игрока, дает небольшой буст рейтов. Один предназначен для вознаграждение за голосование , срок действия которого составляет 12 часов, а второй — для доната с периодом действия 14 или 30 дней (настраивается в файле конфигурации) что бы имея в инвенторе монету 14 дней из доната невозможно было взять другую например на 12 часов и получить оба буста (либо что бы бусты не суммировались).

Я уже создал два предмета в виде монеток. Я уже создал скрипт для повышения статов и настройки для него, чтобы его можно было легко редактировать на сервере. Необходимо добавить только функцию таймера/длительности.  это самое важное!


пак: Interlude/L2jfrozen 1132. В отличие от Шэдов предметов, я бы хотел, чтобы он давал буст и статы игроку как только предмет окажется в инвентаре игрока, без необходимости нажатия клика мышки и заюзывания, и независимо от того, находится ли игрок в сети или нет: время предмета истекалобы, обратный отсчет продолжительности/оставшееся diffTme записано в БД.

Заранее приношу извинения, если задаю довольно распространенный вопрос, не смог найти решения самостоятельно в других темах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 часов назад, Zxe сказал:

Как создать временный предмет в Interlude/L2jfrozen 1132 ?

Ответ очевиден! С помощью исходников.

Берешь TImer или Task или Sheduler. По истечению времени нахождения итема в инвентаре, запускать таску и делать нужные действия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Saltfire сказал:

Ответ очевиден! С помощью исходников.

Берешь TImer или Task или Sheduler. По истечению времени нахождения итема в инвентаре, запускать таску и делать нужные действия.

как это сделать? 

тут сам код или есть или нет

 

Мы  не новички но многого тоже не знаем как надо. Не могли бы вы более детализировано объяснить или прислать код. может скрины

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделать это можно по-разному.
Все зависит от конкретной ситуации и исходов.
Чтобы не делать новую таблицу для этого, воспользуйтесь уже имеющей таблицей items.
Добавьте новую колонку iitime (inventoryItemTime):

ALTER TABLE `items` ADD `iitime` DECIMAL(13,0) NOT NULL DEFAULT '0';


Дальше исправьте в L2ItemInstance.java методы: restoreFromDb, updateInDb, insertIntoDb, дописать во все запросы, колонку iitime и значение типа long.
Ну и добавить соответственно инициализацию свойства _iitime, по аналогии делайте с mana_left, только тип long, чтобы потом проблем не было с записью System.currentTimeMillis() и в дальнейшем, чтобы легче было работать с датой без лишний перерасчетов.
Создайте соответствующие: геттер и сеттер, getIiTime(), setIiTime().
А дальше смотрите метод scheduleConsumeManaTask и делайте аналог.
Проверить есть ли итем в инвентаре можно с помощью метода:

final boolean isII = null != player.getInventory().getItemByItemId(5533);


Итог: Фрозен мертвая сборка. Никто не будет терять время, на этот мусор.

Изменено пользователем Saltfire

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...