L2ClanMember.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762
  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. _clan = clan;
  81. _name = player.getName();
  82. _level = player.getLevel();
  83. _classId = player.getClassId().getId();
  84. _objectId = player.getObjectId();
  85. _pledgeType = player.getPledgeType();
  86. _powerGrade = player.getPowerGrade();
  87. _title = player.getTitle();
  88. _sponsor = 0;
  89. _apprentice = 0;
  90. _sex = player.getAppearance().getSex();
  91. _raceOrdinal = player.getRace().ordinal();
  92. }
  93. /**
  94. * Sets the player instance.
  95. * @param player the new player instance
  96. */
  97. public void setPlayerInstance(L2PcInstance player)
  98. {
  99. if ((player == null) && (_player != null))
  100. {
  101. // this is here to keep the data when the player logs off
  102. _name = _player.getName();
  103. _level = _player.getLevel();
  104. _classId = _player.getClassId().getId();
  105. _objectId = _player.getObjectId();
  106. _powerGrade = _player.getPowerGrade();
  107. _pledgeType = _player.getPledgeType();
  108. _title = _player.getTitle();
  109. _apprentice = _player.getApprentice();
  110. _sponsor = _player.getSponsor();
  111. _sex = _player.getAppearance().getSex();
  112. _raceOrdinal = _player.getRace().ordinal();
  113. }
  114. if (player != null)
  115. {
  116. _clan.addSkillEffects(player);
  117. if ((_clan.getLevel() > 3) && player.isClanLeader())
  118. {
  119. SiegeManager.getInstance().addSiegeSkills(player);
  120. }
  121. if (player.isClanLeader())
  122. {
  123. _clan.setLeader(this);
  124. }
  125. }
  126. _player = player;
  127. }
  128. /**
  129. * Gets the player instance.
  130. * @return the player instance
  131. */
  132. public L2PcInstance getPlayerInstance()
  133. {
  134. return _player;
  135. }
  136. /**
  137. * Checks if is online.
  138. * @return true, if is online
  139. */
  140. public boolean isOnline()
  141. {
  142. if ((_player == null) || !_player.isOnline())
  143. {
  144. return false;
  145. }
  146. if (_player.getClient() == null)
  147. {
  148. return false;
  149. }
  150. if (_player.getClient().isDetached())
  151. {
  152. return false;
  153. }
  154. return true;
  155. }
  156. /**
  157. * Gets the class id.
  158. * @return the classId
  159. */
  160. public int getClassId()
  161. {
  162. if (_player != null)
  163. {
  164. return _player.getClassId().getId();
  165. }
  166. return _classId;
  167. }
  168. /**
  169. * Gets the level.
  170. * @return the level
  171. */
  172. public int getLevel()
  173. {
  174. if (_player != null)
  175. {
  176. return _player.getLevel();
  177. }
  178. return _level;
  179. }
  180. /**
  181. * Gets the name.
  182. * @return the name
  183. */
  184. public String getName()
  185. {
  186. if (_player != null)
  187. {
  188. return _player.getName();
  189. }
  190. return _name;
  191. }
  192. /**
  193. * Gets the object id.
  194. * @return Returns the objectId.
  195. */
  196. public int getObjectId()
  197. {
  198. if (_player != null)
  199. {
  200. return _player.getObjectId();
  201. }
  202. return _objectId;
  203. }
  204. /**
  205. * Gets the title.
  206. * @return the title
  207. */
  208. public String getTitle()
  209. {
  210. if (_player != null)
  211. {
  212. return _player.getTitle();
  213. }
  214. return _title;
  215. }
  216. /**
  217. * Gets the pledge type.
  218. * @return the pledge type
  219. */
  220. public int getPledgeType()
  221. {
  222. if (_player != null)
  223. {
  224. return _player.getPledgeType();
  225. }
  226. return _pledgeType;
  227. }
  228. /**
  229. * Sets the pledge type.
  230. * @param pledgeType the new pledge type
  231. */
  232. public void setPledgeType(int pledgeType)
  233. {
  234. _pledgeType = pledgeType;
  235. if (_player != null)
  236. {
  237. _player.setPledgeType(pledgeType);
  238. }
  239. else
  240. {
  241. // db save if char not logged in
  242. updatePledgeType();
  243. }
  244. }
  245. /**
  246. * Update pledge type.
  247. */
  248. public void updatePledgeType()
  249. {
  250. try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  251. {
  252. PreparedStatement statement = con.prepareStatement("UPDATE characters SET subpledge=? WHERE charId=?");
  253. statement.setLong(1, _pledgeType);
  254. statement.setInt(2, getObjectId());
  255. statement.execute();
  256. statement.close();
  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 = L2DatabaseFactory.getInstance().getConnection())
  298. {
  299. PreparedStatement statement = con.prepareStatement("UPDATE characters SET power_grade=? WHERE charId=?");
  300. statement.setLong(1, _powerGrade);
  301. statement.setInt(2, getObjectId());
  302. statement.execute();
  303. statement.close();
  304. }
  305. catch (Exception e)
  306. {
  307. _log.log(Level.WARNING, "Could not update power _grade: " + e.getMessage(), e);
  308. }
  309. }
  310. /**
  311. * Sets the apprentice and sponsor.
  312. * @param apprenticeID the apprentice id
  313. * @param sponsorID the sponsor id
  314. */
  315. public void setApprenticeAndSponsor(int apprenticeID, int sponsorID)
  316. {
  317. _apprentice = apprenticeID;
  318. _sponsor = sponsorID;
  319. }
  320. /**
  321. * Gets the player's race ordinal.
  322. * @return the race ordinal
  323. */
  324. public int getRaceOrdinal()
  325. {
  326. if (_player != null)
  327. {
  328. return _player.getRace().ordinal();
  329. }
  330. return _raceOrdinal;
  331. }
  332. /**
  333. * Gets the player's sex.
  334. * @return the sex
  335. */
  336. public boolean getSex()
  337. {
  338. if (_player != null)
  339. {
  340. return _player.getAppearance().getSex();
  341. }
  342. return _sex;
  343. }
  344. /**
  345. * Gets the sponsor.
  346. * @return the sponsor
  347. */
  348. public int getSponsor()
  349. {
  350. if (_player != null)
  351. {
  352. return _player.getSponsor();
  353. }
  354. return _sponsor;
  355. }
  356. /**
  357. * Gets the apprentice.
  358. * @return the apprentice
  359. */
  360. public int getApprentice()
  361. {
  362. if (_player != null)
  363. {
  364. return _player.getApprentice();
  365. }
  366. return _apprentice;
  367. }
  368. /**
  369. * Gets the apprentice or sponsor name.
  370. * @return the apprentice or sponsor name
  371. */
  372. public String getApprenticeOrSponsorName()
  373. {
  374. if (_player != null)
  375. {
  376. _apprentice = _player.getApprentice();
  377. _sponsor = _player.getSponsor();
  378. }
  379. if (_apprentice != 0)
  380. {
  381. L2ClanMember apprentice = _clan.getClanMember(_apprentice);
  382. if (apprentice != null)
  383. {
  384. return apprentice.getName();
  385. }
  386. return "Error";
  387. }
  388. if (_sponsor != 0)
  389. {
  390. L2ClanMember sponsor = _clan.getClanMember(_sponsor);
  391. if (sponsor != null)
  392. {
  393. return sponsor.getName();
  394. }
  395. return "Error";
  396. }
  397. return "";
  398. }
  399. /**
  400. * Gets the clan.
  401. * @return the clan
  402. */
  403. public L2Clan getClan()
  404. {
  405. return _clan;
  406. }
  407. /**
  408. * Calculate pledge class.
  409. * @param player the player
  410. * @return the int
  411. */
  412. public static int calculatePledgeClass(L2PcInstance player)
  413. {
  414. int pledgeClass = 0;
  415. if (player == null)
  416. {
  417. return pledgeClass;
  418. }
  419. L2Clan clan = player.getClan();
  420. if (clan != null)
  421. {
  422. switch (clan.getLevel())
  423. {
  424. case 4:
  425. if (player.isClanLeader())
  426. {
  427. pledgeClass = 3;
  428. }
  429. break;
  430. case 5:
  431. if (player.isClanLeader())
  432. {
  433. pledgeClass = 4;
  434. }
  435. else
  436. {
  437. pledgeClass = 2;
  438. }
  439. break;
  440. case 6:
  441. switch (player.getPledgeType())
  442. {
  443. case -1:
  444. pledgeClass = 1;
  445. break;
  446. case 100:
  447. case 200:
  448. pledgeClass = 2;
  449. break;
  450. case 0:
  451. if (player.isClanLeader())
  452. {
  453. pledgeClass = 5;
  454. }
  455. else
  456. {
  457. switch (clan.getLeaderSubPledge(player.getObjectId()))
  458. {
  459. case 100:
  460. case 200:
  461. pledgeClass = 4;
  462. break;
  463. case -1:
  464. default:
  465. pledgeClass = 3;
  466. break;
  467. }
  468. }
  469. break;
  470. }
  471. break;
  472. case 7:
  473. switch (player.getPledgeType())
  474. {
  475. case -1:
  476. pledgeClass = 1;
  477. break;
  478. case 100:
  479. case 200:
  480. pledgeClass = 3;
  481. break;
  482. case 1001:
  483. case 1002:
  484. case 2001:
  485. case 2002:
  486. pledgeClass = 2;
  487. break;
  488. case 0:
  489. if (player.isClanLeader())
  490. {
  491. pledgeClass = 7;
  492. }
  493. else
  494. {
  495. switch (clan.getLeaderSubPledge(player.getObjectId()))
  496. {
  497. case 100:
  498. case 200:
  499. pledgeClass = 6;
  500. break;
  501. case 1001:
  502. case 1002:
  503. case 2001:
  504. case 2002:
  505. pledgeClass = 5;
  506. break;
  507. case -1:
  508. default:
  509. pledgeClass = 4;
  510. break;
  511. }
  512. }
  513. break;
  514. }
  515. break;
  516. case 8:
  517. switch (player.getPledgeType())
  518. {
  519. case -1:
  520. pledgeClass = 1;
  521. break;
  522. case 100:
  523. case 200:
  524. pledgeClass = 4;
  525. break;
  526. case 1001:
  527. case 1002:
  528. case 2001:
  529. case 2002:
  530. pledgeClass = 3;
  531. break;
  532. case 0:
  533. if (player.isClanLeader())
  534. {
  535. pledgeClass = 8;
  536. }
  537. else
  538. {
  539. switch (clan.getLeaderSubPledge(player.getObjectId()))
  540. {
  541. case 100:
  542. case 200:
  543. pledgeClass = 7;
  544. break;
  545. case 1001:
  546. case 1002:
  547. case 2001:
  548. case 2002:
  549. pledgeClass = 6;
  550. break;
  551. case -1:
  552. default:
  553. pledgeClass = 5;
  554. break;
  555. }
  556. }
  557. break;
  558. }
  559. break;
  560. case 9:
  561. switch (player.getPledgeType())
  562. {
  563. case -1:
  564. pledgeClass = 1;
  565. break;
  566. case 100:
  567. case 200:
  568. pledgeClass = 5;
  569. break;
  570. case 1001:
  571. case 1002:
  572. case 2001:
  573. case 2002:
  574. pledgeClass = 4;
  575. break;
  576. case 0:
  577. if (player.isClanLeader())
  578. {
  579. pledgeClass = 9;
  580. }
  581. else
  582. {
  583. switch (clan.getLeaderSubPledge(player.getObjectId()))
  584. {
  585. case 100:
  586. case 200:
  587. pledgeClass = 8;
  588. break;
  589. case 1001:
  590. case 1002:
  591. case 2001:
  592. case 2002:
  593. pledgeClass = 7;
  594. break;
  595. case -1:
  596. default:
  597. pledgeClass = 6;
  598. break;
  599. }
  600. }
  601. break;
  602. }
  603. break;
  604. case 10:
  605. switch (player.getPledgeType())
  606. {
  607. case -1:
  608. pledgeClass = 1;
  609. break;
  610. case 100:
  611. case 200:
  612. pledgeClass = 6;
  613. break;
  614. case 1001:
  615. case 1002:
  616. case 2001:
  617. case 2002:
  618. pledgeClass = 5;
  619. break;
  620. case 0:
  621. if (player.isClanLeader())
  622. {
  623. pledgeClass = 10;
  624. }
  625. else
  626. {
  627. switch (clan.getLeaderSubPledge(player.getObjectId()))
  628. {
  629. case 100:
  630. case 200:
  631. pledgeClass = 9;
  632. break;
  633. case 1001:
  634. case 1002:
  635. case 2001:
  636. case 2002:
  637. pledgeClass = 8;
  638. break;
  639. case -1:
  640. default:
  641. pledgeClass = 7;
  642. break;
  643. }
  644. }
  645. break;
  646. }
  647. break;
  648. case 11:
  649. switch (player.getPledgeType())
  650. {
  651. case -1:
  652. pledgeClass = 1;
  653. break;
  654. case 100:
  655. case 200:
  656. pledgeClass = 7;
  657. break;
  658. case 1001:
  659. case 1002:
  660. case 2001:
  661. case 2002:
  662. pledgeClass = 6;
  663. break;
  664. case 0:
  665. if (player.isClanLeader())
  666. {
  667. pledgeClass = 11;
  668. }
  669. else
  670. {
  671. switch (clan.getLeaderSubPledge(player.getObjectId()))
  672. {
  673. case 100:
  674. case 200:
  675. pledgeClass = 10;
  676. break;
  677. case 1001:
  678. case 1002:
  679. case 2001:
  680. case 2002:
  681. pledgeClass = 9;
  682. break;
  683. case -1:
  684. default:
  685. pledgeClass = 8;
  686. break;
  687. }
  688. }
  689. break;
  690. }
  691. break;
  692. default:
  693. pledgeClass = 1;
  694. break;
  695. }
  696. }
  697. if (player.isNoble() && (pledgeClass < 5))
  698. {
  699. pledgeClass = 5;
  700. }
  701. if (player.isHero() && (pledgeClass < 8))
  702. {
  703. pledgeClass = 8;
  704. }
  705. return pledgeClass;
  706. }
  707. /**
  708. * Save apprentice and sponsor.
  709. * @param apprentice the apprentice
  710. * @param sponsor the sponsor
  711. */
  712. public void saveApprenticeAndSponsor(int apprentice, int sponsor)
  713. {
  714. try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  715. {
  716. PreparedStatement statement = con.prepareStatement("UPDATE characters SET apprentice=?,sponsor=? WHERE charId=?");
  717. statement.setInt(1, apprentice);
  718. statement.setInt(2, sponsor);
  719. statement.setInt(3, getObjectId());
  720. statement.execute();
  721. statement.close();
  722. }
  723. catch (SQLException e)
  724. {
  725. _log.log(Level.WARNING, "Could not save apprentice/sponsor: " + e.getMessage(), e);
  726. }
  727. }
  728. }