Авто деспаун НПС?

virusiz

Vagabond
Customer
Подскажите плз есть ai или параметр для деспавна нпс через время
например:
<set name="lifeTime" value="300" /> -не работает
 
Подскажите плз есть ai или параметр для деспавна нпс через время
например:
<set name="lifeTime" value="300" /> -не работает
Читайте гайд по скиллам, lifetime — время жизни слуги
 
Читайте гайд по скиллам, lifetime — время жизни слуги
И что такому дохрена "умному" человеку сложно было ткнуть пальцем куда смотреть ? Вроде как это и спросил а не то что lifetime это время слуги ! Там кстати для особо одорённых есть слово "например:" как пример что надо от непися и что не работает-(кстати для особо одорённых тоже написано)
 
привет, вроде из коробки не было, по крайне мере в прошлом году мы через ext делали рб которые пропадали через минуту после своего появления если их не убивали
 
привет, вроде из коробки не было, по крайне мере в прошлом году мы через ext делали рб которые пропадали через минуту после своего появления если их не убивали
через что деспавнили в ext? deleteMe() , decayMe() ?
 
Если кому вдруг понадобится

Всё работает в данном случае 30секунд спаун можете поменять на любой другой.
У НПС прописываете:
<set name="ai_type" value="DespawnAI" />

JavaScript:
package l2.gameserver.ai;

import l2.gameserver.ai.DefaultAI;
import l2.gameserver.model.instances.NpcInstance;
import l2.gameserver.ThreadPoolManager;

public class DespawnAI extends DefaultAI {
    public DespawnAI(NpcInstance actor) {
        super(actor);
    }

    @Override
    protected void onEvtSpawn() {
        super.onEvtSpawn();
        
        ThreadPoolManager.getInstance().schedule(new Runnable() {
            @Override
            public void run() {
                NpcInstance actor = getActor();
                if (actor != null) {
                    actor.deleteMe();
                }
            }
        }, 30000L);  //Spawn time
    }
}
 
Вы как их - извращуги! У нас уже есть система которая все это делает. Переключение зон, активация и деактивация спауна и так далее. Но нет! Вы бежите делать народное творчество - это то хоть безобидное. Но в большинстве ии мрак, вам сложно уделить 15 мин почитав гайды.
 
Last edited:
Вы как их - извращуги! У нас уже есть система которая все это делает. Переключение зон, активация и деактивация спауна и так далее. Но нет! Вы бежите делать народное творчество - это то хоть безобидное. Но в большинстве ии мрак, вам сложно уделить 15 мин почитав гайды.
Ну мне это было хорошо потуму как надо было ещё реализовать автоматическую раздачу премиума окружающим без лишних байпасов.
 
Ну мне это было хорошо потуму как надо было ещё реализовать автоматическую раздачу премиума окружающим без лишних байпасов.
если Аишка моба после смерти спаунит нпц который деспаунится через время, то да, в таком случаи лучше делать так. Но опять же есть рейд который раздает па всем участникам после смерти.
 
если Аишка моба после смерти спаунит нпц который деспаунится через время, то да, в таком случаи лучше делать так. Но опять же есть рейд который раздает па всем участникам после смерти.
угу после сервер босса спавнится нпс и раздаёт всем вокруг итемку. В моём случае на активацию према.

вдруг кому пригодится;
JavaScript:
package l2.gameserver.ai;

import l2.gameserver.model.Player;
import l2.gameserver.model.World;
import l2.gameserver.model.instances.NpcInstance;
import l2.gameserver.ThreadPoolManager;
import l2.gameserver.utils.ItemFunctions;

public class DespawnAI extends DefaultAI {
    
    private static final int ITEM_ID = 9999;  //Item ID
    private static final long ITEM_COUNT = 1; //count

    public DespawnAI(NpcInstance actor) {
        super(actor);
    }

    @Override
    protected void onEvtSpawn() {
        super.onEvtSpawn();
        
        final NpcInstance actor = getActor();
        if (actor == null) return;

        for (Player player : World.getAroundPlayers(actor, 900, 900)) {  //reward radius
            giveReward(player);
        }

        ThreadPoolManager.getInstance().schedule(new Runnable() {
            @Override
            public void run() {
                if (actor != null) actor.deleteMe();
            }
        }, 600000L); //NPC despawn time
    }

    @Override
    protected void onEvtArrived() {
        super.onEvtArrived();
        
        NpcInstance actor = getActor();
        if (actor == null) return;

        for (Player player : World.getAroundPlayers(actor, 900, 900)) {  //scan radius
            giveReward(player);
        }
    }

    private void giveReward(Player player) {
        if (player == null) return;

        String var = player.getVar("ServerBossDailyReward");
        long lastTime = (var == null || var.isEmpty()) ? 0 : Long.parseLong(var);
        long currentTime = System.currentTimeMillis();
        
        if (currentTime - lastTime < 660000L) { //reward limit time
            return;
        }

        ItemFunctions.addItem(player, ITEM_ID, ITEM_COUNT, true);
        player.setVar("ServerBossDailyReward", String.valueOf(currentTime), -1);
        player.sendMessage("Congratulations! You have received your reward.");
    }
}
 
Back
Top