Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Если игрок соответствует устовиям
#1
Вот код:
[SRC="java"]if(command.equalsIgnoreCase("nuboloka8083"))
{
player.sendMessage("nuboloka8083");
ItemInstance item = player.getInventory().getItemByItemId(_objectId);
int crys = item.getTemplate().getCrystalType().externalOrdinal;
if(crys == 5 && item.getEnchantLevel() >= 6)
{
sendMessage("Это локация только для Б грейда. Уровень заточки не больше 6.");
}
if(crys == 4 && item.getEnchantLevel() >= 6)
{
sendMessage("Это локация только для Б грейда. Уровень заточки не больше 6.");
}
else if(crys <= 3 && item.getEnchantLevel() <= 6 || item == null)
{
player.sendMessage("Вы подходите условиям и телепортированы.");
player.teleToClosestTown();
}
player.sendMessage("nuboloka8083konec");
}[/SRC]
Подскажите пожалуйста, почему когда я нажимаю на кнопку nuboloka8083, то в чат выходит только сообщение nuboloka8083?
Задумка была такова: Если у чара Б шмот и оружие, в инвентаре или на себе одето, то можно тп, а если А и S, то нельзя тп.
В чем ошибка?
Ответ
#2
Я не программист, но... разве так может быть?
сначала if, потом опять if, потом else if?
А не так, if; else if; else?


Погуглил инфу, мой бессмысленный пост.(
1
Ответ
#3
if (crys == 5 && item.getEnchantLevel() >= 6 && !грейд_недопустимых_к_тп)
{
teleportЁпте());
}
else
{
sendMessage("Это локация только для Б грейда. Уровень заточки не больше 6.");
}
Ответ
#4
Код:
if(crys <= 3 && item.getEnchantLevel() <= 6 || item == null)
     {
          player.sendMessage("Вы подходите условиям и телепортированы.");
          player.teleToClosestTown();
     }
else
     sendMessage("Это локация только для Б грейда. Уровень заточки не больше 6.");

Упс, не заметил, пост выше правильно написан.
Ответ
#5
в двух if нет ничего страшного, другое дело это то, что они проверяют.
Вы проверяете все что нельзя ( хорошо что только A и S не подходят, а если бы их было больше ?), можно ведь сделать 1 проверку на то что разрешено, а все остальное пустить по else ( как выше в постах ).

по теме: почему не доходит до "nuboloka8083konec" - скорее всего где то ошибка.
Попробуйте так и посмотрите какие значения принимают переменные:
Код:
ItemInstance item = player.getInventory().getItemByItemId(_objectId);
player.sendMessage("Item: " +item.getEnchantLevel());
int crys = item.getTemplate().getCrystalType().externalOrdinal;
player.sendMessage("CrysID: " +crys);
Ответ
#6
[SRC="java"]if(command.equalsIgnoreCase("nuboloka8083"))
{
player.sendMessage("nuboloka8083");
ItemInstance item = player.getInventory().getItemByItemId(_objectId);
player.sendMessage("Item: " + item.getEnchantLevel());
int crys = item.getTemplate().getCrystalType().externalOrdinal;
player.sendMessage("CrysID: " + crys);
if(crys <= 3 && item.getEnchantLevel() <= 6 || item == null)
{
player.sendMessage("Вы походите условиям и телепортированы.");
player.teleToClosestTown();
}
else
{
player.sendMessage("Эта локация только для персонажей в Б экипировке и уровень заточки не должен быть больше 6.");
}
player.sendMessage("nuboloka8083konec");
}[/SRC]
Сделал так, в чат все равно выводит nuboloka8083 и не телепортирует.
Скорее все ошибка в этом:
[SRC="java"] ItemInstance item = player.getInventory().getItemByItemId(_objectId);
int crys = item.getTemplate().getCrystalType().externalOrdinal;[/SRC]
Но как это исправить я не знаю, помогите пожалуйста.
Ответ
#7
ошибка тут:
Код:
ItemInstance item = player.getInventory().getItemByItemId(_objectId);
раз не доходит до player.sendMessage("Item: " + item.getEnchantLevel());

_objectId откуда берется ? может он = null ?
Ответ
#8
А как по другому брать предмет из инвентаря?
Ответ
#9
PHP код:
<?php 
getItemByItemId
(_objectId)
Вы уж определитесь. Либо по ID выборку делаете, либо по OID Smile
PHP код:
<?php 
item
.getEnchantLevel() <= 6 || item == null)
Так же следует правильно проверять на null и не глушить исключения и все будет тип-топ.
Использование отладчика тоже не помешает.
Цитата:А как по другому брать предмет из инвентаря?
Загляните в исходник Inventory, ответ не заставит себя долго ждать.
Ответ
#10
[SRC="java"] if(command.equals("nuboloka8083"))
{
for(ItemInstance item : player.getInventory().getItems())
{
if(item == null)
continue;
if(item.getCrystalType() != null)
{
if(item.getCrystalType().externalOrdinal <= 3)
{
player.teleToClosestTown();
}
else
{
player.sendMessage("Вы не подходите условиям.");
player.sendActionFailed();
return;
}
}
}
}[/SRC]
Сделал так, все проверяет, но теперь телепортирует и пишет вы не подходите..
Естественно у меня в инвентаре дб, если нет ничего или Б грейд шмот, то просто телпортирует. как и должно быть, но почему то еще телепортирует если не подходу условиям.
Где теперь ошибка?
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  # Авторестарт если найден deadlock dantest 9 2,681 09-23-2015, 11:32 PM
Последний пост: flopix
  Обрыв каста, если цель не видно. elastic 7 2,915 02-20-2015, 10:00 PM
Последний пост: KilRoy
  Снятие HAIR если сняли DHAIR L2J 5 1,727 08-14-2014, 05:20 PM
Последний пост: Donatte
  Запрет атаки если присутсвует меньше игроков Rolfer 1 1,539 05-14-2014, 06:25 PM
Последний пост: n3k0nation
  "Если (персонаж.отошёл на() >= (n) метров)..." finfan 11 3,177 05-03-2012, 06:12 AM
Последний пост: bloodshed
  Как запретить использ. скилл, если нет душ Stema 1 2,541 12-01-2008, 11:46 PM
Последний пост: Stema

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


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