Axelut

[aCis] Save non-xml spawns (permanently)

Jun 20th, 2025
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.89 KB | None | 0 0
  1. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSpawn.java b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSpawn.java
  2. index eb150ae5..9b763088 100644
  3. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSpawn.java
  4. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSpawn.java
  5. @@ -1,5 +1,10 @@
  6. package net.sf.l2j.gameserver.handler.admincommandhandlers;
  7.  
  8. +import java.io.BufferedReader;
  9. +import java.io.BufferedWriter;
  10. +import java.io.File;
  11. +import java.io.FileReader;
  12. +import java.io.FileWriter;
  13. import java.util.List;
  14. import java.util.StringTokenizer;
  15.  
  16. @@ -25,6 +30,8 @@ import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
  17.  
  18. public class AdminSpawn implements IAdminCommandHandler
  19. {
  20. + private static final String OTHER_XML_FOLDER = "./data/xml/spawnlist/custom";
  21. +
  22. private static final String[] ADMIN_COMMANDS =
  23. {
  24. "admin_list_spawns",
  25. @@ -196,7 +203,7 @@ public class AdminSpawn implements IAdminCommandHandler
  26. spawn.setLoc(targetWorldObject.getPosition());
  27. spawn.setRespawnDelay(respawnTime);
  28. spawn.doSpawn(false);
  29. -
  30. + addSpawn(spawn);
  31. player.sendMessage("You spawned " + template.getName() + ". - Cmd: " + cmd);
  32.  
  33. }
  34. @@ -259,4 +266,97 @@ public class AdminSpawn implements IAdminCommandHandler
  35. html.setHtml(sb.toString());
  36. player.sendPacket(html);
  37. }
  38. +
  39. + private static void addSpawn(Spawn spawn)
  40. + {
  41. + SpawnManager.getInstance().addSpawn(spawn);
  42. +
  43. + // Create output directory if it doesn't exist
  44. + final File outputDirectory = new File(OTHER_XML_FOLDER);
  45. + if (!outputDirectory.exists())
  46. + {
  47. + try
  48. + {
  49. + outputDirectory.mkdir();
  50. + }
  51. + catch (SecurityException se)
  52. + {
  53. + // empty
  54. + }
  55. + }
  56. +
  57. + // XML file for spawn
  58. + final String name = spawn.getNpc().getName().replaceAll("(\\s|')+","").toLowerCase() + "_" + System.currentTimeMillis();
  59. + final String npcMakerName = spawn.getNpc().getName().replaceAll("(\\s|')+","").toLowerCase() + "_" + System.nanoTime();
  60. + final String fileName = spawn.getNpc().getName().replaceAll("(\\s|')+","").toLowerCase();
  61. +
  62. + final int x = ((spawn.getLocX() - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN;
  63. + final int y = ((spawn.getLocY() - World.WORLD_Y_MIN) >> 15) + World.TILE_Y_MIN;
  64. + final File spawnFile = new File(OTHER_XML_FOLDER + "/" + fileName + "_" + x + "_" + y + ".xml");
  65. +
  66. + // Write info to XML
  67. + final String spawnId = String.valueOf(spawn.getNpcId());
  68. + final String spawnLoc = String.valueOf(spawn.getLocX() + ";" + spawn.getLocY() + ";" + spawn.getLocZ() + ";" + spawn.getHeading());
  69. +
  70. + final String respawnDelay = spawn.calculateRespawnDelay() + "sec";
  71. +
  72. + if (spawnFile.exists()) // update
  73. + {
  74. + final File tempFile = new File(OTHER_XML_FOLDER + "/" + name + "_" + x + "_" + y + ".tmp");
  75. + try (BufferedReader reader = new BufferedReader(new FileReader(spawnFile));
  76. + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)))
  77. + {
  78. + String currentLine;
  79. + while ((currentLine = reader.readLine()) != null)
  80. + {
  81. + if (currentLine.contains("</list>"))
  82. + {
  83. + writer.write(" <territory name=\"" + name + "\" minZ=\"" + (spawn.getLocZ()) + "\" maxZ=\"" + (spawn.getLocZ() + 16) + "\">\n");
  84. + writer.write(" <node x=\"" + (spawn.getLocX() + 50) + "\" y=\"" + (spawn.getLocY() + 50) + "\" />\n");
  85. + writer.write(" <node x=\"" + (spawn.getLocX() - 50) + "\" y=\"" + (spawn.getLocY() + 50) + "\" />\n");
  86. + writer.write(" <node x=\"" + (spawn.getLocX() - 50) + "\" y=\"" + (spawn.getLocY() - 50) + "\" />\n");
  87. + writer.write(" <node x=\"" + (spawn.getLocX() + 50) + "\" y=\"" + (spawn.getLocY() - 50) + "\" />\n");
  88. + writer.write(" </territory>\n");
  89. + writer.write(" <npcmaker name=\"" + npcMakerName + "\" territory=\"" + name + "\" maximumNpcs=\"" + 1 + "\">\n");
  90. + writer.write(" <npc id=\"" + spawnId + "\" pos=\"" + spawnLoc + "\" total=\"" + 1 + "\" respawn=\"" + respawnDelay + "\" /> <!-- " + spawn.getNpc().getTemplate().getName() + " -->\n");
  91. + writer.write(" </npcmaker>\n");
  92. + writer.write(currentLine + "\n");
  93. + continue;
  94. + }
  95. + writer.write(currentLine + "\n");
  96. + }
  97. + writer.close();
  98. + reader.close();
  99. + spawnFile.delete();
  100. + tempFile.renameTo(spawnFile);
  101. + }
  102. + catch (Exception e)
  103. + {
  104. + LOGGER.warn("Could not store spawn in the spawn XML files: " + e);
  105. + }
  106. + }
  107. + else // new file
  108. + {
  109. + try (BufferedWriter writer = new BufferedWriter(new FileWriter(spawnFile)))
  110. + {
  111. + writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
  112. + writer.write("<list>\n");
  113. + writer.write(" <territory name=\"" + name + "\" minZ=\"" + (spawn.getLocZ()) + "\" maxZ=\"" + (spawn.getLocZ() + 16) + "\">\n");
  114. + writer.write(" <node x=\"" + (spawn.getLocX() + 50) + "\" y=\"" + (spawn.getLocY() + 50) + "\" />\n");
  115. + writer.write(" <node x=\"" + (spawn.getLocX() - 50) + "\" y=\"" + (spawn.getLocY() + 50) + "\" />\n");
  116. + writer.write(" <node x=\"" + (spawn.getLocX() - 50) + "\" y=\"" + (spawn.getLocY() - 50) + "\" />\n");
  117. + writer.write(" <node x=\"" + (spawn.getLocX() + 50) + "\" y=\"" + (spawn.getLocY() - 50) + "\" />\n");
  118. + writer.write(" </territory>\n");
  119. + writer.write(" <npcmaker name=\"" + npcMakerName + "\" territory=\"" + name + "\" maximumNpcs=\"" + 1 + "\">\n");
  120. + writer.write(" <npc id=\"" + spawnId + "\" pos=\"" + spawnLoc + "\" total=\"" + 1 + "\" respawn=\"" + respawnDelay + "\" /> <!-- " + spawn.getNpc().getTemplate().getName() + " -->\n");
  121. + writer.write(" </npcmaker>\n");
  122. + writer.write("</list>\n");
  123. + writer.close();
  124. + }
  125. + catch (Exception e)
  126. + {
  127. + LOGGER.warn("Spawn " + spawn + " could not be added to the spawn XML files: " + e);
  128. + }
  129. + }
  130. + }
  131. }
  132. \ No newline at end of file
  133.  
Advertisement
Add Comment
Please, Sign In to add comment