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,
`sp` BIGINT(10) UNSIGNED NOT NULL DEFAULT 0,
`karma` INT UNSIGNED DEFAULT NULL,
`reputation` INT UNSIGNED DEFAULT 0,
`fame` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
`pvpkills` SMALLINT UNSIGNED DEFAULT NULL,
`pkkills` SMALLINT UNSIGNED DEFAULT NULL,

View File

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

View File

@ -348,6 +348,8 @@ public abstract class L2Playable extends L2Character
public abstract int getKarma();
public abstract int getReputation();
public abstract byte getPvpFlag();
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;
}
@Override
public final int getReputation()
{
return getOwner() != null ? getOwner().getReputation() : 0;
}
@Override
public final byte getPvpFlag()
{

View File

@ -50,6 +50,10 @@ public class PcAppearance
/** The default title color is 0xECF9A2. */
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)
{
_face = face;
@ -173,6 +177,14 @@ public class PcAppearance
public int getNameColor()
{
if (_owner.getKarma() > 0)
{
return _redColor;
}
if (_owner.getReputation() > 0)
{
return _greenColor;
}
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=?";
// 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 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 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=?,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=?";
// 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) */
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) */
private int _pvpKills;
@ -1716,26 +1719,22 @@ public final class L2PcInstance extends L2Playable
}
final int relation = getRelation(player);
Integer oldrelation = getKnownList().getKnownRelations().get(player.getObjectId());
if ((oldrelation == null) || (oldrelation != relation))
final RelationChanged rc = new RelationChanged();
rc.addRelation(this, relation, isAutoAttackable(player));
if (hasSummon())
{
final RelationChanged rc = new RelationChanged();
rc.addRelation(this, relation, isAutoAttackable(player));
if (hasSummon())
final L2Summon pet = getPet();
if (pet != null)
{
final L2Summon pet = getPet();
if (pet != null)
{
rc.addRelation(pet, relation, isAutoAttackable(player));
}
if (hasServitors())
{
getServitors().values().forEach(s -> rc.addRelation(s, relation, isAutoAttackable(player)));
}
rc.addRelation(pet, relation, isAutoAttackable(player));
}
if (hasServitors())
{
getServitors().values().forEach(s -> rc.addRelation(s, relation, isAutoAttackable(player)));
}
player.sendPacket(rc);
getKnownList().getKnownRelations().put(player.getObjectId(), relation);
}
player.sendPacket(rc);
getKnownList().getKnownRelations().put(player.getObjectId(), relation);
}
}
@ -2015,6 +2014,25 @@ public final class L2PcInstance extends L2Playable
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()
{
return _expertiseArmorPenalty;
@ -5599,6 +5617,11 @@ public final class L2PcInstance extends L2Playable
{
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
{
@ -5643,16 +5666,24 @@ public final class L2PcInstance extends L2Playable
return;
}
if (!Config.FACTION_SYSTEM_ENABLED)
{
// Calculate new karma. (calculate karma before incrase pk count!)
setKarma(getKarma() + Formulas.calculateKarmaGain(getPkKills(), target.isSummon()));
}
// PK Points are increased only if you kill a player.
if (target.isPlayer())
{
setPkKills(getPkKills() + 1);
if (target.getActingPlayer().getKarma() <= 0)
{
if (!Config.FACTION_SYSTEM_ENABLED)
{
// Calculate new karma. (calculate karma before incrase pk count!)
setKarma(getKarma() + Formulas.calculateKarmaGain(getPkKills(), target.isSummon()));
}
if (_PvPRegTask != null)
{
_PvPRegTask.cancel(true);
updatePvPFlag(0);
}
setPkKills(getPkKills() + 1);
_reputation = 0;
}
}
// Update player's UI.
@ -6904,6 +6935,8 @@ public final class L2PcInstance extends L2Playable
getKnownList().getKnownRelations().put(player.getObjectId(), relation);
}
}
broadcastUserInfo();
}
/**
@ -6970,24 +7003,25 @@ public final class L2PcInstance extends L2Playable
statement.setLong(15, getExp());
statement.setLong(16, getSp());
statement.setInt(17, getKarma());
statement.setInt(18, getFame());
statement.setInt(19, getPvpKills());
statement.setInt(20, getPkKills());
statement.setInt(21, getClanId());
statement.setInt(22, getRace().ordinal());
statement.setInt(23, getClassId().getId());
statement.setLong(24, getDeleteTimer());
statement.setInt(25, hasDwarvenCraft() ? 1 : 0);
statement.setString(26, getTitle());
statement.setInt(27, getAppearance().getTitleColor());
statement.setInt(28, getAccessLevel().getLevel());
statement.setInt(29, isOnlineInt());
statement.setInt(30, getClanPrivileges().getBitmask());
statement.setInt(31, getWantsPeace());
statement.setInt(32, getBaseClass());
statement.setInt(33, isNoble() ? 1 : 0);
statement.setLong(34, 0);
statement.setDate(35, new Date(getCreateDate().getTimeInMillis()));
statement.setInt(18, getReputation());
statement.setInt(19, getFame());
statement.setInt(20, getPvpKills());
statement.setInt(21, getPkKills());
statement.setInt(22, getClanId());
statement.setInt(23, getRace().ordinal());
statement.setInt(24, getClassId().getId());
statement.setLong(25, getDeleteTimer());
statement.setInt(26, hasDwarvenCraft() ? 1 : 0);
statement.setString(27, getTitle());
statement.setInt(28, getAppearance().getTitleColor());
statement.setInt(29, getAccessLevel().getLevel());
statement.setInt(30, isOnlineInt());
statement.setInt(31, getClanPrivileges().getBitmask());
statement.setInt(32, getWantsPeace());
statement.setInt(33, getBaseClass());
statement.setInt(34, isNoble() ? 1 : 0);
statement.setLong(35, 0);
statement.setDate(36, new Date(getCreateDate().getTimeInMillis()));
statement.executeUpdate();
}
catch (Exception e)
@ -7039,6 +7073,7 @@ public final class L2PcInstance extends L2Playable
player.setHeading(rset.getInt("heading"));
player.setKarma(rset.getInt("karma"));
player.setReputation(rset.getInt("reputation"));
player.setFame(rset.getInt("fame"));
player.setPvpKills(rset.getInt("pvpkills"));
player.setPkKills(rset.getInt("pkkills"));
@ -7600,20 +7635,21 @@ public final class L2PcInstance extends L2Playable
statement.setLong(17, getExpBeforeDeath());
statement.setLong(18, sp);
statement.setInt(19, getKarma());
statement.setInt(20, getFame());
statement.setInt(21, getPvpKills());
statement.setInt(22, getPkKills());
statement.setInt(23, getClanId());
statement.setInt(24, getRace().ordinal());
statement.setInt(25, getClassId().getId());
statement.setLong(26, getDeleteTimer());
statement.setString(27, getTitle());
statement.setInt(28, getAppearance().getTitleColor());
statement.setInt(29, getAccessLevel().getLevel());
statement.setInt(30, isOnlineInt());
statement.setInt(31, getClanPrivileges().getBitmask());
statement.setInt(32, getWantsPeace());
statement.setInt(33, getBaseClass());
statement.setInt(20, getReputation());
statement.setInt(21, getFame());
statement.setInt(22, getPvpKills());
statement.setInt(23, getPkKills());
statement.setInt(24, getClanId());
statement.setInt(25, getRace().ordinal());
statement.setInt(26, getClassId().getId());
statement.setLong(27, getDeleteTimer());
statement.setString(28, getTitle());
statement.setInt(29, getAppearance().getTitleColor());
statement.setInt(30, getAccessLevel().getLevel());
statement.setInt(31, isOnlineInt());
statement.setInt(32, getClanPrivileges().getBitmask());
statement.setInt(33, getWantsPeace());
statement.setInt(34, getBaseClass());
long totalOnlineTime = _onlineTime;
if (_onlineBeginTime > 0)
@ -7621,21 +7657,21 @@ public final class L2PcInstance extends L2Playable
totalOnlineTime += (System.currentTimeMillis() - _onlineBeginTime) / 1000;
}
statement.setLong(34, totalOnlineTime);
statement.setInt(35, isNoble() ? 1 : 0);
statement.setInt(36, getPowerGrade());
statement.setInt(37, getPledgeType());
statement.setInt(38, getLvlJoinedAcademy());
statement.setLong(39, getApprentice());
statement.setLong(40, getSponsor());
statement.setLong(41, getClanJoinExpiryTime());
statement.setLong(42, getClanCreateExpiryTime());
statement.setString(43, getName());
statement.setLong(44, 0); // unset
statement.setInt(45, getBookMarkSlot());
statement.setInt(46, _vitalityPoints); // unset
statement.setInt(47, getPcBangPoints());
statement.setString(48, getLang());
statement.setLong(35, totalOnlineTime);
statement.setInt(36, isNoble() ? 1 : 0);
statement.setInt(37, getPowerGrade());
statement.setInt(38, getPledgeType());
statement.setInt(39, getLvlJoinedAcademy());
statement.setLong(40, getApprentice());
statement.setLong(41, getSponsor());
statement.setLong(42, getClanJoinExpiryTime());
statement.setLong(43, getClanCreateExpiryTime());
statement.setString(44, getName());
statement.setLong(45, 0); // unset
statement.setInt(46, getBookMarkSlot());
statement.setInt(47, _vitalityPoints); // unset
statement.setInt(48, getPcBangPoints());
statement.setString(49, getLang());
int factionId = 0;
if (isGood())
@ -7646,9 +7682,9 @@ public final class L2PcInstance extends L2Playable
{
factionId = 2;
}
statement.setInt(49, factionId);
statement.setInt(50, factionId);
statement.setInt(50, getObjectId());
statement.setInt(51, getObjectId());
statement.execute();
}
catch (Exception e)
@ -11228,7 +11264,7 @@ public final class L2PcInstance extends L2Playable
public void addSnooper(L2PcInstance pci)
{
_snoopListener.add(pci);
_snoopListener.add(pci);
}
public void removeSnooper(L2PcInstance pci)
@ -11238,7 +11274,7 @@ public final class L2PcInstance extends L2Playable
public void addSnooped(L2PcInstance pci)
{
_snoopedPlayer.add(pci);
_snoopedPlayer.add(pci);
}
public void removeSnooped(L2PcInstance pci)

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
writeD(charInfoPackage.getLevel());
writeD(charInfoPackage.getKarma());
writeD(charInfoPackage.getKarma() > 0 ? 0 /* 255? */: charInfoPackage.getReputation());
writeD(charInfoPackage.getPkKills());
writeD(charInfoPackage.getPvPKills());
@ -146,8 +146,8 @@ public class CharSelectionInfo extends L2GameServerPacket
writeD(0x00);
writeD(0x00);
writeD(0x00); // Erthreia
writeD(0x00); // Erthreia
writeD(0x00); // Ertheia
writeD(0x00); // Ertheia
for (int slot : getPaperdollOrder())
{
@ -278,6 +278,7 @@ public class CharSelectionInfo extends L2GameServerPacket
charInfopackage.setMaxMp(chardata.getInt("maxmp"));
charInfopackage.setCurrentMp(chardata.getDouble("curmp"));
charInfopackage.setKarma(chardata.getInt("karma"));
charInfopackage.setReputation(chardata.getInt("reputation"));
charInfopackage.setPkKills(chardata.getInt("pkkills"));
charInfopackage.setPvPKills(chardata.getInt("pvpkills"));
charInfopackage.setFace(chardata.getInt("face"));

View File

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

View File

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