Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.45 KB | None | 0 0
  1. Index: data/scripts/instances/SeedOfDestruction/Stage1.java
  2. ===================================================================
  3. --- data/scripts/instances/SeedOfDestruction/Stage1.java    (revision 5795)
  4. +++ data/scripts/instances/SeedOfDestruction/Stage1.java    (working copy)
  5. @@ -20,6 +20,8 @@
  6.  import java.util.Calendar;
  7.  import java.util.List;
  8.  import java.util.Map;
  9. +import java.util.concurrent.locks.Lock;
  10. +import java.util.concurrent.locks.ReentrantLock;
  11.  import java.util.logging.Level;
  12.  
  13.  import javax.xml.parsers.DocumentBuilderFactory;
  14. @@ -75,6 +77,7 @@
  15.     {
  16.         public           Map<L2Npc,Boolean> npcList                      = new FastMap<L2Npc,Boolean>();
  17.         public           int                deviceSpawnedMobCount        = 0;
  18. +       public           Lock               lock                         = new ReentrantLock();
  19.  
  20.         public SOD1World()
  21.         {
  22. @@ -472,74 +475,96 @@
  23.    
  24.     private void spawnFlaggedNPCs(SOD1World world, int flag)
  25.     {
  26. -       for(SODSpawn spw : _spawnList.get(flag))
  27. +       if (world.lock.tryLock())
  28.         {
  29. -           if (spw.isZone)
  30. +           try
  31.             {
  32. -               for(int i = 0; i < spw.count; i++)
  33. +               for(SODSpawn spw : _spawnList.get(flag))
  34.                 {
  35. -                   if (_spawnZoneList.contains(spw.zone))
  36. +                   if (spw.isZone)
  37.                     {
  38. -                       int[] point = _spawnZoneList.get(spw.zone).getRandomPoint();
  39. -                       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);
  40. +                       for(int i = 0; i < spw.count; i++)
  41. +                       {
  42. +                           if (_spawnZoneList.contains(spw.zone))
  43. +                           {
  44. +                               int[] point = _spawnZoneList.get(spw.zone).getRandomPoint();
  45. +                               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);
  46. +                           }
  47. +                           else
  48. +                               _log.info("[Seed of Destruction] Missing zone: " + spw.zone);
  49. +                       }
  50.                     }
  51.                     else
  52. -                       _log.info("[Seed of Destruction] Missing zone: " + spw.zone);
  53. +                       spawn(world, spw.npcId, spw.x, spw.y, spw.z, spw.h, spw.isNeededNextFlag);
  54.                 }
  55.             }
  56. -           else
  57. -               spawn(world, spw.npcId, spw.x, spw.y, spw.z, spw.h, spw.isNeededNextFlag);
  58. +           finally
  59. +           {
  60. +               world.lock.unlock();
  61. +           }
  62.         }
  63.     }
  64.  
  65. -   protected void spawnState(SOD1World world)
  66. +   protected boolean spawnState(SOD1World world)
  67.     {
  68. -       world.npcList.clear();
  69. -       switch(world.status)
  70. +       if (world.lock.tryLock())
  71.         {
  72. -       case 0:
  73. -           spawnFlaggedNPCs(world, 0);
  74. -           break;
  75. -       case 1:
  76. -           ExShowScreenMessage message1 = new ExShowScreenMessage(1,0,5,0,1,0,0,false,10000,1,"The enemies have attacked. Everyone come out and fight!!!! ... Urgh~!");
  77. -           sendScreenMessage(world, message1);
  78. -           for(int i : ENTRANCE_ROOM_DOORS)
  79. -               openDoor(i,world.instanceId);
  80. -           spawnFlaggedNPCs(world, 1);
  81. -           break;
  82. -       case 2:
  83. -       case 3:
  84. -           // handled elsewhere
  85. -           return;
  86. -       case 4:
  87. -           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!!!!");
  88. -           sendScreenMessage(world, message2);
  89. -           for(int i : SQUARE_DOORS)
  90. -               openDoor(i,world.instanceId);
  91. -           spawnFlaggedNPCs(world, 4);
  92. -           break;
  93. -       case 5:
  94. -           openDoor(SCOUTPASS_DOOR,world.instanceId);
  95. -           spawnFlaggedNPCs(world, 3);
  96. -           spawnFlaggedNPCs(world, 5);
  97. -           break;
  98. -       case 6:
  99. -           openDoor(THRONE_DOOR,world.instanceId);
  100. -           break;
  101. -       case 7:
  102. -           spawnFlaggedNPCs(world, 7);
  103. -           return;
  104. -       case 8:
  105. -           ExShowScreenMessage message4 = new ExShowScreenMessage(1,0,5,0,1,0,0,false,10000,1,"Come out, warriors. Protect Seed of Destruction");
  106. -           sendScreenMessage(world, message4);
  107. -           world.deviceSpawnedMobCount = 0;
  108. -           spawnFlaggedNPCs(world, 8);
  109. -           break;
  110. -       case 9:
  111. -           // instance end
  112. -           break;
  113. +           try
  114. +           {
  115. +               world.npcList.clear();
  116. +               switch(world.status)
  117. +               {
  118. +               case 0:
  119. +                   spawnFlaggedNPCs(world, 0);
  120. +                   break;
  121. +               case 1:
  122. +                   ExShowScreenMessage message1 = new ExShowScreenMessage(1,0,5,0,1,0,0,false,10000,1,"The enemies have attacked. Everyone come out and fight!!!! ... Urgh~!");
  123. +                   sendScreenMessage(world, message1);
  124. +                   for(int i : ENTRANCE_ROOM_DOORS)
  125. +                       openDoor(i,world.instanceId);
  126. +                   spawnFlaggedNPCs(world, 1);
  127. +                   break;
  128. +               case 2:
  129. +               case 3:
  130. +                   // handled elsewhere
  131. +                   return true;
  132. +               case 4:
  133. +                   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!!!!");
  134. +                   sendScreenMessage(world, message2);
  135. +                   for(int i : SQUARE_DOORS)
  136. +                       openDoor(i,world.instanceId);
  137. +                   spawnFlaggedNPCs(world, 4);
  138. +                   break;
  139. +               case 5:
  140. +                   openDoor(SCOUTPASS_DOOR,world.instanceId);
  141. +                   spawnFlaggedNPCs(world, 3);
  142. +                   spawnFlaggedNPCs(world, 5);
  143. +                   break;
  144. +               case 6:
  145. +                   openDoor(THRONE_DOOR,world.instanceId);
  146. +                   break;
  147. +               case 7:
  148. +                   spawnFlaggedNPCs(world, 7);
  149. +                   return true;
  150. +               case 8:
  151. +                   ExShowScreenMessage message4 = new ExShowScreenMessage(1,0,5,0,1,0,0,false,10000,1,"Come out, warriors. Protect Seed of Destruction");
  152. +                   sendScreenMessage(world, message4);
  153. +                   world.deviceSpawnedMobCount = 0;
  154. +                   spawnFlaggedNPCs(world, 8);
  155. +                   break;
  156. +               case 9:
  157. +                   // instance end
  158. +                   break;
  159. +               }
  160. +               world.status++;
  161. +               return true;
  162. +           }
  163. +           finally
  164. +           {
  165. +               world.lock.unlock();
  166. +           }
  167.         }
  168. -       world.status++;
  169. +       return false;
  170.     }
  171.  
  172.     protected void spawn(SOD1World world, int npcId, int x, int y, int z, int h, boolean addToKillTable)
  173. @@ -637,12 +662,14 @@
  174.                 SOD1World world = (SOD1World) tmpworld;
  175.                 if (world.status == 7)
  176.                 {
  177. -                   spawnState(world);
  178. -                   for(int objId : world.allowed)
  179. +                   if (spawnState(world))
  180.                     {
  181. -                       L2PcInstance pl = L2World.getInstance().getPlayer(objId);
  182. -                       if (pl != null)
  183. -                           pl.showQuestMovie(5);
  184. +                       for(int objId : world.allowed)
  185. +                       {
  186. +                           L2PcInstance pl = L2World.getInstance().getPlayer(objId);
  187. +                           if (pl != null)
  188. +                               pl.showQuestMovie(5);
  189. +                       }
  190.                     }
  191.                 }
  192.             }
  193. @@ -672,9 +699,11 @@
  194.             {
  195.                 if (npc.getCurrentHp() < (npc.getMaxHp() / 2))
  196.                 {
  197. -                   spawnState(world);
  198. -                   startQuestTimer("TiatFullHp", 3000, npc, null);
  199. -                   setInstanceTimeRestrictions(world);
  200. +                   if (spawnState(world))
  201. +                   {
  202. +                       startQuestTimer("TiatFullHp", 3000, npc, null);
  203. +                       setInstanceTimeRestrictions(world);
  204. +                   }
  205.                 }
  206.             }
  207.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement