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

Телепорт к живому РБ

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

Доброе утро уважаемые пользователи форума. Вот уже какой месяц ломаю голову, над решением этого скрипта.

Есть скрипт телепорта всей группы в случайному РБ. Хочу-же сделать, чтобы он телепортировал к случайно живому РБ.

Как-то поднимал тему на форуме, но тему удалили из-за неправильного названия.

 

Вот кусок телепорта: 

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);
	}
}

Буду очень признателен, за помощь!

  • Upvote 1

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


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

в твоем скрипте забито 3 координаты  в одну из которых он  рандомно тпшит пати.
Ну а что б сделать тп к  рандомному живому рб надо написать новый скрипт, который будет чекать рб либо с базы если они в ней или же с xml если в нём, после дописать проверку живой ли рб, далее парсить координаты выбранного рандомно рб  и тпшить пачку

  • Like 1

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


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Solution сказал:

в твоем скрипте забито 3 координаты  в одну из которых он  рандомно тпшит пати.
Ну а что б сделать тп к  рандомному живому рб надо написать новый скрипт, который будет чекать рб либо с базы если они в ней или же с xml если в нём, после дописать проверку живой ли рб, далее парсить координаты выбранного рандомно рб  и тпшить пачку

Теперь бы понять, как это сделать)

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


Ссылка на сообщение
Поделиться на другие сайты
Только что, Karimdjanov95 сказал:

Теперь бы понять, как это сделать)

без знаний языка на котором написана твоя сборка, не как

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


Ссылка на сообщение
Поделиться на другие сайты
Только что, Solution сказал:

без знаний языка на котором написана твоя сборка, не как

сурсы ит.су. Базовое знание явы имеется, но с этим скриптом я в тупике

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


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

если базовые знания есть то пойди легким но долгим путем юзни Pair<Integer, integer[]> где у тебя Integer - id рб, а Integer[] его координаты, вбей туда всех рб и радуйся. Первое что в голову пришло если не писать парсеры

  • Upvote 1

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


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

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 скрипт написан под люцеру, итсу...

  • Upvote 1

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


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

Сделал через 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("[!] В данный момент, живых Рейд Боссов нет. Ожидайте!");
}

Всем спасибо за помощь!

Изменено пользователем Karimdjanov95

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


Ссылка на сообщение
Поделиться на другие сайты
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
  • Like 1

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


Ссылка на сообщение
Поделиться на другие сайты
33 минуты назад, Gaikotsu сказал:

Мусье знают толк в извращениях...

Что мешает по необходимости брать список всех боссов из менеджера спавнов, отфильтровывать из него живых в данный момент, далее рандомно брать одного босса из полученного списка, брать из его свойств текущие координаты и делать телепорт  рядом с ним?

А ты знаешь гляжу =))

Изменено пользователем Evolution

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


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Gaikotsu сказал:

Мусье знают толк в извращениях...

Извращенство), главное работает :D

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


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, Gaikotsu сказал:

Мусье знают толк в извращениях...

Что мешает по необходимости брать список всех боссов из менеджера спавнов, отфильтровывать из него живых в данный момент, далее рандомно брать одного босса из полученного списка, брать из его свойств текущие координаты и делать телепорт  рядом с ним?

Не мешай, тут люди грин рубят на уникально-легендарных возвращениях легенд.

production.jpg

  • Like 5

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


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

а HashMap и ArrayList разве потокобезопасные?

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


Ссылка на сообщение
Поделиться на другие сайты
14 часов назад, Evolution сказал:

А ты знаешь гляжу =))

Ну это уж точно логичней и проще, чем заниматься бредом в виде явного перечисления в скрипте координат кучи боссов.

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


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, gawric сказал:

а HashMap и ArrayList разве потокобезопасные?

А какая разница, если из них один фиг чисто читают.

  • Like 1

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


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, Gaikotsu сказал:

А какая разница, если из них один фиг чисто читают.

 ну это явно не конечный продукт. 

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


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

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

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

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

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

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

Войти

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

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

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

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

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