/*
* This program 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.
*
* This program 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.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;
/**
* Clan member class.
*/
public class L2ClanMember
{
private static final Logger _log = Logger.getLogger(L2ClanMember.class.getName());
private 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;
public L2ClanMember(L2Clan clan, String name, int level, int classId, int objectId, int pledgeType, int powerGrade, String title, boolean sex, int raceOrdinal)
{
if(clan == null)
throw new IllegalArgumentException("Can not create a ClanMember with a null clan.");
_clan = clan;
_name = name;
_level = level;
_classId = classId;
_objectId = objectId;
_powerGrade = powerGrade;
_title = title;
_pledgeType = pledgeType;
_apprentice = 0;
_sponsor = 0;
_sex = sex;
_raceOrdinal = raceOrdinal;
}
public L2ClanMember(L2Clan clan, L2PcInstance 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();
}
public L2ClanMember(L2PcInstance player)
{
if(player.getClan() == null)
throw new IllegalArgumentException("Can not create a ClanMember if player has a null clan.");
_clan = player.getClan();
_player = player;
_name = _player.getName();
_level = _player.getLevel();
_classId = _player.getClassId().getId();
_objectId = _player.getObjectId();
_powerGrade = _player.getPowerGrade();
_pledgeType = _player.getPledgeType();
_title = _player.getTitle();
_apprentice = 0;
_sponsor = 0;
_sex = _player.getAppearance().getSex();
_raceOrdinal = _player.getRace().ordinal();
}
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;
}
public L2PcInstance getPlayerInstance()
{
return _player;
}
public boolean isOnline()
{
if (_player == null || !_player.isOnline())
return false;
if (_player.getClient() == null)
return false;
if (_player.getClient().isDetached())
return false;
return true;
}
/**
* @return Returns the classId.
*/
public int getClassId()
{
if (_player != null)
{
return _player.getClassId().getId();
}
return _classId;
}
/**
* @return Returns the level.
*/
public int getLevel()
{
if (_player != null)
{
return _player.getLevel();
}
return _level;
}
/**
* @return Returns the name.
*/
public String getName()
{
if (_player != null)
{
return _player.getName();
}
return _name;
}
/**
* @return Returns the objectId.
*/
public int getObjectId()
{
if (_player != null)
{
return _player.getObjectId();
}
return _objectId;
}
public String getTitle() {
if (_player != null) {
return _player.getTitle();
}
return _title;
}
public int getPledgeType()
{
if (_player != null)
{
return _player.getPledgeType();
}
return _pledgeType;
}
public void setPledgeType(int pledgeType)
{
_pledgeType = pledgeType;
if(_player != null)
{
_player.setPledgeType(pledgeType);
}
else
{
//db save if char not logged in
updatePledgeType();
}
}
public void updatePledgeType()
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET subpledge=? WHERE charId=?");
statement.setLong(1, _pledgeType);
statement.setInt(2, getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.log(Level.WARNING, "Could not update pledge type: " + e.getMessage(), e);
}
finally
{
L2DatabaseFactory.close(con);
}
}
public int getPowerGrade()
{
if(_player != null)
return _player.getPowerGrade();
return _powerGrade;
}
/**
* @param powerGrade
*/
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()
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET power_grade=? WHERE charId=?");
statement.setLong(1, _powerGrade);
statement.setInt(2, getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.log(Level.WARNING, "Could not update power _grade: " + e.getMessage(), e);
}
finally
{
L2DatabaseFactory.close(con);
}
}
public void initApprenticeAndSponsor(int apprenticeID, int sponsorID)
{
_apprentice = apprenticeID;
_sponsor = sponsorID;
}
public int getRaceOrdinal()
{
if (_player != null)
return _player.getRace().ordinal();
return _raceOrdinal;
}
public boolean getSex()
{
if (_player != null)
return _player.getAppearance().getSex();
return _sex;
}
public int getSponsor()
{
if (_player != null)
return _player.getSponsor();
return _sponsor;
}
public int getApprentice()
{
if (_player != null)
return _player.getApprentice();
return _apprentice;
}
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 "";
}
public L2Clan getClan()
{
return _clan;
}
public 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;
}
}
return pledgeClass;
}
public void saveApprenticeAndSponsor(int apprentice, int sponsor)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET apprentice=?,sponsor=? WHERE charId=?");
statement.setInt(1, apprentice);
statement.setInt(2, sponsor);
statement.setInt(3, getObjectId());
statement.execute();
statement.close();
}
catch (SQLException e)
{
_log.log(Level.WARNING, "Could not save apprentice/sponsor: " + e.getMessage(), e);
}
finally
{
L2DatabaseFactory.close(con);
}
}
}