Jump to content
Granddat

event name="Elpies

Recommended Posts

Привет народ. Давно интересует меня такая вот тема. Запустить эвенты автоматически.Они то работают от админа. ТО что тут написано в 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();
    }
}
 

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

Share this post


Link to post
Реклама

Так может кто сказать где запустить этот эвент програмно??????????

Share this post


Link to post

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

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

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

Share this post


Link to post

Может просто нужно было запустить ивент 😂

Share this post


Link to post

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

Share this post


Link to post
17 минут назад, Granddat сказал:

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

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

  • Подобається 1

Share this post


Link to post

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

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...