Перейти к содержанию

Кастиэль

Пользователи
  • Публикаций

    103
  • Зарегистрирован

  • Посещение

  • Отзывы

    0%

Сообщения, опубликованные Кастиэль


  1. тебе в данном случае надо не эффекты ковырять, а лезть в методы calcPhysDam и calcMagicDam (в твоей сборке могут зваться по другому - это названия из овероподобных сборок)

     

    заводишь новую стату для скиллов и непосредственно в эффекте скилла 30515 выставляешь в ней нужную дальность действия.

    а далее в calcPhysDam и calcMagicDam прверяешь ее наличие и отличие ее значения от нуля и если она есть - высчитываешь расстояние между атакуемым и атакующим и действуешь по обстоятельствам.

     

    делов вобщем в реализации по сути на несколько минут.

    Я так и сделал если честно ))


  2. Возникла проблема со щитами, они считаются как оружие(ну т.к. у них тип стоит Weapon в дп в папке клиент). Пробовал удалить - выбивает ошибку, мол не получается сделать предмет. Что делать, искать все щиты и менять им тип с Weapon на Armor?

    Так же в связи с немножко кривым парсом возникает невозможность использования сосок(т.к. у них везде стоит soulshot=0 , а в исходах, если он равен 0, то идет ошибка(я конечно могу потребляемость сосок всем сразу с 0 на 1 поменять, но это немного не то ведь, а вот проблема с щитами так легко не решится)

    (activeChar.sendPacket(SystemMessageId.CANNOT_USE_SOULSHOTS))

  3. https://yadi.sk/d/t36A35jifYXkY

    p.s. для интерлюд и грация финал ), вот если что вирус тотал 

    https://www.virustotal.com/ru/file/d3139719e9f55e25358708ee043eb7e90c75f9e6e4a2b21977aabee06d93acb0/analysis/1427403028/

    Кстати, очень просто, если у вас хром - правой кнопкой и найти изображение в интернете )


  4. Метод getSkillRadius тут вообще ни в какие ворота, так как радиус у скилла 0 (так как он селфовый). Тут надо константа радиуса искажения, которую находишь сам. Вообще, тебе нужно программно нарисовать окружность вокруг кастующего и отбивать рейндж атаки атакующего, когда он находится в данной окружности.

    Хочу уточнить, я радиус скилла примерно знаю - 90, и да, немного наоборот, когда в кругу - урон кастанувшему идет, а когда атакующий вне круга, урон кастанувшему не идет.

    Я вот все бьюсь над вопросом, как же так сделать(ведь может быть еще и такое, что бьют 2 игрока  - один в кругу, другой нет), т.е. как вы сказали - отбивать рейндж атаки...


  5. И опять нужна помощь в реализации скилла Расщепление(30515).

    Я попытался сделать скилл на основе и вот, что у меня получилось:

     

     

    public class ErtheiaFighterAura extends L2Effect
    {
    public ErtheiaFighterAura(Env env, EffectTemplate template)
    {
    super(env, template);
    }
     
    @Override
    public L2EffectType getEffectType()
    {
    return L2EffectType.BUFF;
    }
     
    @Override
    public boolean onStart()
    {
    L2PcInstance caster = (L2PcInstance) getEffector();
                    for(L2Character cha1 : caster.getKnownList().getKnownCharactersInRadius(1200))
                    {
                        
                    
    for(L2Character cha : caster.getKnownList().getKnownCharactersInRadius(getSkill().getSkillRadius()))
    {
    if(cha == cha1)
    {
    getEffector().setIsInvul(false);
    }
                            else
                            {
                                if(cha != cha1)
                                {
                                    getEffector().setIsInvul(true);
                                }
                                    
                            }
     
    }
            }
     
    return true;
    }
     
    }
    

     

     

    В итоге - неуязвимость дается определенный промежутки времени, не зависимо от того, где находится персонаж(скилл радиус ради теста указал 400 в дп), зы заводил окно для теста
    Может кто подсказать где ошибки, может быть логика не та?)
    зыы сборка гдв эртея(гдв -> дво)

  6. А разве нужен поворот в точку? Ну в общем, разбирайся :) Попробуй с разными флай-тайпами.

    Он теперь летит к цели, но без анимации... Как будто притягивают(THROW_HORIZONTAL)

    Эх...

    Может быть дело в чем-то другом? mega_shok


  7. FlyType.DUMMY - здесь выбираешь тип. Советую взять тип как у цепи танка (так как цепь притягивает постепенно - то есть не мгновенное перемещение, а постепенное). Ну и поколдовать с flySpeed`ом тоже не помешало бы (это уже скорее всего в дп).

    А не лучше ли CHARGE,

    "// Движение от точки А к точке В, с разворотом в сторону точки В  ID = 3"(из файлика \gameserver\network\game\serverpackets\FlyToLocation.java)

    Этот тип используется только в эффекте EnemyCharge. Нужно протестить, что он делает вообще.

    Ах да, чуть не забыл, тот что -90 не заработал, но +90 прям в упор влево тпшнул(как и предполагалось - без анимации)

    А нет, это я в дп накосячил - все норма, работает(тоже в упор).


  8. А хотя, что-то я не подумал, это же телепорт будет без анимации, просто появится сборку, эээх.

     

    ph += 90; и ph -= 90; как направо и налево. Тут чисто по логике: ph - это градусная мера направления стрелки, а ph += 180 - поворот назад. Ну а дальше, естественно, перевод в радикал для последующей работы с ним.

    А это все равно обязательно проверю, результаты скажу чуть позже )


  9. Кто распологает формулами для телепорта не к задней позиции персонажа, а боковых(левой, либо правой).

    Собственно вот метод, в котором указана формула для телепорта назад

     

     

    int x = 0;
    int y = 0;
    int z = 0;
     
    int px = target.getX();
    int py = target.getY();
    double ph = Util.convertHeadingToDegree(target.getHeading());
     
    ph += 180;
     
    if(ph > 360)
    {
    ph -= 360;
    }
     
    ph = Math.PI * ph / 180;
     
    x = (int) (px + 25 * Math.cos(ph));
    y = (int) (py + 25 * Math.sin(ph));
    z = target.getZ();
     
    Location loc = new Location(x, y, z);
    //...
    activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
    activeChar.broadcastPacket(new FlyToLocation(activeChar, loc.getX(), loc.getY(), loc.getZ(), FlyType.DUMMY, skill.getFlySpeed(), skill.getFlyDelay(), skill.getFlyAnimationSpeed()));
    activeChar.abortAttack();
    activeChar.abortCast();
     
    activeChar.setXYZ(loc.getX(), loc.getY(), loc.getZ());
    activeChar.broadcastPacket(new ValidateLocation(activeChar));
    

     

     

    Если же вы не располагаете нужными формулами, то буду очень благодарен, если поможете их вывести ;)


  10. Ого, спасибо большое еще раз))

    А то я вон чего намутил, хз работает нет :

     

     

     
    package dwo.gameserver.handler.effects;
    import dwo.gameserver.model.actor.instance.L2FortCommanderInstance;
    import dwo.gameserver.model.actor.instance.L2GrandBossInstance;
    import dwo.gameserver.model.actor.instance.L2NpcInstance;
    import dwo.gameserver.model.actor.instance.L2RaidBossInstance;
    import dwo.gameserver.model.actor.instance.L2SiegeFlagInstance;
    import dwo.gameserver.model.actor.instance.L2SiegeSummonInstance;
    import dwo.gameserver.model.skills.effects.CharEffectList;
    import dwo.gameserver.model.skills.effects.EffectTemplate;
    import dwo.gameserver.model.skills.effects.L2EffectType;
    import dwo.gameserver.model.skills.stats.Env;
    import dwo.gameserver.model.actor.L2Character;
    import dwo.gameserver.model.actor.L2Object;
    import dwo.gameserver.model.actor.ai.CtrlIntention;
    import dwo.gameserver.model.actor.instance.L2PcInstance;
    import dwo.gameserver.model.skills.effects.L2Effect;
     
     
    public class GoToMe extends L2Effect
    {
    private int _x, _y, _z;
     
    public GoToMe(Env env, EffectTemplate template)
    {
    super(env, template);
    }
     
    @Override
    public L2EffectType getEffectType()
    {
    return L2EffectType.GOTOME;
    }
     
    public boolean onStart(L2Character activeChar, L2Object[] targets)
    {
               if(getEffected() == null || getEffector() == null)
    {
    return false;
    }
               if(getEffected() instanceof L2SiegeFlagInstance ||
    getEffected() instanceof L2FortCommanderInstance ||
    getEffected() instanceof L2NpcInstance ||
    getEffected() instanceof L2SiegeSummonInstance ||
    getEffected() instanceof L2RaidBossInstance ||
    getEffected() instanceof L2GrandBossInstance)
    {
    return false;
                    }
               L2PcInstance _actor = activeChar.getActingPlayer();
               L2Character target;
               for(L2Object obj : targets)
    {
    if(!(obj instanceof L2Character))
    {
    return false;
    }
    target = (L2Character) obj;
                            if(target.isDead())
    {
    return false;
    }
                        target.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, _actor);
                    }
                return true;
            }
     
    public void onExit(L2Character activeChar, L2Object[] targets)
    {
               L2PcInstance _actor = activeChar.getActingPlayer();
               L2Character target;
               
               for(L2Object obj : targets)
    {
    target = (L2Character) obj;
                    target.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE, _actor);
                    }
     
    }
            @Override
    public boolean onActionTime()
    {
    return false;
    }
    @Override
    public int getEffectFlags()
    {
    return CharEffectList.EFFECT_GOTOME;
    }
    }
    

     

     


  11. target.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, player, 100);

    Как-то так. Смотреть по своей сборке методы нужно.

     

    Ну я примерно понял, это как бы метод принужденной атаки, поищу


  12. Кто может приблизительно рабочий класс эффекта написать (или скопипастить уже готовый(мб в шаре есть)) для скилла Артеи мага - Западня ветра(единственный не рабочий скилл у артеек магов остался, хз как написать)

    P.S. Если уже готовый скинете, попробую переписать под сорцы с которыми работаю(гдв)

    P.S.S У мобиуса критует )

    P.S.S.S. Вообще у меня возник вопрос с этим скиллом из-за того, что я не понимаю, как сделать чтобы персонаж шел на того персонажа, который скилл заюзал, все остальное могу сделать(чтобы при наложенном дебаффе, нельзя было юзать скиллы, атаковать, менять таргет)

     

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