Advertisement
Guest User

Untitled

a guest
Oct 1st, 2016
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.52 KB | None | 0 0
  1. /*
  2. * L2jFrozen Project - www.l2jfrozen.com
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2, or (at your option)
  7. * any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  17. * 02111-1307, USA.
  18. *
  19. * http://www.gnu.org/copyleft/gpl.html
  20. */
  21. package com.l2jfrozen.gameserver.handler.admincommandhandlers;
  22.  
  23. import java.util.NoSuchElementException;
  24. import java.util.StringTokenizer;
  25.  
  26. import javolution.text.TextBuilder;
  27.  
  28. import org.apache.log4j.Logger;
  29.  
  30. import com.l2jfrozen.Config;
  31. import com.l2jfrozen.gameserver.datatables.FenceTable;
  32. import com.l2jfrozen.gameserver.datatables.GmListTable;
  33. import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
  34. import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  35. import com.l2jfrozen.gameserver.datatables.sql.TeleportLocationTable;
  36. import com.l2jfrozen.gameserver.handler.IAdminCommandHandler;
  37. import com.l2jfrozen.gameserver.idfactory.IdFactory;
  38. import com.l2jfrozen.gameserver.managers.DayNightSpawnManager;
  39. import com.l2jfrozen.gameserver.managers.GrandBossManager;
  40. import com.l2jfrozen.gameserver.managers.RaidBossSpawnManager;
  41. import com.l2jfrozen.gameserver.model.L2Object;
  42. import com.l2jfrozen.gameserver.model.L2World;
  43. import com.l2jfrozen.gameserver.model.L2WorldRegion;
  44. import com.l2jfrozen.gameserver.model.actor.instance.L2FenceInstance;
  45. import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  46. import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSigns;
  47. import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  48. import com.l2jfrozen.gameserver.network.SystemMessageId;
  49. import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  50. import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
  51. import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
  52.  
  53. /**
  54. * This class handles following admin commands: - show_spawns = shows menu - spawn_index lvl = shows menu for monsters with respective level - spawn_monster id = spawns monster id on target
  55. * @version $Revision: 1.2.2.5.2.5 $ $Date: 2005/04/11 10:06:06 $
  56. */
  57. public class AdminSpawn implements IAdminCommandHandler
  58. {
  59.  
  60. private static final String[] ADMIN_COMMANDS =
  61. {
  62. "admin_show_spawns",
  63. "admin_spawn",
  64. "admin_spawn_monster",
  65. "admin_spawn_index",
  66. "admin_unspawnall",
  67. "admin_respawnall",
  68. "admin_spawn_reload",
  69. "admin_npc_index",
  70. "admin_spawn_once",
  71. "admin_show_npcs",
  72. "admin_teleport_reload",
  73. "admin_spawnnight",
  74. "admin_spawnday",
  75. "admin_spawnfence",
  76. "admin_deletefence",
  77. "admin_listfence"
  78. };
  79.  
  80. public static Logger LOGGER = Logger.getLogger(AdminSpawn.class);
  81.  
  82. @Override
  83. public boolean useAdminCommand(final String command, final L2PcInstance activeChar)
  84. {
  85. if (command.startsWith("admin_spawnfence"))
  86. {
  87. StringTokenizer st = new StringTokenizer(command, " ");
  88. try
  89. {
  90. st.nextToken();
  91. int type = Integer.parseInt(st.nextToken());
  92. int width = Integer.parseInt(st.nextToken());
  93. int length = Integer.parseInt(st.nextToken());
  94. int height = 1;
  95. if (st.hasMoreTokens())
  96. height = Math.min(Integer.parseInt(st.nextToken()), 3);
  97. for (int i = 0;i < height;i++)
  98. {
  99. L2FenceInstance fence = new L2FenceInstance(IdFactory.getInstance().getNextId(), type, width, length, activeChar.getX(), activeChar.getY());
  100. fence.spawnMe(activeChar.getX(), activeChar.getY(), activeChar.getZ());
  101. activeChar.sendMessage("Spawned fence with id " + fence.getObjectId());
  102. FenceTable.addFence(fence);
  103. }
  104. }
  105. catch (Exception e)
  106. {
  107. activeChar.sendMessage("Usage: //spawnfence <type> <width> <length> [<height>]");
  108. }
  109. }
  110. else if (command.startsWith("admin_deletefence"))
  111. {
  112. StringTokenizer st = new StringTokenizer(command, " ");
  113. st.nextToken();
  114. try
  115. {
  116. L2Object fence = null;
  117. if (activeChar.getTarget() instanceof L2FenceInstance)
  118. fence = activeChar.getTarget();
  119. else if (st.hasMoreTokens())
  120. {
  121. L2Object object = L2World.getInstance().findObject(Integer.parseInt(st.nextToken()));
  122. if (object instanceof L2FenceInstance)
  123. fence = object;
  124. }
  125. if (fence != null)
  126. {
  127. L2WorldRegion region = fence.getWorldRegion();
  128. fence.decayMe();
  129. if (region != null)
  130. region.removeVisibleObject(fence);
  131. fence.getKnownList().removeAllKnownObjects();
  132. L2World.getInstance().removeObject(fence);
  133. activeChar.sendMessage("Deleted fence " + fence.getObjectId());
  134. if (fence instanceof L2FenceInstance)
  135. FenceTable.removeFence((L2FenceInstance) fence);
  136. if (st.hasMoreTokens())
  137. listFences(activeChar);
  138. }
  139. else
  140. throw new RuntimeException();
  141. }
  142. catch (Exception e)
  143. {
  144. activeChar.sendMessage("No fence targeted with shift+click or //deletefence <fence_objectId>");
  145. }
  146. }
  147. else if (command.startsWith("admin_listfence"))
  148. listFences(activeChar);
  149. else if (command.equals("admin_show_spawns"))
  150. {
  151. AdminHelpPage.showHelpPage(activeChar, "spawns.htm");
  152. }
  153. else if (command.startsWith("admin_spawn_index"))
  154. {
  155. StringTokenizer st = new StringTokenizer(command, " ");
  156.  
  157. try
  158. {
  159. st.nextToken();
  160.  
  161. final int level = Integer.parseInt(st.nextToken());
  162. int from = 0;
  163.  
  164. try
  165. {
  166. from = Integer.parseInt(st.nextToken());
  167. }
  168. catch (final NoSuchElementException nsee)
  169. {
  170. if (Config.ENABLE_ALL_EXCEPTIONS)
  171. nsee.printStackTrace();
  172. }
  173.  
  174. showMonsters(activeChar, level, from);
  175. }
  176. catch (final Exception e)
  177. {
  178. if (Config.ENABLE_ALL_EXCEPTIONS)
  179. e.printStackTrace();
  180.  
  181. AdminHelpPage.showHelpPage(activeChar, "spawns.htm");
  182. }
  183.  
  184. st = null;
  185. }
  186. else if (command.equals("admin_show_npcs"))
  187. {
  188. AdminHelpPage.showHelpPage(activeChar, "npcs.htm");
  189. }
  190. else if (command.startsWith("admin_npc_index"))
  191. {
  192. StringTokenizer st = new StringTokenizer(command, " ");
  193.  
  194. try
  195. {
  196. st.nextToken();
  197. String letter = st.nextToken();
  198.  
  199. int from = 0;
  200.  
  201. try
  202. {
  203. from = Integer.parseInt(st.nextToken());
  204. }
  205. catch (final NoSuchElementException nsee)
  206. {
  207. if (Config.ENABLE_ALL_EXCEPTIONS)
  208. nsee.printStackTrace();
  209. }
  210.  
  211. showNpcs(activeChar, letter, from);
  212.  
  213. letter = null;
  214. }
  215. catch (final Exception e)
  216. {
  217. if (Config.ENABLE_ALL_EXCEPTIONS)
  218. e.printStackTrace();
  219.  
  220. AdminHelpPage.showHelpPage(activeChar, "npcs.htm");
  221. }
  222.  
  223. st = null;
  224. }
  225. // Command spawn '//spawn name numberSpawn respawnTime'.
  226. // With command '//spawn name' the respawnTime will be 10 seconds.
  227. else if (command.startsWith("admin_spawn") || command.startsWith("admin_spawn_monster"))
  228. {
  229. StringTokenizer st = new StringTokenizer(command, " ");
  230. try
  231. {
  232. String cmd = st.nextToken();
  233. String id = st.nextToken();
  234. int mobCount = 1;
  235. int respawnTime = 10;
  236. if (st.hasMoreTokens())
  237. mobCount = Integer.parseInt(st.nextToken());
  238. if (st.hasMoreTokens())
  239. respawnTime = Integer.parseInt(st.nextToken());
  240.  
  241. if (cmd.equalsIgnoreCase("admin_spawn_once"))
  242. spawnMonster(activeChar, id, respawnTime, mobCount, false);
  243. else
  244. spawnMonster(activeChar, id, respawnTime, mobCount, true);
  245.  
  246. cmd = null;
  247. id = null;
  248. }
  249. catch (final Exception e)
  250. { // Case of wrong or missing monster data
  251. if (Config.ENABLE_ALL_EXCEPTIONS)
  252. e.printStackTrace();
  253.  
  254. AdminHelpPage.showHelpPage(activeChar, "spawns.htm");
  255. }
  256.  
  257. st = null;
  258. }
  259. // Command for unspawn all Npcs on Server, use //repsawnall to respawn the npc
  260. else if (command.startsWith("admin_unspawnall"))
  261. {
  262. for (final L2PcInstance player : L2World.getInstance().getAllPlayers())
  263. {
  264. player.sendPacket(new SystemMessage(SystemMessageId.NPC_SERVER_NOT_OPERATING));
  265. }
  266. RaidBossSpawnManager.getInstance().cleanUp();
  267. DayNightSpawnManager.getInstance().cleanUp();
  268. L2World.getInstance().deleteVisibleNpcSpawns();
  269. GmListTable.broadcastMessageToGMs("NPC Unspawn completed!");
  270. }
  271. else if (command.startsWith("admin_spawnday"))
  272. {
  273. DayNightSpawnManager.getInstance().spawnDayCreatures();
  274. }
  275. else if (command.startsWith("admin_spawnnight"))
  276. {
  277. DayNightSpawnManager.getInstance().spawnNightCreatures();
  278. }
  279. else if (command.startsWith("admin_respawnall") || command.startsWith("admin_spawn_reload"))
  280. {
  281. // make sure all spawns are deleted
  282. RaidBossSpawnManager.getInstance().cleanUp();
  283. DayNightSpawnManager.getInstance().cleanUp();
  284. L2World.getInstance().deleteVisibleNpcSpawns();
  285. // now respawn all
  286. NpcTable.getInstance().reloadAllNpc();
  287. SpawnTable.getInstance().reloadAll();
  288. RaidBossSpawnManager.getInstance().reloadBosses();
  289. SevenSigns.getInstance().spawnSevenSignsNPC();
  290. GmListTable.broadcastMessageToGMs("NPC Respawn completed!");
  291. }
  292. else if (command.startsWith("admin_teleport_reload"))
  293. {
  294. TeleportLocationTable.getInstance().reloadAll();
  295. GmListTable.broadcastMessageToGMs("Teleport List Table reloaded.");
  296. }
  297.  
  298. return true;
  299. }
  300.  
  301. @Override
  302. public String[] getAdminCommandList()
  303. {
  304. return ADMIN_COMMANDS;
  305. }
  306.  
  307. private void spawnMonster(final L2PcInstance activeChar, String monsterId, final int respawnTime, final int mobCount, boolean permanent)
  308. {
  309. L2Object target = activeChar.getTarget();
  310. if (target == null)
  311. target = activeChar;
  312. if (target != activeChar && activeChar.getAccessLevel().isGm())
  313. target = activeChar;
  314.  
  315. L2NpcTemplate template1;
  316. if (monsterId.matches("[0-9]*"))
  317. {
  318. // First parameter was an ID number
  319. final int monsterTemplate = Integer.parseInt(monsterId);
  320. template1 = NpcTable.getInstance().getTemplate(monsterTemplate);
  321. }
  322. else
  323. {
  324. // First parameter wasn't just numbers so go by name not ID
  325. monsterId = monsterId.replace('_', ' ');
  326. template1 = NpcTable.getInstance().getTemplateByName(monsterId);
  327. }
  328.  
  329. if (template1 == null)
  330. {
  331. activeChar.sendMessage("Attention, wrong NPC ID/Name");
  332. return;
  333. }
  334.  
  335. try
  336. {
  337. L2Spawn spawn = new L2Spawn(template1);
  338. if (Config.SAVE_GMSPAWN_ON_CUSTOM)
  339. spawn.setCustom(true);
  340. spawn.setLocx(target.getX());
  341. spawn.setLocy(target.getY());
  342. spawn.setLocz(target.getZ());
  343. spawn.setAmount(mobCount);
  344. spawn.setHeading(activeChar.getHeading());
  345. spawn.setRespawnDelay(respawnTime);
  346.  
  347. if (RaidBossSpawnManager.getInstance().isDefined(spawn.getNpcid()) || GrandBossManager.getInstance().isDefined(spawn.getNpcid()))
  348. {
  349. activeChar.sendMessage("Another instance of " + template1.name + " already present into database:");
  350. activeChar.sendMessage("It will be spawned but not saved on Database");
  351. activeChar.sendMessage("After server restart or raid dead, the spawned npc will desappear");
  352. permanent = false;
  353. spawn.set_customBossInstance(true); // for raids, this value is used in order to segnalate to not save respawn time - status for custom instance
  354.  
  355. }
  356. // else
  357. // {
  358. if (RaidBossSpawnManager.getInstance().getValidTemplate(spawn.getNpcid()) != null)
  359. {
  360. RaidBossSpawnManager.getInstance().addNewSpawn(spawn, 0, template1.getStatsSet().getDouble("baseHpMax"), template1.getStatsSet().getDouble("baseMpMax"), permanent);
  361. }
  362. else
  363. {
  364. SpawnTable.getInstance().addNewSpawn(spawn, permanent);
  365. }
  366.  
  367. spawn.init();
  368.  
  369. if (!permanent)
  370. {
  371. spawn.stopRespawn();
  372. }
  373.  
  374. activeChar.sendMessage("Created " + template1.name + " on " + target.getObjectId());
  375. // }
  376.  
  377. spawn = null;
  378. }
  379. catch (final Exception e)
  380. {
  381. if (Config.ENABLE_ALL_EXCEPTIONS)
  382. e.printStackTrace();
  383.  
  384. activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_CANT_FOUND));
  385. }
  386.  
  387. template1 = null;
  388. target = null;
  389. }
  390.  
  391.  
  392. private static void listFences(L2PcInstance activeChar)
  393. {
  394. TextBuilder tb = new TextBuilder();
  395.  
  396. tb.append("<html><body>Total Fences: " + FenceTable.getAllFences().size() + "<br><br>");
  397. for (L2FenceInstance fence : FenceTable.getAllFences())
  398. tb.append("<a action=\"bypass -h admin_deletefence " + fence.getObjectId() + " 1\">Fence: " + fence.getObjectId() + " [" + fence.getX() + " " + fence.getY() + " " + fence.getZ() + "]</a><br>");
  399. tb.append("</body></html>");
  400.  
  401. NpcHtmlMessage html = new NpcHtmlMessage(0);
  402. html.setHtml(tb.toString());
  403. activeChar.sendPacket(html);
  404. }
  405.  
  406. private void showMonsters(final L2PcInstance activeChar, final int level, final int from)
  407. {
  408. TextBuilder tb = new TextBuilder();
  409.  
  410. L2NpcTemplate[] mobs = NpcTable.getInstance().getAllMonstersOfLevel(level);
  411.  
  412. // Start
  413. tb.append("<html><title>Spawn Monster:</title><body><p> Level " + level + ":<br>Total Npc's : " + mobs.length + "<br>");
  414. String end1 = "<br><center><button value=\"Next\" action=\"bypass -h admin_spawn_index " + level + " $from$\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></center></body></html>";
  415. String end2 = "<br><center><button value=\"Back\" action=\"bypass -h admin_show_spawns\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></center></body></html>";
  416.  
  417. // Loop
  418. boolean ended = true;
  419. for (int i = from; i < mobs.length; i++)
  420. {
  421. String txt = "<a action=\"bypass -h admin_spawn_monster " + mobs[i].npcId + "\">" + mobs[i].name + "</a><br1>";
  422.  
  423. if (tb.length() + txt.length() + end2.length() > 8192)
  424. {
  425. end1 = end1.replace("$from$", "" + i);
  426. ended = false;
  427.  
  428. break;
  429. }
  430.  
  431. tb.append(txt);
  432. txt = null;
  433. }
  434.  
  435. // End
  436. if (ended)
  437. {
  438. tb.append(end2);
  439. }
  440. else
  441. {
  442. tb.append(end1);
  443. }
  444.  
  445. activeChar.sendPacket(new NpcHtmlMessage(5, tb.toString()));
  446.  
  447. end1 = null;
  448. end2 = null;
  449. mobs = null;
  450. tb = null;
  451. }
  452.  
  453. private void showNpcs(final L2PcInstance activeChar, final String starting, final int from)
  454. {
  455. TextBuilder tb = new TextBuilder();
  456. L2NpcTemplate[] mobs = NpcTable.getInstance().getAllNpcStartingWith(starting);
  457.  
  458. // Start
  459. tb.append("<html><title>Spawn Monster:</title><body><p> There are " + mobs.length + " Npcs whose name starts with " + starting + ":<br>");
  460. String end1 = "<br><center><button value=\"Next\" action=\"bypass -h admin_npc_index " + starting + " $from$\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></center></body></html>";
  461. String end2 = "<br><center><button value=\"Back\" action=\"bypass -h admin_show_npcs\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></center></body></html>";
  462.  
  463. // Loop
  464. boolean ended = true;
  465. for (int i = from; i < mobs.length; i++)
  466. {
  467. String txt = "<a action=\"bypass -h admin_spawn_monster " + mobs[i].npcId + "\">" + mobs[i].name + "</a><br1>";
  468.  
  469. if (tb.length() + txt.length() + end2.length() > 8192)
  470. {
  471. end1 = end1.replace("$from$", "" + i);
  472. ended = false;
  473.  
  474. break;
  475. }
  476. tb.append(txt);
  477. txt = null;
  478. }
  479. // End
  480. if (ended)
  481. {
  482. tb.append(end2);
  483. }
  484. else
  485. {
  486. tb.append(end1);
  487. }
  488.  
  489. activeChar.sendPacket(new NpcHtmlMessage(5, tb.toString()));
  490.  
  491. tb = null;
  492. mobs = null;
  493. end1 = null;
  494. end2 = null;
  495. }
  496. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement