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

Нужна Помощь Кодера

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

В общем, ребят.

Прошу помощи.

Суть в том, что уже довольно таки долго ломаю голову над куском кода и не могу вдуплить что да как.

 

Так вот, мне нужно сделать так, чтобы ПЕРЕД началом каста скиллов шла проверка на состояние чара (тобиш в бою он или в игре.. и тд)

 

Перепробовал разные способы, а проверка идёт всё ровно ПОСЛЕ каста..

 

Пробовал сделать:

abortCast();

 

потом ещё попробовал

setIsCastingNow(false);

 

Толку не прибавилось...

 

Вот сам кусок кода.

 

 

if (AttackStanceTaskManager.getInstance().getAttackStanceTask(activeChar))

{

activePlayer.sendMessage("You can't use this skill in battle.");

activePlayer.sendPacket(ActionFailed.STATIC_PACKET);

return;

}

 

Кому не сложно - помогите.

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


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

Эм не совсем понял суть.

 

Можно весь код, желательно с комментариями где что и для чего.

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


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

@Override

 

public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)

{

if (!(activeChar instanceof L2PcInstance))

return;

 

L2PcInstance activePlayer = (L2PcInstance) activeChar;

 

if (!L2PcInstance.checkSummonerStatus(activePlayer))

return;

 

for (L2Object obj : targets)

{

if (!(obj instanceof L2Character))

continue;

 

final L2Character target = ((L2Character) obj);

if (activeChar == target)

continue;

 

if (AttackStanceTaskManager.getInstance().getAttackStanceTask(activeChar))

{

activePlayer.sendMessage("You can't use this skill in battle.");

activePlayer.sendPacket(ActionFailed.STATIC_PACKET);

return;

}

 

if (target instanceof L2PcInstance)

{

L2PcInstance targetPlayer = (L2PcInstance) target;

 

if (!L2PcInstance.checkSummonTargetStatus(targetPlayer, activePlayer))

continue;

 

if (!Util.checkIfInRange(50, activeChar, target, false))

{

if (!targetPlayer.teleportRequest(activePlayer, skill))

{

activePlayer.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_ALREADY_SUMMONED).addPcName(targetPlayer));

continue;

}

 

if (skill.getId() == 1403) // summon friend

{

// Send message

ConfirmDlg confirm = new ConfirmDlg(SystemMessageId.S1_WISHES_TO_SUMMON_YOU_FROM_S2_DO_YOU_ACCEPT.getId());

confirm.addPcName(activePlayer);

confirm.addZoneName(activeChar.getX(), activeChar.getY(), activeChar.getZ());

confirm.addTime(30000);

confirm.addRequesterId(activePlayer.getObjectId());

target.sendPacket(confirm);

confirm = null;

}

else

{

L2PcInstance.teleToTarget(targetPlayer, activePlayer, skill);

targetPlayer.teleportRequest(null, null);

}

}

}

}

}

 

красным выделил саму проверку. вот нужно чтобы эта проверка шла ДО начала каста а не ПОСЛЕ каста.. :)

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


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

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

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


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

Я вот думаю, не от аишки ли надо отталкиваться? Или

AttackStanceTaskManager

 

заменяет аи игрока?

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


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

if(!isCastingNow() && getAI().getAttackTarget() == getTarget())

 

Ну это как пример, где условие на то что скилл еще не скастован.

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


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

Это не столь важно.. Более интересная штука с вот этим:

 

 

if (this instanceof L2PcInstance && (((skill.getSkillType()) == L2SkillType.BUFF) || ((skill.getSkillType()) == L2SkillType.HEAL) || ((skill.getSkillType()) == L2SkillType.HEAL_PERCENT)))

{

boolean karma_target = false;

for (L2Object trg1 : targets)

{

if (trg1 instanceof L2Character)

{

L2Character target1 = (L2Character) trg1;

if (((L2PcInstance) target1).getKarma() > 0)

{

karma_target = true;

}

else

{

karma_target = false;

}

}

}

if (karma_target == true && (((skill.getSkillType()) == L2SkillType.BUFF) || ((skill.getSkillType()) == L2SkillType.HEAL) || ((skill.getSkillType()) == L2SkillType.HEAL_PERCENT)))

{

 

SkillDat skilldat = ((L2PcInstance) this).getCurrentSkill();

if (skilldat.isCtrlPressed())

{

}

else

{

SystemMessage smgf = SystemMessage.getSystemMessage(SystemMessageId.INCORRECT_TARGET);

sendPacket(ActionFailed.STATIC_PACKET);

smgf.addSkillName(skill);

sendPacket(smgf);

return;

}

}

}

 

Это проверка на состояние ПК персонажа (тобиш если игрок ПК, то на него могут кидать баффы только через CTRL)

Но и тут непонятки.. при чём те же самые. Игрок может кастовать скиллы типа Buff, Heal и HealPercent на пк, но эффект они давать не будут пока он не нажмёт CTRL. Тоже не очень красиво ведь..

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


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

L2Skill метод checkCondition

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


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

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

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

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

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

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

Войти

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

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

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

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

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