Logo

Спонсори

Перейти до змісту
Granddat

event name="Elpies

Рекомендовані повідомлення

Привет народ. Давно интересует меня такая вот тема. Запустить эвенты автоматически.Они то работают от админа. ТО что тут написано в 16-50 не работает.

<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/events.xsd">
    <event name="Elpies" class="org.l2jmobius.gameserver.instancemanager.events.ElpiesManager">
        <scheduler>
            <!-- Schedule every day at 16:50 -->
            <schedule name="start" hour="16" minute="50">
                <event name="#startEvent" />
            </schedule>

            <!-- Attach condition to reset if server boots up after start and hasn't reset yet -->
            <conditionalSchedule>
                <run name="start" if="HASNT_RUN" />
            </conditionalSchedule>
        </scheduler>
    </event>
</list>

Думаю что надо править в скриптах/Custom.

/*
 * This file is part of the L2J Mobius project.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package custom.events.Elpies;

import java.util.concurrent.ScheduledFuture;

import org.l2jmobius.Config;
import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.datatables.SpawnTable;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.EventMonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Event;
import org.l2jmobius.gameserver.util.Broadcast;

public class Elpies extends Event
{
    // NPC
    private static final int ELPY = 900100;
    // Amount of Elpies to spawn when the event starts
    private static final int ELPY_AMOUNT = 100;
    // Event duration in minutes
    private static final int EVENT_DURATION_MINUTES = 2;
    // @formatter:off
    private static final int[][] DROPLIST_CONSUMABLES =
    {
        // itemId, chance, min amount, max amount
        {  1540, 80, 10, 15 },    // Quick Healing Potion
        {  1538, 60,  5, 10 },    // Blessed Scroll of Escape
        {  3936, 40,  5, 10 },    // Blessed Scroll of Ressurection
        {  6387, 25,  5, 10 },    // Blessed Scroll of Ressurection Pets
        { 22025, 15,  5, 10 },    // Powerful Healing Potion
        {  6622, 10,  1, 1 },    // Giant's Codex
        { 20034,  5,  1, 1 },    // Revita Pop
        { 20004,  1,  1, 1 },    // Energy Ginseng
        { 20004,  0,  1, 1 }    // Energy Ginseng
    };
    
    private static final int[][] DROPLIST_CRYSTALS =
    {
        { 1458, 80, 50, 100 },    // Crystal D-Grade
        { 1459, 60, 40,  80 },    // Crystal C-Grade
        { 1460, 40, 30,  60 },    // Crystal B-Grade
        { 1461, 20, 20,  30 },    // Crystal A-Grade
        { 1462,  0, 10,  20 }    // Crystal S-Grade
    };
    // @formatter:on
    // Non-final variables
    private static boolean EVENT_ACTIVE = false;
    private static int CURRENT_ELPY_COUNT = 0;
    private ScheduledFuture<?> _eventTask = null;
    
    private Elpies()
    {
        addSpawnId(ELPY);
        addKillId(ELPY);
    }
    
    @Override
    public boolean eventBypass(PlayerInstance player, String bypass)
    {
        return false;
    }
    
    @Override
    public boolean eventStart(PlayerInstance eventMaker)
    {
        if (EVENT_ACTIVE)
        {
            return false;
        }
        
        // Check Custom Table - we use custom NPCs
        if (!Config.CUSTOM_NPC_DATA)
        {
            LOGGER.info(getName() + ": Event can't be started because custom NPC table is disabled!");
            eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
            return false;
        }
        
        EVENT_ACTIVE = true;
        
        final EventLocation[] locations = EventLocation.values();
        final EventLocation randomLoc = locations[getRandom(locations.length)];
        
        CURRENT_ELPY_COUNT = 0;
        final long despawnDelay = EVENT_DURATION_MINUTES * 60000;
        
        for (int i = 0; i < ELPY_AMOUNT; i++)
        {
            addSpawn(ELPY, randomLoc.getRandomX(), randomLoc.getRandomY(), randomLoc.getZ(), 0, true, despawnDelay);
            CURRENT_ELPY_COUNT++;
        }
        
        Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
        Broadcast.toAllOnlinePlayers("Elpy invasion in " + randomLoc.getName());
        Broadcast.toAllOnlinePlayers("Help us exterminate them!");
        Broadcast.toAllOnlinePlayers("You have " + EVENT_DURATION_MINUTES + " minutes!");
        
        _eventTask = ThreadPool.schedule(() ->
        {
            Broadcast.toAllOnlinePlayers("Time is up!");
            eventStop();
        }, despawnDelay);
        return true;
    }
    
    @Override
    public boolean eventStop()
    {
        if (!EVENT_ACTIVE)
        {
            return false;
        }
        
        EVENT_ACTIVE = false;
        
        if (_eventTask != null)
        {
            _eventTask.cancel(true);
            _eventTask = null;
        }
        
        for (Spawn spawn : SpawnTable.getInstance().getSpawns(ELPY))
        {
            final Npc npc = spawn.getLastSpawn();
            if (npc != null)
            {
                npc.deleteMe();
            }
        }
        
        Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
        Broadcast.toAllOnlinePlayers("Elpy Event finished!");
        return true;
    }
    
    @Override
    public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
    {
        if (EVENT_ACTIVE)
        {
            dropItem(npc, killer, DROPLIST_CONSUMABLES);
            dropItem(npc, killer, DROPLIST_CRYSTALS);
            CURRENT_ELPY_COUNT--;
            
            if (CURRENT_ELPY_COUNT <= 0)
            {
                Broadcast.toAllOnlinePlayers("All elpies have been killed!");
                eventStop();
            }
        }
        
        return super.onKill(npc, killer, isSummon);
    }
    
    @Override
    public String onSpawn(Npc npc)
    {
        ((EventMonsterInstance) npc).eventSetDropOnGround(true);
        ((EventMonsterInstance) npc).eventSetBlockOffensiveSkills(true);
        return super.onSpawn(npc);
    }
    
    private enum EventLocation
    {
        ADEN("Aden", 146558, 148341, 26622, 28560, -2200),
        DION("Dion", 18564, 19200, 144377, 145782, -3081),
        GLUDIN("Gludin", -84040, -81420, 150257, 151175, -3125),
        HV("Hunters Village", 116094, 117141, 75776, 77072, -2700),
        OREN("Oren", 82048, 82940, 53240, 54126, -1490);
        
        private final String _name;
        private final int _minX;
        private final int _maxX;
        private final int _minY;
        private final int _maxY;
        private final int _z;
        
        EventLocation(String name, int minX, int maxX, int minY, int maxY, int z)
        {
            _name = name;
            _minX = minX;
            _maxX = maxX;
            _minY = minY;
            _maxY = maxY;
            _z = z;
        }
        
        public String getName()
        {
            return _name;
        }
        
        public int getRandomX()
        {
            return getRandom(_minX, _maxX);
        }
        
        public int getRandomY()
        {
            return getRandom(_minY, _maxY);
        }
        
        public int getZ()
        {
            return _z;
        }
    }
    
    private void dropItem(Npc mob, PlayerInstance player, int[][] droplist)
    {
        final int chance = getRandom(100);
        
        for (int[] drop : droplist)
        {
            if (chance >= drop[1])
            {
                mob.dropItem(player, drop[0], getRandom(drop[2], drop[3]));
                break;
            }
        }
    }
    
    public static void main(String[] args)
    {
        new Elpies();
    }
}
 

Вот и хотелось бы услышать мнение знатоков.Что тут можно редактировать и как. Если можно поделитесь опытом. Думаю что это будет интересно всем форумчанам.

Поділитись повідомленням


Посилання на повідомлення

Здравствуйте.

Функция public boolean eventStart(PlayerInstance eventMaker) стартует ивент.

Уточните, пожалуйста, какие проблемы с ивентом у вас возникли?

Поділитись повідомленням


Посилання на повідомлення

Этот ивент начиная с Хелиоса имеется на всех серверах Гк и тд. Он запускается только с админ панели. Видел на сервере у Матея этот ивент стартовал через каждый час. Не думаю что Матей сидел сутками на сервере и запускал его в ручную).Вот это меня и интересует.

Поділитись повідомленням


Посилання на повідомлення
17 минут назад, Granddat сказал:

Этот ивент начиная с Хелиоса имеется на всех серверах Гк и тд. Он запускается только с админ панели. Видел на сервере у Матея этот ивент стартовал через каждый час. Не думаю что Матей сидел сутками на сервере и запускал его в ручную).Вот это меня и интересует.

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

Поділитись повідомленням


Посилання на повідомлення

Я в Helios смотрел файлы присутствуют, нужно запускать сервер и смотреть

Поділитись повідомленням


Посилання на повідомлення

Приєднуйтесь до обговорення

Ви можете написати зараз та зареєструватися пізніше. Якщо у вас є обліковий запис, авторизуйтесь, щоб опублікувати від імені свого облікового запису.

Гость
Відповісти в цій темі...

×   Вставлено із форматуванням.   Вставити як звичайний текст

  Дозволено використовувати не більше 75 емодзі.

×   Ваше посилання було автоматично вбудоване.   Відображати як звичайне посилання

×   Ваш попередній контент було відновлено.   Очистити редактор

×   Ви не можете вставляти зображення безпосередньо. Завантажуйте або вставляйте зображення за посиланням.

×
×
  • Створити...