Attempt to fix wrong PvP flagging.

This commit is contained in:
MobiusDev
2015-03-25 13:08:04 +00:00
parent 82606870c0
commit ef15efb834
9 changed files with 155 additions and 86 deletions

View File

@@ -21,6 +21,7 @@ CREATE TABLE IF NOT EXISTS `characters` (
`expBeforeDeath` BIGINT UNSIGNED DEFAULT 0, `expBeforeDeath` BIGINT UNSIGNED DEFAULT 0,
`sp` BIGINT(10) UNSIGNED NOT NULL DEFAULT 0, `sp` BIGINT(10) UNSIGNED NOT NULL DEFAULT 0,
`karma` INT UNSIGNED DEFAULT NULL, `karma` INT UNSIGNED DEFAULT NULL,
`reputation` INT UNSIGNED DEFAULT 0,
`fame` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, `fame` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
`pvpkills` SMALLINT UNSIGNED DEFAULT NULL, `pvpkills` SMALLINT UNSIGNED DEFAULT NULL,
`pkkills` SMALLINT UNSIGNED DEFAULT NULL, `pkkills` SMALLINT UNSIGNED DEFAULT NULL,

View File

@@ -50,6 +50,7 @@ public class CharSelectInfoPackage
private double _currentMp = 0; private double _currentMp = 0;
private final int[][] _paperdoll; private final int[][] _paperdoll;
private int _karma = 0; private int _karma = 0;
private int _reputation = 0;
private int _pkKills = 0; private int _pkKills = 0;
private int _pvpKills = 0; private int _pvpKills = 0;
private int _augmentationId = 0; private int _augmentationId = 0;
@@ -327,9 +328,9 @@ public class CharSelectInfoPackage
return _paperdoll[Inventory.PAPERDOLL_RHAND][2]; return _paperdoll[Inventory.PAPERDOLL_RHAND][2];
} }
public void setKarma(int k) public void setKarma(int karma)
{ {
_karma = k; _karma = karma;
} }
public int getKarma() public int getKarma()
@@ -337,6 +338,16 @@ public class CharSelectInfoPackage
return _karma; return _karma;
} }
public void setReputation(int reputation)
{
_reputation = reputation;
}
public int getReputation()
{
return _reputation;
}
public void setAugmentationId(int augmentationId) public void setAugmentationId(int augmentationId)
{ {
_augmentationId = augmentationId; _augmentationId = augmentationId;

View File

@@ -348,6 +348,8 @@ public abstract class L2Playable extends L2Character
public abstract int getKarma(); public abstract int getKarma();
public abstract int getReputation();
public abstract byte getPvpFlag(); public abstract byte getPvpFlag();
public abstract boolean useMagic(Skill skill, boolean forceUse, boolean dontMove); public abstract boolean useMagic(Skill skill, boolean forceUse, boolean dontMove);

View File

@@ -250,6 +250,12 @@ public abstract class L2Summon extends L2Playable
return getOwner() != null ? getOwner().getKarma() : 0; return getOwner() != null ? getOwner().getKarma() : 0;
} }
@Override
public final int getReputation()
{
return getOwner() != null ? getOwner().getReputation() : 0;
}
@Override @Override
public final byte getPvpFlag() public final byte getPvpFlag()
{ {

View File

@@ -50,6 +50,10 @@ public class PcAppearance
/** The default title color is 0xECF9A2. */ /** The default title color is 0xECF9A2. */
private int _titleColor = DEFAULT_TITLE_COLOR; private int _titleColor = DEFAULT_TITLE_COLOR;
/** Karma and Reputation colors */
private final int _redColor = 255;
private final int _greenColor = 65280;
public PcAppearance(byte face, byte hColor, byte hStyle, boolean sex) public PcAppearance(byte face, byte hColor, byte hStyle, boolean sex)
{ {
_face = face; _face = face;
@@ -173,6 +177,14 @@ public class PcAppearance
public int getNameColor() public int getNameColor()
{ {
if (_owner.getKarma() > 0)
{
return _redColor;
}
if (_owner.getReputation() > 0)
{
return _greenColor;
}
return _nameColor; return _nameColor;
} }

View File

@@ -364,8 +364,8 @@ public final class L2PcInstance extends L2Playable
private static final String DELETE_ITEM_REUSE_SAVE = "DELETE FROM character_item_reuse_save WHERE charId=?"; private static final String DELETE_ITEM_REUSE_SAVE = "DELETE FROM character_item_reuse_save WHERE charId=?";
// Character Character SQL String Definitions: // Character Character SQL String Definitions:
private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,charId,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,fame,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,title_color,accesslevel,online,clan_privs,wantspeace,base_class,nobless,power_grade,createDate) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,charId,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,reputation,fame,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,title_color,accesslevel,online,clan_privs,wantspeace,base_class,nobless,power_grade,createDate) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,fame=?,pvpkills=?,pkkills=?,clanid=?,race=?,classid=?,deletetime=?,title=?,title_color=?,accesslevel=?,online=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,nobless=?,power_grade=?,subpledge=?,lvl_joined_academy=?,apprentice=?,sponsor=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,bookmarkslot=?,vitality_points=?,pccafe_points=?,language=?,faction=? WHERE charId=?"; private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,reputation=?,fame=?,pvpkills=?,pkkills=?,clanid=?,race=?,classid=?,deletetime=?,title=?,title_color=?,accesslevel=?,online=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,nobless=?,power_grade=?,subpledge=?,lvl_joined_academy=?,apprentice=?,sponsor=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,bookmarkslot=?,vitality_points=?,pccafe_points=?,language=?,faction=? WHERE charId=?";
private static final String RESTORE_CHARACTER = "SELECT * FROM characters WHERE charId=?"; private static final String RESTORE_CHARACTER = "SELECT * FROM characters WHERE charId=?";
// Character Premium System String Definitions: // Character Premium System String Definitions:
@@ -449,6 +449,9 @@ public final class L2PcInstance extends L2Playable
/** The Karma of the L2PcInstance (if higher than 0, the name of the L2PcInstance appears in red) */ /** The Karma of the L2PcInstance (if higher than 0, the name of the L2PcInstance appears in red) */
private int _karma; private int _karma;
/** The Reputation of the L2PcInstance (if higher than 0, the name of the L2PcInstance appears in green) */
private int _reputation;
/** The number of player killed during a PvP (the player killed was PvP Flagged) */ /** The number of player killed during a PvP (the player killed was PvP Flagged) */
private int _pvpKills; private int _pvpKills;
@@ -1716,9 +1719,6 @@ public final class L2PcInstance extends L2Playable
} }
final int relation = getRelation(player); final int relation = getRelation(player);
Integer oldrelation = getKnownList().getKnownRelations().get(player.getObjectId());
if ((oldrelation == null) || (oldrelation != relation))
{
final RelationChanged rc = new RelationChanged(); final RelationChanged rc = new RelationChanged();
rc.addRelation(this, relation, isAutoAttackable(player)); rc.addRelation(this, relation, isAutoAttackable(player));
if (hasSummon()) if (hasSummon())
@@ -1737,7 +1737,6 @@ public final class L2PcInstance extends L2Playable
getKnownList().getKnownRelations().put(player.getObjectId(), relation); getKnownList().getKnownRelations().put(player.getObjectId(), relation);
} }
} }
}
@Override @Override
public void revalidateZone(boolean force) public void revalidateZone(boolean force)
@@ -2015,6 +2014,25 @@ public final class L2PcInstance extends L2Playable
broadcastKarma(); broadcastKarma();
} }
/**
* Return the Reputation of the L2PcInstance.
* @return reputation int
*/
@Override
public int getReputation()
{
return _reputation;
}
/**
* Set the Reputation of the L2PcInstance and send a Server->Client packet StatusUpdate (broadcast).
* @param reputation
*/
public void setReputation(int reputation)
{
_reputation = reputation;
}
public int getExpertiseArmorPenalty() public int getExpertiseArmorPenalty()
{ {
return _expertiseArmorPenalty; return _expertiseArmorPenalty;
@@ -5599,6 +5617,11 @@ public final class L2PcInstance extends L2Playable
{ {
increasePvpKills(target); increasePvpKills(target);
} }
if ((_karma <= 0) && AntiFeedManager.getInstance().check(this, targetPlayer))
{
_reputation += 100;
broadcastUserInfo();
}
} }
else if (targetPlayer.isOnDarkSide()) // Member's of Dark side can be killed without any penalty else if (targetPlayer.isOnDarkSide()) // Member's of Dark side can be killed without any penalty
{ {
@@ -5643,16 +5666,24 @@ public final class L2PcInstance extends L2Playable
return; return;
} }
// PK Points are increased only if you kill a player.
if (target.isPlayer())
{
if (target.getActingPlayer().getKarma() <= 0)
{
if (!Config.FACTION_SYSTEM_ENABLED) if (!Config.FACTION_SYSTEM_ENABLED)
{ {
// Calculate new karma. (calculate karma before incrase pk count!) // Calculate new karma. (calculate karma before incrase pk count!)
setKarma(getKarma() + Formulas.calculateKarmaGain(getPkKills(), target.isSummon())); setKarma(getKarma() + Formulas.calculateKarmaGain(getPkKills(), target.isSummon()));
} }
if (_PvPRegTask != null)
// PK Points are increased only if you kill a player.
if (target.isPlayer())
{ {
_PvPRegTask.cancel(true);
updatePvPFlag(0);
}
setPkKills(getPkKills() + 1); setPkKills(getPkKills() + 1);
_reputation = 0;
}
} }
// Update player's UI. // Update player's UI.
@@ -6904,6 +6935,8 @@ public final class L2PcInstance extends L2Playable
getKnownList().getKnownRelations().put(player.getObjectId(), relation); getKnownList().getKnownRelations().put(player.getObjectId(), relation);
} }
} }
broadcastUserInfo();
} }
/** /**
@@ -6970,24 +7003,25 @@ public final class L2PcInstance extends L2Playable
statement.setLong(15, getExp()); statement.setLong(15, getExp());
statement.setLong(16, getSp()); statement.setLong(16, getSp());
statement.setInt(17, getKarma()); statement.setInt(17, getKarma());
statement.setInt(18, getFame()); statement.setInt(18, getReputation());
statement.setInt(19, getPvpKills()); statement.setInt(19, getFame());
statement.setInt(20, getPkKills()); statement.setInt(20, getPvpKills());
statement.setInt(21, getClanId()); statement.setInt(21, getPkKills());
statement.setInt(22, getRace().ordinal()); statement.setInt(22, getClanId());
statement.setInt(23, getClassId().getId()); statement.setInt(23, getRace().ordinal());
statement.setLong(24, getDeleteTimer()); statement.setInt(24, getClassId().getId());
statement.setInt(25, hasDwarvenCraft() ? 1 : 0); statement.setLong(25, getDeleteTimer());
statement.setString(26, getTitle()); statement.setInt(26, hasDwarvenCraft() ? 1 : 0);
statement.setInt(27, getAppearance().getTitleColor()); statement.setString(27, getTitle());
statement.setInt(28, getAccessLevel().getLevel()); statement.setInt(28, getAppearance().getTitleColor());
statement.setInt(29, isOnlineInt()); statement.setInt(29, getAccessLevel().getLevel());
statement.setInt(30, getClanPrivileges().getBitmask()); statement.setInt(30, isOnlineInt());
statement.setInt(31, getWantsPeace()); statement.setInt(31, getClanPrivileges().getBitmask());
statement.setInt(32, getBaseClass()); statement.setInt(32, getWantsPeace());
statement.setInt(33, isNoble() ? 1 : 0); statement.setInt(33, getBaseClass());
statement.setLong(34, 0); statement.setInt(34, isNoble() ? 1 : 0);
statement.setDate(35, new Date(getCreateDate().getTimeInMillis())); statement.setLong(35, 0);
statement.setDate(36, new Date(getCreateDate().getTimeInMillis()));
statement.executeUpdate(); statement.executeUpdate();
} }
catch (Exception e) catch (Exception e)
@@ -7039,6 +7073,7 @@ public final class L2PcInstance extends L2Playable
player.setHeading(rset.getInt("heading")); player.setHeading(rset.getInt("heading"));
player.setKarma(rset.getInt("karma")); player.setKarma(rset.getInt("karma"));
player.setReputation(rset.getInt("reputation"));
player.setFame(rset.getInt("fame")); player.setFame(rset.getInt("fame"));
player.setPvpKills(rset.getInt("pvpkills")); player.setPvpKills(rset.getInt("pvpkills"));
player.setPkKills(rset.getInt("pkkills")); player.setPkKills(rset.getInt("pkkills"));
@@ -7600,20 +7635,21 @@ public final class L2PcInstance extends L2Playable
statement.setLong(17, getExpBeforeDeath()); statement.setLong(17, getExpBeforeDeath());
statement.setLong(18, sp); statement.setLong(18, sp);
statement.setInt(19, getKarma()); statement.setInt(19, getKarma());
statement.setInt(20, getFame()); statement.setInt(20, getReputation());
statement.setInt(21, getPvpKills()); statement.setInt(21, getFame());
statement.setInt(22, getPkKills()); statement.setInt(22, getPvpKills());
statement.setInt(23, getClanId()); statement.setInt(23, getPkKills());
statement.setInt(24, getRace().ordinal()); statement.setInt(24, getClanId());
statement.setInt(25, getClassId().getId()); statement.setInt(25, getRace().ordinal());
statement.setLong(26, getDeleteTimer()); statement.setInt(26, getClassId().getId());
statement.setString(27, getTitle()); statement.setLong(27, getDeleteTimer());
statement.setInt(28, getAppearance().getTitleColor()); statement.setString(28, getTitle());
statement.setInt(29, getAccessLevel().getLevel()); statement.setInt(29, getAppearance().getTitleColor());
statement.setInt(30, isOnlineInt()); statement.setInt(30, getAccessLevel().getLevel());
statement.setInt(31, getClanPrivileges().getBitmask()); statement.setInt(31, isOnlineInt());
statement.setInt(32, getWantsPeace()); statement.setInt(32, getClanPrivileges().getBitmask());
statement.setInt(33, getBaseClass()); statement.setInt(33, getWantsPeace());
statement.setInt(34, getBaseClass());
long totalOnlineTime = _onlineTime; long totalOnlineTime = _onlineTime;
if (_onlineBeginTime > 0) if (_onlineBeginTime > 0)
@@ -7621,21 +7657,21 @@ public final class L2PcInstance extends L2Playable
totalOnlineTime += (System.currentTimeMillis() - _onlineBeginTime) / 1000; totalOnlineTime += (System.currentTimeMillis() - _onlineBeginTime) / 1000;
} }
statement.setLong(34, totalOnlineTime); statement.setLong(35, totalOnlineTime);
statement.setInt(35, isNoble() ? 1 : 0); statement.setInt(36, isNoble() ? 1 : 0);
statement.setInt(36, getPowerGrade()); statement.setInt(37, getPowerGrade());
statement.setInt(37, getPledgeType()); statement.setInt(38, getPledgeType());
statement.setInt(38, getLvlJoinedAcademy()); statement.setInt(39, getLvlJoinedAcademy());
statement.setLong(39, getApprentice()); statement.setLong(40, getApprentice());
statement.setLong(40, getSponsor()); statement.setLong(41, getSponsor());
statement.setLong(41, getClanJoinExpiryTime()); statement.setLong(42, getClanJoinExpiryTime());
statement.setLong(42, getClanCreateExpiryTime()); statement.setLong(43, getClanCreateExpiryTime());
statement.setString(43, getName()); statement.setString(44, getName());
statement.setLong(44, 0); // unset statement.setLong(45, 0); // unset
statement.setInt(45, getBookMarkSlot()); statement.setInt(46, getBookMarkSlot());
statement.setInt(46, _vitalityPoints); // unset statement.setInt(47, _vitalityPoints); // unset
statement.setInt(47, getPcBangPoints()); statement.setInt(48, getPcBangPoints());
statement.setString(48, getLang()); statement.setString(49, getLang());
int factionId = 0; int factionId = 0;
if (isGood()) if (isGood())
@@ -7646,9 +7682,9 @@ public final class L2PcInstance extends L2Playable
{ {
factionId = 2; factionId = 2;
} }
statement.setInt(49, factionId); statement.setInt(50, factionId);
statement.setInt(50, getObjectId()); statement.setInt(51, getObjectId());
statement.execute(); statement.execute();
} }
catch (Exception e) catch (Exception e)

View File

@@ -134,7 +134,7 @@ public class CharSelectionInfo extends L2GameServerPacket
writeF((float) (charInfoPackage.getExp() - ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel())) / (ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel() + 1) - ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel()))); // High Five writeF((float) (charInfoPackage.getExp() - ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel())) / (ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel() + 1) - ExperienceData.getInstance().getExpForLevel(charInfoPackage.getLevel()))); // High Five
writeD(charInfoPackage.getLevel()); writeD(charInfoPackage.getLevel());
writeD(charInfoPackage.getKarma()); writeD(charInfoPackage.getKarma() > 0 ? 0 /* 255? */: charInfoPackage.getReputation());
writeD(charInfoPackage.getPkKills()); writeD(charInfoPackage.getPkKills());
writeD(charInfoPackage.getPvPKills()); writeD(charInfoPackage.getPvPKills());
@@ -146,8 +146,8 @@ public class CharSelectionInfo extends L2GameServerPacket
writeD(0x00); writeD(0x00);
writeD(0x00); writeD(0x00);
writeD(0x00); // Erthreia writeD(0x00); // Ertheia
writeD(0x00); // Erthreia writeD(0x00); // Ertheia
for (int slot : getPaperdollOrder()) for (int slot : getPaperdollOrder())
{ {
@@ -278,6 +278,7 @@ public class CharSelectionInfo extends L2GameServerPacket
charInfopackage.setMaxMp(chardata.getInt("maxmp")); charInfopackage.setMaxMp(chardata.getInt("maxmp"));
charInfopackage.setCurrentMp(chardata.getDouble("curmp")); charInfopackage.setCurrentMp(chardata.getDouble("curmp"));
charInfopackage.setKarma(chardata.getInt("karma")); charInfopackage.setKarma(chardata.getInt("karma"));
charInfopackage.setReputation(chardata.getInt("reputation"));
charInfopackage.setPkKills(chardata.getInt("pkkills")); charInfopackage.setPkKills(chardata.getInt("pkkills"));
charInfopackage.setPvPKills(chardata.getInt("pvpkills")); charInfopackage.setPvPKills(chardata.getInt("pvpkills"));
charInfopackage.setFace(chardata.getInt("face")); charInfopackage.setFace(chardata.getInt("face"));

View File

@@ -53,7 +53,7 @@ public final class RelationChanged extends L2GameServerPacket
protected static class Relation protected static class Relation
{ {
int _objId, _relation, _autoAttackable, _karma, _pvpFlag; int _objId, _relation, _autoAttackable, _reputation, _pvpFlag;
} }
private Relation _singled; private Relation _singled;
@@ -68,7 +68,7 @@ public final class RelationChanged extends L2GameServerPacket
_singled._objId = activeChar.getObjectId(); _singled._objId = activeChar.getObjectId();
_singled._relation = relation; _singled._relation = relation;
_singled._autoAttackable = autoattackable ? 1 : 0; _singled._autoAttackable = autoattackable ? 1 : 0;
_singled._karma = activeChar.getKarma(); _singled._reputation = activeChar.getReputation();
_singled._pvpFlag = activeChar.getPvpFlag(); _singled._pvpFlag = activeChar.getPvpFlag();
setInvisible(activeChar.isInvisible()); setInvisible(activeChar.isInvisible());
} }
@@ -91,7 +91,7 @@ public final class RelationChanged extends L2GameServerPacket
r._objId = activeChar.getObjectId(); r._objId = activeChar.getObjectId();
r._relation = relation; r._relation = relation;
r._autoAttackable = autoattackable ? 1 : 0; r._autoAttackable = autoattackable ? 1 : 0;
r._karma = activeChar.getKarma(); r._reputation = activeChar.getReputation();
r._pvpFlag = activeChar.getPvpFlag(); r._pvpFlag = activeChar.getPvpFlag();
_multi.add(r); _multi.add(r);
} }
@@ -123,7 +123,7 @@ public final class RelationChanged extends L2GameServerPacket
{ {
writeD(relation._relation); writeD(relation._relation);
writeC(relation._autoAttackable); writeC(relation._autoAttackable);
writeD(relation._karma); writeD(relation._reputation);
writeC(relation._pvpFlag); writeC(relation._pvpFlag);
} }
} }

View File

@@ -300,7 +300,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
{ {
writeH(22); writeH(22);
writeC(_activeChar.getPvpFlag()); writeC(_activeChar.getPvpFlag());
writeD(_activeChar.getKarma()); writeD(_activeChar.getReputation());
writeC(_activeChar.isNoble() ? 0x01 : 0x00); writeC(_activeChar.isNoble() ? 0x01 : 0x00);
writeC(_activeChar.isHero() ? 0x01 : 0x00); writeC(_activeChar.isHero() ? 0x01 : 0x00);
writeC(_activeChar.getPledgeClass()); writeC(_activeChar.getPledgeClass());