An4rchy
Legendary Member
-
Joined
-
Last visited
-
Currently
Viewing Topic: L2J Projects: No source is a dead-end -
Trader rating
100%
Everything posted by An4rchy
- [L2J] L2 Scenario
-
Easy Boss Engine
Actually i'm playing a lot of LoL these days, but i like to remember the old times occasionally :)
-
Easy Boss Engine
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.
-
League Of Legends Random Topic!
I see.. I had like 50 summoners on v in my league, while on iv there are like 18-20 :D
-
League Of Legends Random Topic!
Anyone else here found eune gold v kinda difficult to pass? Just asking cause i was stuck there for 1 month till yesterday.. and it was weird.
-
The Tomorrow People
Not bad, seen up to episode 3. Do they release new episodes every week?
-
//watchclan 'name'
Bump.
- Client <---> Server Synchronization!
-
//watchclan 'name'
Bump. Price reduced to 3 euros.
-
//watchclan 'name'
- //watchclan 'name'
- [L2J] Lineage 2 Anma - Opening Date: 30/10/2013
- //watchclan 'name'
Bump.- Ανέκδοτα
Akouste ena arketa kameno: Pos legete o pethamenos pou den exei thaftei? Pe.- //watchclan 'name'
Bump.- //watchclan 'name'
Bump.- //watchclan 'name'
Bump.- //watchclan 'name'
Bump.- //watchclan 'name'
One copy sold to iAndre. Trusted.- //watchclan 'name'
Bump.- //watchclan 'name'
Bump.- //watchclan 'name'
Thank you. What do you mean in a siege? This is just to watch other clan's chat if you are a gm. It cannot be used by normal players.- Interlude Custom Features (For Acis Project)
- Interlude Custom Features (For Acis Project)
- //watchclan 'name'
Hello everyone. This is a new admin command i made, //watchclan 'name' command. Using this command you can specify a clan that you wish to view their full clan (@) conversation. In order to stop viewing a clan's conversation type //stopwatch. This is coded on aCis, but since it's only an AdminCommandHandler i guess it can be used for other packs too. If not i can help you adapt it. Price: 3 euros. Payment method: PayPal. Pm me here. - //watchclan 'name'
Important Information
This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..