Работа скрипта

Статус
В этой теме нельзя размещать новые ответы.

crossover

Последний из атеистов
VIP
Победитель в номинации 2023
Сообщения
835
Розыгрыши
0
Решения
3
Репутация
127
Реакции
363
Баллы
823
Хроники
  1. Interlude
Сборка
Pain team
Добрый вечер народ, есть небольшое не понимание того как работает скрипт, а точнее при убийстве заданного в скрипте рейд босса и при соблюдении условий, добившему человеку/пати дается нублес.
Хоть убейте нечего в скрипте не вижу связанного с нублом)
Код:
package services;

import java.util.Calendar;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

import l2p.commons.util.Rnd;
import l2p.gameserver.Announcements;
import l2p.gameserver.ThreadPoolManager;
import l2p.gameserver.instancemanager.ServerVariables;
import l2p.gameserver.listener.actor.OnDeathListener;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.instances.L2MonsterInstance;
import l2p.gameserver.scripts.Functions;
import l2p.gameserver.scripts.ScriptFile;
import l2p.gameserver.tables.NpcTable;
import l2p.gameserver.templates.L2NpcTemplate;
import l2p.gameserver.utils.Location;
import l2p.gameserver.utils.TimeUtils;
import l2p.gameserver.utils.Util;


public class RaidRespawnAnnounce extends Functions implements ScriptFile
{
    // ид босса
    private final static int BOSS_ID = 90064;
    // время спавна
    private final static String TIME = "22:30";
    // разброс в минутах
    private final static int RANDOM_RESP = 29;
    // количество дней до возрождения
    private final static int DAYS = 1;
    // координаты
    private final static String LOCATION = "85576,256968,-11664";
    // за сколько минут до появления анонсировать
    private static final int ANN_MINS = 30;
    // отправлять анонс о убийстве босса
    private static final boolean WMSG = true;


    private static ScheduledFuture<?> spTask;
    private static final long ANN_DELAY = ANN_MINS * 60000L;
    private static RespawnPoint RESPAWN_POINT;
    public static class RespawnPoint
    {
        public int hour;
        public int minute;
        public Location loc;

        public RespawnPoint(int hour, int minute, Location loc)
        {
            this.hour = hour;
            this.minute = minute;
            this.loc = loc;
        }
    }

    private static void calcNextRespawn(boolean first)
    {
        long next = 0;
        if(first)
        {
            long resp = ServerVariables.getLong("Respawn_"+BOSS_ID, 0);
            if(resp < System.currentTimeMillis())
                next = 1000;
            else
                next = resp - System.currentTimeMillis();
        }
        else
        {
            int time = (int) getNextRespawn(RESPAWN_POINT.hour, RESPAWN_POINT.minute);
            int minus = (int) TimeUnit.MINUTES.toSeconds(RANDOM_RESP);
            int plus = (int) TimeUnit.MINUTES.toSeconds(RANDOM_RESP);
            next = TimeUnit.SECONDS.toMillis(Rnd.get(time - minus, time + plus));
        }

        try
        {
            if(spTask != null)
                spTask.cancel(false);
        }
        catch(Exception e)
        {}
        spTask = ThreadPoolManager.getInstance().schedule(new SpawnTask(), next);
        _log.info("RaidRespawnAnnounce ["+BOSS_ID+"]: " + TimeUtils.toSimpleFormat(System.currentTimeMillis() + next));
        if(ANN_MINS > 0 && (next - ANN_DELAY) > 0)
            ThreadPoolManager.getInstance().schedule(new Runnable()
            {
                @Override
                public void run()
                {
                    L2NpcTemplate template = NpcTable.getTemplate(BOSS_ID);
                    if(template == null)
                        return;
                    Announcements.getInstance().announceToAll("Через "+ANN_MINS+" "+Util.minuteFormat(true, String.valueOf(ANN_MINS))+" Босс "+template.name+" появится в мире Аден");
                }
            }, next - ANN_DELAY);
        if(!first)
            ServerVariables.set("Respawn_"+BOSS_ID, System.currentTimeMillis() + next);
    }

