diff --git a/L2J_Mobius_C1_HarbingersOfWar/dist/config/karma.ini b/L2J_Mobius_C1_HarbingersOfWar/dist/config/karma.ini new file mode 100644 index 0000000000..37c91a2ac5 --- /dev/null +++ b/L2J_Mobius_C1_HarbingersOfWar/dist/config/karma.ini @@ -0,0 +1,19 @@ +# --------------------------------------------------------------------------- +# Rate Settings +# --------------------------------------------------------------------------- + +# Minimum player karma. +KarmaMin=240 + +# Maximum player karma. +KarmaMax=10000 + +# Base karma lost multiplier. +KarmaLostMultiplier=1.0 + +# Drop item chance percent of each item. +KarmaDropChance=5 + +# Items that cannot be dropped by karma. +# Separate items with semicolons. +KarmaProtectedItems=57; \ No newline at end of file diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/Config.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/Config.java index 8fce636598..a9fa9da78d 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/Config.java @@ -17,6 +17,10 @@ */ package org.l2jmobius; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + import org.l2jmobius.util.PropertiesParser; /** @@ -34,6 +38,7 @@ public class Config // -------------------------------------------------- private static final String SERVER_CONFIG_FILE = "config/server.ini"; private static final String RATES_CONFIG_FILE = "config/rates.ini"; + private static final String KARMA_CONFIG_FILE = "config/karma.ini"; // Game public static String _ip; @@ -53,6 +58,12 @@ public class Config public static float RATE_SP; public static float RATE_DROP; public static float RATE_ADENA; + // Karma + public static int KARMA_MIN_KARMA; + public static int KARMA_MAX_KARMA; + public static float KARMA_LOST_MULTIPLIER; + public static int KARMA_DROP_CHANCE; + public static List KARMA_PROTECTED_ITEMS; public static void load() { @@ -87,5 +98,14 @@ public class Config RATE_SP = ratesSettings.getFloat("RateSp", 1); RATE_DROP = ratesSettings.getFloat("RateDrop", 1); RATE_ADENA = ratesSettings.getFloat("RateAdena", 1); + + // Load karma config file (if exists) + final PropertiesParser karmaSettings = new PropertiesParser(KARMA_CONFIG_FILE); + + KARMA_MIN_KARMA = karmaSettings.getInt("KarmaMin", 240); + KARMA_MAX_KARMA = karmaSettings.getInt("KarmaMax", 10000); + KARMA_LOST_MULTIPLIER = karmaSettings.getFloat("KarmaLostMultiplier", 1); + KARMA_DROP_CHANCE = karmaSettings.getInt("KarmaDropChance", 5); + KARMA_PROTECTED_ITEMS = Arrays.stream(karmaSettings.getIntArray("KarmaProtectedItems", ";")).boxed().collect(Collectors.toList()); } } diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/AdminCommands.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/AdminCommands.java index edf3a773cd..9d3df9b4aa 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/AdminCommands.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/AdminCommands.java @@ -721,7 +721,6 @@ public class AdminCommands extends Thread player.setMaxMp(mpmaxval); player.setMaxLoad(loadval); player.setKarma(karmaval); - player.setPvpFlag(pvpflagval); player.setPvpKills(pvpkillsval); player.setClassId(classidval); StatusUpdate su = new StatusUpdate(player.getObjectId()); diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/MapRegionTable.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/MapRegionTable.java index 86fae4e9ca..83718ef032 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/MapRegionTable.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/MapRegionTable.java @@ -23,12 +23,14 @@ import java.io.InputStreamReader; import java.io.LineNumberReader; import java.util.StringTokenizer; -import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; public class MapRegionTable { private static int[][] _regions = new int[19][21]; private static MapRegionTable _instance; + private static int[][] _townPositions = new int[13][3]; + private static int[][] _karmaPositions = new int[13][3]; public static MapRegionTable getInstance() { @@ -41,7 +43,6 @@ public class MapRegionTable private MapRegionTable() { - super(); int count = 0; try { @@ -66,6 +67,87 @@ public class MapRegionTable catch (Exception e) { } + + _townPositions[0][0] = -84176; + _townPositions[0][1] = 243382; + _townPositions[0][2] = -3126; + _townPositions[1][0] = 45525; + _townPositions[1][1] = 48376; + _townPositions[1][2] = -3059; + _townPositions[2][0] = 12181; + _townPositions[2][1] = 16675; + _townPositions[2][2] = -4580; + _townPositions[3][0] = -45232; + _townPositions[3][1] = -113603; + _townPositions[3][2] = -224; + _townPositions[4][0] = 115074; + _townPositions[4][1] = -178115; + _townPositions[4][2] = -880; + _townPositions[5][0] = -14138; + _townPositions[5][1] = 122042; + _townPositions[5][2] = -2988; + _townPositions[6][0] = -82856; + _townPositions[6][1] = 150901; + _townPositions[6][2] = -3128; + _townPositions[7][0] = 18823; + _townPositions[7][1] = 145048; + _townPositions[7][2] = -3126; + _townPositions[8][0] = 83235; + _townPositions[8][1] = 148497; + _townPositions[8][2] = -3404; + _townPositions[9][0] = 80853; + _townPositions[9][1] = 54653; + _townPositions[9][2] = -1524; + _townPositions[10][0] = 147391; + _townPositions[10][1] = 25967; + _townPositions[10][2] = -2012; + _townPositions[11][0] = 117163; + _townPositions[11][1] = 76511; + _townPositions[11][2] = -2712; + _townPositions[12][0] = 83235; + _townPositions[12][1] = 148497; + _townPositions[12][2] = -3404; + + // FIXME: Custom locations. + _karmaPositions[0][0] = -88708; + _karmaPositions[0][1] = 237685; + _karmaPositions[0][2] = -3672; + _karmaPositions[1][0] = 40659; + _karmaPositions[1][1] = 56770; + _karmaPositions[1][2] = -3651; + _karmaPositions[2][0] = -346; + _karmaPositions[2][1] = 21889; + _karmaPositions[2][2] = -3256; + _karmaPositions[3][0] = -48359; + _karmaPositions[3][1] = -108190; + _karmaPositions[3][2] = -371; + _karmaPositions[4][0] = 119952; + _karmaPositions[4][1] = -188167; + _karmaPositions[4][2] = -3320; + _karmaPositions[5][0] = -9643; + _karmaPositions[5][1] = 130653; + _karmaPositions[5][2] = -3542; + _karmaPositions[6][0] = -82930; + _karmaPositions[6][1] = 156775; + _karmaPositions[6][2] = -3156; + _karmaPositions[7][0] = 15436; + _karmaPositions[7][1] = 148426; + _karmaPositions[7][2] = -3371; + _karmaPositions[8][0] = 78274; + _karmaPositions[8][1] = 145178; + _karmaPositions[8][2] = -3598; + _karmaPositions[9][0] = 76658; + _karmaPositions[9][1] = 56229; + _karmaPositions[9][2] = -2980; + _karmaPositions[10][0] = 152543; + _karmaPositions[10][1] = 29202; + _karmaPositions[10][2] = -2337; + _karmaPositions[11][0] = 111115; + _karmaPositions[11][1] = 66811; + _karmaPositions[11][2] = -2764; + _karmaPositions[12][0] = 79253; + _karmaPositions[12][1] = 159441; + _karmaPositions[12][2] = -3207; } public int getMapRegion(int posX, int posY) @@ -75,55 +157,28 @@ public class MapRegionTable return _regions[tileX][tileY]; } - public int[] getClosestTownCords(Creature activeChar) + public int[] getClosestTownCords(PlayerInstance player) { - int[][] pos = new int[13][3]; - pos[0][0] = -84176; - pos[0][1] = 243382; - pos[0][2] = -3126; - pos[1][0] = 45525; - pos[1][1] = 48376; - pos[1][2] = -3059; - pos[2][0] = 12181; - pos[2][1] = 16675; - pos[2][2] = -4580; - pos[3][0] = -45232; - pos[3][1] = -113603; - pos[3][2] = -224; - pos[4][0] = 115074; - pos[4][1] = -178115; - pos[4][2] = -880; - pos[5][0] = -14138; - pos[5][1] = 122042; - pos[5][2] = -2988; - pos[6][0] = -82856; - pos[6][1] = 150901; - pos[6][2] = -3128; - pos[7][0] = 18823; - pos[7][1] = 145048; - pos[7][2] = -3126; - pos[8][0] = 83235; - pos[8][1] = 148497; - pos[8][2] = -3404; - pos[9][0] = 80853; - pos[9][1] = 54653; - pos[9][2] = -1524; - pos[10][0] = 147391; - pos[10][1] = 25967; - pos[10][2] = -2012; - pos[11][0] = 117163; - pos[11][1] = 76511; - pos[11][2] = -2712; - pos[12][0] = 83235; - pos[12][1] = 148497; - pos[12][2] = -3404; - int closest = getMapRegion(activeChar.getX(), activeChar.getY()); - int[] ClosestTownCords = + int closest = getMapRegion(player.getX(), player.getY()); + int[] closestCords; + if (player.getKarma() > 0) { - pos[closest][0], - pos[closest][1], - pos[closest][2] - }; - return ClosestTownCords; + closestCords = new int[] + { + _karmaPositions[closest][0], + _karmaPositions[closest][1], + _karmaPositions[closest][2] + }; + } + else + { + closestCords = new int[] + { + _townPositions[closest][0], + _townPositions[closest][1], + _townPositions[closest][2] + }; + } + return closestCords; } } diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/skillhandlers/DamageSkill.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/skillhandlers/DamageSkill.java index 9b40b753f6..7c5cf1e246 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/skillhandlers/DamageSkill.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/skillhandlers/DamageSkill.java @@ -39,6 +39,20 @@ public class DamageSkill implements ISkillHandler @Override public void useSkill(PlayerInstance activeChar, Skill skill, WorldObject target) { + // PvP flag. + final boolean isEnemy = activeChar.isEnemy(target); + if (isEnemy) + { + if (target.getActingPlayer() != null) + { + activeChar.updatePvPFlag(1); + } + } + else // TODO: Target handlers. + { + return; + } + if (target instanceof Creature) { Creature creature = (Creature) target; diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/skillhandlers/HealSkill.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/skillhandlers/HealSkill.java index 26638087bc..97b3fc2998 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/skillhandlers/HealSkill.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/skillhandlers/HealSkill.java @@ -17,11 +17,10 @@ */ package org.l2jmobius.gameserver.handler.skillhandlers; -import java.util.List; - import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance; import org.l2jmobius.gameserver.model.actor.instance.PetInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; @@ -44,6 +43,17 @@ public class HealSkill implements ISkillHandler @Override public void useSkill(PlayerInstance activeChar, Skill skill, WorldObject target) { + // PvP flag. + if (target instanceof MonsterInstance) + { + activeChar.updatePvPFlag(1); + } + final PlayerInstance enemyPlayer = target.getActingPlayer(); + if ((enemyPlayer != null) && ((enemyPlayer.getPvpFlag() > 0) || (enemyPlayer.getKarma() > 0))) + { + activeChar.updatePvPFlag(1); + } + if (skill.getTargetType() == Skill.TARGET_PET) { PetInstance pet = activeChar.getPet(); @@ -52,10 +62,8 @@ public class HealSkill implements ISkillHandler } else if ((skill.getTargetType() == Skill.TARGET_PARTY) && activeChar.isInParty()) { - List players = activeChar.getParty().getPartyMembers(); - for (int i = 0; i < players.size(); ++i) + for (PlayerInstance player : activeChar.getParty().getPartyMembers()) { - PlayerInstance player = players.get(i); double hp = player.getCurrentHp(); player.setCurrentHp(hp += skill.getPower()); StatusUpdate su = new StatusUpdate(player.getObjectId()); diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/CharSelectInfoPackage.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/CharSelectInfoPackage.java index 9b512087f2..6e9f407cb3 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/CharSelectInfoPackage.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/CharSelectInfoPackage.java @@ -20,7 +20,7 @@ package org.l2jmobius.gameserver.model; public class CharSelectInfoPackage { private String _name; - private int _charId = 199546; + private int _charId = 0; private int _exp = 0; private int _sp = 0; private int _clanId = 0; @@ -37,6 +37,7 @@ public class CharSelectInfoPackage private int _maxMp = 0; private double _currentMp = 0.0; private Inventory _inventory = new Inventory(); + private int _karma; public int getCharId() { @@ -217,4 +218,14 @@ public class CharSelectInfoPackage { _sp = sp; } + + public int getKarma() + { + return _karma; + } + + public void setKarma(int karma) + { + _karma = karma; + } } diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/WorldObject.java index bebc4c66ba..c808d94175 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -125,4 +125,9 @@ public class WorldObject implements Serializable { return _knownPlayer; } + + public PlayerInstance getActingPlayer() + { + return null; + } } diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/Attackable.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/Attackable.java index 54fbe5fbf6..9ac4b065c6 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/Attackable.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/Attackable.java @@ -172,6 +172,12 @@ public class Attackable extends NpcInstance stopRandomWalking(); stopTargetScan(); calculateRewards(attacker); + + final PlayerInstance killer = attacker.getActingPlayer(); + if ((killer != null) && (killer.getKarma() > 0)) + { + killer.decreaseKarma(); + } } } } diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java index 0097d4ecf0..72eabc86ad 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java @@ -213,7 +213,7 @@ public class PetInstance extends Creature _owner = owner; } - public Creature getOwner() + public PlayerInstance getOwner() { return _owner; } @@ -608,4 +608,10 @@ public class PetInstance extends Creature updateKnownCounter = 0; } } + + @Override + public PlayerInstance getActingPlayer() + { + return _owner; + } } diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index fc5ac5ee9b..053e80e62b 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -26,6 +26,7 @@ import java.util.TimerTask; import java.util.TreeMap; import java.util.logging.Logger; +import org.l2jmobius.Config; import org.l2jmobius.gameserver.data.CharStatsTable; import org.l2jmobius.gameserver.data.CharTemplateTable; import org.l2jmobius.gameserver.data.ExperienceTable; @@ -79,6 +80,7 @@ import org.l2jmobius.gameserver.templates.Armor; import org.l2jmobius.gameserver.templates.CharTemplate; import org.l2jmobius.gameserver.templates.Item; import org.l2jmobius.gameserver.templates.Weapon; +import org.l2jmobius.util.Rnd; public class PlayerInstance extends Creature { @@ -96,7 +98,9 @@ public class PlayerInstance extends Creature private int _karma; private int _pvpKills; private int _pkKills; - private int _pvpFlag; + private int _pvpFlag = 0; + private long _lastPvpTime; + private static Timer _pvpTimer = null; private int _maxLoad; private int _race; private int _classId; @@ -109,7 +113,7 @@ public class PlayerInstance extends Creature private final Map _skills = new HashMap<>(); private Skill _skill; private final Map _shortCuts = new TreeMap<>(); - private int _allyId; + private int _allyId = 0; private TradeList _tradeList; private List _sellList; private List _buyList; @@ -120,7 +124,7 @@ public class PlayerInstance extends Creature private boolean _partyMatchingShowClass; private String _partyMatchingMemo; private Party _party = null; - private int _clanId; + private int _clanId = 0; private Clan _clan; private boolean _clanLeader; private boolean _isInvul = false; @@ -178,11 +182,6 @@ public class PlayerInstance extends Creature return skill.getLevel(); } - public void setPvpFlag(int pvpFlag) - { - _pvpFlag = pvpFlag; - } - public int getCanCraft() { return _canCraft; @@ -415,6 +414,88 @@ public class PlayerInstance extends Creature return _pvpFlag; } + private void stopPvPFlag() + { + if (_pvpTimer != null) + { + _pvpTimer.cancel(); + _pvpTimer = null; + } + updatePvPFlag(0); + } + + public void updatePvPFlag(int value) + { + if (_karma > 0) + { + return; + } + if (value == 1) + { + if (_pvpTimer == null) + { + _pvpTimer = new Timer(); + _pvpTimer.schedule(new pvpTask(), 1000, 1000); + } + _lastPvpTime = System.currentTimeMillis() + 30000; + } + if (_pvpFlag == value) + { + return; + } + _pvpFlag = value; + final UserInfo userInfo = new UserInfo(this); + sendPacket(userInfo); + broadcastPacket(userInfo); + } + + class pvpTask extends TimerTask + { + @Override + public void run() + { + try + { + final long currentTime = System.currentTimeMillis(); + if (currentTime > _lastPvpTime) + { + stopPvPFlag(); + } + else if (currentTime > (_lastPvpTime - 5000)) + { + updatePvPFlag(2); + } + } + catch (Throwable e) + { + } + } + } + + public boolean isEnemy(WorldObject target) + { + if ((target == null) || (target == this)) + { + return false; + } + + final PlayerInstance targetPlayer = target.getActingPlayer(); + if ((_party != null) && (_party == targetPlayer.getParty())) + { + return false; + } + if ((_clanId != 0) && (_clanId == targetPlayer.getClanId())) + { + return false; + } + if ((_allyId != 0) && (_allyId == targetPlayer.getAllyId())) + { + return false; + } + + return true; + } + public int getClanId() { return _clanId; @@ -552,6 +633,18 @@ public class PlayerInstance extends Creature @Override protected void onHitTimer(Creature target, int damage, boolean crit, boolean miss, boolean soulshot) { + final boolean isEnemy = isEnemy(target); + if (isEnemy) + { + if (target.getActingPlayer() != null) + { + updatePvPFlag(1); + } + } + else // TODO: Target handlers. + { + return; + } super.onHitTimer(target, damage, crit, miss, soulshot); } @@ -587,13 +680,20 @@ public class PlayerInstance extends Creature } } + public void sendMessage(String message) + { + SystemMessage sm = new SystemMessage(SystemMessage.S1_S2); + sm.addString(message); + sendPacket(sm); + } + @Override protected void startCombat() { Creature target = (Creature) getTarget(); if (target == null) { - _log.warning("failed to start combat without target."); + _log.warning("Failed to start combat without target."); sendPacket(new ActionFailed()); } else if (getAttackRange() < getDistance(target.getX(), target.getY())) @@ -770,32 +870,151 @@ public class PlayerInstance extends Creature } @Override - public void reduceCurrentHp(int i, Creature attacker) + public void reduceCurrentHp(int ammount, Creature attacker) { if (isInvul()) { return; } - super.reduceCurrentHp(i, attacker); + + super.reduceCurrentHp(ammount, attacker); if (isDead() && (getPet() != null)) { getPet().unSummon(this); } - if (attacker != null) + + if (attacker == null) { - SystemMessage smsg = new SystemMessage(36); - if ((attacker instanceof MonsterInstance) || (attacker instanceof NpcInstance)) - { - int mobId = ((NpcInstance) attacker).getNpcTemplate().getNpcId(); - smsg.addNpcName(mobId); - } - else - { - smsg.addString(attacker.getName()); - } - smsg.addNumber(i); - sendPacket(smsg); + return; } + + // Damage message. + SystemMessage smsg = new SystemMessage(36); + if ((attacker instanceof MonsterInstance) || (attacker instanceof NpcInstance)) + { + int mobId = ((NpcInstance) attacker).getNpcTemplate().getNpcId(); + smsg.addNpcName(mobId); + } + else + { + smsg.addString(attacker.getName()); + } + smsg.addNumber(ammount); + sendPacket(smsg); + + if (!isDead()) + { + return; + } + + // Calculate Karma lost. + if (getKarma() > 0) + { + for (ItemInstance item : getInventory().getItems()) + { + if (Config.KARMA_PROTECTED_ITEMS.contains(item.getItemId())) + { + continue; + } + if (Rnd.get(100) < Config.KARMA_DROP_CHANCE) + { + getInventory().dropItem(item, 1); + } + } + decreaseKarma(); + } + + // Died from player. + final PlayerInstance killer = attacker.getActingPlayer(); + if (killer != null) + { + if ((_pvpFlag == 0) && (_karma == 0)) + { + killer.increasePkKillsAndKarma(getLevel()); + } + } + } + + public void decreaseKarma() + { + float karmaLost = _karma / (getLevel() * 10); + if (karmaLost < 0) + { + karmaLost = 1; + } + karmaLost *= Config.KARMA_LOST_MULTIPLIER; + + if (_karma > karmaLost) + { + setKarma(_karma - (int) karmaLost); + } + else + { + setKarma(0); + } + + final UserInfo userInfo = new UserInfo(this); + sendPacket(userInfo); + broadcastPacket(userInfo); + } + + public void increasePkKillsAndKarma(int level) + { + int newKarma = Config.KARMA_MIN_KARMA; + int pkLevel = getLevel(); + + final int pkPKCount = getPkKills(); + int pkCountMulti = 0; + if (pkPKCount > 0) + { + pkCountMulti = pkPKCount / 2; + } + else + { + pkCountMulti = 1; + } + if (pkCountMulti < 1) + { + pkCountMulti = 1; + } + newKarma *= pkCountMulti; + + int lvlDiffMulti = 0; + if (pkLevel > level) + { + lvlDiffMulti = pkLevel / level; + } + else + { + lvlDiffMulti = 1; + } + if (lvlDiffMulti < 1) + { + lvlDiffMulti = 1; + } + newKarma *= lvlDiffMulti; + + if (newKarma < Config.KARMA_MIN_KARMA) + { + newKarma = Config.KARMA_MIN_KARMA; + } + if (newKarma > Config.KARMA_MAX_KARMA) + { + newKarma = Config.KARMA_MAX_KARMA; + } + if (_karma > (Integer.MAX_VALUE - newKarma)) + { + newKarma = Integer.MAX_VALUE - getKarma(); + } + + stopPvPFlag(); + + setPkKills(_pkKills + 1); + setKarma(_karma + newKarma); + + final UserInfo userInfo = new UserInfo(this); + sendPacket(userInfo); + broadcastPacket(userInfo); } public void setPartyMatchingAutomaticRegistration(boolean b) @@ -1582,4 +1801,10 @@ public class PlayerInstance extends Creature } } } + + @Override + public PlayerInstance getActingPlayer() + { + return this; + } } diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index d62c191402..04f7b2573a 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -125,7 +125,6 @@ public class CharacterCreate extends ClientBasePacket newChar.setRunSpeed(template.getMoveSpd()); newChar.setWalkSpeed((int) (template.getMoveSpd() * 0.7)); newChar.setWit(template.getWit()); - newChar.setPvpFlag(0); newChar.addAdena(5000); newChar.setCanCraft(template.getCanCraft()); newChar.setX(template.getX()); diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/Logout.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/Logout.java index 704a096114..97040c0ee0 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/Logout.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/Logout.java @@ -21,6 +21,7 @@ import java.io.IOException; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.ClientThread; +import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.LeaveWorld; public class Logout extends ClientBasePacket @@ -30,11 +31,18 @@ public class Logout extends ClientBasePacket public Logout(byte[] decrypt, ClientThread client) throws IOException { super(decrypt); - LeaveWorld ql = new LeaveWorld(); - client.getConnection().sendPacket(ql); + PlayerInstance player = client.getActiveChar(); if (player != null) { + if ((player.getPvpFlag() > 0) || player.isInCombat()) + { + player.sendMessage("You cannot exit the game while in combat."); + player.sendPacket(new ActionFailed()); + return; + } + LeaveWorld ql = new LeaveWorld(); + client.getConnection().sendPacket(ql); player.deleteMe(); client.saveCharToDisk(player); } diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestRestart.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestRestart.java index db90c086ad..c010d034d4 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestRestart.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestRestart.java @@ -21,6 +21,7 @@ import java.io.IOException; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.ClientThread; +import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.CharSelectInfo; import org.l2jmobius.gameserver.network.serverpackets.RestartResponse; @@ -31,14 +32,24 @@ public class RequestRestart extends ClientBasePacket public RequestRestart(byte[] decrypt, ClientThread client) throws IOException { super(decrypt); + PlayerInstance player = client.getActiveChar(); - player.deleteMe(); - RestartResponse response = new RestartResponse(); - client.getConnection().sendPacket(response); - client.saveCharToDisk(client.getActiveChar()); - client.setActiveChar(null); - CharSelectInfo cl = new CharSelectInfo(client.getLoginName(), client.getSessionId()); - client.getConnection().sendPacket(cl); + if (player != null) + { + if ((player.getPvpFlag() > 0) || player.isInCombat()) + { + player.sendMessage("You cannot exit the game while in combat."); + player.sendPacket(new ActionFailed()); + return; + } + player.deleteMe(); + RestartResponse response = new RestartResponse(); + client.getConnection().sendPacket(response); + client.saveCharToDisk(client.getActiveChar()); + client.setActiveChar(null); + CharSelectInfo cl = new CharSelectInfo(client.getLoginName(), client.getSessionId()); + client.getConnection().sendPacket(cl); + } } @Override diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/CharInfo.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/CharInfo.java index f4b5b6f493..63f4c4230b 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/CharInfo.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/CharInfo.java @@ -17,6 +17,7 @@ */ package org.l2jmobius.gameserver.network.serverpackets; +import org.l2jmobius.gameserver.model.Inventory; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; public class CharInfo extends ServerBasePacket @@ -32,7 +33,7 @@ public class CharInfo extends ServerBasePacket @Override public byte[] getContent() { - _bao.write(3); + writeC(0x03); writeD(_cha.getX()); writeD(_cha.getY()); writeD(_cha.getZ()); @@ -43,16 +44,16 @@ public class CharInfo extends ServerBasePacket writeD(_cha.getSex()); writeD(_cha.getClassId()); writeD(0); - writeD(_cha.getInventory().getPaperdollItemId(6)); - writeD(_cha.getInventory().getPaperdollItemId(7)); - writeD(_cha.getInventory().getPaperdollItemId(8)); - writeD(_cha.getInventory().getPaperdollItemId(9)); - writeD(_cha.getInventory().getPaperdollItemId(10)); - writeD(_cha.getInventory().getPaperdollItemId(11)); - writeD(_cha.getInventory().getPaperdollItemId(12)); - writeD(_cha.getInventory().getPaperdollItemId(13)); - writeD(_cha.getInventory().getPaperdollItemId(14)); - writeD(_cha.getInventory().getPaperdollItemId(0)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LRHAND)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_UNDER)); writeD(0); writeD(_cha.getMagicalSpeed()); writeD(_cha.getPhysicalSpeed()); diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/CharSelectInfo.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/CharSelectInfo.java index d799531706..dd263bde98 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/CharSelectInfo.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/CharSelectInfo.java @@ -26,6 +26,7 @@ import java.util.StringTokenizer; import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.model.CharSelectInfoPackage; +import org.l2jmobius.gameserver.model.Inventory; import org.l2jmobius.gameserver.model.actor.instance.ItemInstance; import org.l2jmobius.gameserver.templates.Item; @@ -48,31 +49,29 @@ public class CharSelectInfo extends ServerBasePacket @Override public byte[] getContent() { - int size = _characterPackage.length; - _bao.write(31); - writeD(size); - // long count = 123371L; - for (int i = 0; i < size; ++i) + writeC(0x1F); + writeD(_characterPackage.length); + for (CharSelectInfoPackage info : _characterPackage) { - CharSelectInfoPackage charInfoPackage = _characterPackage[i]; - writeS(charInfoPackage.getName()); - writeD(charInfoPackage.getCharId()); + writeS(info.getName()); + writeD(info.getCharId()); writeS(_loginName); writeD(_sessionId); - writeD(charInfoPackage.getClanId()); + writeD(info.getClanId()); writeD(0); - writeD(charInfoPackage.getSex()); - writeD(charInfoPackage.getRace()); - writeD(charInfoPackage.getClassId()); + writeD(info.getSex()); + writeD(info.getRace()); + writeD(info.getClassId()); writeD(1); writeD(0); writeD(0); writeD(0); - writeF(charInfoPackage.getCurrentHp()); - writeF(charInfoPackage.getCurrentMp()); - writeD(charInfoPackage.getSp()); - writeD(charInfoPackage.getExp()); - writeD(charInfoPackage.getLevel()); + writeF(info.getCurrentHp()); + writeF(info.getCurrentMp()); + writeD(info.getSp()); + writeD(info.getExp()); + writeD(info.getLevel()); + writeD(info.getKarma()); writeD(0); writeD(0); writeD(0); @@ -83,42 +82,41 @@ public class CharSelectInfo extends ServerBasePacket writeD(0); writeD(0); writeD(0); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK)); + writeD(info.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LRHAND)); writeD(0); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(2)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(1)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(3)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(5)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(4)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(6)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(7)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(8)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(9)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(10)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(11)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(12)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(13)); - writeD(charInfoPackage.getInventory().getPaperdollObjectId(14)); - writeD(0); - writeD(charInfoPackage.getInventory().getPaperdollItemId(2)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(1)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(3)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(5)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(4)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(6)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(7)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(8)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(9)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(10)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(11)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(12)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(13)); - writeD(charInfoPackage.getInventory().getPaperdollItemId(14)); - writeD(charInfoPackage.getHairStyle()); - writeD(charInfoPackage.getHairColor()); - writeD(charInfoPackage.getFace()); - writeF(charInfoPackage.getMaxHp()); - writeF(charInfoPackage.getMaxMp()); - writeD(charInfoPackage.getDeleteTimer()); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK)); + writeD(info.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LRHAND)); + writeD(info.getHairStyle()); + writeD(info.getHairColor()); + writeD(info.getFace()); + writeF(info.getMaxHp()); + writeF(info.getMaxMp()); + writeD(info.getDeleteTimer()); } return _bao.toByteArray(); } @@ -240,7 +238,7 @@ public class CharSelectInfo extends ServerBasePacket st.nextToken(); _charInfopackage.setExp(Integer.parseInt(st.nextToken())); _charInfopackage.setSp(Integer.parseInt(st.nextToken())); - st.nextToken(); + _charInfopackage.setKarma(Integer.parseInt(st.nextToken())); st.nextToken(); st.nextToken(); _charInfopackage.setClanId(Integer.parseInt(st.nextToken())); diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java index b46b35b41a..e5e911033e 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java @@ -17,6 +17,7 @@ */ package org.l2jmobius.gameserver.network.serverpackets; +import org.l2jmobius.gameserver.model.Inventory; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; public class UserInfo extends ServerBasePacket @@ -32,7 +33,7 @@ public class UserInfo extends ServerBasePacket @Override public byte[] getContent() { - _bao.write(4); + writeC(0x04); writeD(_cha.getX()); writeD(_cha.getY()); writeD(_cha.getZ()); @@ -58,36 +59,39 @@ public class UserInfo extends ServerBasePacket writeD(_cha.getCurrentLoad()); writeD(_cha.getMaxLoad()); writeD(40); - writeD(_cha.getInventory().getPaperdollObjectId(0)); - writeD(_cha.getInventory().getPaperdollObjectId(2)); - writeD(_cha.getInventory().getPaperdollObjectId(1)); - writeD(_cha.getInventory().getPaperdollObjectId(3)); - writeD(_cha.getInventory().getPaperdollObjectId(5)); - writeD(_cha.getInventory().getPaperdollObjectId(4)); - writeD(_cha.getInventory().getPaperdollObjectId(6)); - writeD(_cha.getInventory().getPaperdollObjectId(7)); - writeD(_cha.getInventory().getPaperdollObjectId(8)); - writeD(_cha.getInventory().getPaperdollObjectId(9)); - writeD(_cha.getInventory().getPaperdollObjectId(10)); - writeD(_cha.getInventory().getPaperdollObjectId(11)); - writeD(_cha.getInventory().getPaperdollObjectId(12)); - writeD(_cha.getInventory().getPaperdollObjectId(13)); - writeD(_cha.getInventory().getPaperdollObjectId(14)); - writeD(_cha.getInventory().getPaperdollItemId(0)); - writeD(_cha.getInventory().getPaperdollItemId(2)); - writeD(_cha.getInventory().getPaperdollItemId(1)); - writeD(_cha.getInventory().getPaperdollItemId(3)); - writeD(_cha.getInventory().getPaperdollItemId(5)); - writeD(_cha.getInventory().getPaperdollItemId(4)); - writeD(_cha.getInventory().getPaperdollItemId(6)); - writeD(_cha.getInventory().getPaperdollItemId(7)); - writeD(_cha.getInventory().getPaperdollItemId(8)); - writeD(_cha.getInventory().getPaperdollItemId(9)); - writeD(_cha.getInventory().getPaperdollItemId(10)); - writeD(_cha.getInventory().getPaperdollItemId(11)); - writeD(_cha.getInventory().getPaperdollItemId(12)); - writeD(_cha.getInventory().getPaperdollItemId(13)); - writeD(_cha.getInventory().getPaperdollItemId(14)); + + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_UNDER)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK)); + writeD(_cha.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LRHAND)); + + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_UNDER)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK)); + writeD(_cha.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LRHAND)); + writeD(_cha.getPhysicalAttack()); writeD(_cha.getPhysicalSpeed()); writeD(_cha.getPhysicalDefense()); diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/loginserver/network/ClientThread.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/loginserver/network/ClientThread.java index 6f0aa9d657..3628806d4e 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/loginserver/network/ClientThread.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/loginserver/network/ClientThread.java @@ -140,13 +140,13 @@ public class ClientThread extends Thread } if (lc.isAccountInLoginServer(account)) { - _log.warning("account is in use on Login server (kicking off):" + account); + _log.warning("Account is in use on Login server (kicking off):" + account); lc.getLoginServerConnection(account).close(); lc.removeLoginServerLogin(account); } if (lc.isAccountInGameServer(account)) { - _log.warning("account is in use on Gamea server (kicking off):" + account); + _log.warning("Account is in use on Game server (kicking off):" + account); lc.getClientConnection(account).close(); lc.removeGameServerLogin(account); }