/*
* 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 <http://www.gnu.org/licenses/>.
*/
package silentium.gameserver.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import silentium.commons.database.DatabaseFactory;
import silentium.gameserver.instancemanager.SiegeManager;
import silentium.gameserver.model.actor.instance.L2PcInstance;
public class L2ClanMember
{
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;
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(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)
{
if (_clan.getLevel() > 3 && player.isClanLeader())
SiegeManager.addSiegeSkills(player);
if (_clan.getReputationScore() >= 0)
{
L2Skill[] skills = _clan.getAllSkills();
for (L2Skill sk : skills)
{
if (sk.getMinPledgeClass() <= player.getPledgeClass())
player.addSkill(sk, false);
}
}
}
_player = player;
}
public L2PcInstance getPlayerInstance()
{
return _player;
}
public boolean isOnline()
{
if (_player == null)
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
updatePledgeType();
}
public void updatePledgeType()
{
try (Connection con = DatabaseFactory.getConnection())
{
PreparedStatement statement = con.prepareStatement("UPDATE characters SET subpledge=? WHERE obj_id=?");
statement.setLong(1, _pledgeType);
statement.setInt(2, getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
}
}
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
updatePowerGrade();
}
/**
* Update the characters table of the database with power grade.<BR>
* <BR>
*/
public void updatePowerGrade()
{
try (Connection con = DatabaseFactory.getConnection())
{
PreparedStatement statement = con.prepareStatement("UPDATE characters SET power_grade=? WHERE obj_id=?");
statement.setLong(1, _powerGrade);
statement.setInt(2, getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
}
}
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;
L2Clan clan = player.getClan();
if (clan != null)
{
switch (player.getClan().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;
default:
pledgeClass = 1;
break;
}
}
return pledgeClass;
}
public void saveApprenticeAndSponsor(int apprentice, int sponsor)
{
try (Connection con = DatabaseFactory.getConnection())
{
PreparedStatement statement = con.prepareStatement("UPDATE characters SET apprentice=?,sponsor=? WHERE obj_Id=?");
statement.setInt(1, apprentice);
statement.setInt(2, sponsor);
statement.setInt(3, getObjectId());
statement.execute();
statement.close();
}
catch (SQLException e)
{
}
}
}