    private static long getNextRespawn(int hour, int minute)
    {
        Calendar result = Calendar.getInstance();
        result.add(Calendar.DAY_OF_YEAR, DAYS);
        result.set(Calendar.HOUR_OF_DAY, hour);
        result.set(Calendar.MINUTE, minute);
        result.set(Calendar.SECOND, 1);

        long next_respawn = result.getTimeInMillis() - System.currentTimeMillis();
        if(next_respawn < 0)
            next_respawn += TimeUnit.DAYS.toMillis(1);

        return TimeUnit.MILLISECONDS.toSeconds(next_respawn);
    }

    public static class SpawnTask implements Runnable
    {
        @Override
        public void run()
        {
            try
            {
                L2MonsterInstance npc = (L2MonsterInstance) NpcTable.getTemplate(BOSS_ID).getNewInstance();
                npc.addListener(_listener);
                npc.setHeading(Rnd.get(0xFFFF));
                npc.setSpawnedLoc(RESPAWN_POINT.loc);
                npc.onSpawn();
                npc.spawnMe(npc.getSpawnedLoc());
            }
            catch(Exception e)
            {
                _log.error("RaidRespawnAnnounce: can't spawn boss: "+BOSS_ID, e);
            }
        }
    }

    private static final OnDeathListener _listener = new ListenerImpl();

    private static final class ListenerImpl implements OnDeathListener
    {
        @Override
        public void onDeath(L2Character actor, L2Character killer)
        {
            calcNextRespawn(false);
            if(WMSG)
            {
                if(killer != null)
                {
                    L2Player player = killer.getPlayer();
                    if(player != null)
                    {
                        Announcements.getInstance().announceToAll("Игрок " + player.getName() + " нанес последний удар по " + actor.getName() + "!");
                        return;
                    }
                }
                Announcements.getInstance().announceToAll(actor.getName() + " повержен!");
            }
        }
    }

    @Override
    public void onLoad()
    {
        String[] time = TIME.split(":");
        String[] loc = LOCATION.split(",");
        RESPAWN_POINT = new RespawnPoint(Integer.parseInt(time[0]), Integer.parseInt(time[1]), new Location(Integer.parseInt(loc[0]), Integer.parseInt(loc[1]), Integer.parseInt(loc[2])));
        calcNextRespawn(true);
    }

    @Override
    public void onReload()
    {}

    @Override
    public void onShutdown()
    {}
}
 
Добрый вечер народ, есть небольшое не понимание того как работает скрипт, а точнее при убийстве заданного в скрипте рейд босса и при соблюдении условий, добившему человеку/пати дается нублес.
Хоть убейте нечего в скрипте не вижу связанного с нублом)
Код:
package services;

import java.util.Calendar;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

import l2p.commons.util.Rnd;
import l2p.gameserver.Announcements;
import l2p.gameserver.ThreadPoolManager;
import l2p.gameserver.instancemanager.ServerVariables;
import l2p.gameserver.listener.actor.OnDeathListener;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.instances.L2MonsterInstance;
import l2p.gameserver.scripts.Functions;
import l2p.gameserver.scripts.ScriptFile;
import l2p.gameserver.tables.NpcTable;
import l2p.gameserver.templates.L2NpcTemplate;
import l2p.gameserver.utils.Location;
import l2p.gameserver.utils.TimeUtils;
import l2p.gameserver.utils.Util;


public class RaidRespawnAnnounce extends Functions implements ScriptFile
{
    // ид босса
    private final static int BOSS_ID = 90064;
    // время спавна
    private final static String TIME = "22:30";
    // разброс в минутах
    private final static int RANDOM_RESP = 29;
    // количество дней до возрождения
    private final static int DAYS = 1;
    // координаты
    private final static String LOCATION = "85576,256968,-11664";
    // за сколько минут до появления анонсировать
    private static final int ANN_MINS = 30;
    // отправлять анонс о убийстве босса
    private static final boolean WMSG = true;


    private static ScheduledFuture<?> spTask;
    private static final long ANN_DELAY = ANN_MINS * 60000L;
    private static RespawnPoint RESPAWN_POINT;
    public static class RespawnPoint
    {
        public int hour;
        public int minute;
        public Location loc;

        public RespawnPoint(int hour, int minute, Location loc)
        {
            this.hour = hour;
            this.minute = minute;
            this.loc = loc;
        }
    }

    private static void calcNextRespawn(boolean first)
    {
        long next = 0;
        if(first)
        {
            long resp = ServerVariables.getLong("Respawn_"+BOSS_ID, 0);
            if(resp < System.currentTimeMillis())
                next = 1000;
            else
                next = resp - System.currentTimeMillis();
        }
        else
        {
            int time = (int) getNextRespawn(RESPAWN_POINT.hour, RESPAWN_POINT.minute);
            int minus = (int) TimeUnit.MINUTES.toSeconds(RANDOM_RESP);
            int plus = (int) TimeUnit.MINUTES.toSeconds(RANDOM_RESP);
            next = TimeUnit.SECONDS.toMillis(Rnd.get(time - minus, time + plus));
        }

        try
        {
            if(spTask != null)
                spTask.cancel(false);
        }
        catch(Exception e)
        {}
        spTask = ThreadPoolManager.getInstance().schedule(new SpawnTask(), next);
        _log.info("RaidRespawnAnnounce ["+BOSS_ID+"]: " + TimeUtils.toSimpleFormat(System.currentTimeMillis() + next));
        if(ANN_MINS > 0 && (next - ANN_DELAY) > 0)
            ThreadPoolManager.getInstance().schedule(new Runnable()
            {
                @Override
                public void run()
                {
                    L2NpcTemplate template = NpcTable.getTemplate(BOSS_ID);
                    if(template == null)
                        return;
                    Announcements.getInstance().announceToAll("Через "+ANN_MINS+" "+Util.minuteFormat(true, String.valueOf(ANN_MINS))+" Босс "+template.name+" появится в мире Аден");
                }
            }, next - ANN_DELAY);
        if(!first)
            ServerVariables.set("Respawn_"+BOSS_ID, System.currentTimeMillis() + next);
    }

    private static long getNextRespawn(int hour, int minute)
    {
        Calendar result = Calendar.getInstance();
        result.add(Calendar.DAY_OF_YEAR, DAYS);
        result.set(Calendar.HOUR_OF_DAY, hour);
        result.set(Calendar.MINUTE, minute);
        result.set(Calendar.SECOND, 1);

        long next_respawn = result.getTimeInMillis() - System.currentTimeMillis();
        if(next_respawn < 0)
            next_respawn += TimeUnit.DAYS.toMillis(1);

        return TimeUnit.MILLISECONDS.toSeconds(next_respawn);
    }

    public static class SpawnTask implements Runnable
    {
        @Override
        public void run()
        {
            try
            {
                L2MonsterInstance npc = (L2MonsterInstance) NpcTable.getTemplate(BOSS_ID).getNewInstance();
                npc.addListener(_listener);
                npc.setHeading(Rnd.get(0xFFFF));
                npc.setSpawnedLoc(RESPAWN_POINT.loc);
                npc.onSpawn();
                npc.spawnMe(npc.getSpawnedLoc());
            }
            catch(Exception e)
            {
                _log.error("RaidRespawnAnnounce: can't spawn boss: "+BOSS_ID, e);
            }
        }
    }

    private static final OnDeathListener _listener = new ListenerImpl();

    private static final class ListenerImpl implements OnDeathListener
    {
        @Override
        public void onDeath(L2Character actor, L2Character killer)
        {
            calcNextRespawn(false);
            if(WMSG)
            {
                if(killer != null)
                {
                    L2Player player = killer.getPlayer();
                    if(player != null)
                    {
                        Announcements.getInstance().announceToAll("Игрок " + player.getName() + " нанес последний удар по " + actor.getName() + "!");
                        return;
                    }
                }
                Announcements.getInstance().announceToAll(actor.getName() + " повержен!");
            }
        }
    }

    @Override
    public void onLoad()
    {
        String[] time = TIME.split(":");
        String[] loc = LOCATION.split(",");
        RESPAWN_POINT = new RespawnPoint(Integer.parseInt(time[0]), Integer.parseInt(time[1]), new Location(Integer.parseInt(loc[0]), Integer.parseInt(loc[1]), Integer.parseInt(loc[2])));
        calcNextRespawn(true);
    }

    @Override
    public void onReload()
    {}

    @Override
    public void onShutdown()
    {}
}
смотри ай рб скоре всего там привязка или делали общий при убиства рб выдавать нубл
 
Тут нету про выдачу нубла в скрипте.

HeroAndNoblessRewarder смотри тип кому присваевается
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу