L2ClanMember.java 16 KB

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