Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Воросы по ядру (l2j)
#1
Сборка L2J-INFINITY. (хотя, думаю эти классы есть и в l2jserver)
В сфере разработчика недавно, есть много моментов, в которых сомневаюсь или просто не знаю еще, не накидывайтесь с палками пож. =)

Суть вопроса разберу на примере EffectStun:


public EffectStun(Env env, EffectTemplate template)
{
super(env, template);
}

вызываем конструкторы, но что такое env?
@Override
Что делает? Я так понимаю то какая-то особенность языка java, но мне не знакома, скажите, для чего она здесь?

public L2EffectType getEffectType()
{
return L2EffectType.STUN;
}

Тут я так понял из шаблонов берет тип эффекта


public boolean onStart()
{
getEffected().startStunning();
return true;
}

Тут , видимо, описано то, что делается при наложении эффекта.

public void onExit()
{
getEffected().stopStunning(false);
}

Тут отключается эффект.

public boolean onActionTime()
{
// just stop this effect
return false;
}

Вот здесь не понятно что это. Это действие при повторном использовании этого же скила на цель? Раз у нас стан, значит это действие , когда стан висит и мы его еще раз опрокидываем? Или это действие при неудачном опрокидывании повторного стана?
public int getEffectFlags()
{
return CharEffectList.EFFECT_FLAG_STUNNED;
}

Тут не понятно, но я думаю, что это отвечает за флаг ? Или нет?


Еще один вопрос:
В l2j не реализован трансфер урона от пати уд. Точнее так - от сопартийцев идет урон на танка, но от самона не идет. Я попробовал это реализовать, подскажите, верно ли?

@Override
public boolean onStart()
{
if (getEffected() instanceof L2Playable)
{
final L2Playable activeChar = (L2Playable) getEffected();
activeChar.setIsTransferringDmg(true);
activeChar.setIsTransferringDmgTo((L2Playable) getEffector());
}
else if (getEffected() instanceof L2Summon)
{
final L2Summon activeSum = (L2Summon) getEffected(); //Transfer for Summon! SweetDreams Done
activeSum.setIsTransferringDmg(true);
activeSum.setIsTransferringDmgTo((L2Playable) getEffector());
}
return true;
}

Надеюсь на ответы...

Добавлено через 26 минут
Так же написал команду на откт скилов игроку, но выдает ошибку, говорит чтобы я удалил токен. admin_refreshskills из private static final String[] ADMIN_COMMANDS =
Что ему не нравится? или нужно еще куда-нибудь, что-нибудь дописать?

else if (command.startsWith("admin_refreshskills"))
{
int value;
try
{
final String val = command.substring(15);
value = Integer.parseInt(val);
}
catch (Exception e)
{
activeChar.sendMessage("Incorrect parameter. LOL! Wink");
return true;
}
if (activeChar instanceof L2PcInstance)
{
for (L2Skill skill : activeChar.getAllSkills())
{
if (skill.getReuseDelay() <= 900000)
activeChar.enableSkill(skill);
}

activeChar.sendSkillList();
activeChar.sendPacket(new SkillCoolTime(activeChar));
}
else
activeChar.sendMessage("Invalid target.");
}
Ответ
#2
AmdAmdFtuk Написал:Еще один вопрос:
В l2j не реализован трансфер урона от пати уд. Точнее так - от сопартийцев идет урон на танка, но от самона не идет. Я попробовал это реализовать, подскажите, верно ли?
реализовано

AmdAmdFtuk Написал:@Override
это аннотация, которая указывает на то, что этот метод является переопределением реализации метода из класса, который находится выше по иерархии


AmdAmdFtuk Написал:Так же написал команду на откт скилов игроку, но выдает ошибку, говорит чтобы я удалил токен. admin_refreshskills из private static final String[] ADMIN_COMMANDS =
Что ему не нравится? или нужно еще куда-нибудь, что-нибудь дописать?
Код:
else if (command.startsWith("admin_refreshskills"))
        {
            int value;
            try
            {
                final String val = command.substring(15);
                value = Integer.parseInt(val);
            }
            catch (Exception e)
            {
                activeChar.sendMessage("Incorrect parameter. LOL! ;)");
                return true;
            }
            if (activeChar instanceof L2PcInstance)
            {
                for (L2Skill skill : activeChar.getAllSkills())
                {
                if (skill.getReuseDelay() <= 900000)
                    activeChar.enableSkill(skill);
                }
            
                activeChar.sendSkillList();
                activeChar.sendPacket(new SkillCoolTime(activeChar));
            }
            else
                activeChar.sendMessage("Invalid target.");
        }

