Сообщений: 75
Тем: 15
Зарегистрирован: Jul 2016
Репутация:
0
finfan Написал:купол делает тоже самое что вам и надо, он стоит там и кастует каждые N секунд скилл на всех, кто находится вокруг него. Чтобы эта белиберда заработала, надо вбить и эффект, но при этом создать собственный эффект RainOfFire котоырй будет делаеть почти тоже самое что и купол только с изменением анимации при отправке пакета MagicSkillUse.
Можно пожалуйста по подробнее про изменение анимации, прост вообще не шарю в этом, пока только сделал так, что я кастую мой рейн оф фаер на землю(а анимация на меня кастуется) на земле появляться купол и через секунду кастует блейзинг серкл(с анимацией только в том случае если в зону действия попадали цели) и потом купол исчезает. как бы так сделать чтоб анимация он серкла была в любом случае, и купола небыло видно(есть в л2 нпц, вообще невидимки?), а то что эффект проходит не сразу а через секунду, это наверн в "SignetEffect" в "onActionTime" надо менять что-то.
Сообщений: 1,058
Тем: 129
Зарегистрирован: May 2009
Репутация:
11,626
TorBenLino Написал:Можно пожалуйста по подробнее про изменение анимации, прост вообще не шарю в этом, пока только сделал так, что я кастую мой рейн оф фаер на землю(а анимация на меня кастуется) на земле появляться купол и через секунду кастует блейзинг серкл(с анимацией только в том случае если в зону действия попадали цели) и потом купол исчезает. как бы так сделать чтоб анимация он серкла была в любом случае, и купола небыло видно(есть в л2 нпц, вообще невидимки?), а то что эффект проходит не сразу а через секунду, это наверн в "SignetEffect" в "onActionTime" надо менять что-то.
1. Сперва найди NPC невидимку. Открой skillgrp.dat и найди LineageNPC.clear_npc
2. Сделай копию этого NPC в skillgrp.dat.
3. Создай NPC на сервере под прототип твоих куполов, просто скопируй и вставь, незабудь поменять ID. ID в skillgrp и xml/datebase должны быть одинаковы.
4. Дальше создай эффект EffectTestSignet, который в onActionTime() будет возвращать true.
5. Отправь в onActionTime() пакет MagicSkillUse(нашнпц,нашнпц,1171,1,500,0,0)
Делай всё по аналогу с куполом (спавн купола), обработку урона пока не делай. Добейся того, чтобы твой NPC стоял и визуально он кастовал блэзинг циркл.
Когда это будет работать, тогда делай обработку урона. И ещё, анимацию rain of fire у персонажа убери, её за тебя NPC невидимка кастанёт.
Сообщений: 42
Тем: 0
Зарегистрирован: Nov 2013
Репутация:
75
12-29-2016, 03:07 AM
(Сообщение последний раз редактировалось: 12-30-2016, 05:22 AM LifeGame32.)
https://www.youtube.com/embed/RZ0t_AxzsBc
L2J HF
PHP код: <?php
MoveBackwardToLocation
if (activeChar.getEffectList().isAffectedBySkill(313))// 313 прицельный огонь
{
try
{
L2Spawn sp = new L2Spawn(32580);// 32580 LineageNPC.camera_target_dummy
sp.setXYZ(new Location(_targetX, _targetY, _targetZ));
activeChar.sendPacket(new MagicSkillUse(activeChar, sp.doSpawn(), 1467, 1, 2503, 5000));
ThreadPoolManager.getInstance().scheduleEvent(() -> sp.getLastSpawn().deleteMe(), 10000);
}
catch (Exception e)
{
// TODO: handle exception
}
}
Сообщений: 1,610
Тем: 44
Зарегистрирован: Jan 2016
Репутация:
1,353
LifeGame32, Скилл называется "пи*дец фпсу в масс замесе".
Сообщений: 75
Тем: 15
Зарегистрирован: Jul 2016
Репутация:
0
12-29-2016, 08:04 AM
(Сообщение последний раз редактировалось: 12-29-2016, 10:25 AM TorBenLino.)
finfan Написал:1. Сперва найди NPC невидимку. Открой skillgrp.dat и найди LineageNPC.clear_npc
2. Сделай копию этого NPC в skillgrp.dat.
3. Создай NPC на сервере под прототип твоих куполов, просто скопируй и вставь, незабудь поменять ID. ID в skillgrp и xml/datebase должны быть одинаковы.
4. Дальше создай эффект EffectTestSignet, который в onActionTime() будет возвращать true.
5. Отправь в onActionTime() пакет MagicSkillUse(нашнпц,нашнпц,1171,1,500,0,0)
Делай всё по аналогу с куполом (спавн купола), обработку урона пока не делай. Добейся того, чтобы твой NPC стоял и визуально он кастовал блэзинг циркл.
Когда это будет работать, тогда делай обработку урона. И ещё, анимацию rain of fire у персонажа убери, её за тебя NPC невидимка кастанёт.
кароче нпц я сделал, только у него имеется имя(NoNameNpc) которое висит на пустом месте.
начиная с 4 пунткта я вообще непонял ничего. есть класс signeteffect и в нем, в методе onAction туева хуча кода в конце он возвращает тру и там же отправляется пакет
_actor.broadcastPacket(new MagicSkillUse(_actor, cha, _skill.getId(), _skill.getLevel(), 0, 0));
ну да ладно, я просто сделал пустого нпц и когда юзаю рейноффаер мой нпц кастует сиркл(в том числе и начальная анимация идет, кольцо огненное вокруг персонажа), но опятьже только если цели под это аое есть рядом, а когда кастуешь серкл со своего чара анимация то в любом случае проходит.
Но я понял что мне совсем не это нужно. Нужно чтобы не нпц кастовал скилл, а именно мой чар кастовал скил в этого нпц. Походу нужно сам таргет гроунд изменить как-то чтобы можно было его приписать любому скиллу и чар юзал бы этот скилл на создающегося ,на несколько секунд, в указаной точке нпц. Тобишь вот этот нпц должен являться целью скила!!
Т.к. в задумке например такой скилл: активирую, нажимаю на землю, мой чар туда телепортируется(тоесть получает xyz создающегося нпц и тпшится к нему)
или тупо хурикены в землю запускать, чтоб они прям летели от моего чара, до нпц.
вот эта вся фишка с созданием, и последующим удалением, нпц прописана в сигнетах(в скилзах и эффектах), а как мне её чисто для таргет граунда переделать?
Сообщений: 81
Тем: 1
Зарегистрирован: Feb 2014
Репутация:
117
TorBenLino Написал:кароче нпц я сделал, только у него имеется имя(NoNameNpc) которое висит на пустом месте.
В клиенте имя НПЦ добавь, в нпц добавь условие: не отображать имя, не брать таргет, не наносить урон (этому нпц) - эти все примеры есть в нпц что используют стандартные купола
п.с. зачем вы через такой *ЗАД* все это делаете, нпц свободных полно, но видимо леть *Тупо найти их...
Сообщений: 75
Тем: 15
Зарегистрирован: Jul 2016
Репутация:
0
когда используешь скиллы типа signet есть одна проблема..
если тыкнуть бежать в даль и нажать на скилл, то персонаж останавливается и появляется курсор прицела(наконечник посоха), но на самом деле персонаж продолжает движение в указанную ранее точку и по серверным координатам и в клиентах у других чаров он тоже продолжает бежать туда.
только в своем клиенте останавливается, а когда нажимаешь на землю с курсором прицела позиция обновляется согласно серверным координатам.
может ошибаюсь но по моему в ядре не описан процесс перехода в режим "прицела". как сделать так, чтобы когда я включаю прицел в моем клиенте тоже отображалось движения чара?
Сообщений: 1,058
Тем: 129
Зарегистрирован: May 2009
Репутация:
11,626
TorBenLino Написал:когда используешь скиллы типа signet есть одна проблема..
если тыкнуть бежать в даль и нажать на скилл, то персонаж останавливается и появляется курсор прицела(наконечник посоха), но на самом деле персонаж продолжает движение в указанную ранее точку и по серверным координатам и в клиентах у других чаров он тоже продолжает бежать туда.
только в своем клиенте останавливается, а когда нажимаешь на землю с курсором прицела позиция обновляется согласно серверным координатам.
может ошибаюсь но по моему в ядре не описан процесс перехода в режим "прицела". как сделать так, чтобы когда я включаю прицел в моем клиенте тоже отображалось движения чара?
Когда используешь signet реализации L2J - это уже проблема.
Вам надо найти все применения TARGET_GROUND и посмотреть, что там происходит. Как правило, остановка при юзе скила происходит в PlayerAI.java в методе thinkCast, если хроники Interlude, а сборка на основе L2J. Он бежит дальше, потому что где-то косяк в maybeToPawn (AI). Однако если он останавливается на "экране", значит происходит валидация, после которой он всё равно продолжает бежать внутри сервера.
По хорошему, вам стоит удалить всё что связано с TARGET_GROUND (включая скилы, коих там очень и очень мало). Взять себя в руки и полностью переписать систему TARGET_GROUND скилов.
1
Вот основные факторы по структуре, с которых начинал я, чтобы добиться определённых результатов.
Описание: нажимая на скил, мы можем указывать где будет его срабатывание (и его анимации. По факту оно должно выглядит как:
Всеми этими параметрами обладает L2Skill, когда вы создаёте его в .xml.
Но дальше сложнее, вызвать скилл на координатах и отладить работу не сложно, сложно заставить анимацию проигрываться в этом месте. В интерлюдах, нам по любому нужен объект - дочерний от NPC или чарактера, который может бросать broadcastPacket->toAllinRadius.
Т.е. указав на место в игре, запускается стандартная схема каста, которая дёргает onMagicSkillLaunched() метод, который вызывает анимацию на ЦЕЛИ. Созданный вам инстанс на основе NPC должен учитывать:
1. Союзников
2. Врагов
3. Siege
4. PVP
5. Попал ли в зону кастер
6. Суммонов
У вас уже есть похожий EffectPointInstance, можно даже использовать его.
Дальше вам надо учесть самые главные фишки данной способности:
1. Если мы указали на координаты, дистанция которых выше чем допустимо в скиле, тогда чар должен бежать к ним, как будто он кастует обычный TARGET_ONE скилл. Тут надо использовать maybePawnOnPosition() или что-то вроде.
2. При начале каста,должен создавать NPC дочерник, который вызовет анимацию на таргетах вокруг СЕБЯ (а не вас).
P.S. Согласно слухам, существует мистический пакет, который передаёт данные NPC в виде объекта, что позволяет на нём использовать анимацию без полноценных тяжёлых функции как спавн дочернего NPC, но я такой никогда не видел в живую.
Сообщений: 75
Тем: 15
Зарегистрирован: Jul 2016
Репутация:
0
Когда входишь в "режим прицеливания" код не попадает в thinkCast, на персе по прежнему CtrlIntention moveto
вооружившись телегой костылей сделал почти все что хотел получить.
1) юзаю скил
2) указываю место
3) туда спавнится нпц, в него летит плюха
4) ловит все нужные таргеты в радиусе
5) урон и анимация проходит нормально
косяк остается лишь с тем что когда я на бегу врубаю прицел чар на клиенте встает
еще намоздрячил такую фишку, если серверные и клиентские координаты расходяться по X или Y больше чем на 50, отправляется пакет
character.broadcastPacket(new MoveToLocation(character));
в итоге когда вклчаю прицел перс встает на пол секунды, потом продолжает бежать с ярым желание догнать свои серверные координаты
но это полная хрень так как выглядит очень упорото и даже при обычном беге координаты могут разойтись больше чем на 50 раза 3 за секунду
совсем нет идей как это дело законтрить
Сообщений: 1,610
Тем: 44
Зарегистрирован: Jan 2016
Репутация:
1,353
|