Addition of player PvP flag and Karma.
This commit is contained in:
		@@ -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<Integer> 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());
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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());
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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<PlayerInstance> 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());
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -125,4 +125,9 @@ public class WorldObject implements Serializable
 | 
			
		||||
	{
 | 
			
		||||
		return _knownPlayer;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public PlayerInstance getActingPlayer()
 | 
			
		||||
	{
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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<Integer, Skill> _skills = new HashMap<>();
 | 
			
		||||
	private Skill _skill;
 | 
			
		||||
	private final Map<Integer, ShortCut> _shortCuts = new TreeMap<>();
 | 
			
		||||
	private int _allyId;
 | 
			
		||||
	private int _allyId = 0;
 | 
			
		||||
	private TradeList _tradeList;
 | 
			
		||||
	private List<TradeItem> _sellList;
 | 
			
		||||
	private List<TradeItem> _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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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());
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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());
 | 
			
		||||
 
 | 
			
		||||
@@ -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()));
 | 
			
		||||
 
 | 
			
		||||
@@ -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());
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
							}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user