Код:
int value;
try
    {
        final String val = command.substring(15);
        value = Integer.parseInt(val);
    }
    catch (Exception e)
    {
        activeChar.sendMessage("Incorrect parameter. LOL! ;)");
        return true;
    }
этот кусок кода вообще ненужен, ты же сделал команду, чтоб сбрасывался реюз всех скилов

Код:
if (skill.getReuseDelay() <= 900000)
    activeChar.enableSkill(skill);
это замени на

Код:
activeChar.enableSkill(skill);
а то у тя откатываются только те скилы, у которых реюз меньше 30 мин




остальное смотри в коде...

Добавлено через 12 минут
AmdAmdFtuk Написал:
Код:
@Override
   public boolean onStart()
   {
    if (getEffected() instanceof L2Playable)
    {
        final L2Playable activeChar = (L2Playable) getEffected();
        activeChar.setIsTransferringDmg(true);
        activeChar.setIsTransferringDmgTo((L2Playable) getEffector());
    }
    else if (getEffected() instanceof L2Summon)
    {
        final L2Summon activeSum = (L2Summon) getEffected();    //Transfer for Summon! SweetDreams Done
        activeSum.setIsTransferringDmg(true);
        activeSum.setIsTransferringDmgTo((L2Playable) getEffector());
    }
    return true;
   }

L2Summon это потомок от L2Playable. не нужно там условие else if (getEffected() instanceof L2Summon)
Ответ
#3
Цитата:реализовано
Хм, мб у меня старая ревизи слишком ,ну ладно...

Цитата:а то у тя откатываются только те скилы, у которых реюз меньше 30 мин
Мне так и надо Smile

Цитата:L2Summon это потомок от L2Playable. не нужно там условие else if (getEffected() instanceof L2Summon)
Т.е. насколько я понял нужно переписать вот так ? :
@Override
public boolean onStart()
{
if (getEffected() instanceof L2Summon)
{
final L2Summon activeSum = (L2Summon) getEffected();
activeSum.setIsTransferringDmg(true);
activeSum.setIsTransferringDmgTo((L2Playable) getEffector());
}
else if (getEffected() instanceof L2Playable)
{
final L2Playable activeChar = (L2Playable) getEffected();
activeChar.setIsTransferringDmg(true);
activeChar.setIsTransferringDmgTo((L2Playable) getEffector());
}
return true;
}


Сначало смотрим сумон ли это, потом уже остальное. Хочу сказать, что если оставить просто L2Playable , то от самона не идет трансфер на танка (да-да, проверяли).

А про public boolean onActionTime() что можешь сказать? Волнует этот вопрос...
И как можно сделать проверку на то, что getEffected() получает критический урон от getEffector() ?

Cпасибо за ответы
Ответ
#4
Посмотрите пожалуйста схему наследований объектов
L2Playable -> L2Summon
|--------> L2Player (L2PcInstance)
Ваш код попадает под т.н. категорию dead code (никогда не выполняющийся)
Достаточно так
Код:
public boolean onStart()
{
     if (getEffected() instanceof L2Playable)
     {
          final L2Playable activeChar = (L2Playable) getEffected();
          activeChar.setIsTransferringDmg(true);
          activeChar.setIsTransferringDmgTo((L2Playable) getEffector());
     }
     return true;
}
Проверку на кртитческий урон в эффетк сделать сложно, ибо крит урон или нет определяется в атаке.
Ответ
#5
использование final как-то влияет на скорость выполнения?
Ответ
#6
ТЫК!!!!
Ответ
#7
если бы код был нормально документированным, не возникало бы многих подобных вопросов
Ответ
#8
О документировании
Ответ
#9
я дотнетом занимаюсь, там есть аналог final->sealed, который применяется только к методам и класам, хотелось бы знать что же делает final с переменной в яве.

даже достаточно подготовленным последователям будет тяжело вьезжать в проект с тысячью методами не документированых(как у l2jserver'a)
Ответ
#10
в серввере все достаточно понятно и без документации... не зря же все названо понятными линейщику именами....
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 3 Гость(ей)