BanditStrongHold.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. /**
  2. *
  3. */
  4. package conquerablehalls.BanditStrongHold;
  5. import java.sql.Connection;
  6. import java.sql.PreparedStatement;
  7. import java.sql.ResultSet;
  8. import java.util.ArrayList;
  9. import javolution.util.FastMap;
  10. import com.l2jserver.L2DatabaseFactory;
  11. import com.l2jserver.gameserver.Announcements;
  12. import com.l2jserver.gameserver.ai.CtrlIntention;
  13. import com.l2jserver.gameserver.ai.L2SpecialSiegeGuardAI;
  14. import com.l2jserver.gameserver.datatables.ClanTable;
  15. import com.l2jserver.gameserver.datatables.NpcTable;
  16. import com.l2jserver.gameserver.instancemanager.MapRegionManager.TeleportWhereType;
  17. import com.l2jserver.gameserver.model.L2CharPosition;
  18. import com.l2jserver.gameserver.model.L2Clan;
  19. import com.l2jserver.gameserver.model.L2SiegeClan;
  20. import com.l2jserver.gameserver.model.L2Spawn;
  21. import com.l2jserver.gameserver.model.L2World;
  22. import com.l2jserver.gameserver.model.L2SiegeClan.SiegeClanType;
  23. import com.l2jserver.gameserver.model.actor.L2Npc;
  24. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  25. import com.l2jserver.gameserver.model.entity.clanhall.ClanHallSiegeEngine;
  26. import com.l2jserver.gameserver.network.SystemMessageId;
  27. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  28. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  29. /**
  30. * @author BiggBoss
  31. * Bandit Stronghold hall siege script
  32. */
  33. public final class BanditStrongHold extends ClanHallSiegeEngine
  34. {
  35. private class ClanData
  36. {
  37. private int flag = 0;
  38. private int npc = 0;
  39. private ArrayList<Integer> players = new ArrayList<Integer>(18);
  40. private ArrayList<L2PcInstance> playersInstance = new ArrayList<L2PcInstance>(18);
  41. private L2Spawn warrior = null;
  42. private L2Spawn flagInstance = null;
  43. }
  44. private static final String qn = "BanditStrongHold";
  45. private static final String SQL_LOAD_ATTACKERS = "SELECT * FROM bandit_stronghold_attackers";
  46. private static final String SQL_SAVE_ATTACKER = "INSERT INTO bandit_stronghold_attackers_members VALUES (?,?)";
  47. private static final String SQL_LOAD_MEMEBERS = "SELECT object_id FROM bandit_stronghold_attackers_members WHERE clan_id = ?";
  48. private static final String SQL_SAVE_CLAN = "INSERT INTO bandit_stronghold_attackers VALUES(?,?,?)";
  49. private static final String SQL_SAVE_NPC = "UPDATE bandit_stronghold_attackers SET npc = ? WHERE clan_id = ?";
  50. private static final String SQL_CLEAR_CLAN = "DELETE FROM bandit_stronghold_attackers";
  51. private static final String SQL_CLEAR_CLAN_ATTACKERS = "DELETE FROM bandit_stronghold_attackers_members";
  52. private static final int RED_FLAG = 35423;
  53. private static final int YELLOW_FLAG = 35424;
  54. private static final int GREEN_FLAG = 35425;
  55. private static final int BLUE_FLAG = 35426;
  56. private static final int PURPLE_FLAG = 35427;
  57. private static final int OEL_MAHUM_BERSERKER = 35428;
  58. private static final int OEL_MAHUM_SCOUT = 35429;
  59. private static final int OEL_MAHUM_LEADER = 35430;
  60. private static final int OEL_MAHUM_CLERIC = 35431;
  61. private static final int OEL_MAHUM_THIEF = 35432;
  62. private static final int MESSENGER = 35437;
  63. // Custom values
  64. private static final int[][] FLAGS_COORDS =
  65. {
  66. {83607,-17541,-1829},
  67. {84095,-15478,-1829},
  68. {81768,-17036,-1826},
  69. {81287,-16025,-1843},
  70. {83243,-15077,-1829}
  71. };
  72. // Custom values
  73. private static final int[][] MAHUM_COORDS =
  74. {
  75. {83658,-17337,-1829},
  76. {84076,-15846,-1825},
  77. {81990,-16900,-1839},
  78. {81527,-15965,-1860},
  79. {83168,-15319,-1848}
  80. };
  81. // Custom values
  82. private static final L2CharPosition CENTER = new L2CharPosition(82882,-16280,-1894,0);
  83. private FastMap<Integer, ClanData> _data;
  84. private L2Clan _winner;
  85. public BanditStrongHold(int questId, String name, String descr, final int hallId)
  86. {
  87. super(questId, name, descr, hallId);
  88. addStartNpc(MESSENGER);
  89. addFirstTalkId(MESSENGER);
  90. addTalkId(MESSENGER);
  91. addKillId(RED_FLAG);
  92. addKillId(YELLOW_FLAG);
  93. addKillId(GREEN_FLAG);
  94. addKillId(BLUE_FLAG);
  95. addKillId(PURPLE_FLAG);
  96. addAttackId(RED_FLAG);
  97. addAttackId(YELLOW_FLAG);
  98. addAttackId(GREEN_FLAG);
  99. addAttackId(BLUE_FLAG);
  100. addAttackId(PURPLE_FLAG);
  101. addSpawnId(OEL_MAHUM_BERSERKER);
  102. addSpawnId(OEL_MAHUM_SCOUT);
  103. addSpawnId(OEL_MAHUM_LEADER);
  104. addSpawnId(OEL_MAHUM_CLERIC);
  105. addSpawnId(OEL_MAHUM_THIEF);
  106. _data = new FastMap<Integer, ClanData>();
  107. // Load alredy registered attackers
  108. loadAttackers();
  109. // If siege ends w/ more than 1 flag alive, winner is old owner
  110. _winner = ClanTable.getInstance().getClan(_hall.getOwnerId());
  111. }
  112. @Override
  113. public String onFirstTalk(L2Npc npc, L2PcInstance player)
  114. {
  115. if(player.getQuestState(qn) == null)
  116. newQuestState(player);
  117. return "agit_oel_mahum_messenger_1.htm";
  118. }
  119. @Override
  120. public synchronized String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  121. {
  122. String html = event;
  123. L2Clan clan = player.getClan();
  124. // Register the clan for the siege
  125. if(event.startsWith("register_clan"))
  126. {
  127. if(!_hall.isWaitingBattle())
  128. {
  129. NpcHtmlMessage msg = new NpcHtmlMessage(5);
  130. msg.setFile(null, "data/scripts/conquerablehalls/BanditStrongHold/azit_messenger_q0504_09.htm");
  131. msg.replace("%objectId%", String.valueOf(npc.getObjectId()));
  132. msg.replace("%nextSiege%", _hall.getSiegeDate().getTime().toString());
  133. player.sendPacket(msg);
  134. }
  135. else if(clan == null || !player.isClanLeader())
  136. html = "agit_oel_mahum_messenger_2.htm";
  137. else if(!_hall.isRegistering())
  138. html = "agit_oel_mahum_messenger_3.htm";
  139. else if((_hall.getOwnerId() > 0 && getAttackers().size() >= 4)
  140. || getAttackers().size() >= 5)
  141. html = "agit_oel_mahum_messenger_21.htm";
  142. else if(checkIsAttacker(clan))
  143. html = "agit_oel_mahum_messenger_9.htm";
  144. else if(_hall.getOwnerId() == clan.getClanId())
  145. html = "agit_oel_mahum_messenger_22.htm";
  146. else
  147. {
  148. String[] arg = event.split(" ");
  149. if(arg.length >= 2)
  150. {
  151. // Register passing the quest
  152. if(arg[1].equals("wQuest"))
  153. {
  154. if(player.destroyItemByItemId("BanditStrongHold Siege", 5009, 1, npc, true)) // Quest passed
  155. {
  156. registerClan(clan);
  157. html = getFlagHtml(_data.get(clan.getClanId()).flag);
  158. }
  159. else // Quest not accoplished, try by paying
  160. html = "agit_oel_mahum_messenger_24.htm";
  161. }
  162. // Register paying the fee
  163. else if(arg[1].equals("wFee"))
  164. {
  165. if(player.reduceAdena("Bandit Stronghold registration", 200000, npc, true)) // Fee payed
  166. {
  167. registerClan(clan);
  168. html = getFlagHtml(_data.get(clan.getClanId()).flag);
  169. }
  170. else // Fee couldnt be payed, try with quest
  171. html = "agit_oel_mahum_messenger_26.htm";
  172. }
  173. }
  174. }
  175. }
  176. // Select the flag to defend
  177. else if(event.startsWith("select_clan_npc"))
  178. {
  179. if(!player.isClanLeader())
  180. html = "agit_oel_mahum_messenger_2.htm";
  181. else if(!_data.containsKey(clan.getClanId()))
  182. html = "agit_oel_mahum_messenger_7.htm";
  183. else
  184. {
  185. String[] var = event.split(" ");
  186. if(var.length >= 2)
  187. {
  188. int id = 0;
  189. try
  190. {
  191. id = Integer.parseInt(var[1]);
  192. }
  193. catch(Exception e)
  194. {
  195. _log.warning("BanditStronghold->select_clan_npc->Wrong mahum warrior id: "+var[1]);
  196. }
  197. if(id > 0 && (html = getMahumHtml(id)) != null)
  198. {
  199. _data.get(clan.getClanId()).npc = id;
  200. saveNpc(id, clan.getClanId());
  201. }
  202. }
  203. }
  204. }
  205. // View (and change ? ) the current selected mahum warrior
  206. else if(event.startsWith("view_clan_npc"))
  207. {
  208. if(clan == null)
  209. html = "agit_oel_mahum_messenger_2.htm";
  210. ClanData cd = _data.get(clan.getClanId());
  211. if(cd == null)
  212. html = "agit_oel_mahum_messenger_7.htm";
  213. else if(cd.npc == 0)
  214. html = "agit_oel_mahum_messenger_10.htm";
  215. else
  216. html = getMahumHtml(cd.npc);
  217. }
  218. // Register a clan member for the fight
  219. else if(event.equals("register_member"))
  220. {
  221. if(clan == null)
  222. html = "agit_oel_mahm_messenger_5.htm";
  223. else if(!_hall.isRegistering())
  224. html = "agit_oel_mahum_messenger_3.htm";
  225. else if(!_data.containsKey(clan.getClanId()))
  226. html = "agit_oel_mahum_messenger_7.htm";
  227. else if(_data.get(clan.getClanId()).players.size() >= 18)
  228. html = "agit_oel_mahum_messenger_8.htm";
  229. else
  230. {
  231. ClanData data = _data.get(clan.getClanId());
  232. data.players.add(player.getObjectId());
  233. saveMember(clan.getClanId(), player.getObjectId());
  234. if(data.npc == 0)
  235. html = "agit_oel_mahum_messenger_16.htm";
  236. else
  237. html = "agit_oel_mahum_messenger_9.htm";
  238. }
  239. }
  240. return html;
  241. }
  242. @Override
  243. public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
  244. {
  245. if(_hall.isInSiege())
  246. {
  247. final int clan = attacker.getClan().getClanId();
  248. // Attacking own flag or non-registered players
  249. if((_data.containsKey(clan) && npc.getNpcId() == _data.get(clan).flag)
  250. || !_data.containsKey(clan))
  251. npc.setCurrentHp(npc.getCurrentHp() + damage);
  252. }
  253. return null;
  254. }
  255. @Override
  256. public synchronized String onKill(L2Npc npc, L2PcInstance killer, boolean isPet)
  257. {
  258. if(_hall.isInSiege())
  259. {
  260. final int id = npc.getNpcId();
  261. if(id == RED_FLAG || id == YELLOW_FLAG || id == GREEN_FLAG
  262. || id == BLUE_FLAG || id == PURPLE_FLAG)
  263. {
  264. final int index = id - 35423;
  265. removeParticipant(index, true);
  266. synchronized(this)
  267. {
  268. // Siege ends if just 1 flag is alive
  269. if(_data.size() == 1)
  270. {
  271. _winner = removeParticipant(0, false);
  272. cancelSiegeTask();
  273. endSiege();
  274. }
  275. }
  276. }
  277. }
  278. return null;
  279. }
  280. @Override
  281. public String onSpawn(L2Npc npc)
  282. {
  283. npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, CENTER);
  284. npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
  285. return super.onSpawn(npc);
  286. }
  287. @Override
  288. public L2Clan getWinner()
  289. {
  290. return _winner;
  291. }
  292. @Override
  293. public void startSiege()
  294. {
  295. if(getAttackers().size() < 2)
  296. {
  297. onSiegeEnds();
  298. getAttackers().clear();
  299. _hall.updateNextSiege();
  300. SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SIEGE_OF_S1_HAS_BEEN_CANCELED_DUE_TO_LACK_OF_INTEREST);
  301. sm.addString(_hall.getName());
  302. Announcements.getInstance().announceToAll(sm);
  303. return;
  304. }
  305. super.startSiege();
  306. }
  307. @Override
  308. public void onSiegeStarts()
  309. {
  310. for(ClanData data : _data.values())
  311. {
  312. try
  313. {
  314. for(int objId : data.players)
  315. {
  316. L2PcInstance plr = L2World.getInstance().getPlayer(objId);
  317. if(plr != null)
  318. data.playersInstance.add(plr);
  319. data.flagInstance = new L2Spawn(NpcTable.getInstance().getTemplate(data.flag));
  320. int index = 35423 - data.flag;
  321. data.flagInstance.setLocx(FLAGS_COORDS[index][0]);
  322. data.flagInstance.setLocy(FLAGS_COORDS[index][1]);
  323. data.flagInstance.setLocz(FLAGS_COORDS[index][2]);
  324. data.flagInstance.setRespawnDelay(10000);
  325. data.flagInstance.setAmount(1);
  326. data.flagInstance.init();
  327. data.warrior = new L2Spawn(NpcTable.getInstance().getTemplate(data.npc));
  328. int indexx = 35428 - data.npc;
  329. data.warrior.setLocx(MAHUM_COORDS[indexx][0]);
  330. data.warrior.setLocy(MAHUM_COORDS[indexx][1]);
  331. data.warrior.setLocz(MAHUM_COORDS[indexx][2]);
  332. data.warrior.setRespawnDelay(10000);
  333. data.warrior.setAmount(1);
  334. data.warrior.init();
  335. ((L2SpecialSiegeGuardAI)data.warrior.getLastSpawn().getAI()).getAlly().addAll(data.players);
  336. }
  337. }
  338. catch(Exception e)
  339. {
  340. e.printStackTrace();
  341. }
  342. }
  343. _hall.getDoor(22170001).closeMe();
  344. _hall.getDoor(22170002).closeMe();
  345. }
  346. @Override
  347. public void onSiegeEnds()
  348. {
  349. if(_data.size() > 0)
  350. {
  351. for(int clanId : _data.keySet())
  352. {
  353. L2Clan clan = ClanTable.getInstance().getClan(clanId);
  354. if(clan == null)
  355. continue;
  356. if(_hall.getOwnerId() == clan.getClanId())
  357. removeParticipant(clan, false);
  358. else
  359. removeParticipant(clan, true);
  360. }
  361. }
  362. clearTables();
  363. }
  364. private void registerClan(L2Clan clan)
  365. {
  366. final int clanId = clan.getClanId();
  367. L2SiegeClan sc = new L2SiegeClan(clanId, SiegeClanType.ATTACKER);
  368. getAttackers().put(clanId, sc);
  369. ClanData data = new ClanData();
  370. _data.put(clanId, data);
  371. data.flag = 35422 + _data.size();
  372. data.players.add(clan.getLeaderId());
  373. saveClan(clanId, data.flag);
  374. saveMember(clanId, clan.getLeaderId());
  375. }
  376. private final L2Clan removeParticipant(int index, boolean teleport)
  377. {
  378. final L2Clan clan = (L2Clan)(_data.keySet().toArray()[index]);
  379. return removeParticipant(clan, teleport);
  380. }
  381. private final L2Clan removeParticipant(L2Clan clan, boolean teleport)
  382. {
  383. ClanData dat = _data.remove(clan);
  384. if(dat != null)
  385. {
  386. // Destroy clan flag
  387. if(dat.flagInstance != null)
  388. {
  389. dat.flagInstance.stopRespawn();
  390. dat.flagInstance.getLastSpawn().deleteMe();
  391. }
  392. if(dat.warrior != null)
  393. {
  394. // Destroy clan warrior
  395. dat.warrior.stopRespawn();
  396. dat.warrior.getLastSpawn().deleteMe();
  397. }
  398. dat.players.clear();
  399. }
  400. if(teleport)
  401. {
  402. // Teleport players outside
  403. for(L2PcInstance pc : dat.playersInstance)
  404. if(pc != null)
  405. pc.teleToLocation(TeleportWhereType.Town);
  406. }
  407. dat.playersInstance.clear();
  408. return clan;
  409. }
  410. private String getFlagHtml(int flag)
  411. {
  412. String result = null;
  413. switch(flag)
  414. {
  415. case RED_FLAG:
  416. result = "agit_oel_mahum_messenger_4a.htm";
  417. break;
  418. case YELLOW_FLAG:
  419. result = "agit_oel_mahum_messenger_4b.htm";
  420. break;
  421. case GREEN_FLAG:
  422. result = "agit_oel_mahum_messenger_4c.htm";
  423. break;
  424. case BLUE_FLAG:
  425. result = "agit_oel_mahum_messenger_4d.htm";
  426. break;
  427. case PURPLE_FLAG:
  428. result = "agit_oel_mahum_messenger_4e.htm";
  429. break;
  430. default:
  431. result = "<html><body>Are you kidding me?</body></html>";
  432. }
  433. return result;
  434. }
  435. private String getMahumHtml(int mahum)
  436. {
  437. String result = null;
  438. switch(mahum)
  439. {
  440. case OEL_MAHUM_BERSERKER:
  441. result = "agit_oel_mahum_messenger_17.htm";
  442. break;
  443. case OEL_MAHUM_SCOUT:
  444. result = "agit_oel_mahum_messenger_18.htm";
  445. break;
  446. case OEL_MAHUM_LEADER:
  447. result = "agit_oel_mahum_messenger_19.htm";
  448. break;
  449. case OEL_MAHUM_CLERIC:
  450. result = "agit_oel_mahum_messenger_20.htm";
  451. break;
  452. case OEL_MAHUM_THIEF:
  453. result = "agit_oel_mahum_messenger_23.htm";
  454. break;
  455. default:
  456. result = "<html><body>Are you kidding me?</body></html>";
  457. }
  458. return result;
  459. }
  460. // =============================================
  461. // Database access methods
  462. // =============================================
  463. private final void loadAttackers()
  464. {
  465. Connection con = null;
  466. try
  467. {
  468. con = L2DatabaseFactory.getInstance().getConnection();
  469. PreparedStatement statement = con.prepareStatement(SQL_LOAD_ATTACKERS);
  470. ResultSet rset = statement.executeQuery();
  471. while(rset.next())
  472. {
  473. final int clanId = rset.getInt("clan_id");
  474. if(ClanTable.getInstance().getClan(clanId) == null)
  475. {
  476. _log.warning("BanditStronghold: Loaded an unexistent clan as attacker! Clan Id: "+clanId);
  477. continue;
  478. }
  479. ClanData data = new ClanData();
  480. data.flag = rset.getInt("flag");;
  481. data.npc = rset.getInt("npc");
  482. _data.put(clanId, data);
  483. loadAttackerMembers(clanId);
  484. }
  485. rset.close();
  486. statement.close();
  487. }
  488. catch(Exception e)
  489. {
  490. _log.warning("BanditStrongHold.loadAttackers()->"+e.getMessage());
  491. e.printStackTrace();
  492. }
  493. finally
  494. {
  495. L2DatabaseFactory.close(con);
  496. }
  497. }
  498. private final void loadAttackerMembers(int clanId)
  499. {
  500. Connection con = null;
  501. try
  502. {
  503. ArrayList<Integer> listInstance = _data.get(clanId).players;
  504. if(listInstance == null)
  505. {
  506. _log.warning("BanditStronghold: Tried to load unregistered clan: "+clanId+"[clan Id]");
  507. return;
  508. }
  509. con = L2DatabaseFactory.getInstance().getConnection();
  510. PreparedStatement statement = con.prepareStatement(SQL_LOAD_MEMEBERS);
  511. statement.setInt(1, clanId);
  512. ResultSet rset = statement.executeQuery();
  513. while(rset.next())
  514. {
  515. listInstance.add(rset.getInt("object_id"));
  516. }
  517. rset.close();
  518. statement.close();
  519. }
  520. catch(Exception e)
  521. {
  522. _log.warning("BanditStrongHold.loadAttackerMembers()->"+e.getMessage());
  523. e.printStackTrace();
  524. }
  525. finally
  526. {
  527. L2DatabaseFactory.close(con);
  528. }
  529. }
  530. private final void saveClan(int clanId, int flag)
  531. {
  532. Connection con = null;
  533. try
  534. {
  535. con = L2DatabaseFactory.getInstance().getConnection();
  536. PreparedStatement statement = con.prepareStatement(SQL_SAVE_CLAN);
  537. statement.setInt(1, flag);
  538. statement.setInt(2, 0);
  539. statement.setInt(3, clanId);
  540. statement.execute();
  541. statement.close();
  542. }
  543. catch(Exception e)
  544. {
  545. _log.warning("BanditStrongHold.saveClan()->"+e.getMessage());
  546. e.printStackTrace();
  547. }
  548. finally
  549. {
  550. L2DatabaseFactory.close(con);
  551. }
  552. }
  553. private final void saveNpc(int clanId, int npc)
  554. {
  555. Connection con = null;
  556. try
  557. {
  558. con = L2DatabaseFactory.getInstance().getConnection();
  559. PreparedStatement statement = con.prepareStatement(SQL_SAVE_NPC);
  560. statement.setInt(1, npc);
  561. statement.setInt(2, clanId);
  562. statement.execute();
  563. statement.close();
  564. }
  565. catch(Exception e)
  566. {
  567. _log.warning("BanditStrongHold.saveNpc()->"+e.getMessage());
  568. e.printStackTrace();
  569. }
  570. finally
  571. {
  572. L2DatabaseFactory.close(con);
  573. }
  574. }
  575. private final void saveMember(int clanId, int objectId)
  576. {
  577. Connection con = null;
  578. try
  579. {
  580. con = L2DatabaseFactory.getInstance().getConnection();
  581. PreparedStatement statement = con.prepareStatement(SQL_SAVE_ATTACKER);
  582. statement.setInt(1, clanId);
  583. statement.setInt(2, objectId);
  584. statement.execute();
  585. statement.close();
  586. }
  587. catch(Exception e)
  588. {
  589. _log.warning("BanditStronghold.saveMember()->"+e.getMessage());
  590. e.printStackTrace();
  591. }
  592. finally
  593. {
  594. L2DatabaseFactory.close(con);
  595. }
  596. }
  597. private void clearTables()
  598. {
  599. Connection con = null;
  600. try
  601. {
  602. con = L2DatabaseFactory.getInstance().getConnection();
  603. PreparedStatement stat1 = con.prepareStatement(SQL_CLEAR_CLAN);
  604. stat1.execute();
  605. stat1.close();
  606. PreparedStatement stat2 = con.prepareStatement(SQL_CLEAR_CLAN_ATTACKERS);
  607. stat2.execute();
  608. stat2.close();
  609. }
  610. catch(Exception e)
  611. {
  612. _log.warning("BanditStrongHold.clearTables()->"+e.getMessage());
  613. e.printStackTrace();
  614. }
  615. finally
  616. {
  617. L2DatabaseFactory.close(con);
  618. }
  619. }
  620. public static void main(String[] args)
  621. {
  622. new BanditStrongHold(-1, qn, "conquerablehalls", BANDIT_STRONGHOLD);
  623. }
  624. }