Fran-FX! Posted September 19, 2010 Posted September 19, 2010 hi people i need some help to create an instance. i try to made it taking the script of kamaloca and editing it but a lot of errors appear in the console :S i need a instance like this you talk with an npc and you enter to the instance with the party of 9 members. every 5 seconds 20 moobs appear around the map of the instance and the moobs will attack you and your party for 1 hour. is a instance to lvl up faster than go chimeras or go monastery. i need some help with the codes, thanx :D
0 mogo Posted September 20, 2010 Posted September 20, 2010 [...] i need some help with the codes, thanx :D Can we see what you have already made? We'll tell you whats wrong with your code. If you want whole job to be done for you, the marketplace is above.
0 Fran-FX! Posted September 20, 2010 Author Posted September 20, 2010 This is the code i edit it from kamaloca.java package instances.Mazmorra; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Map; import com.l2jserver.gameserver.ai.CtrlIntention; import com.l2jserver.gameserver.datatables.SkillTable; import com.l2jserver.gameserver.instancemanager.InstanceManager; import com.l2jserver.gameserver.instancemanager.InstanceManager.InstanceWorld; import com.l2jserver.gameserver.model.L2Effect; import com.l2jserver.gameserver.model.L2Object; import com.l2jserver.gameserver.model.L2Party; import com.l2jserver.gameserver.model.L2Skill; import com.l2jserver.gameserver.model.L2Spawn; import com.l2jserver.gameserver.model.L2World; import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.entity.Instance; import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import com.l2jserver.util.Rnd; public class Kamaloka extends Quest { private static String qn = "Mazmorra"; /* * Reset time for all kamaloka * Default: 6:30AM on server time */ private static final int RESET_HOUR = 6; private static final int RESET_MIN = 30; /* * Time after which instance without players will be destroyed * Default: 5 minutes */ private static final int EMPTY_DESTROY_TIME = 5; /* * Time to destroy instance (and eject players away) after boss defeat * Default: 5 minutes */ private static final int EXIT_TIME = 5; /* * Maximum level difference between players level and kamaloka level * Default: 5 */ private static final int MAX_LEVEL_DIFFERENCE = 5; /* * If true shaman in the first room will have same npcId as other mobs, making radar useless * Default: true (but not retail like) */ private static final boolean STEALTH_SHAMAN = true; /* * Hardcoded instance ids for kamaloka */ private static final int[] INSTANCE_IDS = { 120 }; /* * Level of the kamaloka */ private static final int[] LEVEL = { 84 }; /* * Duration of the instance, minutes */ private static final int[] DURATION = { 60 }; /* * Maximum party size for the instance */ private static final int[] MAX_PARTY_SIZE = { 9 }; /* * List of buffs NOT removed on enter from player and pet * On retail only newbie guide buffs not removed * CAUTION: array must be sorted in ascension order ! */ private static final int[] BUFFS_WHITELIST = { }; /* * Teleport points into instances * * x, y, z */ private static final int[][] TELEPORTS = { { -88429, -220629, -7903 }, }; /* * Respawn delay for the mobs in the first room, seconds * Default: 25 */ private static final int FIRST_ROOM_RESPAWN_DELAY = 5; /* * First room information, null if room not spawned * Skill is casted on the boss when shaman is defeated and mobs respawn stopped * Default: 5699 (decrease pdef) * * shaman npcId, minions npcId, skillId, skillLvl */ private static final int[][] FIRST_ROOM = { null, null, { 22485, 22486, 5699, 1 }, }; /* * First room spawns, null if room not spawned * * x, y, z */ private static final int[][][] FIRST_ROOM_SPAWNS = { null, null, { { -12381, -174973, -10955 }, { -12413, -174905, -10955 }, { -12377, -174838, -10953 }, { -12316, -174903, -10953 }, { -12326, -174786, -10953 }, { -12330, -175024, -10953 }, { -12211, -174900, -10955 }, { -12238, -174849, -10953 }, { -12233, -174954, -10953 } }, }; /* * Second room information, null if room not spawned * Skill is casted on the boss when all mobs are defeated * Default: 5700 (decrease mdef) * * npcId, skillId, skillLvl */ private static final int[][] SECOND_ROOM = { null, null, { 22487, 5700, 1 }, }; /* * Escape telepoters spawns, null if not spawned * * x, y, z */ private static final int[][] TELEPORTERS = { null, null, { -10865, -174905, -10944 }, }; /* * Escape teleporter npcId */ private static final int TELEPORTER = 32496; /* * Kamaloka captains (start npc's) npcIds. */ private static final int[] CAPTAINS = { 888555 }; private class KamaWorld extends InstanceWorld { public int index; // 0-17 index of the kama type in arrays public int shaman = 0; // objectId of the shaman public List<L2Spawn> firstRoom; // list of the spawns in the first room (excluding shaman) public KamaWorld() { InstanceManager.getInstance().super(); } } /** * Check if party with player as leader allowed to enter * * @param player party leader * @param index (0-17) index of the kamaloka in arrays * * @return true if party allowed to enter */ private static final boolean checkConditions(L2PcInstance player, int index) { final L2Party party = player.getParty(); // player must be in party if (party == null) { player.sendPacket(new SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER)); return false; } // ...and be party leader if (party.getLeader() != player) { player.sendPacket(new SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER)); return false; } // party must not exceed max size for selected instance if (party.getMemberCount() > MAX_PARTY_SIZE[index]) { player.sendPacket(new SystemMessage(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER)); return false; } // get level of the instance final int level = LEVEL[index]; // and client name final String instanceName = InstanceManager.getInstance().getInstanceIdName(INSTANCE_IDS[index]); Map<Integer, Long> instanceTimes; // for each party member for (L2PcInstance partyMember : party.getPartyMembers()) { // player level must be in range if (Math.abs(partyMember.getLevel() - level) > MAX_LEVEL_DIFFERENCE) { SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT); sm.addPcName(partyMember); player.sendPacket(sm); return false; } // player must be near party leader if (!partyMember.isInsideRadius(player, 1000, true, true)) { SystemMessage sm = new SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED); sm.addPcName(partyMember); player.sendPacket(sm); return false; } // get instances reenter times for player instanceTimes = InstanceManager.getInstance().getAllInstanceTimes(partyMember.getObjectId()); if (instanceTimes != null) { for (int id : instanceTimes.keySet()) { // find instance with same name (kamaloka or labyrinth) if (!instanceName.equals(InstanceManager.getInstance().getInstanceIdName(id))) continue; // if found instance still can't be reentered - exit if (System.currentTimeMillis() < instanceTimes.get(id)) { SystemMessage sm = new SystemMessage(SystemMessageId.C1_MAY_NOT_REENTER_YET); sm.addPcName(partyMember); player.sendPacket(sm); return false; } } } } return true; } /** * Removing all buffs from player and pet except BUFFS_WHITELIST * * @param ch player */ private static final void removeBuffs(L2Character ch) { for (L2Effect e : ch.getAllEffects()) { if (e == null) continue; L2Skill skill = e.getSkill(); if (skill.isDebuff() || skill.isStayAfterDeath()) continue; if (Arrays.binarySearch(BUFFS_WHITELIST, skill.getId()) >= 0) continue; e.exit(); } if (ch.getPet() != null) { for (L2Effect e : ch.getPet().getAllEffects()) { if (e == null) continue; L2Skill skill = e.getSkill(); if (skill.isDebuff() || skill.isStayAfterDeath()) continue; if (Arrays.binarySearch(BUFFS_WHITELIST, skill.getId()) >= 0) continue; e.exit(); } } } /** * Teleport player and pet to/from instance * * @param player * @param coords x,y,z * @param instanceId */ private static final void teleportPlayer(L2PcInstance player, int[] coords, int instanceId) { player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); player.setInstanceId(instanceId); player.teleToLocation(coords[0], coords[1], coords[2], true); } /** * Handling enter of the players into kamaloka * * @param player party leader * @param index (0-17) kamaloka index in arrays */ private final synchronized void enterInstance(L2PcInstance player, int index) { int templateId; try { templateId = INSTANCE_IDS[index]; } catch (ArrayIndexOutOfBoundsException e) { return; } // check for existing instances for this player InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player); // player already in the instance if (world != null) { // but not in kamaloka if (!(world instanceof KamaWorld) || world.templateId != templateId) { player.sendPacket(new SystemMessage(SystemMessageId.ALREADY_ENTERED_ANOTHER_INSTANCE_CANT_ENTER)); return; } // check for level difference again on reenter if (Math.abs(player.getLevel() - LEVEL[((KamaWorld)world).index]) > MAX_LEVEL_DIFFERENCE) { SystemMessage sm = new SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT); sm.addPcName(player); player.sendPacket(sm); return; } // check what instance still exist Instance inst = InstanceManager.getInstance().getInstance(world.instanceId); if (inst != null) { removeBuffs(player); teleportPlayer(player, TELEPORTS[index], world.instanceId); } return; } // Creating new kamaloka instance else { if (!checkConditions(player, index)) return; // Creating dynamic instance without template final int instanceId = InstanceManager.getInstance().createDynamicInstance(null); final Instance inst = InstanceManager.getInstance().getInstance(instanceId); // set name for the kamaloka inst.setName(InstanceManager.getInstance().getInstanceIdName(templateId)); // set return location final int[] returnLoc = { player.getX(), player.getY(), player.getZ() }; inst.setSpawnLoc(returnLoc); // disable summon friend into instance inst.setAllowSummon(false); // set duration and empty destroy time inst.setDuration(DURATION[index] * 60000); inst.setEmptyDestroyTime(EMPTY_DESTROY_TIME * 60000); // Creating new instanceWorld, using our instanceId and templateId world = new KamaWorld(); world.instanceId = instanceId; world.templateId = templateId; // set index for easy access to the arrays ((KamaWorld)world).index = index; InstanceManager.getInstance().addWorld(world); world.status = 0; // spawn npcs spawnKama((KamaWorld)world); // and finally teleport party into instance final L2Party party = player.getParty(); for (L2PcInstance partyMember : party.getPartyMembers()) { if (partyMember.getQuestState(qn) == null) newQuestState(partyMember); world.allowed.add(partyMember.getObjectId()); removeBuffs(partyMember); teleportPlayer(partyMember, TELEPORTS[index], instanceId); } return; } } /** * Called on instance finish and handles reenter time for instance * @param world instanceWorld */ private static final void finishInstance(InstanceWorld world) { if (world instanceof KamaWorld) { Calendar reenter = Calendar.getInstance(); reenter.set(Calendar.MINUTE, RESET_MIN); // if time is >= RESET_HOUR - roll to the next day if (reenter.get(Calendar.HOUR_OF_DAY) >= RESET_HOUR) reenter.add(Calendar.DATE, 1); reenter.set(Calendar.HOUR_OF_DAY, RESET_HOUR); SystemMessage sm = new SystemMessage(SystemMessageId.INSTANT_ZONE_RESTRICTED); sm.addString(InstanceManager.getInstance().getInstanceIdName(world.templateId)); // set instance reenter time for all allowed players for (int objectId : world.allowed) { L2Object obj = L2World.getInstance().findObject(objectId); if (obj instanceof L2PcInstance && ((L2PcInstance)obj).isOnline() > 0) { InstanceManager.getInstance().setInstanceTime(objectId, world.templateId, reenter.getTimeInMillis()); ((L2PcInstance)obj).sendPacket(sm); } } // destroy instance after EXIT_TIME Instance inst = InstanceManager.getInstance().getInstance(world.instanceId); inst.setDuration(EXIT_TIME * 60000); inst.setEmptyDestroyTime(0); } } /** * Spawn all NPCs in kamaloka * @param world instanceWorld */ @SuppressWarnings("all") private final void spawnKama(KamaWorld world) { int[] npcs; int[][] spawns; L2Npc npc; final int index = world.index; // first room npcs = FIRST_ROOM[index]; spawns = FIRST_ROOM_SPAWNS[index]; if (npcs != null) { world.firstRoom = new ArrayList<L2Spawn>(spawns.length - 1); int shaman = Rnd.get(spawns.length); // random position for shaman for (int i = 0; i < spawns.length; i++) { if (i == shaman) { // stealth shaman use same npcId as other mobs npc = addSpawn(STEALTH_SHAMAN ? npcs[1] : npcs[0], spawns[0], spawns[1], spawns[2], 0, false, 0, false, world.instanceId); world.shaman = npc.getObjectId(); } else { npc = addSpawn(npcs[1], spawns[0], spawns[1], spawns[2], 0, false, 0, false, world.instanceId); L2Spawn spawn = npc.getSpawn(); spawn.setRespawnDelay(FIRST_ROOM_RESPAWN_DELAY); spawn.setAmount(1); spawn.startRespawn(); world.firstRoom.add(spawn); //store mobs spawns } npc.setIsNoRndWalk(true); } } // escape teleporter if (TELEPORTERS[index] != null) addSpawn(TELEPORTER, TELEPORTERS[index][0], TELEPORTERS[index][1], TELEPORTERS[index][2], 0, false, 0, false, world.instanceId); } /** * Handles only player's enter, single parameter - integer kamaloka index */ @Override public final String onAdvEvent (String event, L2Npc npc, L2PcInstance player) { if (npc == null) return ""; try { enterInstance(player, Integer.parseInt(event)); } catch (Exception e) { } return ""; } /** * Talk with captains and using of the escape teleporter */ @Override public final String onTalk(L2Npc npc, L2PcInstance player) { QuestState st = player.getQuestState(qn); if (st == null) newQuestState(player); final int npcId = npc.getNpcId(); if (npcId == TELEPORTER) { final L2Party party = player.getParty(); // only party leader can talk with escape teleporter if (party != null && party.isLeader(player)) { final InstanceWorld world = InstanceManager.getInstance().getWorld(npc.getInstanceId()); if (world instanceof KamaWorld) { // party members must be in the instance if (world.allowed.contains(player.getObjectId())) { Instance inst = InstanceManager.getInstance().getInstance(world.instanceId); // teleports entire party away for (L2PcInstance partyMember : party.getPartyMembers()) if (partyMember != null && partyMember.getInstanceId() == world.instanceId) teleportPlayer(partyMember, inst.getSpawnLoc(), 0); } } } } else return npcId + ".htm"; return ""; } /** * Only escape teleporters first talk handled */ @Override public final String onFirstTalk (L2Npc npc, L2PcInstance player) { if (npc.getNpcId() == TELEPORTER) { if (player.isInParty() && player.getParty().isLeader(player)) return "32496.htm"; else return "32496-no.htm"; } return ""; } @Override public final String onKill(L2Npc npc, L2PcInstance player, boolean isPet) { final InstanceWorld tmpWorld = InstanceManager.getInstance().getWorld(npc.getInstanceId()); if (tmpWorld instanceof KamaWorld) { final KamaWorld world = (KamaWorld)tmpWorld; final int objectId = npc.getObjectId(); // first room was spawned ? if (world.firstRoom != null) { // is shaman killed ? if (world.shaman != 0 && world.shaman == objectId) { world.shaman = 0; // stop respawn of the minions for (L2Spawn spawn : world.firstRoom) { if (spawn != null) spawn.stopRespawn(); } world.firstRoom.clear(); world.firstRoom = null; if (world.boss != null) { final int skillId = FIRST_ROOM[world.index][2]; final int skillLvl = FIRST_ROOM[world.index][3]; if (skillId != 0 && skillLvl != 0) { final L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLvl); if (skill != null) skill.getEffects(world.boss, world.boss); } } return super.onKill(npc, player, isPet); } } public Kamaloka(int questId, String name, String descr) { super(questId, name, descr); addFirstTalkId(TELEPORTER); addTalkId(TELEPORTER); for (int cap : CAPTAINS) { addStartNpc(cap); addTalkId(cap); } for (int[] mob : FIRST_ROOM) //shaman if (mob != null) if (STEALTH_SHAMAN) addKillId(mob[1]); else addKillId(mob[0]); for (int[] mob : SECOND_ROOM) if (mob != null) addKillId(mob[0]); for (int[] mob : MINIBOSS) if (mob != null) addKillId(mob[0]); for (int[] mob : BOSS) addKillId(mob[0]); } public static void main(String[] args) { new Mazmorra(-1, qn, "instances"); } } i want only a room (first room) and in this room spawn 20 moobs every 5 seconds all around the center of the spawn locations of the players. i dont want a boss, only moobs. and, thanx :D
Question
Fran-FX!
hi people i need some help to create an instance.
i try to made it taking the script of kamaloca and editing it but a lot of errors appear in the console :S
i need a instance like this
you talk with an npc and you enter to the instance with the party of 9 members.
every 5 seconds 20 moobs appear around the map of the instance and the moobs will attack you and your party for 1 hour.
is a instance to lvl up faster than go chimeras or go monastery.
i need some help with the codes, thanx :D
3 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now