Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: data/scripts/instances/SeedOfDestruction/Stage1.java
- ===================================================================
- --- data/scripts/instances/SeedOfDestruction/Stage1.java (revision 5795)
- +++ data/scripts/instances/SeedOfDestruction/Stage1.java (working copy)
- @@ -20,6 +20,8 @@
- import java.util.Calendar;
- import java.util.List;
- import java.util.Map;
- +import java.util.concurrent.locks.Lock;
- +import java.util.concurrent.locks.ReentrantLock;
- import java.util.logging.Level;
- import javax.xml.parsers.DocumentBuilderFactory;
- @@ -75,6 +77,7 @@
- {
- public Map<L2Npc,Boolean> npcList = new FastMap<L2Npc,Boolean>();
- public int deviceSpawnedMobCount = 0;
- + public Lock lock = new ReentrantLock();
- public SOD1World()
- {
- @@ -472,74 +475,96 @@
- private void spawnFlaggedNPCs(SOD1World world, int flag)
- {
- - for(SODSpawn spw : _spawnList.get(flag))
- + if (world.lock.tryLock())
- {
- - if (spw.isZone)
- + try
- {
- - for(int i = 0; i < spw.count; i++)
- + for(SODSpawn spw : _spawnList.get(flag))
- {
- - if (_spawnZoneList.contains(spw.zone))
- + if (spw.isZone)
- {
- - int[] point = _spawnZoneList.get(spw.zone).getRandomPoint();
- - spawn(world, spw.npcId, point[0], point[1], GeoData.getInstance().getSpawnHeight(point[0], point[1], point[2], point[3],0), Rnd.get(65535), spw.isNeededNextFlag);
- + for(int i = 0; i < spw.count; i++)
- + {
- + if (_spawnZoneList.contains(spw.zone))
- + {
- + int[] point = _spawnZoneList.get(spw.zone).getRandomPoint();
- + spawn(world, spw.npcId, point[0], point[1], GeoData.getInstance().getSpawnHeight(point[0], point[1], point[2], point[3],0), Rnd.get(65535), spw.isNeededNextFlag);
- + }
- + else
- + _log.info("[Seed of Destruction] Missing zone: " + spw.zone);
- + }
- }
- else
- - _log.info("[Seed of Destruction] Missing zone: " + spw.zone);
- + spawn(world, spw.npcId, spw.x, spw.y, spw.z, spw.h, spw.isNeededNextFlag);
- }
- }
- - else
- - spawn(world, spw.npcId, spw.x, spw.y, spw.z, spw.h, spw.isNeededNextFlag);
- + finally
- + {
- + world.lock.unlock();
- + }
- }
- }
- - protected void spawnState(SOD1World world)
- + protected boolean spawnState(SOD1World world)
- {
- - world.npcList.clear();
- - switch(world.status)
- + if (world.lock.tryLock())
- {
- - case 0:
- - spawnFlaggedNPCs(world, 0);
- - break;
- - case 1:
- - ExShowScreenMessage message1 = new ExShowScreenMessage(1,0,5,0,1,0,0,false,10000,1,"The enemies have attacked. Everyone come out and fight!!!! ... Urgh~!");
- - sendScreenMessage(world, message1);
- - for(int i : ENTRANCE_ROOM_DOORS)
- - openDoor(i,world.instanceId);
- - spawnFlaggedNPCs(world, 1);
- - break;
- - case 2:
- - case 3:
- - // handled elsewhere
- - return;
- - case 4:
- - ExShowScreenMessage message2 = new ExShowScreenMessage(1,0,5,0,1,0,0,false,10000,1,"Obelisk has collapsed. Don't let the enemies jump around wildly anymore!!!!");
- - sendScreenMessage(world, message2);
- - for(int i : SQUARE_DOORS)
- - openDoor(i,world.instanceId);
- - spawnFlaggedNPCs(world, 4);
- - break;
- - case 5:
- - openDoor(SCOUTPASS_DOOR,world.instanceId);
- - spawnFlaggedNPCs(world, 3);
- - spawnFlaggedNPCs(world, 5);
- - break;
- - case 6:
- - openDoor(THRONE_DOOR,world.instanceId);
- - break;
- - case 7:
- - spawnFlaggedNPCs(world, 7);
- - return;
- - case 8:
- - ExShowScreenMessage message4 = new ExShowScreenMessage(1,0,5,0,1,0,0,false,10000,1,"Come out, warriors. Protect Seed of Destruction");
- - sendScreenMessage(world, message4);
- - world.deviceSpawnedMobCount = 0;
- - spawnFlaggedNPCs(world, 8);
- - break;
- - case 9:
- - // instance end
- - break;
- + try
- + {
- + world.npcList.clear();
- + switch(world.status)
- + {
- + case 0:
- + spawnFlaggedNPCs(world, 0);
- + break;
- + case 1:
- + ExShowScreenMessage message1 = new ExShowScreenMessage(1,0,5,0,1,0,0,false,10000,1,"The enemies have attacked. Everyone come out and fight!!!! ... Urgh~!");
- + sendScreenMessage(world, message1);
- + for(int i : ENTRANCE_ROOM_DOORS)
- + openDoor(i,world.instanceId);
- + spawnFlaggedNPCs(world, 1);
- + break;
- + case 2:
- + case 3:
- + // handled elsewhere
- + return true;
- + case 4:
- + ExShowScreenMessage message2 = new ExShowScreenMessage(1,0,5,0,1,0,0,false,10000,1,"Obelisk has collapsed. Don't let the enemies jump around wildly anymore!!!!");
- + sendScreenMessage(world, message2);
- + for(int i : SQUARE_DOORS)
- + openDoor(i,world.instanceId);
- + spawnFlaggedNPCs(world, 4);
- + break;
- + case 5:
- + openDoor(SCOUTPASS_DOOR,world.instanceId);
- + spawnFlaggedNPCs(world, 3);
- + spawnFlaggedNPCs(world, 5);
- + break;
- + case 6:
- + openDoor(THRONE_DOOR,world.instanceId);
- + break;
- + case 7:
- + spawnFlaggedNPCs(world, 7);
- + return true;
- + case 8:
- + ExShowScreenMessage message4 = new ExShowScreenMessage(1,0,5,0,1,0,0,false,10000,1,"Come out, warriors. Protect Seed of Destruction");
- + sendScreenMessage(world, message4);
- + world.deviceSpawnedMobCount = 0;
- + spawnFlaggedNPCs(world, 8);
- + break;
- + case 9:
- + // instance end
- + break;
- + }
- + world.status++;
- + return true;
- + }
- + finally
- + {
- + world.lock.unlock();
- + }
- }
- - world.status++;
- + return false;
- }
- protected void spawn(SOD1World world, int npcId, int x, int y, int z, int h, boolean addToKillTable)
- @@ -637,12 +662,14 @@
- SOD1World world = (SOD1World) tmpworld;
- if (world.status == 7)
- {
- - spawnState(world);
- - for(int objId : world.allowed)
- + if (spawnState(world))
- {
- - L2PcInstance pl = L2World.getInstance().getPlayer(objId);
- - if (pl != null)
- - pl.showQuestMovie(5);
- + for(int objId : world.allowed)
- + {
- + L2PcInstance pl = L2World.getInstance().getPlayer(objId);
- + if (pl != null)
- + pl.showQuestMovie(5);
- + }
- }
- }
- }
- @@ -672,9 +699,11 @@
- {
- if (npc.getCurrentHp() < (npc.getMaxHp() / 2))
- {
- - spawnState(world);
- - startQuestTimer("TiatFullHp", 3000, npc, null);
- - setInstanceTimeRestrictions(world);
- + if (spawnState(world))
- + {
- + startQuestTimer("TiatFullHp", 3000, npc, null);
- + setInstanceTimeRestrictions(world);
- + }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement