Jump to content

Recommended Posts

Posted

Hey there.

 

This is a boss engine i created long ago, cause i always found every boss/grand boss engine difficult/weird to use. It's really easy to use. The code may be weird because i remember to be experimenting on stuff when creating this. Also, i know it could have been done in a better way(with saving each boss data and other stuff). Coded on aCis, can't remember revision.

 

There are also some boss examples i used.

 

 

/*
* 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 net.sf.l2j.gameserver.customs.custombosses;

import java.util.ArrayList;
import java.util.List;

import net.sf.l2j.gameserver.ThreadPoolManager;

/**
* @author Anarchy
*
*/
public class CustomBossManager
{
    private List<CustomBoss> _customBosses;
    
    public static CustomBossManager getInstance()
    {
        return SingletonHolder._instance;
    }
    
    protected CustomBossManager()
    {
        _customBosses = new ArrayList<>();
        
        _customBosses.add(new ForestGodBoss());
        
        initBosses();
        
        System.out.println("CustomBossesManager: Loaded "+_customBosses.size()+" custom bosses.");
    }
    
    private void initBosses()
    {
        for (final CustomBoss cb : _customBosses)
        {
            int respawnHours = Integer.parseInt(cb.getRespawnTime().split(":")[0]);
            int respawnMinutes = Integer.parseInt(cb.getRespawnTime().split(":")[1]);
            
            int totalMinutes = (respawnHours * 60) + respawnMinutes;
            
            long respawnMillis = totalMinutes * 1000 * 60;
            
            ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable()
            {
                @Override
                public void run()
                {
                    cb.doSpawn();
                }
            }, respawnMillis/2, respawnMillis);
        }
    }
    
    public CustomBoss getCustomBoss(int id)
    {
        CustomBoss temp = null;
        
        for (CustomBoss cb : _customBosses)
        {
            if (cb.getNpcId() == id)
            {
                temp = cb;
                break;
            }
        }
        
        return temp;
    }
    
    private static class SingletonHolder
    {
        protected static final CustomBossManager _instance = new CustomBossManager();
    }
}

 

 

/*
* 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 net.sf.l2j.gameserver.customs.custombosses;

import net.sf.l2j.gameserver.Announcements;
import net.sf.l2j.gameserver.datatables.NpcTable;
import net.sf.l2j.gameserver.datatables.SpawnTable;
import net.sf.l2j.gameserver.model.L2Spawn;
import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;

/**
* @author Anarchy
*
*/
public abstract class CustomBoss
{
    private L2Spawn _lastSpawn = null;
    
    public void delete()
    {
        if (_lastSpawn == null)
        {
            return;
        }
        
        _lastSpawn.getLastSpawn().deleteMe();
        _lastSpawn.stopRespawn();
        SpawnTable.getInstance().deleteSpawn(_lastSpawn, false);
        
        _lastSpawn = null;
        
        Announcements.announceToAll("Custom Boss "+getName()+" has been killed!");
    }
    
    public void doSpawn()
    {
        if (_lastSpawn != null)
        {
            return;
        }
        
        L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(getNpcId());
        try
        {
            L2Spawn spawn = new L2Spawn(tmpl);
spawn.setLocx(getLocation()[0]);
spawn.setLocy(getLocation()[1]);
spawn.setLocz(getLocation()[2]);
spawn.setHeading(0);
spawn.setRespawnDelay(100);
SpawnTable.getInstance().addNewSpawn(spawn, false);
spawn.init();

_lastSpawn = spawn;
onSpawn();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            System.out.println("Failed to spawn boss "+getName()+" with id "+getNpcId()+".");
        }
    }
    
    protected void onSpawn()
    {
        Announcements.announceToAll("Custom Boss "+getName()+" was spawned in the world!");
    }
    
    public abstract int[] getLocation();
    public abstract int getNpcId();
    public abstract String getName();
    public abstract String getRespawnTime();
}

 

 

/*
* 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 net.sf.l2j.gameserver.customs.custombosses;

/**
* @author Anarchy
*
*/
public class ForestGodBoss extends CustomBoss
{
    @Override
    public int[] getLocation()
    {
        return new int[] { 172830, -87707, -5108 };
    }
    
    @Override
    public int getNpcId()
    {
        return 65533;
    }

    @Override
    public String getName()
    {
        return "Forest God";
    }

    @Override
    public String getRespawnTime()
    {
        return "1:00";
    }
}

 

 

In L2MonsterInstance under doDie() method, add this check:

 

        if (isCustomBoss())
        {
            CustomBossManager.getInstance().getCustomBoss(getNpcId()).delete();
        }

 

and this method:

 

    public boolean isCustomBoss()
    {
        return CustomBossManager.getInstance().getCustomBoss(getNpcId()) != null;
    }

 

Also register the CustomBossManager in Gameserver.java.

 

How to use it:

