L2ClanMember.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760
  1. /*
  2. * Copyright (C) 2004-2015 L2J Server
  3. *
  4. * This file is part of L2J Server.
  5. *
  6. * L2J Server is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J Server is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package com.l2jserver.gameserver.model;
  20. import java.sql.Connection;
  21. import java.sql.PreparedStatement;
  22. import java.sql.ResultSet;
  23. import java.sql.SQLException;
  24. import java.util.logging.Level;
  25. import java.util.logging.Logger;
  26. import com.l2jserver.commons.database.pool.impl.ConnectionFactory;
  27. import com.l2jserver.gameserver.instancemanager.SiegeManager;
  28. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  29. /**
  30. * This class holds the clan members data.
  31. */
  32. public class L2ClanMember
  33. {
  34. private static final Logger _log = Logger.getLogger(L2ClanMember.class.getName());
  35. private final L2Clan _clan;
  36. private int _objectId;
  37. private String _name;
  38. private String _title;
  39. private int _powerGrade;
  40. private int _level;
  41. private int _classId;
  42. private boolean _sex;
  43. private int _raceOrdinal;
  44. private L2PcInstance _player;
  45. private int _pledgeType;
  46. private int _apprentice;
  47. private int _sponsor;
  48. /**
  49. * Used to restore a clan member from the database.
  50. * @param clan the clan where the clan member belongs.
  51. * @param clanMember the clan member result set
  52. * @throws SQLException if the columnLabel is not valid or a database error occurs
  53. */
  54. public L2ClanMember(L2Clan clan, ResultSet clanMember) throws SQLException
  55. {
  56. if (clan == null)
  57. {
  58. throw new IllegalArgumentException("Cannot create a Clan Member with a null clan.");
  59. }
  60. _clan = clan;
  61. _name = clanMember.getString("char_name");
  62. _level = clanMember.getInt("level");
  63. _classId = clanMember.getInt("classid");
  64. _objectId = clanMember.getInt("charId");
  65. _pledgeType = clanMember.getInt("subpledge");
  66. _title = clanMember.getString("title");
  67. _powerGrade = clanMember.getInt("power_grade");
  68. _apprentice = clanMember.getInt("apprentice");
  69. _sponsor = clanMember.getInt("sponsor");
  70. _sex = clanMember.getInt("sex") != 0;
  71. _raceOrdinal = clanMember.getInt("race");
  72. }
  73. /**
  74. * Creates a clan member from a player instance.
  75. * @param clan the clan where the player belongs
  76. * @param player the player from which the clan member will be created
  77. */
  78. public L2ClanMember(L2Clan clan, L2PcInstance player)
  79. {
  80. if (clan == null)
  81. {
  82. throw new IllegalArgumentException("Cannot create a Clan Member if player has a null clan.");
  83. }
  84. _player = player;
  85. _clan = clan;
  86. _name = player.getName();
  87. _level = player.getLevel();
  88. _classId = player.getClassId().getId();
  89. _objectId = player.getObjectId();
  90. _pledgeType = player.getPledgeType();
  91. _powerGrade = player.getPowerGrade();
  92. _title = player.getTitle();
  93. _sponsor = 0;
  94. _apprentice = 0;
  95. _sex = player.getAppearance().getSex();
  96. _raceOrdinal = player.getRace().ordinal();
  97. }
  98. /**
  99. * Sets the player instance.
  100. * @param player the new player instance
  101. */
  102. public void setPlayerInstance(L2PcInstance player)
  103. {
  104. if ((player == null) && (_player != null))
  105. {
  106. // this is here to keep the data when the player logs off
  107. _name = _player.getName();
  108. _level = _player.getLevel();
  109. _classId = _player.getClassId().getId();
  110. _objectId = _player.getObjectId();
  111. _powerGrade = _player.getPowerGrade();
  112. _pledgeType = _player.getPledgeType();
  113. _title = _player.getTitle();
  114. _apprentice = _player.getApprentice();
  115. _sponsor = _player.getSponsor();
  116. _sex = _player.getAppearance().getSex();
  117. _raceOrdinal = _player.getRace().ordinal();
  118. }
  119. if (player != null)
  120. {
  121. _clan.addSkillEffects(player);
  122. if ((_clan.getLevel() > 3) && player.isClanLeader())
  123. {
  124. SiegeManager.getInstance().addSiegeSkills(player);
  125. }
  126. if (player.isClanLeader())
  127. {
  128. _clan.setLeader(this);
  129. }
  130. }
  131. _player = player;
  132. }
  133. /**
  134. * Gets the player instance.
  135. * @return the player instance
  136. */
  137. public L2PcInstance getPlayerInstance()
  138. {
  139. return _player;
  140. }
  141. /**
  142. * Verifies if the clan member is online.
  143. * @return {@code true} if is online
  144. */
  145. public boolean isOnline()
  146. {
  147. if ((_player == null) || !_player.isOnline())
  148. {
  149. return false;
  150. }
  151. if (_player.isInOfflineMode())
  152. {
  153. return false;
  154. }
  155. return true;
  156. }
  157. /**
  158. * Gets the class id.
  159. * @return the classId
  160. */
  161. public int getClassId()
  162. {
  163. if (_player != null)
  164. {
  165. return _player.getClassId().getId();
  166. }
  167. return _classId;
  168. }
  169. /**
  170. * Gets the level.
  171. * @return the level
  172. */
  173. public int getLevel()
  174. {
  175. if (_player != null)
  176. {
  177. return _player.getLevel();
  178. }
  179. return _level;
  180. }
  181. /**
  182. * Gets the name.
  183. * @return the name
  184. */
  185. public String getName()
  186. {
  187. if (_player != null)
  188. {
  189. return _player.getName();
  190. }
  191. return _name;
  192. }
  193. /**
  194. * Gets the object id.
  195. * @return Returns the objectId.
  196. */
  197. public int getObjectId()
  198. {
  199. if (_player != null)
  200. {
  201. return _player.getObjectId();
  202. }
  203. return _objectId;
  204. }
  205. /**
  206. * Gets the title.
  207. * @return the title
  208. */
  209. public String getTitle()
  210. {
  211. if (_player != null)
  212. {
  213. return _player.getTitle();
  214. }
  215. return _title;
  216. }
  217. /**
  218. * Gets the pledge type.
  219. * @return the pledge type
  220. */
  221. public int getPledgeType()
  222. {
  223. if (_player != null)
  224. {
  225. return _player.getPledgeType();
  226. }
  227. return _pledgeType;
  228. }
  229. /**
  230. * Sets the pledge type.
  231. * @param pledgeType the new pledge type
  232. */
  233. public void setPledgeType(int pledgeType)
  234. {
  235. _pledgeType = pledgeType;
  236. if (_player != null)
  237. {
  238. _player.setPledgeType(pledgeType);
  239. }
  240. else
  241. {
  242. // db save if char not logged in
  243. updatePledgeType();
  244. }
  245. }
  246. /**
  247. * Update pledge type.
  248. */
  249. public void updatePledgeType()
  250. {
  251. try (Connection con = ConnectionFactory.getInstance().getConnection();
  252. PreparedStatement ps = con.prepareStatement("UPDATE characters SET subpledge=? WHERE charId=?"))
  253. {
  254. ps.setLong(1, _pledgeType);
  255. ps.setInt(2, getObjectId());
  256. ps.execute();
  257. }
  258. catch (Exception e)
  259. {
  260. _log.log(Level.WARNING, "Could not update pledge type: " + e.getMessage(), e);
  261. }
  262. }
  263. /**
  264. * Gets the power grade.
  265. * @return the power grade
  266. */
  267. public int getPowerGrade()
  268. {
  269. if (_player != null)
  270. {
  271. return _player.getPowerGrade();
  272. }
  273. return _powerGrade;
  274. }
  275. /**
  276. * Sets the power grade.
  277. * @param powerGrade the new power grade
  278. */
  279. public void setPowerGrade(int powerGrade)
  280. {
  281. _powerGrade = powerGrade;
  282. if (_player != null)
  283. {
  284. _player.setPowerGrade(powerGrade);
  285. }
  286. else
  287. {
  288. // db save if char not logged in
  289. updatePowerGrade();
  290. }
  291. }
  292. /**
  293. * Update the characters table of the database with power grade.
  294. */
  295. public void updatePowerGrade()
  296. {
  297. try (Connection con = ConnectionFactory.getInstance().getConnection();
  298. PreparedStatement ps = con.prepareStatement("UPDATE characters SET power_grade=? WHERE charId=?"))
  299. {
  300. ps.setLong(1, _powerGrade);
  301. ps.setInt(2, getObjectId());
  302. ps.execute();
  303. }
  304. catch (Exception e)
  305. {
  306. _log.log(Level.WARNING, "Could not update power _grade: " + e.getMessage(), e);
  307. }
  308. }
  309. /**
  310. * Sets the apprentice and sponsor.
  311. * @param apprenticeID the apprentice id
  312. * @param sponsorID the sponsor id
  313. */
  314. public void setApprenticeAndSponsor(int apprenticeID, int sponsorID)
  315. {
  316. _apprentice = apprenticeID;
  317. _sponsor = sponsorID;
  318. }
  319. /**
  320. * Gets the player's race ordinal.
  321. * @return the race ordinal
  322. */
  323. public int getRaceOrdinal()
  324. {
  325. if (_player != null)
  326. {
  327. return _player.getRace().ordinal();
  328. }
  329. return _raceOrdinal;
  330. }
  331. /**
  332. * Gets the player's sex.
  333. * @return the sex
  334. */
  335. public boolean getSex()
  336. {
  337. if (_player != null)
  338. {
  339. return _player.getAppearance().getSex();
  340. }
  341. return _sex;
  342. }
  343. /**
  344. * Gets the sponsor.
  345. * @return the sponsor
  346. */
  347. public int getSponsor()
  348. {
  349. if (_player != null)
  350. {
  351. return _player.getSponsor();
  352. }
  353. return _sponsor;
  354. }
  355. /**
  356. * Gets the apprentice.
  357. * @return the apprentice
  358. */
  359. public int getApprentice()
  360. {
  361. if (_player != null)
  362. {
  363. return _player.getApprentice();
  364. }
  365. return _apprentice;
  366. }
  367. /**
  368. * Gets the apprentice or sponsor name.
  369. * @return the apprentice or sponsor name
  370. */
  371. public String getApprenticeOrSponsorName()
  372. {
  373. if (_player != null)
  374. {
  375. _apprentice = _player.getApprentice();
  376. _sponsor = _player.getSponsor();
  377. }
  378. if (_apprentice != 0)
  379. {
  380. L2ClanMember apprentice = _clan.getClanMember(_apprentice);
  381. if (apprentice != null)
  382. {
  383. return apprentice.getName();
  384. }
  385. return "Error";
  386. }
  387. if (_sponsor != 0)
  388. {
  389. L2ClanMember sponsor = _clan.getClanMember(_sponsor);
  390. if (sponsor != null)
  391. {
  392. return sponsor.getName();
  393. }
  394. return "Error";
  395. }
  396. return "";
  397. }
  398. /**
  399. * Gets the clan.
  400. * @return the clan
  401. */
  402. public L2Clan getClan()
  403. {
  404. return _clan;
  405. }
  406. /**
  407. * Calculate pledge class.
  408. * @param player the player
  409. * @return the int
  410. */
  411. public static int calculatePledgeClass(L2PcInstance player)
  412. {
  413. int pledgeClass = 0;
  414. if (player == null)
  415. {
  416. return pledgeClass;
  417. }
  418. L2Clan clan = player.getClan();
  419. if (clan != null)
  420. {
  421. switch (clan.getLevel())
  422. {
  423. case 4:
  424. if (player.isClanLeader())
  425. {
  426. pledgeClass = 3;
  427. }
  428. break;
  429. case 5:
  430. if (player.isClanLeader())
  431. {
  432. pledgeClass = 4;
  433. }
  434. else
  435. {
  436. pledgeClass = 2;
  437. }
  438. break;
  439. case 6:
  440. switch (player.getPledgeType())
  441. {
  442. case -1:
  443. pledgeClass = 1;
  444. break;
  445. case 100:
  446. case 200:
  447. pledgeClass = 2;
  448. break;
  449. case 0:
  450. if (player.isClanLeader())
  451. {
  452. pledgeClass = 5;
  453. }
  454. else
  455. {
  456. switch (clan.getLeaderSubPledge(player.getObjectId()))
  457. {
  458. case 100:
  459. case 200:
  460. pledgeClass = 4;
  461. break;
  462. case -1:
  463. default:
  464. pledgeClass = 3;
  465. break;
  466. }
  467. }
  468. break;
  469. }
  470. break;
  471. case 7:
  472. switch (player.getPledgeType())
  473. {
  474. case -1:
  475. pledgeClass = 1;
  476. break;
  477. case 100:
  478. case 200:
  479. pledgeClass = 3;
  480. break;
  481. case 1001:
  482. case 1002:
  483. case 2001:
  484. case 2002:
  485. pledgeClass = 2;
  486. break;
  487. case 0:
  488. if (player.isClanLeader())
  489. {
  490. pledgeClass = 7;
  491. }
  492. else
  493. {
  494. switch (clan.getLeaderSubPledge(player.getObjectId()))
  495. {
  496. case 100:
  497. case 200:
  498. pledgeClass = 6;
  499. break;
  500. case 1001:
  501. case 1002:
  502. case 2001:
  503. case 2002:
  504. pledgeClass = 5;
  505. break;
  506. case -1:
  507. default:
  508. pledgeClass = 4;
  509. break;
  510. }
  511. }
  512. break;
  513. }
  514. break;
  515. case 8:
  516. switch (player.getPledgeType())
  517. {
  518. case -1:
  519. pledgeClass = 1;
  520. break;
  521. case 100:
  522. case 200:
  523. pledgeClass = 4;
  524. break;
  525. case 1001:
  526. case 1002:
  527. case 2001:
  528. case 2002:
  529. pledgeClass = 3;
  530. break;
  531. case 0:
  532. if (player.isClanLeader())
  533. {
  534. pledgeClass = 8;
  535. }
  536. else
  537. {
  538. switch (clan.getLeaderSubPledge(player.getObjectId()))
  539. {
  540. case 100:
  541. case 200:
  542. pledgeClass = 7;
  543. break;
  544. case 1001:
  545. case 1002:
  546. case 2001:
  547. case 2002:
  548. pledgeClass = 6;
  549. break;
  550. case -1:
  551. default:
  552. pledgeClass = 5;
  553. break;
  554. }
  555. }
  556. break;
  557. }
  558. break;
  559. case 9:
  560. switch (player.getPledgeType())
  561. {
  562. case -1:
  563. pledgeClass = 1;
  564. break;
  565. case 100:
  566. case 200:
  567. pledgeClass = 5;
  568. break;
  569. case 1001:
  570. case 1002:
  571. case 2001:
  572. case 2002:
  573. pledgeClass = 4;
  574. break;
  575. case 0:
  576. if (player.isClanLeader())
  577. {
  578. pledgeClass = 9;
  579. }
  580. else
  581. {
  582. switch (clan.getLeaderSubPledge(player.getObjectId()))
  583. {
  584. case 100:
  585. case 200:
  586. pledgeClass = 8;
  587. break;
  588. case 1001:
  589. case 1002:
  590. case 2001:
  591. case 2002:
  592. pledgeClass = 7;
  593. break;
  594. case -1:
  595. default:
  596. pledgeClass = 6;
  597. break;
  598. }
  599. }
  600. break;
  601. }
  602. break;
  603. case 10:
  604. switch (player.getPledgeType())
  605. {
  606. case -1:
  607. pledgeClass = 1;
  608. break;
  609. case 100:
  610. case 200:
  611. pledgeClass = 6;
  612. break;
  613. case 1001:
  614. case 1002:
  615. case 2001:
  616. case 2002:
  617. pledgeClass = 5;
  618. break;
  619. case 0:
  620. if (player.isClanLeader())
  621. {
  622. pledgeClass = 10;
  623. }
  624. else
  625. {
  626. switch (clan.getLeaderSubPledge(player.getObjectId()))
  627. {
  628. case 100:
  629. case 200:
  630. pledgeClass = 9;
  631. break;
  632. case 1001:
  633. case 1002:
  634. case 2001:
  635. case 2002:
  636. pledgeClass = 8;
  637. break;
  638. case -1:
  639. default:
  640. pledgeClass = 7;
  641. break;
  642. }
  643. }
  644. break;
  645. }
  646. break;
  647. case 11:
  648. switch (player.getPledgeType())
  649. {
  650. case -1:
  651. pledgeClass = 1;
  652. break;
  653. case 100:
  654. case 200:
  655. pledgeClass = 7;
  656. break;
  657. case 1001:
  658. case 1002:
  659. case 2001:
  660. case 2002:
  661. pledgeClass = 6;
  662. break;
  663. case 0:
  664. if (player.isClanLeader())
  665. {
  666. pledgeClass = 11;
  667. }
  668. else
  669. {
  670. switch (clan.getLeaderSubPledge(player.getObjectId()))
  671. {
  672. case 100:
  673. case 200:
  674. pledgeClass = 10;
  675. break;
  676. case 1001:
  677. case 1002:
  678. case 2001:
  679. case 2002:
  680. pledgeClass = 9;
  681. break;
  682. case -1:
  683. default:
  684. pledgeClass = 8;
  685. break;
  686. }
  687. }
  688. break;
  689. }
  690. break;
  691. default:
  692. pledgeClass = 1;
  693. break;
  694. }
  695. }
  696. if (player.isNoble() && (pledgeClass < 5))
  697. {
  698. pledgeClass = 5;
  699. }
  700. if (player.isHero() && (pledgeClass < 8))
  701. {
  702. pledgeClass = 8;
  703. }
  704. return pledgeClass;
  705. }
  706. /**
  707. * Save apprentice and sponsor.
  708. * @param apprentice the apprentice
  709. * @param sponsor the sponsor
  710. */
  711. public void saveApprenticeAndSponsor(int apprentice, int sponsor)
  712. {
  713. try (Connection con = ConnectionFactory.getInstance().getConnection();
  714. PreparedStatement ps = con.prepareStatement("UPDATE characters SET apprentice=?,sponsor=? WHERE charId=?"))
  715. {
  716. ps.setInt(1, apprentice);
  717. ps.setInt(2, sponsor);
  718. ps.setInt(3, getObjectId());
  719. ps.execute();
  720. }
  721. catch (SQLException e)
  722. {
  723. _log.log(Level.WARNING, "Could not save apprentice/sponsor: " + e.getMessage(), e);
  724. }
  725. }
  726. }