Interlude альтернатива abnormal effect'ам - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Игровой клиент

Игровой клиент Есть вопросы по поводу редактирования dat, utx и других файлов клиента, пожалуйста, задавайте их здесь.
Описание темы:Нужна помощь

Ответ
Опции темы
Непрочитано 12.08.2019, 13:09   #1
Пользователь

Автор темы (Топик Стартер) Interlude альтернатива abnormal effect'ам

Есть задача: создать визуальные эффекты на модельке персонажа на время действия каких-нибудь баффов/дебаффов на нём. Подобное в л2 уже есть, называется abnormal effect (сайленс, стан, корни и т.п.) Но свой abnormal в Interlude добавить довольно сложно (нужно редактировать engine.dll). Можно ли придумать какой-то обходной путь для реализации задачи?
У меня пока только одна идея: через анимацию каста (skill.usk) сделать непрекращающийся эффект на персонаже. Это работает, анимация держится на персонаже столько, сколько ей указываешь в skill.usk, но эта анимация не привязана к эффекту, который висит в строке баффов/дебаффов, т.е. если эффект снять раньше конца анимации - он всё равно будет отображаться, а если скилл скастовать несколько раз на одну цель визуальные эффекты накладываются друг на друга. Решить это видится возможным лишь привязкой анимации к своему эффекту в строке баффов/дебаффов. Для этого уже есть abnormal'ы, но с ними очень трудно работать.

Возможно ли выполнить подобную привязку, чтобы не прибегать к abnormal?
Sharper вне форума Ответить с цитированием
Непрочитано 12.08.2019, 13:35   #2
Аватар для finfan
fin-ex.corp

По умолчанию Re: Interlude альтернатива abnormal effect'ам

Цитата:
Сообщение от Sharper Посмотреть сообщение
Есть задача: создать визуальные эффекты на модельке персонажа на время действия каких-нибудь баффов/дебаффов на нём. Подобное в л2 уже есть, называется abnormal effect (сайленс, стан, корни и т.п.) Но свой abnormal в Interlude добавить довольно сложно (нужно редактировать engine.dll). Можно ли придумать какой-то обходной путь для реализации задачи?
У меня пока только одна идея: через анимацию каста (skill.usk) сделать непрекращающийся эффект на персонаже. Это работает, анимация держится на персонаже столько, сколько ей указываешь в skill.usk, но эта анимация не привязана к эффекту, который висит в строке баффов/дебаффов, т.е. если эффект снять раньше конца анимации - он всё равно будет отображаться, а если скилл скастовать несколько раз на одну цель визуальные эффекты накладываются друг на друга. Решить это видится возможным лишь привязкой анимации к своему эффекту в строке баффов/дебаффов. Для этого уже есть abnormal'ы, но с ними очень трудно работать.

Возможно ли выполнить подобную привязку, чтобы не прибегать к abnormal?
Abnormal данные для новых "аля эффектов".
Код:
public enum AnotherAbnormals {
    HealEffect(9999)
}

private final int id;

public AnotherAbnormals(int id) {
    this.id = id;
}
Модернизируем DocumentBase или то дерьмо которое отвечает за распарс effects в скилах, чтобы получить эффекты следующей (примерной) записью:
Код:
<effect name="Buff" time="1" count="10" val="0" otherAbnormal="HealEffect"/>
Теперь у нас есть возможность добавлять свои абнормалы и автоматом за счёт дерьмовой системы распарса - распаршивать их правильно.

Запуск абнормалов в игре.
Модифицируем код в родителе L2Effect.java по методу onAction который по дефолту является абстрактным и переделываем по дсебя:

Код:
onAction() {    effected.broadcastPacket(MagicSkillUse(_template.getOtherAbnormal().getId()))
}
Либо модифицировать эффекты с onAction, и в каждой реализации эффекта вроде EffectDamOverTime.java добавлять туда отсыл broadcast (или sendPacket если надо только чтобы цель видела данный эффект визуально (что снизит нагрузон)) пакета MagicSkillUse. Получим следующий механизм:

Каждый тик, эффект будет обрабатывать onAction метод, внутри которого будет ваша реализация broadcastPacket(MagicSkillUse) в который ID вы передаёте из otherAbnormal.getId().

Второй вариант, если нужно, чтобы эффекты работали и без тиков (это полная херня, и лучше сделать все эффекты тиковыми лол, если требуется конкретная реализация этой задачи). Вы вызываете при старте эффекта ThreadpoolManager.schedule(magicSkillUse) и устанавливаете время и период, но при отключении эффекта (при его завершении) надо будет обязательно его отменять аля task.cancel(), в противном случае - эффект будет бесконечным.

ВАЖНО!
Работать корректно будут только те эффекты, которые имеют onActionStartCast анимацию и ВСЁ. Т.е. нельзя будет запихнуть тикающий эффект например виндстрайка, т.к. он состоит из 3-ёх вижов анимации.
finfan вне форума Отправить сообщение для finfan с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 13.08.2019, 21:06   #3
Пользователь

По умолчанию Re: Interlude альтернатива abnormal effect'ам

Цитата:
Сообщение от finfan Посмотреть сообщение
Abnormal данные для новых "аля эффектов".
Код:
public enum AnotherAbnormals {
    HealEffect(9999)
}

private final int id;

public AnotherAbnormals(int id) {
    this.id = id;
}
Модернизируем DocumentBase или то дерьмо которое отвечает за распарс effects в скилах, чтобы получить эффекты следующей (примерной) записью:
Код:
<effect name="Buff" time="1" count="10" val="0" otherAbnormal="HealEffect"/>
Теперь у нас есть возможность добавлять свои абнормалы и автоматом за счёт дерьмовой системы распарса - распаршивать их правильно.

Запуск абнормалов в игре.
Модифицируем код в родителе L2Effect.java по методу onAction который по дефолту является абстрактным и переделываем по дсебя:

Код:
onAction() {    effected.broadcastPacket(MagicSkillUse(_template.getOtherAbnormal().getId()))
}
Либо модифицировать эффекты с onAction, и в каждой реализации эффекта вроде EffectDamOverTime.java добавлять туда отсыл broadcast (или sendPacket если надо только чтобы цель видела данный эффект визуально (что снизит нагрузон)) пакета MagicSkillUse. Получим следующий механизм:

Каждый тик, эффект будет обрабатывать onAction метод, внутри которого будет ваша реализация broadcastPacket(MagicSkillUse) в который ID вы передаёте из otherAbnormal.getId().

Второй вариант, если нужно, чтобы эффекты работали и без тиков (это полная херня, и лучше сделать все эффекты тиковыми лол, если требуется конкретная реализация этой задачи). Вы вызываете при старте эффекта ThreadpoolManager.schedule(magicSkillUse) и устанавливаете время и период, но при отключении эффекта (при его завершении) надо будет обязательно его отменять аля task.cancel(), в противном случае - эффект будет бесконечным.

ВАЖНО!
Работать корректно будут только те эффекты, которые имеют onActionStartCast анимацию и ВСЁ. Т.е. нельзя будет запихнуть тикающий эффект например виндстрайка, т.к. он состоит из 3-ёх вижов анимации.

Я похоу дурачек) Я просто больше по клиент части. Я так и не понял что к чему. точнее цепочку я понял. А вот как, что куда вписывать....
VladislavManukhov вне форума Ответить с цитированием
Непрочитано 13.08.2019, 21:31   #4
Аватар для finfan
fin-ex.corp

По умолчанию Re: Interlude альтернатива abnormal effect'ам

Сначала реши главную задачу - работоспособность.

Тебе понадобиться следующее:

1. Свой абнормал енум для простоты его юза в будущем


2. Найди код EffectDamOverTime.java и добавь что-то похожее на это


Зайди в игру, и првоерь работспособность используя на цель любой скилл с таким эффектом, например Bleed (ID: 96)

Жертва под кровотоком должна будет проигрывать анимацию бафа Might каждые N секунд установленные в эффекте.

Если всё будет работать, дальше я уверен ты найдёшь как сделать так, чтобы такая хрень была автоматической - используя механизм парса эффектов (модифицуруя его собственноручно)

Главную роль тут играет ID в енуме: 4365 я его взял не с небес. Это мгновенный эффект от Might бафа, с оффициальным названием: skill.mu.4365 в skillgrp.dat файле в папке system клиента.

Оппортунизм в том, чтобы твой шарик летающий вокруг цели в течение всего времени эффекта, имел в исходах следующее говно:

Это правильно, так эффект не будет тормозить чара и всё будет проигрываться как у мужика.


А вот это - проигрываться будет только базово + будет тормозить игрока (будет своеобразный ступор происходить визуально)


Смысл в том, что мгновенно эффект будет проигрываться только если установлено хоть 1 хоть 100 анимаций но в колонку CastingActions, никаких ShotActions и других не должно быть, иначе пососать.
finfan вне форума Отправить сообщение для finfan с помощью Skype™ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Abnormal for NPC Enjoooy Игровой клиент 1 15.05.2019 10:58
Dragon Slayer With Effect (Interlude) CriticalError Игровой клиент 0 13.04.2015 22:31
[Продам] Abnormal Эффект Vitality для Interlude(Nevit system) Confusion Рынок / Marketplace 14 09.04.2015 19:35
Abnormal Effect's Falkorr Работа со скриптами 3 11.03.2014 11:52
mssql_error() альтернатива Dementor PHP 2 15.11.2012 20:12


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 11:39. Часовой пояс GMT +3.

Вверх