Karimdjanov95 10 Опубликовано 1 сентября, 2018 Доброе утро уважаемые пользователи форума. Вот уже какой месяц ломаю голову, над решением этого скрипта. Есть скрипт телепорта всей группы в случайному РБ. Хочу-же сделать, чтобы он телепортировал к случайно живому РБ. Как-то поднимал тему на форуме, но тему удалили из-за неправильного названия. Вот кусок телепорта: int driftx; int drifty; Location loc = null; driftx = Rnd.get(-30, 30); drifty = Rnd.get(-30, 30); switch(Rnd.get(1,3)) { case 1: loc = new Location(147662 + driftx, -73761 + drifty, -4364); break; case 2: loc = new Location(146102 + driftx, -81981 + drifty, -5464); break; case 3: loc = new Location(145509 + driftx, -85176 + drifty, -6219); break; } for (L2PcInstance partymember : player.getParty().getPartyMembers()) { for (L2PcInstance mem : members) { mem.teleToLocation(loc, false); } } Буду очень признателен, за помощь! 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 1 сентября, 2018 в твоем скрипте забито 3 координаты в одну из которых он рандомно тпшит пати. Ну а что б сделать тп к рандомному живому рб надо написать новый скрипт, который будет чекать рб либо с базы если они в ней или же с xml если в нём, после дописать проверку живой ли рб, далее парсить координаты выбранного рандомно рб и тпшить пачку 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Karimdjanov95 10 Опубликовано 1 сентября, 2018 1 час назад, Solution сказал: в твоем скрипте забито 3 координаты в одну из которых он рандомно тпшит пати. Ну а что б сделать тп к рандомному живому рб надо написать новый скрипт, который будет чекать рб либо с базы если они в ней или же с xml если в нём, после дописать проверку живой ли рб, далее парсить координаты выбранного рандомно рб и тпшить пачку Теперь бы понять, как это сделать) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 1 сентября, 2018 Только что, Karimdjanov95 сказал: Теперь бы понять, как это сделать) без знаний языка на котором написана твоя сборка, не как Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Karimdjanov95 10 Опубликовано 1 сентября, 2018 Только что, Solution сказал: без знаний языка на котором написана твоя сборка, не как сурсы ит.су. Базовое знание явы имеется, но с этим скриптом я в тупике Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 1 сентября, 2018 если базовые знания есть то пойди легким но долгим путем юзни Pair<Integer, integer[]> где у тебя Integer - id рб, а Integer[] его координаты, вбей туда всех рб и радуйся. Первое что в голову пришло если не писать парсеры 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Evolution 243 Опубликовано 1 сентября, 2018 Спойлер package custom.RandomTeleportManager; import ru.catssoftware.gameserver.instancemanager.BossSpawnManager; import ru.catssoftware.gameserver.instancemanager.RaidBossSpawnManager; import ru.catssoftware.gameserver.model.Location; import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.model.quest.Quest; import ru.catssoftware.gameserver.model.quest.QuestState; import java.util.*; public class RandomTeleportManager extends Quest { private static String qn = "RandomTeleportManager"; private int driftx = ru.catssoftware.tools.random.Rnd.get(-30, 30); private int drifty = ru.catssoftware.tools.random.Rnd.get(-30, 30); private Map<Integer, Location> boss = new HashMap<Integer, Location>(){ { put(1010, new Location(147662, -73761, -4364)); //Id босса, его координаты для телепорта put(1010, new Location(146102, -81981, -5464)); //Id босса, его координаты для телепорта put(1010, new Location(145509, -85176, -6219)); //Id босса, его координаты для телепорта } }; //Id Npc private static int NPC_ID = 99994; public RandomTeleportManager() { super(-1, qn, "quests"); } @Override public String onFirstTalk(L2NpcInstance npc, L2PcInstance player) { return onTalk(npc, player); } @Override public String onTalk(L2NpcInstance npc, L2PcInstance player) { QuestState qs = player.getQuestState(qn); if (qs == null) { qs = newQuestState(player); } return "main.htm"; //Начальное Html окно } @Override public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player) { String[] arg = event.split(" "); switch (arg[0]) { case "teleport": List<Integer> keys = new ArrayList<>(boss.keySet()); int randomKey = keys.get(ru.catssoftware.tools.random.Rnd.nextInt(keys.size())); if(RaidBossSpawnManager.getInstance().getRaidBossStatusId(randomKey) == BossSpawnManager.StatusEnum.ALIVE){ Location location = new Location(boss.get(randomKey).getX() + driftx, boss.get(randomKey).getY() + drifty, boss.get(randomKey).getZ()); for (L2PcInstance mem : player.getParty().getPartyMembers()) { mem.teleToLocation(location, false); } } return null; } return ""; } public static void main(String[] args) { RandomTeleportManager ps = new RandomTeleportManager(); ps.addFirstTalkId(NPC_ID); // Мы не хотим писать диалог для этого НПЦ ps.addStartNpc(NPC_ID); // Автоматический контроль состояния квеста ps.addTalkId(NPC_ID); // NPC с которым можно говорить. } } Спойлер <html> <head> <title>Отправлю тебя к рандомному живому босику!</title> </head> <body> <center> <table> </table><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <table width=256 bgcolor="000000"><tr><td> <font color="ffe900"><center>Приветствую тебя!<br1> Щас тебя отправлю к</font><br1> <font color="19ff00"> РАНДОМНОМУ ДА ЕЩЕ и ЖИВОМУ</font><font color="ffe900">босику!<br1></font> </td></tr></table> <br> <img src="l2ui.squaregray" width="295" height="1"> <br> <center> <tr> </tr> <tr> <td> <button value="ЖмАк!" action="bypass -h Quest RandomTeleportManager teleport" width=135 height=21 back="L2UI_CH3.bigbutton3_down" fore="L2UI_CH3.bigbutton3"> </td> </tr> </center> <br> <img src="l2ui.squaregray" width="295" height="1"> </body> </html> 1. Создаешь папку RandomTeleportManager по пути data/scripts/custom 2. Создаешь файл RandomTeleportManager.java и добавляешь код из первого спойлера 3. Создаешь файл main.htm и вставляешь код из второго спойлера. 4. Короче добавляешь как обычный скрипт.... 5. Нпс обычного делаешь ID его указывается в первом спойлере (//Id Npc) 6. Я добавил твоих 3 боссов, последующих так же добавить Ctrl+C и Ctrl+V ток координаты на свои поменяй и id боссов впиши. P.s 7. Писал сейчас на скорую руку, если что-то не так будет или не запуститься напиши в личку исправлю. P.s скрипт написан под люцеру, итсу... 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Karimdjanov95 10 Опубликовано 1 сентября, 2018 Пробую оба варианта, как получится отпишу итоги, спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Karimdjanov95 10 Опубликовано 1 сентября, 2018 (изменено) Сделал через voice команду. private int driftx = ru.catssoftware.tools.random.Rnd.get(-30, 30); private int drifty = ru.catssoftware.tools.random.Rnd.get(-30, 30); @SuppressWarnings ("") private Map<Integer, Location> boss = new HashMap<Integer, Location>(){ { put(25302, new Location(147662, -73761, -4364)); //Id босса, его координаты для телепорта put(25305, new Location(146102, -81981, -5464)); //Id босса, его координаты для телепорта put(25029, new Location(145509, -85176, -6219)); //Id босса, его координаты для телепорта } }; List<Integer> keys = new ArrayList<>(boss.keySet()); int randomKey = keys.get(ru.catssoftware.tools.random.Rnd.nextInt(keys.size())); if(RaidBossSpawnManager.getInstance().getRaidBossStatusId(randomKey) == BossSpawnManager.StatusEnum.ALIVE){ player.sendMessage("[!] Вы телепортировали свою группу к случайному Рейд Боссу!"); Location location = new Location(boss.get(randomKey).getX() + driftx, boss.get(randomKey).getY() + drifty, boss.get(randomKey).getZ()); for (L2PcInstance mem : player.getParty().getPartyMembers()) { mem.teleToLocation(location, false); } } else { player.sendMessage("[!] В данный момент, живых Рейд Боссов нет. Ожидайте!"); } Всем спасибо за помощь! Изменено 1 сентября, 2018 пользователем Karimdjanov95 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Evolution 243 Опубликовано 1 сентября, 2018 1 час назад, Karimdjanov95 сказал: Сделал через voice команду. private int driftx = ru.catssoftware.tools.random.Rnd.get(-30, 30); private int drifty = ru.catssoftware.tools.random.Rnd.get(-30, 30); @SuppressWarnings ("") private Map<Integer, Location> boss = new HashMap<Integer, Location>(){ { put(25302, new Location(147662, -73761, -4364)); //Id босса, его координаты для телепорта put(25305, new Location(146102, -81981, -5464)); //Id босса, его координаты для телепорта put(25029, new Location(145509, -85176, -6219)); //Id босса, его координаты для телепорта } }; List<Integer> keys = new ArrayList<>(boss.keySet()); int randomKey = keys.get(ru.catssoftware.tools.random.Rnd.nextInt(keys.size())); if(RaidBossSpawnManager.getInstance().getRaidBossStatusId(randomKey) == BossSpawnManager.StatusEnum.ALIVE){ player.sendMessage("[!] Вы телепортировали свою группу к случайному Рейд Боссу!"); Location location = new Location(boss.get(randomKey).getX() + driftx, boss.get(randomKey).getY() + drifty, boss.get(randomKey).getZ()); for (L2PcInstance mem : player.getParty().getPartyMembers()) { mem.teleToLocation(location, false); } } else { player.sendMessage("[!] В данный момент, живых Рейд Боссов нет. Ожидайте!"); } Всем спасибо за помощь! Не за что, обращайся. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 4 сентября, 2018 (изменено) Мусье знают толк в извращениях... Что мешает по необходимости брать список всех боссов из менеджера спавнов, отфильтровывать из него живых в данный момент, далее рандомно брать одного босса из полученного списка, брать из его свойств текущие координаты и делать телепорт рядом с ним? Изменено 4 сентября, 2018 пользователем Gaikotsu 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Evolution 243 Опубликовано 4 сентября, 2018 (изменено) 33 минуты назад, Gaikotsu сказал: Мусье знают толк в извращениях... Что мешает по необходимости брать список всех боссов из менеджера спавнов, отфильтровывать из него живых в данный момент, далее рандомно брать одного босса из полученного списка, брать из его свойств текущие координаты и делать телепорт рядом с ним? А ты знаешь гляжу =)) Изменено 4 сентября, 2018 пользователем Evolution Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Karimdjanov95 10 Опубликовано 4 сентября, 2018 1 час назад, Gaikotsu сказал: Мусье знают толк в извращениях... Извращенство), главное работает Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
PointerRage 132 Опубликовано 4 сентября, 2018 3 часа назад, Gaikotsu сказал: Мусье знают толк в извращениях... Что мешает по необходимости брать список всех боссов из менеджера спавнов, отфильтровывать из него живых в данный момент, далее рандомно брать одного босса из полученного списка, брать из его свойств текущие координаты и делать телепорт рядом с ним? Не мешай, тут люди грин рубят на уникально-легендарных возвращениях легенд. 5 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 5 сентября, 2018 а HashMap и ArrayList разве потокобезопасные? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 5 сентября, 2018 14 часов назад, Evolution сказал: А ты знаешь гляжу =)) Ну это уж точно логичней и проще, чем заниматься бредом в виде явного перечисления в скрипте координат кучи боссов. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 5 сентября, 2018 2 часа назад, gawric сказал: а HashMap и ArrayList разве потокобезопасные? А какая разница, если из них один фиг чисто читают. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 5 сентября, 2018 4 часа назад, Gaikotsu сказал: А какая разница, если из них один фиг чисто читают. ну это явно не конечный продукт. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты