/* * Copyright (C) 2004-2015 L2J Server * * This file is part of L2J Server. * * L2J Server is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * L2J Server is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package com.l2jserver.gameserver.model; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import com.l2jserver.L2DatabaseFactory; import com.l2jserver.gameserver.instancemanager.SiegeManager; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; /** * This class holds the clan members data. */ public class L2ClanMember { private static final Logger _log = Logger.getLogger(L2ClanMember.class.getName()); private final L2Clan _clan; private int _objectId; private String _name; private String _title; private int _powerGrade; private int _level; private int _classId; private boolean _sex; private int _raceOrdinal; private L2PcInstance _player; private int _pledgeType; private int _apprentice; private int _sponsor; /** * Used to restore a clan member from the database. * @param clan the clan where the clan member belongs. * @param clanMember the clan member result set * @throws SQLException if the columnLabel is not valid or a database error occurs */ public L2ClanMember(L2Clan clan, ResultSet clanMember) throws SQLException { if (clan == null) { throw new IllegalArgumentException("Cannot create a Clan Member with a null clan."); } _clan = clan; _name = clanMember.getString("char_name"); _level = clanMember.getInt("level"); _classId = clanMember.getInt("classid"); _objectId = clanMember.getInt("charId"); _pledgeType = clanMember.getInt("subpledge"); _title = clanMember.getString("title"); _powerGrade = clanMember.getInt("power_grade"); _apprentice = clanMember.getInt("apprentice"); _sponsor = clanMember.getInt("sponsor"); _sex = clanMember.getInt("sex") != 0; _raceOrdinal = clanMember.getInt("race"); } /** * Creates a clan member from a player instance. * @param clan the clan where the player belongs * @param player the player from which the clan member will be created */ public L2ClanMember(L2Clan clan, L2PcInstance player) { if (clan == null) { throw new IllegalArgumentException("Cannot create a Clan Member if player has a null clan."); } _player = player; _clan = clan; _name = player.getName(); _level = player.getLevel(); _classId = player.getClassId().getId(); _objectId = player.getObjectId(); _pledgeType = player.getPledgeType(); _powerGrade = player.getPowerGrade(); _title = player.getTitle(); _sponsor = 0; _apprentice = 0; _sex = player.getAppearance().getSex(); _raceOrdinal = player.getRace().ordinal(); } /** * Sets the player instance. * @param player the new player instance */ public void setPlayerInstance(L2PcInstance player) { if ((player == null) && (_player != null)) { // this is here to keep the data when the player logs off _name = _player.getName(); _level = _player.getLevel(); _classId = _player.getClassId().getId(); _objectId = _player.getObjectId(); _powerGrade = _player.getPowerGrade(); _pledgeType = _player.getPledgeType(); _title = _player.getTitle(); _apprentice = _player.getApprentice(); _sponsor = _player.getSponsor(); _sex = _player.getAppearance().getSex(); _raceOrdinal = _player.getRace().ordinal(); } if (player != null) { _clan.addSkillEffects(player); if ((_clan.getLevel() > 3) && player.isClanLeader()) { SiegeManager.getInstance().addSiegeSkills(player); } if (player.isClanLeader()) { _clan.setLeader(this); } } _player = player; } /** * Gets the player instance. * @return the player instance */ public L2PcInstance getPlayerInstance() { return _player; } /** * Checks if is online. * @return true, if is online */ public boolean isOnline() { if ((_player == null) || !_player.isOnline()) { return false; } if (_player.getClient() == null) { return false; } if (_player.getClient().isDetached()) { return false; } return true; } /** * Gets the class id. * @return the classId */ public int getClassId() { if (_player != null) { return _player.getClassId().getId(); } return _classId; } /** * Gets the level. * @return the level */ public int getLevel() { if (_player != null) { return _player.getLevel(); } return _level; } /** * Gets the name. * @return the name */ public String getName() { if (_player != null) { return _player.getName(); } return _name; } /** * Gets the object id. * @return Returns the objectId. */ public int getObjectId() { if (_player != null) { return _player.getObjectId(); } return _objectId; } /** * Gets the title. * @return the title */ public String getTitle() { if (_player != null) { return _player.getTitle(); } return _title; } /** * Gets the pledge type. * @return the pledge type */ public int getPledgeType() { if (_player != null) { return _player.getPledgeType(); } return _pledgeType; } /** * Sets the pledge type. * @param pledgeType the new pledge type */ public void setPledgeType(int pledgeType) { _pledgeType = pledgeType; if (_player != null) { _player.setPledgeType(pledgeType); } else { // db save if char not logged in updatePledgeType(); } } /** * Update pledge type. */ public void updatePledgeType() { try (Connection con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement ps = con.prepareStatement("UPDATE characters SET subpledge=? WHERE charId=?")) { ps.setLong(1, _pledgeType); ps.setInt(2, getObjectId()); ps.execute(); } catch (Exception e) { _log.log(Level.WARNING, "Could not update pledge type: " + e.getMessage(), e); } } /** * Gets the power grade. * @return the power grade */ public int getPowerGrade() { if (_player != null) { return _player.getPowerGrade(); } return _powerGrade; } /** * Sets the power grade. * @param powerGrade the new power grade */ public void setPowerGrade(int powerGrade) { _powerGrade = powerGrade; if (_player != null) { _player.setPowerGrade(powerGrade); } else { // db save if char not logged in updatePowerGrade(); } } /** * Update the characters table of the database with power grade. */ public void updatePowerGrade() { try (Connection con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement ps = con.prepareStatement("UPDATE characters SET power_grade=? WHERE charId=?")) { ps.setLong(1, _powerGrade); ps.setInt(2, getObjectId()); ps.execute(); } catch (Exception e) { _log.log(Level.WARNING, "Could not update power _grade: " + e.getMessage(), e); } } /** * Sets the apprentice and sponsor. * @param apprenticeID the apprentice id * @param sponsorID the sponsor id */ public void setApprenticeAndSponsor(int apprenticeID, int sponsorID) { _apprentice = apprenticeID; _sponsor = sponsorID; } /** * Gets the player's race ordinal. * @return the race ordinal */ public int getRaceOrdinal() { if (_player != null) { return _player.getRace().ordinal(); } return _raceOrdinal; } /** * Gets the player's sex. * @return the sex */ public boolean getSex() { if (_player != null) { return _player.getAppearance().getSex(); } return _sex; } /** * Gets the sponsor. * @return the sponsor */ public int getSponsor() { if (_player != null) { return _player.getSponsor(); } return _sponsor; } /** * Gets the apprentice. * @return the apprentice */ public int getApprentice() { if (_player != null) { return _player.getApprentice(); } return _apprentice; } /** * Gets the apprentice or sponsor name. * @return the apprentice or sponsor name */ public String getApprenticeOrSponsorName() { if (_player != null) { _apprentice = _player.getApprentice(); _sponsor = _player.getSponsor(); } if (_apprentice != 0) { L2ClanMember apprentice = _clan.getClanMember(_apprentice); if (apprentice != null) { return apprentice.getName(); } return "Error"; } if (_sponsor != 0) { L2ClanMember sponsor = _clan.getClanMember(_sponsor); if (sponsor != null) { return sponsor.getName(); } return "Error"; } return ""; } /** * Gets the clan. * @return the clan */ public L2Clan getClan() { return _clan; } /** * Calculate pledge class. * @param player the player * @return the int */ public static int calculatePledgeClass(L2PcInstance player) { int pledgeClass = 0; if (player == null) { return pledgeClass; } L2Clan clan = player.getClan(); if (clan != null) { switch (clan.getLevel()) { case 4: if (player.isClanLeader()) { pledgeClass = 3; } break; case 5: if (player.isClanLeader()) { pledgeClass = 4; } else { pledgeClass = 2; } break; case 6: switch (player.getPledgeType()) { case -1: pledgeClass = 1; break; case 100: case 200: pledgeClass = 2; break; case 0: if (player.isClanLeader()) { pledgeClass = 5; } else { switch (clan.getLeaderSubPledge(player.getObjectId())) { case 100: case 200: pledgeClass = 4; break; case -1: default: pledgeClass = 3; break; } } break; } break; case 7: switch (player.getPledgeType()) { case -1: pledgeClass = 1; break; case 100: case 200: pledgeClass = 3; break; case 1001: case 1002: case 2001: case 2002: pledgeClass = 2; break; case 0: if (player.isClanLeader()) { pledgeClass = 7; } else { switch (clan.getLeaderSubPledge(player.getObjectId())) { case 100: case 200: pledgeClass = 6; break; case 1001: case 1002: case 2001: case 2002: pledgeClass = 5; break; case -1: default: pledgeClass = 4; break; } } break; } break; case 8: switch (player.getPledgeType()) { case -1: pledgeClass = 1; break; case 100: case 200: pledgeClass = 4; break; case 1001: case 1002: case 2001: case 2002: pledgeClass = 3; break; case 0: if (player.isClanLeader()) { pledgeClass = 8; } else { switch (clan.getLeaderSubPledge(player.getObjectId())) { case 100: case 200: pledgeClass = 7; break; case 1001: case 1002: case 2001: case 2002: pledgeClass = 6; break; case -1: default: pledgeClass = 5; break; } } break; } break; case 9: switch (player.getPledgeType()) { case -1: pledgeClass = 1; break; case 100: case 200: pledgeClass = 5; break; case 1001: case 1002: case 2001: case 2002: pledgeClass = 4; break; case 0: if (player.isClanLeader()) { pledgeClass = 9; } else { switch (clan.getLeaderSubPledge(player.getObjectId())) { case 100: case 200: pledgeClass = 8; break; case 1001: case 1002: case 2001: case 2002: pledgeClass = 7; break; case -1: default: pledgeClass = 6; break; } } break; } break; case 10: switch (player.getPledgeType()) { case -1: pledgeClass = 1; break; case 100: case 200: pledgeClass = 6; break; case 1001: case 1002: case 2001: case 2002: pledgeClass = 5; break; case 0: if (player.isClanLeader()) { pledgeClass = 10; } else { switch (clan.getLeaderSubPledge(player.getObjectId())) { case 100: case 200: pledgeClass = 9; break; case 1001: case 1002: case 2001: case 2002: pledgeClass = 8; break; case -1: default: pledgeClass = 7; break; } } break; } break; case 11: switch (player.getPledgeType()) { case -1: pledgeClass = 1; break; case 100: case 200: pledgeClass = 7; break; case 1001: case 1002: case 2001: case 2002: pledgeClass = 6; break; case 0: if (player.isClanLeader()) { pledgeClass = 11; } else { switch (clan.getLeaderSubPledge(player.getObjectId())) { case 100: case 200: pledgeClass = 10; break; case 1001: case 1002: case 2001: case 2002: pledgeClass = 9; break; case -1: default: pledgeClass = 8; break; } } break; } break; default: pledgeClass = 1; break; } } if (player.isNoble() && (pledgeClass < 5)) { pledgeClass = 5; } if (player.isHero() && (pledgeClass < 8)) { pledgeClass = 8; } return pledgeClass; } /** * Save apprentice and sponsor. * @param apprentice the apprentice * @param sponsor the sponsor */ public void saveApprenticeAndSponsor(int apprentice, int sponsor) { try (Connection con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement ps = con.prepareStatement("UPDATE characters SET apprentice=?,sponsor=? WHERE charId=?")) { ps.setInt(1, apprentice); ps.setInt(2, sponsor); ps.setInt(3, getObjectId()); ps.execute(); } catch (SQLException e) { _log.log(Level.WARNING, "Could not save apprentice/sponsor: " + e.getMessage(), e); } } }