Simple, create a normal monster with super stats and super drops, make a new class that extends CustomBoss, add it's data there, register it to CustomBossManager and you're done. The bosses must be type L2Monster in order to work properly.

 

About this ForestGod i won't share the npc data just make new ones.

 

HF.

  • 4 months later...
Posted (edited)

You can explain a little bit more

 make a new class that extends CustomBoss, add it's data there, register it to CustomBossManager and you're done

 

plz make example

Edited by pske
  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

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.



  • Posts

    • 166 pisses on their heads any day of the week though
    • Thnx for share, i can't pm u for password  
    • I'm looking for the best current files that are up to date for the year 2025, not files that are stuck in 2020.
    • EXOPLANET 2.0     GRAND OPENING 09.05.2025 We are thrilled to announce the upcoming launch of a brand new server. This isn’t just a copy of the previous server – it’s the next step in the development of Exoplanet. Based on our past experience, we’re bringing you a server that is faster, more stable, and more fun than ever before.     GRAND OPENING:  09.05.2025 at 20:00 GMT+1 BETA TEST:   04.05.2025    Client: High Five Rates: x10   Website: https://l2exoplanet.net Facebook: https://www.facebook.com/L2-Exoplanet-106811564103836 Discord: https://discord.gg/4fzhW7ZSPc         Game Rates    Experience: x10  Skill Points: x10  Adena: x8  Drop: x8  Spoil: x8  Quest: x5  Raid Boss Drop: x5  Fame: x2  Epaulette: x8  Manor: x8      Safe Enchant: +3  Maximum Enchant: +16  Normal Scroll Chance: 60%  Blessed Scroll Chance: 63%  Attribute Stone Chance: 50%  Attribute Crystal Chance: 30%      Game Settings    Multibox - 3 game clients per HWID  Autoloot  Autolearn Skills Auto Farm  NPC Buffer   Buff Slots (24+4/12)  Buff Duration (2h)  Olympiad Period 7days (new heroes appear every monday)  Seven Signs Period  Class Transfer for Adena  Max Sub-Class 3  Sub-Class Max Level 85  Essence Interface  Champions System  Vote Reward System  Dayli Reward System  PC Points Reward (500PC = 1 Donate Coin)      Epic Bosses Respawn Times     Queen Ant:  24 Hours +/- 4 Hours   Beleth: 3 Days +/- 8 Hours   Baium: 3 Days +/- 8 Hours   Antharas: 4 Days +/- 8 Hours   Valakas:  5 Days +/- 8 Hours     Instance Info     Normal Freya = 6 Players   Hard Freya = 12 Players   Frintezza = 6 Players   Zaken 83 Day = 6 Players   Zaken 60 Day = 6 Players   Zaken Nightly = 9 Players   Tiat = 6 Players   Beleth = 12 Players
    • EXOPLANET 2.0     GRAND OPENING 09.05.2025 We are thrilled to announce the upcoming launch of a brand new server. This isn’t just a copy of the previous server – it’s the next step in the development of Exoplanet. Based on our past experience, we’re bringing you a server that is faster, more stable, and more fun than ever before.     GRAND OPENING:  09.05.2025 at 20:00 GMT+1 BETA TEST:   04.05.2025    Client: High Five Rates: x10   Website: https://l2exoplanet.net Facebook: https://www.facebook.com/L2-Exoplanet-106811564103836 Discord: https://discord.gg/4fzhW7ZSPc         Game Rates    Experience: x10  Skill Points: x10  Adena: x8  Drop: x8  Spoil: x8  Quest: x5  Raid Boss Drop: x5  Fame: x2  Epaulette: x8  Manor: x8      Safe Enchant: +3  Maximum Enchant: +16  Normal Scroll Chance: 60%  Blessed Scroll Chance: 63%  Attribute Stone Chance: 50%  Attribute Crystal Chance: 30%      Game Settings    Multibox - 3 game clients per HWID  Autoloot  Autolearn Skills Auto Farm  NPC Buffer   Buff Slots (24+4/12)  Buff Duration (2h)  Olympiad Period 7days (new heroes appear every monday)  Seven Signs Period  Class Transfer for Adena  Max Sub-Class 3  Sub-Class Max Level 85  Essence Interface  Champions System  Vote Reward System  Dayli Reward System  PC Points Reward (500PC = 1 Donate Coin)      Epic Bosses Respawn Times     Queen Ant:  24 Hours +/- 4 Hours   Beleth: 3 Days +/- 8 Hours   Baium: 3 Days +/- 8 Hours   Antharas: 4 Days +/- 8 Hours   Valakas:  5 Days +/- 8 Hours     Instance Info     Normal Freya = 6 Players   Hard Freya = 12 Players   Frintezza = 6 Players   Zaken 83 Day = 6 Players   Zaken 60 Day = 6 Players   Zaken Nightly = 9 Players   Tiat = 6 Players   Beleth = 12 Players      
  • Topics

×
×
  • Create New...