Changeset 1006
Author: ATracer
(2010/02/08 23:30) About 2 years ago
- Experimental instance support for Ascension quest. Now every player should get own instance for passing this quest. Later will be added instance support for other zones. Was tested with 2 players only. - Removed channels from Verteron and Altgard. It's up to PS admin to configure number of channels.
playerToMove.getController().teleportTo(playerDestination.getWorldId(), playerDestination.getInstanceId(), playerDestination.getX(), playerDestination.getY(), playerDestination.getZ(), playerDestination.getHeading(), 0);playerToMove.getController().teleportTo(admin.getWorldId(), admin.getInstanceId(), admin.getX(), admin.getY(), admin.getZ(), admin.getHeading(), 0);admin.getController().teleportTo(player.getWorldId(), player.getInstanceId(), player.getX(), player.getY(), player.getZ(), player.getHeading(), 0);{{private int activePlayerId = 0;//TODO [ATracer] - do we really need activePlayer ids in script body ???private List<Npc> mobs = new ArrayList<Npc>();private Map<Integer, Integer> activePlayers = new HashMap<Integer, Integer>();private Map<Integer, List<Npc>> mobs = new HashMap<Integer, List<Npc>>();{{{{{{if(mobs.contains(env.getVisibleObject()))removeMobToInstance(instanceId, (Npc) env.getVisibleObject());mobs.remove(env.getVisibleObject());{{Monster mob = (Monster) QuestEngine.getInstance().addNewSpawn(310010000, instanceId, 211043, (float) 226.7,mobs.add(mob);addMobToInstance(instanceId, mob);{{player.getController().teleportTo(310010000, 52, 174, 229, 0);int newInstanceId = player.getPosition().getWorld().getNextAvailableInstanceId(310010000);player.getController().teleportTo(310010000, newInstanceId, 52, 174, 229, 0);{{if(activePlayerId != 0 && activePlayerId != player.getObjectId())if(activePlayers.get(instanceId) != null && activePlayers.get(instanceId) != player.getObjectId()){{Player activePlayer = world.findPlayer(activePlayerId);Player activePlayer = world.findPlayer(activePlayers.get(instanceId));activePlayerId = player.getObjectId();activePlayers.put(instanceId, player.getObjectId());for(Npc mob : mobs)clearMobsInInstance(instanceId);{mob.getController().onDelete();}mobs.clear();{{mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(310010000, 211042,addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(310010000, instanceId, 211042,mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(310010000, 211042,addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(310010000, instanceId, 211042,mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(310010000, 211042,addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(310010000, instanceId, 211042,mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(310010000, 211042,addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(310010000, instanceId, 211042,for(Npc mob : mobs)List<Npc> monsters = mobs.get(instanceId);for(Npc mob : monsters){{{{{{{{if(activePlayerId == player.getObjectId() && player.getWorldId() == 310010000)if(activePlayers.get(instanceId) != null&& activePlayers.get(instanceId)== player.getObjectId()&& player.getWorldId() == 310010000){{mobs.add((Npc) QuestEngine.getInstance().addNewSpawn(310010000, 790001, (float) 220.6, (float) 247.8,addMobToInstance(instanceId, (Npc) QuestEngine.getInstance().addNewSpawn(310010000, instanceId, 790001, (float) 220.6, (float) 247.8,{{{{{{{{private int activePlayerId = 0;//TODO [ATracer] - do we really need activePlayer ids in script body ???private List<Npc> mobs = new ArrayList<Npc>();private Map<Integer, Integer> activePlayers = new HashMap<Integer, Integer>();private Map<Integer, List<Npc>> mobs = new HashMap<Integer, List<Npc>>();{{{{if(mobs.contains(env.getVisibleObject()))removeMobToInstance(instanceId, (Npc) env.getVisibleObject());;mobs.remove(env.getVisibleObject());{{Monster mob = (Monster) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 205041, 301f,mobs.add(mob);addMobToInstance(instanceId, mob);{{player.getController().teleportTo(320010000, 457.65f, 426.8f, 230.4f, 0);int newInstanceId = player.getPosition().getWorld().getNextAvailableInstanceId(320010000);player.getController().teleportTo(320010000, newInstanceId, 457.65f, 426.8f, 230.4f, 0);{{if(activePlayerId != 0 && activePlayerId != player.getObjectId())if(activePlayers.get(instanceId) != null && activePlayers.get(instanceId) != player.getObjectId()){{Player activePlayer = world.findPlayer(activePlayerId);Player activePlayer = world.findPlayer(activePlayers.get(instanceId));activePlayerId = player.getObjectId();activePlayers.put(instanceId, player.getObjectId());for(Npc mob : mobs)clearMobsInInstance(instanceId);mob.getController().onDelete();mobs.clear();{{mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(320010000, 205040,addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 205040,mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(320010000, 205040,addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 205040,mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(320010000, 205040,addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 205040,mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(320010000, 205040,addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 205040,for(Npc mob : mobs)List<Npc> monsters = mobs.get(instanceId);for(Npc mob : monsters){{{{{{{{if(activePlayerId == player.getObjectId() && player.getWorldId() == 320010000)if(activePlayers.get(instanceId) != null&& activePlayers.get(instanceId)== player.getObjectId()&& player.getWorldId() == 320010000){{mobs.add((Npc) QuestEngine.getInstance().addNewSpawn(320010000, 203550, 301.92999f, 274.26001f, 205.7f, (byte) 0, false));addMobToInstance(instanceId, (Npc) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 203550, 301.92999f, 274.26001f, 205.7f, (byte) 0, false));{{{{{{<map id="210030000" name="Verteron" max_user="200" twin_count="2" /><map id="220030000" name="Altgard" max_user="200" twin_count="2"/><map id="310010000" twin_count="2" name="IDAbProL1" /><map id="320010000" twin_count="2" name="IDAbProD1" />* Teleport Creature to the location using current heading and instanceId{{return teleportTo(worldId, x, y, z, getOwner().getHeading(), delay);int instanceId = 1;if(getOwner().getWorldId() == worldId){instanceId = getOwner().getInstanceId();}return teleportTo(worldId, instanceId, x, y, z, delay);{public boolean teleportTo(int worldId, int instanceId, float x, float y, float z, byte heading, int delay){{{{if (monster == null || monster.getLifeStats().isAlreadyDead() || !monster.isSpawned())public boolean teleportTo(final int worldId, final int instanceId, final float x,{{world.setPosition(player, worldId, instanceId, x, y, z, heading);public VisibleObject addNewSpawn(int worldId, int instanceId, int templateId, float x, float y, float z, byte heading, boolean respawn){{SpawnTemplate spawn = spawnEngine.addNewSpawn(worldId, 1, templateId, x, y, z, heading, 0, 0, respawn);SpawnTemplate spawn = spawnEngine.addNewSpawn(worldId, instanceId, templateId, x, y, z, heading, 0, 0, respawn);return spawnEngine.spawnObject(spawn, 1);return spawnEngine.spawnObject(spawn, instanceId);private void spawnInstance(int worldId, int instanceIndex)/**** @param worldId* @param instanceIndex*/public void spawnInstance(int worldId, int instanceIndex){{{{{{{throw new WorldMapNotExistException("Map: " + id + " not exist!");throw new WorldMapNotExistException("Map: " + id + " not exist!");{{{int instanceIndex = 1;int instanceId = 1;{{instanceIndex = object.getInstanceId();instanceId = object.getInstanceId();this.setPosition(object, mapId, instanceIndex, x, y, z, heading);this.setPosition(object, mapId, instanceId, x, y, z, heading);{{{{log.info("Creating new instance: " + worldMapTemplate.getMapId() + " " + nextInstanceId );/**** @return*/public WorldMapInstance getNextFreeInstance(){//TODOif(worldMapTemplate.getTwinCount() !=0){for(WorldMapInstance instance : instances.values()){if(instance.getCurrentPlayerCount() == 0)return instance;}}return null;}{{{