artMazanaka 66 Опубликовано 25 августа, 2015 Всем доброго времени суток. Подскажите как сделать НПС киллера, который будет убивать игрока в радиусе видимости, если у игрока нет определенного предмета в инвентаре. Пример. Игрок прилетает в локацию без предмета, его убивает этот НПС. Игрок прилетает в локацию с предметом, его не убивает этот НПС. Есть идеи? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
HideWar 143 Опубликовано 25 августа, 2015 Дороговато вам такая идея обойдется. Все реализуемо при наличии у вас исходного кода. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
artMazanaka 66 Опубликовано 25 августа, 2015 Дороговато вам такая идея обойдется. Все реализуемо при наличии у вас исходного кода. без исходов чекера не реализовать? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
HideWar 143 Опубликовано 25 августа, 2015 без исходов чекера не реализовать? С функционалом что вам необходим конечно же, нет. Все что можно будет реализовать без сурса это сделать НПС киллера, который будет убивать игрока в радиусе видимости Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MinakoMino 57 Опубликовано 25 августа, 2015 Ну или скрипт на вип тп,к примеру есть итем тпшит.Нет итема не тпшит. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
artMazanaka 66 Опубликовано 25 августа, 2015 С функционалом что вам необходим конечно же, нет. Все что можно будет реализовать без сурса это сделать НПС киллера, который будет убивать игрока в радиусе видимости понял, спасибо за ответ. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
artMazanaka 66 Опубликовано 25 августа, 2015 Ну или скрипт на вип тп,к примеру есть итем тпшит.Нет итема не тпшит. не подходит, хотелось именно чекера с проверкой итема. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 25 августа, 2015 (изменено) Почему это без сурса не получится? Через АИ можно сделать это всё. Какая сборка? Изменено 25 августа, 2015 пользователем BymerOK 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
artMazanaka 66 Опубликовано 25 августа, 2015 Почему это без сурса не получится? Через АИ можно сделать это всё. Какая сборка? Lovely Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 26 августа, 2015 Кароче, если так и не сделал, то вот рабочий набросок: package custom.killer; import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.model.quest.Quest; /** * * @author calypso * */ public class killer extends Quest { private final static int[] npcIds = { 27232, 27233 }; // ид нпц-киллеров private int PASS = 4037; // итем, наличие которого необходимо чтобы остаться в живых private int MIN = 1; // минимальное кол-во итемов public killer(int questId, String name, String descr) { super(questId, name, descr); for (int npcs : npcIds) addAggroRangeEnterId(npcs); } @Override public String onAggroRangeEnter(L2NpcInstance npc, L2PcInstance player, boolean isPet) { if (player.getInventory().getItemByItemId(PASS) == null || player.getInventory().getItemByItemId(PASS).getCount() < MIN) { if(player.getAppearance().isInvisible()) player.getAppearance().setVisible(); player.doDie(npc); } return super.onAggroRangeEnter(npc, player, isPet); } public static void main(String[] args) { new killer(-1, "killer", "custom.killer"); } } 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
artMazanaka 66 Опубликовано 26 августа, 2015 Кароче, если так и не сделал, то вот рабочий набросок: package custom.killer; import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.model.quest.Quest; /** * * @author calypso * */ public class killer extends Quest { private final static int[] npcIds = { 27232, 27233 }; // ид нпц-киллеров private int PASS = 4037; // итем, наличие которого необходимо чтобы остаться в живых private int MIN = 1; // минимальное кол-во итемов public killer(int questId, String name, String descr) { super(questId, name, descr); for (int npcs : npcIds) addAggroRangeEnterId(npcs); } @Override public String onAggroRangeEnter(L2NpcInstance npc, L2PcInstance player, boolean isPet) { if (player.getInventory().getItemByItemId(PASS) == null || player.getInventory().getItemByItemId(PASS).getCount() < MIN) { if(player.getAppearance().isInvisible()) player.getAppearance().setVisible(); player.doDie(npc); } return super.onAggroRangeEnter(npc, player, isPet); } public static void main(String[] args) { new killer(-1, "killer", "custom.killer"); } } сейчас проверю. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
artMazanaka 66 Опубликовано 26 августа, 2015 Line: -1 - Column: -1 Traceback (innermost last): (no code object) at line 0 SyntaxError: ('invalid syntax', ('__init__.py', 5, 1, '/**')) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
HideWar 143 Опубликовано 26 августа, 2015 Кароче, если так и не сделал, то вот рабочий набросок: package custom.killer; import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.model.quest.Quest; /** * * @author calypso * */ public class killer extends Quest { private final static int[] npcIds = { 27232, 27233 }; // ид нпц-киллеров private int PASS = 4037; // итем, наличие которого необходимо чтобы остаться в живых private int MIN = 1; // минимальное кол-во итемов public killer(int questId, String name, String descr) { super(questId, name, descr); for (int npcs : npcIds) addAggroRangeEnterId(npcs); } @Override public String onAggroRangeEnter(L2NpcInstance npc, L2PcInstance player, boolean isPet) { if (player.getInventory().getItemByItemId(PASS) == null || player.getInventory().getItemByItemId(PASS).getCount() < MIN) { if(player.getAppearance().isInvisible()) player.getAppearance().setVisible(); player.doDie(npc); } return super.onAggroRangeEnter(npc, player, isPet); } public static void main(String[] args) { new killer(-1, "killer", "custom.killer"); } } Он это не прикрутит) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
artMazanaka 66 Опубликовано 26 августа, 2015 (изменено) ((( Изменено 26 августа, 2015 пользователем mazanaka Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 26 августа, 2015 Line: -1 - Column: -1 Traceback (innermost last): (no code object) at line 0 SyntaxError: ('invalid syntax', ('__init__.py', 5, 1, '/**')) Ну да, яву подгрузить из питона? в папке /data/scripts/custom создай папку killer и создай там файл killer.java, затем вставь туда мой скрипт и запускай сервер. 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
artMazanaka 66 Опубликовано 26 августа, 2015 (изменено) Ну да, яву подгрузить из питона? в папке /data/scripts/custom создай папку killer и создай там файл killer.java, затем вставь туда мой скрипт и запускай сервер. голова не варит) сделал уже, спасибо Изменено 26 августа, 2015 пользователем mazanaka Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sniper 47 Опубликовано 26 августа, 2015 как успехи? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Restart 317 Опубликовано 26 августа, 2015 (изменено) Рассмотрим квест альянс варки и кетры, специально попробовал пройти Квест Alliance with Ketra Orcs (Союз с Орками Кетра) и вот что имеем: Выдано: Mark of Ketra's Alliance - Level 5 (V Символ Союза с Кетра). (квестовая вещь) Мобы в Кетре не трогают, хоть и задавал значение agro 500 Перемещаюсь в Варку, мобы агрятся почти сразу (по дефу 150 agro стояло) Что нужно: укоротить квест до минимума, также возможно Марку переместить из квестовых в простые. Задать ид других нпс на квест. Проверял на сборке pw-soft. Игрок прилетает в локацию без предмета, его убивает этот НПС. (Нет марки,квест не пройден)Игрок прилетает в локацию с предметом, его не убивает этот НПС.(Есть марка, квест пройден) Минус в том что это квестом идет, а не просто итем-нпс. Хотя по мне так даже лучше, Изменено 26 августа, 2015 пользователем Restart Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
artMazanaka 66 Опубликовано 26 августа, 2015 Рассмотрим квест альянс варки и кетры, специально попробовал пройти Квест Alliance with Ketra Orcs (Союз с Орками Кетра) и вот что имеем: Выдано: Mark of Ketra's Alliance - Level 5 (V Символ Союза с Кетра). (квестовая вещь) Мобы в Кетре не трогают, хоть и задавал значение agro 500 Перемещаюсь в Варку, мобы агрятся почти сразу (по дефу 150 agro стояло) Что нужно: укоротить квест до минимума, также возможно Марку переместить из квестовых в простые. Задать ид других нпс на квест. Проверял на сборке pw-soft. Игрок прилетает в локацию без предмета, его убивает этот НПС. (Нет марки,квест не пройден) Игрок прилетает в локацию с предметом, его не убивает этот НПС.(Есть марка, квест пройден) Минус в том что это квестом идет, а не просто итем-нпс. Хотя по мне так даже лучше, Спасибо, но уже сделал. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
artMazanaka 66 Опубликовано 26 августа, 2015 Ну да, яву подгрузить из питона? в папке /data/scripts/custom создай папку killer и создай там файл killer.java, затем вставь туда мой скрипт и запускай сервер. Все работает Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Blueeyer 66 Опубликовано 26 августа, 2015 (изменено) Кароче, если так и не сделал, то вот рабочий набросок: package custom.killer; import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.model.quest.Quest; /** * * @author calypso * */ public class killer extends Quest { private final static int[] npcIds = { 27232, 27233 }; // ид нпц-киллеров private int PASS = 4037; // итем, наличие которого необходимо чтобы остаться в живых private int MIN = 1; // минимальное кол-во итемов public killer(int questId, String name, String descr) { super(questId, name, descr); for (int npcs : npcIds) addAggroRangeEnterId(npcs); } @Override public String onAggroRangeEnter(L2NpcInstance npc, L2PcInstance player, boolean isPet) { if (player.getInventory().getItemByItemId(PASS) == null || player.getInventory().getItemByItemId(PASS).getCount() < MIN) { if(player.getAppearance().isInvisible()) player.getAppearance().setVisible(); player.doDie(npc); } return super.onAggroRangeEnter(npc, player, isPet); } public static void main(String[] args) { new killer(-1, "killer", "custom.killer"); } } В вашем коде в одном из сценариев может возникнуть исключение и скрипт полетит. Если мы будем обращаться к методу объекта, который указывает на null (если, конечно, getItemByItemId вообще может вернуть null). Кстати, одна из самых распространенных ошибок программистов. NullPointerException ) Поэтому, я бы написал так: @Override public String onAggroRangeEnter(L2NpcInstance npc, L2PcInstance player, boolean isPet) { if (player.getInventory().getItemByItemId(PASS) == null) // You can't call an instance method with a null pointer, so let's divide all for few statements and this'll be our first statement killPlayer(player, npc); // So, if item just don't exist else if (player.getInventory().getItemByItemId(PASS).getCount() < MIN) // We'll check this only if such item exist killPlayer(player, npc); return super.onAggroRangeEnter(npc, player, isPet); } private static void killPlayer(L2PcInstance player, L2NpcInstance npc) { if(player.getAppearance().isInvisible()) player.getAppearance().setVisible(); player.doDie(npc); } Изменено 26 августа, 2015 пользователем Blueeyer Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
◄√i®uS► 1222 Опубликовано 26 августа, 2015 С функционалом что вам необходим конечно же, нет. Все что можно будет реализовать без сурса это сделать НПС киллера, который будет убивать игрока в радиусе видимости а как же ваше мастерство? если вы утверждали что такое нельзя будет сделать без исходного кода... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 26 августа, 2015 В вашем коде в одном из сценариев может возникнуть исключение и скрипт полетит. Если мы будем обращаться к методу объекта, который указывает на null (если, конечно, getItemByItemId вообще может вернуть null). Кстати, одна из самых распространенных ошибок программистов. NullPointerException ) Поэтому, я бы написал так: @Override public String onAggroRangeEnter(L2NpcInstance npc, L2PcInstance player, boolean isPet) { if (player.getInventory().getItemByItemId(PASS) == null) // You can't call an instance method with a null pointer, so let's divide all for few statements and this'll be our first statement killPlayer(player, npc); // So, if item just don't exist else if (player.getInventory().getItemByItemId(PASS).getCount() < MIN) // We'll check this only if such item exist killPlayer(player, npc); return super.onAggroRangeEnter(npc, player, isPet); } private static void killPlayer(L2PcInstance player, L2NpcInstance npc) { if(player.getAppearance().isInvisible()) player.getAppearance().setVisible(); player.doDie(npc); } НПЕ не будет. Да и вообще я же указал: Кароче, если так и не сделал, то вот рабочий набросок: И в чем разница между предоставленным вами кодом и моим, в добавлении англоязычных комментов? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Blueeyer 66 Опубликовано 26 августа, 2015 (изменено) НПЕ не будет. Да и вообще я же указал: И в чем разница между предоставленным вами кодом и моим, в добавлении англоязычных комментов? у вас в if'e два условия, одно из которых звучит так: player.getInventory().getItemByItemId(PASS) == null тогда, исходя из этого, если getItemByItemId выдаст null, то как вы можете обратиться к его методу, если он не статический, все в том же ифе? player.getInventory().getItemByItemId(PASS).getCount() < MIN В данном случае, если getItemByItemId == null интерпретатор в любом случае заметит во втором условии, принадлежащем тому же if'у, что вы обращаетесь к методу пустого элемента и тогда выдаст NullPointerException. И, поверьте, я не пытаюсь придраться к коду, все написано довольно не плохо, однако подобная вещь может создать сбои в работе Изменено 26 августа, 2015 пользователем Blueeyer Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 26 августа, 2015 а как же ваше мастерство? если вы утверждали что такое нельзя будет сделать без исходного кода... Вот на таких мелочах и видно мастерство=) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты