Addition of player PvP flag and Karma.

This commit is contained in:
MobiusDevelopment 2019-11-23 02:01:39 +00:00
parent 9c9220457b
commit e111599ee8
18 changed files with 578 additions and 189 deletions

View File

@ -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;

View File

@ -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());
}
}

View File

@ -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());

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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());

View File

@ -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;
}
}

View File

@ -125,4 +125,9 @@ public class WorldObject implements Serializable
{
return _knownPlayer;
}
public PlayerInstance getActingPlayer()
{
return null;
}
}

View File

@ -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();
}
}
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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());

View File

@ -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);
}

View File

@ -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

View File

@ -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());

View File

@ -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()));

View File

@ -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());

View File

@ -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);
}