From ef15efb8341e6cda415e80cd10a6ec5adec94f68 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Wed, 25 Mar 2015 13:08:04 +0000 Subject: [PATCH] Attempt to fix wrong PvP flagging. --- trunk/dist/tools/sql/game/characters.sql | 1 + .../model/CharSelectInfoPackage.java | 15 +- .../gameserver/model/actor/L2Playable.java | 2 + .../gameserver/model/actor/L2Summon.java | 6 + .../model/actor/appearance/PcAppearance.java | 12 ++ .../model/actor/instance/L2PcInstance.java | 188 +++++++++++------- .../serverpackets/CharSelectionInfo.java | 7 +- .../serverpackets/RelationChanged.java | 8 +- .../network/serverpackets/UserInfo.java | 2 +- 9 files changed, 155 insertions(+), 86 deletions(-) diff --git a/trunk/dist/tools/sql/game/characters.sql b/trunk/dist/tools/sql/game/characters.sql index 0c100be317..e6949c8804 100644 --- a/trunk/dist/tools/sql/game/characters.sql +++ b/trunk/dist/tools/sql/game/characters.sql @@ -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, diff --git a/trunk/java/com/l2jserver/gameserver/model/CharSelectInfoPackage.java b/trunk/java/com/l2jserver/gameserver/model/CharSelectInfoPackage.java index ddc95c9666..709e90916b 100644 --- a/trunk/java/com/l2jserver/gameserver/model/CharSelectInfoPackage.java +++ b/trunk/java/com/l2jserver/gameserver/model/CharSelectInfoPackage.java @@ -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; diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/L2Playable.java b/trunk/java/com/l2jserver/gameserver/model/actor/L2Playable.java index cbe50df5ed..3042988a8d 100644 --- a/trunk/java/com/l2jserver/gameserver/model/actor/L2Playable.java +++ b/trunk/java/com/l2jserver/gameserver/model/actor/L2Playable.java @@ -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); diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/L2Summon.java b/trunk/java/com/l2jserver/gameserver/model/actor/L2Summon.java index 50919fea53..e890ee75fc 100644 --- a/trunk/java/com/l2jserver/gameserver/model/actor/L2Summon.java +++ b/trunk/java/com/l2jserver/gameserver/model/actor/L2Summon.java @@ -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() { diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/appearance/PcAppearance.java b/trunk/java/com/l2jserver/gameserver/model/actor/appearance/PcAppearance.java index 2769fe1a7c..79487ba603 100644 --- a/trunk/java/com/l2jserver/gameserver/model/actor/appearance/PcAppearance.java +++ b/trunk/java/com/l2jserver/gameserver/model/actor/appearance/PcAppearance.java @@ -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; } diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java index 39663b4c05..60a5d31467 100644 --- a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java +++ b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java @@ -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) diff --git a/trunk/java/com/l2jserver/gameserver/network/serverpackets/CharSelectionInfo.java b/trunk/java/com/l2jserver/gameserver/network/serverpackets/CharSelectionInfo.java index 070c21982d..7367eabe44 100644 --- a/trunk/java/com/l2jserver/gameserver/network/serverpackets/CharSelectionInfo.java +++ b/trunk/java/com/l2jserver/gameserver/network/serverpackets/CharSelectionInfo.java @@ -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")); diff --git a/trunk/java/com/l2jserver/gameserver/network/serverpackets/RelationChanged.java b/trunk/java/com/l2jserver/gameserver/network/serverpackets/RelationChanged.java index db5f5d496b..9d4adebcd5 100644 --- a/trunk/java/com/l2jserver/gameserver/network/serverpackets/RelationChanged.java +++ b/trunk/java/com/l2jserver/gameserver/network/serverpackets/RelationChanged.java @@ -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); } } diff --git a/trunk/java/com/l2jserver/gameserver/network/serverpackets/UserInfo.java b/trunk/java/com/l2jserver/gameserver/network/serverpackets/UserInfo.java index 8478031402..267061802d 100644 --- a/trunk/java/com/l2jserver/gameserver/network/serverpackets/UserInfo.java +++ b/trunk/java/com/l2jserver/gameserver/network/serverpackets/UserInfo.java @@ -300,7 +300,7 @@ public class UserInfo extends AbstractMaskPacket { writeH(22); writeC(_activeChar.getPvpFlag()); - writeD(_activeChar.getKarma()); + writeD(_activeChar.getReputation()); writeC(_activeChar.isNoble() ? 0x01 : 0x00); writeC(_activeChar.isHero() ? 0x01 : 0x00); writeC(_activeChar.getPledgeClass());