Underground update.

This commit is contained in:
MobiusDev
2015-11-07 01:36:06 +00:00
parent cf1f829606
commit 37dbd02716
750 changed files with 102520 additions and 58051 deletions

View File

@@ -49,6 +49,7 @@ public class AbnormalStatusUpdate extends L2GameServerPacket
if (info.getSkill().getDisplayLevel() < 100)
{
writeH(info.getSkill().getDisplayLevel());
writeH(0x00);
}
else
{

View File

@@ -76,9 +76,10 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket<ItemListType
writeC(item.getItem().getType2()); // Item Type 2 : 00-weapon, 01-shield/armor, 02-ring/earring/necklace, 03-questitem, 04-adena, 05-item
writeC(item.getCustomType1()); // Filler (always 0)
writeQ(item.getItem().getBodyPart()); // Slot : 0006-lr.ear, 0008-neck, 0030-lr.finger, 0040-head, 0100-l.hand, 0200-gloves, 0400-chest, 0800-pants, 1000-feet, 4000-r.hand, 8000-r.hand
writeH(item.getEnchant()); // Enchant level (pet level shown in control item)
writeC(item.getEnchant()); // Enchant level (pet level shown in control item)
writeH(0x00); // Equipped : 00-No, 01-yes
writeH(item.getCustomType2());
writeC(item.getCustomType2());
writeD(0);
writeItemElementalAndEnchant(new ItemInfo(item));
}
@@ -95,13 +96,15 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket<ItemListType
writeC(item.getCustomType1()); // Filler (always 0)
writeH(item.getEquipped()); // Equipped : 00-No, 01-yes
writeQ(item.getItem().getBodyPart()); // Slot : 0006-lr.ear, 0008-neck, 0030-lr.finger, 0040-head, 0100-l.hand, 0200-gloves, 0400-chest, 0800-pants, 1000-feet, 4000-r.hand, 8000-r.hand
writeH(item.getEnchant()); // Enchant level (pet level shown in control item)
writeC(item.getEnchant()); // Enchant level (pet level shown in control item)
writeC(0);
writeD(item.getMana());
writeD(item.getTime());
writeC(0x01); // GOD Item enabled = 1 disabled (red) = 0
if (containsMask(mask, ItemListType.AUGMENT_BONUS))
{
writeD(item.getAugmentationBonus());
writeD(item.get1stAugmentationId());
writeD(item.get2ndAugmentationId());
}
if (containsMask(mask, ItemListType.ELEMENTAL_ATTRIBUTE))
{
@@ -181,7 +184,7 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket<ItemListType
// Enchant Effects
for (int op : item.getEnchantOptions())
{
writeH(op);
writeD(op);
}
}

View File

@@ -414,12 +414,8 @@ public abstract class AbstractMessagePacket<T extends AbstractMessagePacket<?>>
}
case TYPE_ITEM_NAME:
case TYPE_CASTLE_NAME:
case TYPE_INT_NUMBER:
case TYPE_NPC_NAME:
case TYPE_ELEMENT_NAME:
case TYPE_SYSTEM_STRING:
case TYPE_INSTANCE_NAME:
case TYPE_DOOR_NAME:
{
writeD(param.getIntValue());
@@ -429,8 +425,25 @@ public abstract class AbstractMessagePacket<T extends AbstractMessagePacket<?>>
case TYPE_SKILL_NAME:
{
final int[] array = param.getIntArrayValue();
writeD(array[0]); // SkillId
writeH(array[1]); // SkillLevel
final int _skillId = array[0];
final int _skillLevel = array[1];
writeD(_skillId); // SkillId
if (_skillLevel < 100)
{
writeH(_skillLevel); // SkillLevel
writeH(0);
}
else if (_skillLevel > 10000)
{
writeH((short) _skillLevel);
writeH(_skillLevel >> 16);
}
else
{
int _maxLevel = SkillData.getInstance().getMaxLevel(_skillId);
writeH(_maxLevel);
writeH(_skillLevel);
}
break;
}
@@ -444,10 +457,18 @@ public abstract class AbstractMessagePacket<T extends AbstractMessagePacket<?>>
break;
}
case TYPE_CLASS_ID:
case TYPE_CASTLE_NAME:
case TYPE_INSTANCE_NAME:
case TYPE_SYSTEM_STRING:
{
writeH(param.getIntValue());
break;
}
case TYPE_ELEMENT_NAME:
{
writeC(param.getIntValue());
break;
}
}
}
}
@@ -504,6 +525,7 @@ public abstract class AbstractMessagePacket<T extends AbstractMessagePacket<?>>
final int[] array = param.getIntArrayValue();
out.println(array[0]); // SkillId
out.println(array[1]); // SkillLevel
out.println(array[2]);
break;
}
@@ -615,8 +637,16 @@ public abstract class AbstractMessagePacket<T extends AbstractMessagePacket<?>>
case TYPE_SKILL_NAME:
{
final int[] array = param.getIntArrayValue();
final Skill skill = SkillData.getInstance().getSkill(array[0], array[1]);
params[i] = skill == null ? "Unknown" : skill.getName();
if (array[1] < 10000)
{
final Skill skill = SkillData.getInstance().getSkill(array[0], array[1]);
params[i] = skill == null ? "Unknown" : skill.getName();
}
else
{
final Skill skill = SkillData.getInstance().getSkill(array[0], array[1] >> 16);
params[i] = skill == null ? "Unknown" : skill.getName();
}
break;
}

View File

@@ -125,5 +125,6 @@ public class AcquireSkillInfo extends L2GameServerPacket
writeQ(temp.count);
writeD(temp.unk);
}
writeD(0);
}
}

View File

@@ -23,6 +23,7 @@ import java.util.Objects;
import java.util.stream.Collectors;
import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.model.L2SkillLearn;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.holders.ItemHolder;
@@ -51,7 +52,7 @@ public class AcquireSkillList extends L2GameServerPacket
for (L2SkillLearn skill : _learnable)
{
writeD(skill.getSkillId());
writeH(skill.getSkillLevel());
writeD(skill.getSkillLevel());
writeQ(skill.getLevelUpSp());
writeC(skill.getGetLevel());
writeC(skill.getDualClassLevel());
@@ -68,7 +69,16 @@ public class AcquireSkillList extends L2GameServerPacket
for (Skill skillRemove : skillRem)
{
writeD(skillRemove.getId());
writeH(skillRemove.getLevel());
if (skillRemove.getLevel() < 100)
{
writeD(skillRemove.getLevel());
}
else
{
int maxLevel = SkillData.getInstance().getMaxLevel(skillRemove.getId());
writeH(maxLevel);
writeH(skillRemove.getLevel());
}
}
}
}

View File

@@ -22,15 +22,18 @@ public class AskJoinAlly extends L2GameServerPacket
{
private final String _requestorName;
private final int _requestorObjId;
private final String _requestorAllyName;
/**
* @param requestorObjId
* @param requestorAllyName
* @param requestorName
*/
public AskJoinAlly(int requestorObjId, String requestorName)
public AskJoinAlly(int requestorObjId, String requestorAllyName, String requestorName)
{
_requestorName = requestorName;
_requestorObjId = requestorObjId;
_requestorAllyName = requestorAllyName;
}
@Override
@@ -38,7 +41,7 @@ public class AskJoinAlly extends L2GameServerPacket
{
writeC(0xbb);
writeD(_requestorObjId);
writeS(null); // Ally Name ?
writeS(_requestorAllyName);
writeS(null); // TODO: Find me!
writeS(_requestorName);
}

View File

@@ -24,13 +24,15 @@ public final class AskJoinPledge extends L2GameServerPacket
private final String _subPledgeName;
private final int _pledgeType;
private final String _pledgeName;
private final String _askjoinName;
public AskJoinPledge(int requestorObjId, String subPledgeName, int pledgeType, String pledgeName)
public AskJoinPledge(int requestorObjId, String subPledgeName, int pledgeType, String pledgeName, String askjoinName)
{
_requestorObjId = requestorObjId;
_subPledgeName = subPledgeName;
_pledgeType = pledgeType;
_pledgeName = pledgeName;
_askjoinName = askjoinName;
}
@Override
@@ -38,14 +40,15 @@ public final class AskJoinPledge extends L2GameServerPacket
{
writeC(0x2c);
writeD(_requestorObjId);
if (_subPledgeName != null)
{
writeS(_pledgeType > 0 ? _subPledgeName : _pledgeName);
}
writeS(_askjoinName);
writeS(_pledgeName);
if (_pledgeType != 0)
{
writeD(_pledgeType);
}
if (_subPledgeName != null)
{
writeS(_pledgeType > 0 ? _subPledgeName : _pledgeName);
}
}
}

View File

@@ -70,7 +70,8 @@ public final class BuyListSeed extends L2GameServerPacket
writeC(0x00); // Filler (always 0)
writeH(0x00); // Equipped : 00-No, 01-yes
writeQ(0x00); // Slot : 0006-lr.ear, 0008-neck, 0030-lr.finger, 0040-head, 0100-l.hand, 0200-gloves, 0400-chest, 0800-pants, 1000-feet, 4000-r.hand, 8000-r.hand
writeH(0x00); // Enchant level (pet level shown in control item)
writeC(0x00); // Enchant level (pet level shown in control item)
writeC(0x00);
writeD(-1);
writeD(-9999);
writeC(0x01); // GOD Item enabled = 1 disabled (red) = 0

View File

@@ -48,22 +48,6 @@ public class CharInfo extends L2GameServerPacket
private int _vehicleId = 0;
private static final int[] PAPERDOLL_ORDER = new int[]
{
Inventory.PAPERDOLL_UNDER,
Inventory.PAPERDOLL_HEAD,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_LHAND,
Inventory.PAPERDOLL_GLOVES,
Inventory.PAPERDOLL_CHEST,
Inventory.PAPERDOLL_LEGS,
Inventory.PAPERDOLL_FEET,
Inventory.PAPERDOLL_CLOAK,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_HAIR,
Inventory.PAPERDOLL_HAIR2
};
public CharInfo(L2PcInstance cha)
{
_activeChar = cha;
@@ -131,21 +115,22 @@ public class CharInfo extends L2GameServerPacket
writeS(_activeChar.getAppearance().getVisibleName()); // Confirmed
writeH(_activeChar.getRace().ordinal()); // Confirmed
writeC(_activeChar.getAppearance().getSex() ? 0x01 : 0x00); // Confirmed
writeD(_activeChar.getBaseClass()); // Confirmed
writeD(_activeChar.getBaseClassId()); // Confirmed
for (int slot : getPaperdollOrder())
for (int slot : Inventory.PAPERDOLL_ORDER)
{
writeD(_activeChar.getInventory().getPaperdollItemDisplayId(slot)); // Confirmed
}
for (int slot : getPaperdollOrderAugument())
for (int slot : Inventory.PAPERDOLL_ORDER_AUGMENT)
{
writeD(_activeChar.getInventory().getPaperdollAugmentationId(slot)); // Confirmed
writeD(_activeChar.getInventory().getPaperdoll1stAugmentationId(slot));
writeD(_activeChar.getInventory().getPaperdoll2ndAugmentationId(slot));
}
writeC(_armorEnchant);
for (int slot : getPaperdollOrderVisualId())
for (int slot : Inventory.PAPERDOLL_ORDER_VISUAL_ID)
{
writeD(_activeChar.getInventory().getPaperdollItemVisualId(slot));
}
@@ -241,7 +226,7 @@ public class CharInfo extends L2GameServerPacket
writeD(_activeChar.getTransformationDisplayId()); // Confirmed
writeD(_activeChar.getAgathionId()); // Confirmed
writeC(0x00); // TODO: Find me!
writeC(0x01); // TODO: Find me!
writeD((int) Math.round(_activeChar.getCurrentCp())); // Confirmed
writeD(_activeChar.getMaxHp()); // Confirmed
@@ -260,10 +245,4 @@ public class CharInfo extends L2GameServerPacket
writeC(_activeChar.isHairAccessoryEnabled() ? 0x01 : 0x00); // Hair accessory
writeC(_activeChar.getAbilityPointsUsed()); // Used Ability Points
}
@Override
protected int[] getPaperdollOrder()
{
return PAPERDOLL_ORDER;
}
}

View File

@@ -32,7 +32,6 @@ import com.l2jserver.gameserver.data.sql.impl.ClanTable;
import com.l2jserver.gameserver.data.xml.impl.ExperienceData;
import com.l2jserver.gameserver.model.CharSelectInfoPackage;
import com.l2jserver.gameserver.model.L2Clan;
import com.l2jserver.gameserver.model.entity.Hero;
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.network.L2GameClient;
@@ -41,7 +40,6 @@ public class CharSelectionInfo extends L2GameServerPacket
private static Logger _log = Logger.getLogger(CharSelectionInfo.class.getName());
private final String _loginName;
private final int _sessionId;
private int _activeId;
private final List<CharSelectInfoPackage> _characterPackages;
/**
@@ -54,15 +52,6 @@ public class CharSelectionInfo extends L2GameServerPacket
_sessionId = sessionId;
_loginName = loginName;
_characterPackages = loadCharacterSelectInfo(_loginName);
_activeId = -1;
}
public CharSelectionInfo(String loginName, int sessionId, int activeId)
{
_sessionId = sessionId;
_loginName = loginName;
_characterPackages = loadCharacterSelectInfo(_loginName);
_activeId = activeId;
}
public List<CharSelectInfoPackage> getCharInfo()
@@ -81,48 +70,37 @@ public class CharSelectionInfo extends L2GameServerPacket
writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT);
writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char
writeC(0x01); // play mode, if 1 can create only 2 char in regular lobby
writeD(0x02); // if 1, korean client
writeC(0x00); // if 1 suggest premium account
writeC(0x02); // play mode, if 1 can create only 2 char in regular lobby
writeD(0x00); // if 1, korean client
long lastAccess = 0L;
if (_activeId == -1)
int charId = 0;
if (!_characterPackages.isEmpty())
{
for (int i = 0; i < size; i++)
long lastAccess = -1L;
charId = _characterPackages.get(0).getObjectId();
for (CharSelectInfoPackage info : _characterPackages)
{
final CharSelectInfoPackage charInfoPackage = _characterPackages.get(i);
if (lastAccess < charInfoPackage.getLastAccess())
if (info.isAvailable() && (lastAccess < info.getLastAccess()))
{
lastAccess = charInfoPackage.getLastAccess();
_activeId = i;
lastAccess = info.getLastAccess();
charId = info.getObjectId();
}
}
}
for (int i = 0; i < size; i++)
for (CharSelectInfoPackage charInfoPackage : _characterPackages)
{
final CharSelectInfoPackage charInfoPackage = _characterPackages.get(i);
writeS(charInfoPackage.getName()); // char name
writeD(charInfoPackage.getObjectId()); // char id
writeS(_loginName); // login
writeD(_sessionId); // session id
writeD(0x00); // ??
writeD(0x00); // ??
writeD(charInfoPackage.getSex()); // sex
writeD(charInfoPackage.getRace()); // race
if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
{
writeD(charInfoPackage.getClassId());
}
else
{
writeD(charInfoPackage.getBaseClassId());
}
writeD(0x01); // server id ??
writeS(charInfoPackage.getName());
writeD(charInfoPackage.getObjectId());
writeS(_loginName);
writeD(_sessionId);
writeD(charInfoPackage.getClanId());
writeD(0x00);
writeD(charInfoPackage.getSex());
writeD(charInfoPackage.getRace());
writeD(charInfoPackage.getBaseClassId());
writeD(Config.SERVER_ID);
writeD(charInfoPackage.getX());
writeD(charInfoPackage.getY());
writeD(charInfoPackage.getZ());
@@ -149,52 +127,50 @@ public class CharSelectionInfo extends L2GameServerPacket
writeD(0x00); // Ertheia
writeD(0x00); // Ertheia
for (int slot : getPaperdollOrder())
for (int slot : Inventory.PAPERDOLL_ORDER_ALL)
{
writeD(charInfoPackage.getPaperdollItemId(slot));
}
for (int slot : getPaperdollOrderVisualId())
for (int slot : Inventory.PAPERDOLL_ORDER_VISUAL_ID)
{
writeD(charInfoPackage.getPaperdollItemVisualId(slot));
}
writeD(0x00); // ??
writeD(0x00); // ??
writeH(0x00); // ??
writeH(charInfoPackage.getEnchantEffect(Inventory.PAPERDOLL_CHEST));
writeH(charInfoPackage.getEnchantEffect(Inventory.PAPERDOLL_LEGS));
writeH(charInfoPackage.getEnchantEffect(Inventory.PAPERDOLL_HEAD));
writeH(charInfoPackage.getEnchantEffect(Inventory.PAPERDOLL_GLOVES));
writeH(charInfoPackage.getEnchantEffect(Inventory.PAPERDOLL_FEET));
writeD(charInfoPackage.getHairStyle());
writeD(charInfoPackage.getHairColor());
writeD(charInfoPackage.getFace());
writeF(charInfoPackage.getMaxHp()); // hp max
writeF(charInfoPackage.getMaxMp()); // mp max
writeF(charInfoPackage.getMaxHp());
writeF(charInfoPackage.getMaxMp());
writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0);
writeD(charInfoPackage.getClassId());
writeD(i == _activeId ? 1 : 0);
writeD(charId == charInfoPackage.getObjectId() ? 0x01 : 0x00);
writeC(charInfoPackage.getWeaponEnchantEffect());
writeD(charInfoPackage.get1stAugmentationId());
writeD(charInfoPackage.get2ndAugmentationId());
writeD(charInfoPackage.getTransformationId());
writeC(charInfoPackage.getEnchantEffect() > 127 ? 127 : charInfoPackage.getEnchantEffect());
writeD(charInfoPackage.getAugmentationId());
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
// writeD(charInfoPackage.getTransformId()); // Used to display Transformations
writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
// Freya by Vistall:
writeD(0x00); // npdid - 16024 Tame Tiny Baby Kookaburra A9E89C
writeD(0x00); // level
writeD(0x00); // ?
writeD(0x00); // food? - 1200
writeF(0x00); // max Hp
writeF(0x00); // cur Hp
// High Five by Vistall:
writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality
writeD(0x00); // Vitality Exp Bonus
writeD(0x00); // Vitality items used, such as potion
writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not
writeC(0x00); // is noble
writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // hero glow
writeF(0x00);
writeF(0x00);
writeD(charInfoPackage.getVitalityPoints());
writeD(charInfoPackage.getVitalityPercent());
writeD(charInfoPackage.getVitalityItemCount());
writeD(charInfoPackage.isAvailable());
writeC(0x00);
writeC(charInfoPackage.isHero()); // hero glow
writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // show hair accessory if enabled
}
}

View File

@@ -45,9 +45,7 @@ public class Die extends L2GameServerPacket
private final boolean _isSweepable;
private boolean _useFeather;
private boolean _toFortress;
private boolean _hideAnimation;
private List<Integer> _items = null;
private boolean _itemsEnabled;
public Die(L2Character activeChar)
{
@@ -84,11 +82,6 @@ public class Die extends L2GameServerPacket
_isSweepable = activeChar.isAttackable() && activeChar.isSweepActive();
}
public void setHideAnimation(boolean val)
{
_hideAnimation = val;
}
public void addItem(int itemId)
{
if (_items == null)
@@ -111,11 +104,6 @@ public class Die extends L2GameServerPacket
return _items != null ? _items : Collections.emptyList();
}
public void setItemsEnabled(boolean val)
{
_itemsEnabled = val;
}
@Override
protected final void writeImpl()
{
@@ -128,14 +116,10 @@ public class Die extends L2GameServerPacket
writeD(_isSweepable ? 0x01 : 0x00);
writeD(_useFeather ? 0x01 : 0x00);
writeD(_toFortress ? 0x01 : 0x00);
writeC(_hideAnimation ? 0x01 : 0x00);
writeD(getItems().size());
for (int itemId : getItems())
{
writeD(itemId);
}
writeD(_itemsEnabled ? 0x01 : 0x00);
writeD(0x00);
writeD(0x00);
writeC(0x00);
writeD(0x00);
writeD(0x00);
}
}

View File

@@ -63,7 +63,7 @@ public class EnchantResult extends L2GameServerPacket
writeD(_enchantLevel);
for (int option : _enchantOptions)
{
writeH(option);
writeD(option);
}
}
}

View File

@@ -21,6 +21,7 @@ package com.l2jserver.gameserver.network.serverpackets;
import java.util.ArrayList;
import java.util.List;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.skills.BuffInfo;
import com.l2jserver.gameserver.model.skills.Skill;
@@ -34,6 +35,7 @@ public class ExAbnormalStatusUpdateFromTarget extends L2GameServerPacket
{
protected int _skillId;
protected int _level;
protected int _maxlevel;
protected int _duration;
protected int _caster;
@@ -49,6 +51,7 @@ public class ExAbnormalStatusUpdateFromTarget extends L2GameServerPacket
_skillId = skill.getDisplayId();
_level = skill.getDisplayLevel();
_maxlevel = SkillData.getInstance().getMaxLevel(_skillId);
_duration = info.getTime();
_caster = casterId;
}
@@ -86,7 +89,16 @@ public class ExAbnormalStatusUpdateFromTarget extends L2GameServerPacket
for (Effect info : _effects)
{
writeD(info._skillId);
writeH(info._level);
if (info._level < 100)
{
writeH(info._level);
writeH(0x00);
}
else
{
writeH(info._maxlevel);
writeH(info._level);
}
writeH(0x00); // Combo abnormal ?
writeH(info._duration);
writeD(info._caster);

View File

@@ -18,18 +18,24 @@
*/
package com.l2jserver.gameserver.network.serverpackets;
/**
* @author Mobius
*/
public class ExAutoSoulShot extends L2GameServerPacket
{
private final int _itemId;
private final int _type;
private final int _enabled;
private final int _type; // 0 SS, 1 SPS, 2 Beast SS, 3 Beast SPS
/**
* @param itemId
* @param enabled
* @param type
*/
public ExAutoSoulShot(int itemId, int type)
public ExAutoSoulShot(int itemId, int enabled, int type)
{
_itemId = itemId;
_enabled = enabled;
_type = type;
}
@@ -37,8 +43,9 @@ public class ExAutoSoulShot extends L2GameServerPacket
protected final void writeImpl()
{
writeC(0xFE);
writeH(0x0c); // sub id
writeH(0x0C);
writeD(_itemId);
writeD(_enabled);
writeD(_type);
}
}

View File

@@ -26,19 +26,80 @@ public final class ExBasicActionList extends L2GameServerPacket
//@formatter:off
public static final int[] ACTIONS_ON_TRANSFORM =
{
1, 2, 3, 4,
5, 6, 7, 8,
9, 11, 15, 16,
17, 18, 19, 21,
22, 23, 40, 41,
50, 52, 53, 54,
55, 56, 57, 63,
64, 65, 67, 68,
69, 70, 74, 76,
77, 78, 79, 80,
81, 82, 83, 84,
85, 86, 87, 88,
1000, 1001, 1003,
1, 3, 4, 5,
6, 7, 8, 9,
11, 15, 16, 17,
18, 19, 21, 22,
23, 32, 36, 39,
40, 41, 42, 43,
44, 45, 46, 47,
48, 50, 52, 53,
54, 55, 56, 57,
63, 64, 65, 70, 86,
1000, 1001, 1003, 1004,
1005, 1006, 1007, 1008,
1009, 1010, 1011, 1012,
1013, 1014, 1015, 1016,
1017, 1018, 1019, 1020,
1021, 1022, 1023, 1024,
1025, 1026, 1027, 1028,
1029, 1030, 1031, 1032,
1033, 1034, 1035, 1036,
1037, 1038, 1039, 1040,
1041, 1042, 1043, 1044,
1045, 1046, 1047, 1048,
1049, 1050, 1051, 1052,
1053, 1054, 1055, 1056,
1057, 1058, 1059, 1060,
1061, 1062, 1063, 1064,
1065, 1066, 1067, 1068,
1069, 1070, 1071, 1072,
1073, 1074, 1075, 1076,
1077, 1078, 1079, 1080,
1081, 1082, 1083, 1084,
1089, 1090, 1091, 1092,
1093, 1094, 1095, 1096,
1097, 1098, 1099, 1100,
1101, 1102, 1103, 1104,
1106, 1107, 1108, 1109,
1110, 1111, 1113, 1114,
1115, 1116, 1117, 1118,
1120, 1121, 1124, 1125,
1126, 1127, 1128, 1129,
1130, 1131, 1132, 1133,
1134, 1135, 1136, 1137,
1138, 1139, 1140, 1141,
1142, 1143, 1144, 1145,
1146, 1147, 1148, 1149,
1150, 1151, 1152, 1153,
1154, 1155
};
public static final int[] DEFAULT_ACTION_LIST =
{
0, 1, 2, 3, 4,
5, 6, 7, 8, 9,
10, 11, 12, 13,
14, 15, 16, 17,
18, 19, 20, 21,
22, 23, 24, 25,
26, 27, 28, 29,
30, 31, 32, 33,
34, 35, 36, 37,
38, 39, 40, 41,
42, 43, 44, 45,
46, 47, 48, 49,
50, 51, 52, 53,
54, 55, 56, 57,
58, 59, 60, 61,
62, 63, 64, 65,
66, 67, 68, 69,
70, 71, 72, 73,
74, 76, 77, 78,
79, 80, 81, 82,
83, 84, 85, 86,
87, 88, 89, 90,
1000, 1001, 1002, 1003,
1004, 1005, 1006, 1007,
1008, 1009, 1010, 1011,
1012, 1013, 1014, 1015,
@@ -59,77 +120,28 @@ public final class ExBasicActionList extends L2GameServerPacket
1072, 1073, 1074, 1075,
1076, 1077, 1078, 1079,
1080, 1081, 1082, 1083,
1084, 1089, 1090, 1091,
1092, 5000, 5001, 5002,
5003, 5004, 5005, 5006,
5007, 5008, 5009, 5010,
5011, 5012, 5013, 5014,
5015
};
public static final int[] DEFAULT_ACTION_LIST =
{
0, 1, 2, 3,
4, 5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16,
17, 18, 19, 20,
21, 22, 23, 24,
25, 26, 27, 28,
29, 30, 31, 32,
33, 34, 35, 36,
37, 38, 39, 40,
41, 42, 43, 44,
45, 46, 47, 48,
49, 50, 51, 52,
53, 54, 55, 56,
57, 58, 59, 60,
61, 62, 63, 64,
65, 66, 71, 72,
73, 74, 75, 76,
77, 78, 79, 80,
81, 82, 83, 84,
85, 86, 87, 88,
90, 1000, 1001, 1002,
1003, 1004, 1005, 1006,
1007, 1008, 1009, 1010,
1011, 1012, 1013, 1014,
1015, 1016, 1017, 1018,
1019, 1020, 1021, 1022,
1023, 1024, 1025, 1026,
1027, 1028, 1029, 1030,
1031, 1032, 1033, 1034,
1035, 1036, 1037, 1038,
1039, 1040, 1041, 1042,
1043, 1044, 1045, 1046,
1047, 1048, 1049, 1050,
1051, 1052, 1053, 1054,
1055, 1056, 1057, 1058,
1059, 1060, 1061, 1062,
1063, 1064, 1065, 1066,
1067, 1068, 1069, 1070,
1071, 1072, 1073, 1074,
1075, 1076, 1077, 1078,
1079, 1080, 1081, 1082,
1083, 1084, 1086, 1087,
1088, 1089, 1090, 1091,
1092, 1093, 1094, 1095,
1096, 1097, 1098, 1099,
1100, 1101, 1102, 1103,
1104, 1105, 1106, 1107,
1108, 1109, 1110, 1111,
1112, 1113, 1114, 1115,
1116, 1117, 1118, 1119,
1120, 1121, 1122, 1123,
1124, 1125, 1126, 1127,
1128, 1129, 1130, 1131,
1132, 1133, 1134, 1135,
1136, 1137, 1138, 1139,
1140, 1141, 1142, 1143,
5000, 5001, 5002, 5003,
5004, 5005, 5006, 5007,
5008, 5009, 5010, 5011,
5012, 5013, 5014, 5015
1084, 1086, 1087, 1088,
1089, 1090, 1091, 1092,
1093, 1094, 1095, 1096,
1097, 1098, 1099, 1100,
1101, 1102, 1103, 1104,
1106, 1107, 1108, 1109,
1110, 1111, 1112, 1113,
1114, 1115, 1116, 1117,
1118, 1119, 1120, 1121,
1122, 1123, 1124, 1125,
1126, 1127, 1128, 1129,
1130, 1131, 1132, 1133,
1134, 1135, 1136, 1137,
1138, 1139, 1140, 1141,
1142, 1143, 1144, 1145,
1146, 1147, 1148, 1149,
1150, 1151, 1152, 1153,
1154, 1155, 5000, 5001,
5002, 5003, 5004, 5005,
5006, 5007, 5008, 5009,
5010, 5011, 5012, 5013,
5014, 5015
};
//@formatter:on

View File

@@ -70,7 +70,7 @@ public class ExBeautyItemList extends L2GameServerPacket
writeD(hair.getAdena());
writeD(hair.getResetAdena());
writeD(hair.getBeautyShopTicket());
writeD(1); // Limit
writeD(99999999); // Limit
}
writeD(FACE_TYPE);
@@ -82,7 +82,7 @@ public class ExBeautyItemList extends L2GameServerPacket
writeD(face.getAdena());
writeD(face.getResetAdena());
writeD(face.getBeautyShopTicket());
writeD(1); // Limit
writeD(99999999); // Limit
}
writeD(COLOR_TYPE);
@@ -96,7 +96,7 @@ public class ExBeautyItemList extends L2GameServerPacket
writeD(color.getAdena());
writeD(color.getResetAdena());
writeD(color.getBeautyShopTicket());
writeD(1);
writeD(99999999);
}
}
}

View File

@@ -18,14 +18,19 @@
*/
package com.l2jserver.gameserver.network.serverpackets;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
/**
* @author Gnat
**/
public class ExBirthdayPopup extends L2GameServerPacket
{
public ExBirthdayPopup()
private final L2PcInstance _activeChar;
public ExBirthdayPopup(L2PcInstance character)
{
_activeChar = character;
}
@Override
@@ -33,5 +38,6 @@ public class ExBirthdayPopup extends L2GameServerPacket
{
writeC(0xFE);
writeH(0x90);
writeD(_activeChar.getObjectId());
}
}

View File

@@ -18,6 +18,9 @@
*/
package com.l2jserver.gameserver.network.serverpackets;
import java.util.ArrayList;
import java.util.List;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
@@ -29,6 +32,7 @@ public class ExBuySellList extends AbstractItemPacket
private L2ItemInstance[] _sellList = null;
private L2ItemInstance[] _refundList = null;
private final boolean _done;
private final List<L2ItemInstance> _items = new ArrayList<>();
public ExBuySellList(L2PcInstance player, boolean done)
{
@@ -38,6 +42,14 @@ public class ExBuySellList extends AbstractItemPacket
_refundList = player.getRefund().getItems();
}
_done = done;
for (L2ItemInstance item : player.getInventory().getItems())
{
if (!item.isQuestItem())
{
_items.add(item);
}
}
}
@Override
@@ -46,7 +58,7 @@ public class ExBuySellList extends AbstractItemPacket
writeC(0xFE);
writeH(0xB8);
writeD(0x01);
writeD(0x00); // TODO: Find me
writeD(_items.size());
if ((_sellList != null))
{

View File

@@ -24,7 +24,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
/**
* @author Erlandys
* @author Erlandys TODO: Fix this class to Infinity Odyssey !!!
*/
public class ExChangeAttributeItemList extends AbstractItemPacket
{

View File

@@ -36,7 +36,7 @@ public class ExConfirmAddingContact extends L2GameServerPacket
protected void writeImpl()
{
writeC(0xFE);
writeH(0xD2);
writeH(0xD3);
writeS(_charName);
writeD(_added ? 0x01 : 0x00);
}

View File

@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import com.l2jserver.gameserver.data.xml.impl.EnchantSkillGroupsData;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder;
import com.l2jserver.gameserver.model.L2EnchantSkillLearn;
@@ -31,19 +32,21 @@ public final class ExEnchantSkillInfo extends L2GameServerPacket
private final int _id;
private final int _lvl;
private final int _maxlvl;
private boolean _maxEnchanted = false;
public ExEnchantSkillInfo(int id, int lvl)
{
_id = id;
_lvl = lvl;
_maxlvl = SkillData.getInstance().getMaxLevel(_id);
L2EnchantSkillLearn enchantLearn = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_id);
// do we have this skill?
if (enchantLearn != null)
{
// skill already enchanted?
if (_lvl > 100)
if (_lvl > 1000)
{
_maxEnchanted = enchantLearn.isMaxEnchant(_lvl);
@@ -51,22 +54,22 @@ public final class ExEnchantSkillInfo extends L2GameServerPacket
EnchantSkillHolder esd = enchantLearn.getEnchantSkillHolder(_lvl);
// if it exists add it
if (esd != null)
if ((esd != null) && !_maxEnchanted)
{
_routes.add(_lvl); // current enchant add firts
_routes.add(_lvl + 1); // current enchant add firts
}
int skillLvL = (_lvl % 100);
int skillLvL = (_lvl % 1000);
for (int route : enchantLearn.getAllRoutes())
{
if (((route * 100) + skillLvL) == _lvl)
if (((route * 1000) + skillLvL) == _lvl)
{
continue;
}
// add other levels of all routes - same lvl as enchanted
// lvl
_routes.add((route * 100) + skillLvL);
_routes.add((route * 1000) + skillLvL);
}
}
@@ -76,7 +79,7 @@ public final class ExEnchantSkillInfo extends L2GameServerPacket
for (int route : enchantLearn.getAllRoutes())
{
// add first level (+1) of all routes
_routes.add((route * 100) + 1);
_routes.add((route * 1000) + 1);
}
}
}
@@ -88,14 +91,23 @@ public final class ExEnchantSkillInfo extends L2GameServerPacket
writeC(0xFE);
writeH(0x2A);
writeD(_id);
writeD(_lvl);
if (_lvl < 100)
{
writeD(_lvl);
}
else
{
writeH(_maxlvl);
writeH(_lvl);
}
writeD(_maxEnchanted ? 0 : 1);
writeD(_lvl > 100 ? 1 : 0); // enchanted?
writeD(_lvl > 1000 ? 1 : 0); // enchanted?
writeD(_routes.size());
for (int level : _routes)
{
writeD(level);
writeH(_maxlvl);
writeH(level);
}
}
}

View File

@@ -20,6 +20,7 @@ package com.l2jserver.gameserver.network.serverpackets;
import com.l2jserver.Config;
import com.l2jserver.gameserver.data.xml.impl.EnchantSkillGroupsData;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder;
import com.l2jserver.gameserver.model.L2EnchantSkillLearn;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -42,21 +43,26 @@ public class ExEnchantSkillInfoDetail extends L2GameServerPacket
private final int _type;
private final int _skillid;
private final int _skilllvl;
private final int _maxlvl;
private final int _chance;
private int _sp;
private final int _adenacount;
public ExEnchantSkillInfoDetail(int type, int skillid, int skilllvl, L2PcInstance ply)
{
_type = type;
_skillid = skillid;
_skilllvl = skilllvl;
_maxlvl = SkillData.getInstance().getMaxLevel(_skillid);
L2EnchantSkillLearn enchantLearn = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(skillid);
EnchantSkillHolder esd = null;
// do we have this skill?
if (enchantLearn != null)
{
if (skilllvl > 100)
if (_skilllvl > 1000)
{
esd = enchantLearn.getEnchantSkillHolder(skilllvl);
esd = enchantLearn.getEnchantSkillHolder(_skilllvl);
}
else
{
@@ -66,7 +72,7 @@ public class ExEnchantSkillInfoDetail extends L2GameServerPacket
if (esd == null)
{
throw new IllegalArgumentException("Skill " + skillid + " dont have enchant data for level " + skilllvl);
throw new IllegalArgumentException("Skill " + skillid + " dont have enchant data for level " + _skilllvl);
}
if (type == 0)
@@ -93,58 +99,96 @@ public class ExEnchantSkillInfoDetail extends L2GameServerPacket
_sp = 0;
_adenacount = 0;
}
_type = type;
_skillid = skillid;
_skilllvl = skilllvl;
final int _elvl = ((_skilllvl % 100) - 1) / 10;
switch (type)
{
case TYPE_NORMAL_ENCHANT:
if (ply.getClassId().level() == 3)
if (ply.getClassId().level() < 4)
{
bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_OLD;
}
else
{
bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK;
if (_elvl == 0)
{
bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK;
}
else if (_elvl == 1)
{
bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_V2;
}
else
{
bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_V3;
}
}
reqCount = (((_skilllvl % 100) > 1) ? 0 : 1);
reqCount = 1;
break;
case TYPE_SAFE_ENCHANT:
if (ply.getClassId().level() == 3)
if (ply.getClassId().level() < 4)
{
bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_OLD;
}
else
{
bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK;
}
reqCount = 1;
break;
case TYPE_UNTRAIN_ENCHANT:
if (ply.getClassId().level() == 3)
{
bookId = EnchantSkillGroupsData.UNTRAIN_ENCHANT_BOOK_OLD;
}
else
{
bookId = EnchantSkillGroupsData.UNTRAIN_ENCHANT_BOOK;
if (_elvl == 0)
{
bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK;
}
else if (_elvl == 1)
{
bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_V2;
}
else
{
bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_V3;
}
}
reqCount = 1;
break;
case TYPE_CHANGE_ENCHANT:
if (ply.getClassId().level() == 3)
if (ply.getClassId().level() < 4)
{
bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_OLD;
}
else
{
bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK;
if (_elvl == 0)
{
bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK;
}
else if (_elvl == 1)
{
bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_V2;
}
else
{
bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_V3;
}
}
reqCount = 1;
break;
case TYPE_IMMORTAL_ENCHANT:
bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL;
if (ply.getClassId().level() < 4)
{
bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL;
}
else
{
if (_elvl == 0)
{
bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL;
}
else if (_elvl == 1)
{
bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL_V2;
}
else
{
bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL_V3;
}
}
reqCount = 1;
break;
default:
@@ -165,7 +209,8 @@ public class ExEnchantSkillInfoDetail extends L2GameServerPacket
writeD(_type);
writeD(_skillid);
writeD(_skilllvl);
writeH(_maxlvl);
writeH(_skilllvl);
writeQ(_sp * multi); // sp
writeD(_chance); // exp
writeD(0x02); // items count?

View File

@@ -89,7 +89,7 @@ public class ExListPartyMatchingWaitingRoom extends L2GameServerPacket
for (L2PcInstance member : _members)
{
writeS(member.getName());
writeD(member.getActiveClass());
writeD(member.getActiveClassId());
writeD(member.getLevel());
writeD(_currentTemplateId);
writeD(0x00); // TODO: Instance ID reuse size

View File

@@ -51,7 +51,7 @@ public class ExManagePartyRoomMember extends L2GameServerPacket
writeD(_mode);
writeD(_activeChar.getObjectId());
writeS(_activeChar.getName());
writeD(_activeChar.getActiveClass());
writeD(_activeChar.getActiveClassId());
writeD(_activeChar.getLevel());
writeD(_room.getLocation());
if (_room.getOwner().equals(_activeChar))

View File

@@ -34,7 +34,7 @@ public class ExNevitAdventEffect extends L2GameServerPacket
protected void writeImpl()
{
writeC(0xFE);
writeH(0xE0);
writeH(0xE4);
writeD(_timeLeft);
}
}

View File

@@ -34,7 +34,7 @@ public class ExNevitAdventPointInfoPacket extends L2GameServerPacket
protected void writeImpl()
{
writeC(0xFE);
writeH(0xDF);
writeH(0xE3);
writeD(_points); // 72 = 1%, max 7200 = 100%
}
}

View File

@@ -36,7 +36,7 @@ public class ExNevitAdventTimeChange extends L2GameServerPacket
protected void writeImpl()
{
writeC(0xFE);
writeH(0xE1);
writeH(0xE5);
// state 0 - pause 1 - started
writeC(_paused ? 0x00 : 0x01);
// left time in ms max is 16000 its 4m and state is automatically changed to quit

View File

@@ -54,7 +54,7 @@ public class ExOlympiadSpelledInfo extends L2GameServerPacket
if ((info != null) && info.isInUse())
{
writeD(info.getSkill().getDisplayId());
writeH(info.getSkill().getDisplayLevel());
writeD(info.getSkill().getDisplayLevel());
writeD(0x00);
writeH(info.getTime());
}

View File

@@ -46,7 +46,7 @@ public class ExPartyRoomMember extends L2GameServerPacket
{
writeD(member.getObjectId());
writeS(member.getName());
writeD(member.getActiveClass());
writeD(member.getActiveClassId());
writeD(member.getLevel());
writeD(_room.getLocation());
if (_room.getOwner().equals(member))

View File

@@ -34,5 +34,6 @@ public class ExPlayScene extends L2GameServerPacket
{
writeC(0xFE);
writeH(0x5D);
writeD(0x00);
}
}

View File

@@ -75,6 +75,5 @@ public class ExReplySentPost extends AbstractItemPacket
}
writeQ(_msg.getReqAdena());
writeD(_msg.hasAttachments() ? 0x01 : 0x00);
writeD(_msg.isReturned() ? 0x01 : 00);
}
}

View File

@@ -38,7 +38,7 @@ public class ExShowContactList extends L2GameServerPacket
protected void writeImpl()
{
writeC(0xFE);
writeH(0xD3);
writeH(0xD4);
writeD(_contacts.size());
for (String name : _contacts)
{

View File

@@ -64,7 +64,7 @@ public class ExShowScreenMessage extends L2GameServerPacket
_sysMessageId = -1;
_unk1 = 0;
_unk2 = 0;
_unk3 = 0;
_unk3 = 1;
_fade = false;
_position = TOP_CENTER;
_text = text;
@@ -88,7 +88,7 @@ public class ExShowScreenMessage extends L2GameServerPacket
_sysMessageId = -1;
_unk1 = 0;
_unk2 = 0;
_unk3 = 0;
_unk3 = 1;
_fade = false;
_position = TOP_CENTER;
_text = text;
@@ -107,11 +107,11 @@ public class ExShowScreenMessage extends L2GameServerPacket
*/
public ExShowScreenMessage(NpcStringId npcString, int position, int time, String... params)
{
_type = 2;
_type = 1;
_sysMessageId = -1;
_unk1 = 0x00;
_unk2 = 0x00;
_unk3 = 0x00;
_unk3 = 0x01;
_fade = false;
_position = position;
_text = null;
@@ -134,11 +134,11 @@ public class ExShowScreenMessage extends L2GameServerPacket
*/
public ExShowScreenMessage(SystemMessageId systemMsg, int position, int time, String... params)
{
_type = 2;
_type = 0;
_sysMessageId = systemMsg.getId();
_unk1 = 0x00;
_unk2 = 0x00;
_unk3 = 0x00;
_unk3 = 0x01;
_fade = false;
_position = position;
_text = null;
@@ -216,9 +216,11 @@ public class ExShowScreenMessage extends L2GameServerPacket
writeD(_time);
writeD(_fade ? 0x01 : 0x00);
writeD(_npcString);
int exsize = 5;
if (_npcString == -1)
{
writeS(_text);
exsize--;
}
else
{
@@ -227,8 +229,13 @@ public class ExShowScreenMessage extends L2GameServerPacket
for (String s : _parameters)
{
writeS(s);
exsize--;
}
}
}
for (int i = 1; i < exsize; i++)
{
writeS("");
}
}
}

View File

@@ -43,10 +43,10 @@ public class ExShowSeedMapInfo extends L2GameServerPacket
writeD(2770 + GraciaSeedsManager.getInstance().getSoDState()); // sys msg id
// Seed of Infinity
writeD(-213770); // x coord
writeD(210760); // y coord
writeD(4400); // z coord
writeD(-178472); // x coord
writeD(152538); // y coord
writeD(2544); // z coord
// Manager not implemented yet
writeD(2766); // sys msg id
writeD(3302); // sys msg id
}
}

View File

@@ -36,5 +36,6 @@ public class ExStartScenePlayer extends L2GameServerPacket
writeC(0xFE);
writeH(0x9A);
writeD(_movieId);
writeD(-1);
}
}

View File

@@ -29,7 +29,6 @@ public class ExStorageMaxCount extends L2GameServerPacket
{
private final int _inventory;
private final int _warehouse;
private final int _freight;
private final int _clan;
private final int _privateSell;
private final int _privateBuy;
@@ -42,7 +41,6 @@ public class ExStorageMaxCount extends L2GameServerPacket
{
_inventory = activeChar.getInventoryLimit();
_warehouse = activeChar.getWareHouseLimit();
_freight = Config.ALT_FREIGHT_SLOTS;
_privateSell = activeChar.getPrivateSellStoreLimit();
_privateBuy = activeChar.getPrivateBuyStoreLimit();
_clan = Config.WAREHOUSE_SLOTS_CLAN;
@@ -60,7 +58,6 @@ public class ExStorageMaxCount extends L2GameServerPacket
writeD(_inventory);
writeD(_warehouse);
writeD(_freight);
writeD(_clan);
writeD(_privateSell);
writeD(_privateBuy);

View File

@@ -69,7 +69,7 @@ public class ExSubjobInfo extends L2GameServerPacket
public SubInfo(L2PcInstance player)
{
_index = 0;
_classId = player.getBaseClass();
_classId = player.getBaseClassId();
_level = player.getStat().getBaseLevel();
_type = SubclassType.BASECLASS.ordinal();
}

View File

@@ -79,10 +79,11 @@ public class ExUserInfoEquipSlot extends AbstractMaskPacket<InventorySlot>
{
if (containsMask(slot))
{
writeH(18); // 2 + 4 * 4
writeH(22); // 2 + 4 * 5
writeD(inventory.getPaperdollObjectId(slot.getSlot()));
writeD(inventory.getPaperdollItemId(slot.getSlot()));
writeD(inventory.getPaperdollAugmentationId(slot.getSlot()));
writeD(inventory.getPaperdoll1stAugmentationId(slot.getSlot()));
writeD(inventory.getPaperdoll2ndAugmentationId(slot.getSlot()));
writeD(inventory.getPaperdollItemVisualId(slot.getSlot()));
}
}

View File

@@ -50,6 +50,7 @@ public class ExVitalityEffectInfo extends L2GameServerPacket
writeD(_points);
writeD((int) (Config.RATE_VITALITY_EXP_MULTIPLIER * 100)); // Vitality Bonus
writeH(0x00);
writeH(0x05); // How much vitality items remaining for use
writeH(0x05); // Max number of items for use
}

View File

@@ -34,7 +34,7 @@ public class FriendAddRequest extends L2GameServerPacket
protected final void writeImpl()
{
writeC(0x83);
writeC(1);
writeS(_requestorName);
writeD(0x00);
}
}

View File

@@ -49,15 +49,15 @@ public final class GMHennaInfo extends L2GameServerPacket
protected void writeImpl()
{
writeC(0xF0);
writeC(_activeChar.getHennaStatINT()); // equip INT
writeC(_activeChar.getHennaStatSTR()); // equip STR
writeC(_activeChar.getHennaStatCON()); // equip CON
writeC(_activeChar.getHennaStatMEN()); // equip MEN
writeC(_activeChar.getHennaStatDEX()); // equip DEX
writeC(_activeChar.getHennaStatWIT()); // equip WIT
writeC(0x00); // equip LUC
writeC(0x00); // equip CHA
writeD(3); // Slots
writeD(_activeChar.getHennaStatINT()); // equip INT
writeD(_activeChar.getHennaStatSTR()); // equip STR
writeD(_activeChar.getHennaStatCON()); // equip CON
writeD(_activeChar.getHennaStatMEN()); // equip MEN
writeD(_activeChar.getHennaStatDEX()); // equip DEX
writeD(_activeChar.getHennaStatWIT()); // equip WIT
writeD(_activeChar.getHennaStatLUC()); // equip LUC
writeD(_activeChar.getHennaStatCHA()); // equip CHA
writeD(_hennas.size() > 0 ? 3 : 0);
writeD(_hennas.size()); // Size
for (L2Henna henna : _hennas)
{

View File

@@ -20,6 +20,7 @@ package com.l2jserver.gameserver.network.serverpackets;
import com.l2jserver.gameserver.data.xml.impl.ExperienceData;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
public class GMViewCharacterInfo extends L2GameServerPacket
{
@@ -75,19 +76,20 @@ public class GMViewCharacterInfo extends L2GameServerPacket
writeD(_activeChar.getMaxLoad());
writeD(_activeChar.getPkKills());
for (int slot : getPaperdollOrder())
for (int slot : Inventory.PAPERDOLL_ORDER_ALL)
{
writeD(_activeChar.getInventory().getPaperdollObjectId(slot));
}
for (int slot : getPaperdollOrder())
for (int slot : Inventory.PAPERDOLL_ORDER_ALL)
{
writeD(_activeChar.getInventory().getPaperdollItemDisplayId(slot));
}
for (int slot : getPaperdollOrder())
for (int slot : Inventory.PAPERDOLL_ORDER_ALL)
{
writeD(_activeChar.getInventory().getPaperdollAugmentationId(slot));
writeD(_activeChar.getInventory().getPaperdoll1stAugmentationId(slot));
writeD(_activeChar.getInventory().getPaperdoll2ndAugmentationId(slot));
}
writeD(_activeChar.getInventory().getTalismanSlots()); // CT2.3

View File

@@ -48,7 +48,16 @@ public class GMViewSkillInfo extends L2GameServerPacket
for (Skill skill : _skills)
{
writeD(skill.isPassive() ? 1 : 0);
writeD(skill.getDisplayLevel());
if (skill.getDisplayLevel() < 100)
{
writeD(skill.getDisplayLevel());
}
else
{
int maxLevel = SkillData.getInstance().getMaxLevel(skill.getDisplayLevel());
writeH(maxLevel);
writeH(skill.getDisplayLevel());
}
writeD(skill.getDisplayId());
writeD(0x00);
writeC(isDisabled && skill.isClanSkill() ? 1 : 0);

View File

@@ -35,9 +35,9 @@ public class GameGuardQuery extends L2GameServerPacket
public void writeImpl()
{
writeC(0x74);
writeD(0x27533DD9);
writeD(0x2E72A51D);
writeD(0x2017038B);
writeD(0xC35B1EA3);
writeD(0xE1B752B6);
writeD(0x51AFEF3A);
writeD(0xB1180C49);
writeD(0x08F4F7D7);
}
}

View File

@@ -63,7 +63,7 @@ public class HennaEquipList extends L2GameServerPacket
writeQ(henna.getWearCount()); // amount of dyes required
writeQ(henna.getWearFee()); // amount of Adena required
writeD(henna.isAllowedClass(_player.getClassId()) ? 0x01 : 0x00); // meet the requirement or not
writeD(0x00); // TODO: Find me!
writeD(0x00);
}
}
}

View File

@@ -49,14 +49,14 @@ public final class HennaInfo extends L2GameServerPacket
protected void writeImpl()
{
writeC(0xE5);
writeC(_activeChar.getHennaStatINT()); // equip INT
writeC(_activeChar.getHennaStatSTR()); // equip STR
writeC(_activeChar.getHennaStatCON()); // equip CON
writeC(_activeChar.getHennaStatMEN()); // equip MEN
writeC(_activeChar.getHennaStatDEX()); // equip DEX
writeC(_activeChar.getHennaStatWIT()); // equip WIT
writeC(_activeChar.getHennaStatLUC()); // equip LUC
writeC(_activeChar.getHennaStatCHA()); // equip CHA
writeD(_activeChar.getHennaStatINT()); // equip INT
writeD(_activeChar.getHennaStatSTR()); // equip STR
writeD(_activeChar.getHennaStatCON()); // equip CON
writeD(_activeChar.getHennaStatMEN()); // equip MEN
writeD(_activeChar.getHennaStatDEX()); // equip DEX
writeD(_activeChar.getHennaStatWIT()); // equip WIT
writeD(_activeChar.getHennaStatLUC()); // equip LUC
writeD(_activeChar.getHennaStatCHA()); // equip CHA
writeD(3 - _activeChar.getHennaEmptySlots()); // Slots
writeD(_hennas.size()); // Size
for (L2Henna henna : _hennas)

View File

@@ -46,21 +46,21 @@ public class HennaItemDrawInfo extends L2GameServerPacket
writeD(_henna.isAllowedClass(_activeChar.getClassId()) ? 0x01 : 0x00); // able to draw or not 0 is false and 1 is true
writeQ(_activeChar.getAdena());
writeD(_activeChar.getINT()); // current INT
writeC(_activeChar.getINT() + _henna.getStatINT()); // equip INT
writeD(_activeChar.getINT() + _henna.getStatINT()); // equip INT
writeD(_activeChar.getSTR()); // current STR
writeC(_activeChar.getSTR() + _henna.getStatSTR()); // equip STR
writeD(_activeChar.getSTR() + _henna.getStatSTR()); // equip STR
writeD(_activeChar.getCON()); // current CON
writeC(_activeChar.getCON() + _henna.getStatCON()); // equip CON
writeD(_activeChar.getCON() + _henna.getStatCON()); // equip CON
writeD(_activeChar.getMEN()); // current MEN
writeC(_activeChar.getMEN() + _henna.getStatMEN()); // equip MEN
writeD(_activeChar.getMEN() + _henna.getStatMEN()); // equip MEN
writeD(_activeChar.getDEX()); // current DEX
writeC(_activeChar.getDEX() + _henna.getStatDEX()); // equip DEX
writeD(_activeChar.getDEX() + _henna.getStatDEX()); // equip DEX
writeD(_activeChar.getWIT()); // current WIT
writeC(_activeChar.getWIT() + _henna.getStatWIT()); // equip WIT
writeD(_activeChar.getWIT() + _henna.getStatWIT()); // equip WIT
writeD(_activeChar.getLUC()); // current LUC
writeC(_activeChar.getLUC() + _henna.getStatLUC()); // equip LUC
writeD(_activeChar.getLUC() + _henna.getStatLUC()); // equip LUC
writeD(_activeChar.getCHA()); // current CHA
writeC(_activeChar.getCHA() + _henna.getStatCHA()); // equip CHA
writeD(0x00); // TODO: Find me!
writeD(_activeChar.getCHA() + _henna.getStatCHA()); // equip CHA
writeD(0x00);
}
}

View File

@@ -46,21 +46,21 @@ public final class HennaItemRemoveInfo extends L2GameServerPacket
writeD(_henna.isAllowedClass(_activeChar.getClassId()) ? 0x01 : 0x00); // able to remove or not
writeQ(_activeChar.getAdena());
writeD(_activeChar.getINT()); // current INT
writeC(_activeChar.getINT() - _henna.getStatINT()); // equip INT
writeD(_activeChar.getINT() - _henna.getStatINT()); // equip INT
writeD(_activeChar.getSTR()); // current STR
writeC(_activeChar.getSTR() - _henna.getStatSTR()); // equip STR
writeD(_activeChar.getSTR() - _henna.getStatSTR()); // equip STR
writeD(_activeChar.getCON()); // current CON
writeC(_activeChar.getCON() - _henna.getStatCON()); // equip CON
writeD(_activeChar.getCON() - _henna.getStatCON()); // equip CON
writeD(_activeChar.getMEN()); // current MEN
writeC(_activeChar.getMEN() - _henna.getStatMEN()); // equip MEN
writeD(_activeChar.getMEN() - _henna.getStatMEN()); // equip MEN
writeD(_activeChar.getDEX()); // current DEX
writeC(_activeChar.getDEX() - _henna.getStatDEX()); // equip DEX
writeD(_activeChar.getDEX() - _henna.getStatDEX()); // equip DEX
writeD(_activeChar.getWIT()); // current WIT
writeC(_activeChar.getWIT() - _henna.getStatWIT()); // equip WIT
writeD(_activeChar.getWIT() - _henna.getStatWIT()); // equip WIT
writeD(_activeChar.getLUC()); // current LUC
writeC(_activeChar.getLUC() - _henna.getStatLUC()); // equip LUC
writeD(_activeChar.getLUC() - _henna.getStatLUC()); // equip LUC
writeD(_activeChar.getCHA()); // current CHA
writeC(_activeChar.getCHA() - _henna.getStatCHA()); // equip CHA
writeD(_activeChar.getCHA() - _henna.getStatCHA()); // equip CHA
writeD(0x00);
}
}

View File

@@ -49,7 +49,7 @@ public class HennaRemoveList extends L2GameServerPacket
writeD(henna.getDyeItemId());
writeQ(henna.getCancelCount());
writeQ(henna.getCancelFee());
writeD(0x00);
writeD(0x01);
writeD(0x00);
}
}

View File

@@ -25,7 +25,6 @@ import com.l2jserver.commons.mmocore.SendablePacket;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.interfaces.IPositionable;
import com.l2jserver.gameserver.model.interfaces.IUpdateTypeComponent;
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.network.L2GameClient;
/**
@@ -37,64 +36,6 @@ public abstract class L2GameServerPacket extends SendablePacket<L2GameClient>
private boolean _invisible = false;
private static final int[] PAPERDOLL_ORDER = new int[]
{
Inventory.PAPERDOLL_UNDER,
Inventory.PAPERDOLL_REAR,
Inventory.PAPERDOLL_LEAR,
Inventory.PAPERDOLL_NECK,
Inventory.PAPERDOLL_RFINGER,
Inventory.PAPERDOLL_LFINGER,
Inventory.PAPERDOLL_HEAD,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_LHAND,
Inventory.PAPERDOLL_GLOVES,
Inventory.PAPERDOLL_CHEST,
Inventory.PAPERDOLL_LEGS,
Inventory.PAPERDOLL_FEET,
Inventory.PAPERDOLL_CLOAK,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_HAIR,
Inventory.PAPERDOLL_HAIR2,
Inventory.PAPERDOLL_RBRACELET,
Inventory.PAPERDOLL_LBRACELET,
Inventory.PAPERDOLL_DECO1,
Inventory.PAPERDOLL_DECO2,
Inventory.PAPERDOLL_DECO3,
Inventory.PAPERDOLL_DECO4,
Inventory.PAPERDOLL_DECO5,
Inventory.PAPERDOLL_DECO6,
Inventory.PAPERDOLL_BELT,
Inventory.PAPERDOLL_BROOCH,
Inventory.PAPERDOLL_BROOCH_JEWEL1,
Inventory.PAPERDOLL_BROOCH_JEWEL2,
Inventory.PAPERDOLL_BROOCH_JEWEL3,
Inventory.PAPERDOLL_BROOCH_JEWEL4,
Inventory.PAPERDOLL_BROOCH_JEWEL5,
Inventory.PAPERDOLL_BROOCH_JEWEL6
};
private static final int[] PAPERDOLL_ORDER_AUGMENT = new int[]
{
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_LHAND,
Inventory.PAPERDOLL_RHAND
};
private static final int[] PAPERDOLL_ORDER_VISUAL_ID = new int[]
{
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_LHAND,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_GLOVES,
Inventory.PAPERDOLL_CHEST,
Inventory.PAPERDOLL_LEGS,
Inventory.PAPERDOLL_FEET,
Inventory.PAPERDOLL_HAIR,
Inventory.PAPERDOLL_HAIR2
};
/**
* @return True if packet originated from invisible character.
*/
@@ -143,21 +84,6 @@ public abstract class L2GameServerPacket extends SendablePacket<L2GameClient>
}
}
protected int[] getPaperdollOrder()
{
return PAPERDOLL_ORDER;
}
protected int[] getPaperdollOrderAugument()
{
return PAPERDOLL_ORDER_AUGMENT;
}
protected int[] getPaperdollOrderVisualId()
{
return PAPERDOLL_ORDER_VISUAL_ID;
}
@Override
protected void write()
{

View File

@@ -21,6 +21,7 @@ package com.l2jserver.gameserver.network.serverpackets;
import java.util.Arrays;
import java.util.List;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.model.L2Object;
import com.l2jserver.gameserver.model.actor.L2Character;
@@ -33,6 +34,7 @@ public class MagicSkillLaunched extends L2GameServerPacket
private final int _charObjId;
private final int _skillId;
private final int _skillLevel;
private final int _maxLevel;
private final List<L2Object> _targets;
public MagicSkillLaunched(L2Character cha, int skillId, int skillLevel, L2Object... targets)
@@ -40,6 +42,7 @@ public class MagicSkillLaunched extends L2GameServerPacket
_charObjId = cha.getObjectId();
_skillId = skillId;
_skillLevel = skillLevel;
_maxLevel = SkillData.getInstance().getMaxLevel(_skillId);
//@formatter:off
if (targets == null)
@@ -62,7 +65,15 @@ public class MagicSkillLaunched extends L2GameServerPacket
writeD(0x00); // TODO: Find me!
writeD(_charObjId);
writeD(_skillId);
writeD(_skillLevel);
if (_skillLevel < 100)
{
writeD(_skillLevel);
}
else
{
writeH(_maxLevel);
writeH(_skillLevel);
}
writeD(_targets.size());
for (L2Object target : _targets)
{

View File

@@ -22,6 +22,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.interfaces.IPositionable;
@@ -34,11 +35,12 @@ public final class MagicSkillUse extends L2GameServerPacket
{
private final int _skillId;
private final int _skillLevel;
private final int _maxLevel;
private final int _hitTime;
private final int _reuseDelay;
private final L2Character _activeChar;
private final L2Character _target;
private final List<Integer> _unknown = Collections.emptyList();
private List<Integer> _unknown = Collections.emptyList();
private final List<Location> _groundLocations;
public MagicSkillUse(L2Character cha, L2Character target, int skillId, int skillLevel, int hitTime, int reuseDelay)
@@ -47,6 +49,7 @@ public final class MagicSkillUse extends L2GameServerPacket
_target = target;
_skillId = skillId;
_skillLevel = skillLevel;
_maxLevel = SkillData.getInstance().getMaxLevel(_skillId);
_hitTime = hitTime;
_reuseDelay = reuseDelay;
_groundLocations = cha.isPlayer() && (cha.getActingPlayer().getCurrentSkillWorldPosition() != null) ? Arrays.asList(cha.getActingPlayer().getCurrentSkillWorldPosition()) : Collections.<Location> emptyList();
@@ -57,6 +60,25 @@ public final class MagicSkillUse extends L2GameServerPacket
this(cha, cha, skillId, skillLevel, hitTime, reuseDelay);
}
/**
* @param l2Character
* @param target
* @param displayId
* @param displayLevel
* @param skillTime
* @param reuseDelay
* @param blowSuccess
*/
public MagicSkillUse(L2Character l2Character, L2Character target, int displayId, int displayLevel, int skillTime, int reuseDelay, boolean blowSuccess)
{
this(l2Character, target, displayId, displayLevel, skillTime, reuseDelay);
if (blowSuccess)
{
_unknown = Arrays.asList(0);
}
}
@Override
protected final void writeImpl()
{
@@ -65,7 +87,15 @@ public final class MagicSkillUse extends L2GameServerPacket
writeD(_activeChar.getObjectId());
writeD(_target.getObjectId());
writeD(_skillId);
writeD(_skillLevel);
if (_skillLevel < 100)
{
writeD(_skillLevel);
}
else
{
writeH(_maxLevel);
writeH(_skillLevel);
}
writeD(_hitTime);
writeD(-1); // TODO: Find me!
writeD(_reuseDelay);

View File

@@ -75,6 +75,7 @@ public final class MultiSellList extends L2GameServerPacket
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(ent.getProducts().size());
writeH(ent.getIngredients().size());
@@ -107,6 +108,7 @@ public final class MultiSellList extends L2GameServerPacket
writeH(ing.getItemInfo().getElementals()[3]); // earth
writeH(ing.getItemInfo().getElementals()[4]); // holy
writeH(ing.getItemInfo().getElementals()[5]); // dark
writeH(0x00);
}
else
{
@@ -122,6 +124,7 @@ public final class MultiSellList extends L2GameServerPacket
writeH(0x00); // earth
writeH(0x00); // holy
writeH(0x00); // dark
writeH(0x00);
}
}
@@ -143,6 +146,7 @@ public final class MultiSellList extends L2GameServerPacket
writeH(ing.getItemInfo().getElementals()[3]); // earth
writeH(ing.getItemInfo().getElementals()[4]); // holy
writeH(ing.getItemInfo().getElementals()[5]); // dark
writeH(0x00);
}
else
{
@@ -157,6 +161,7 @@ public final class MultiSellList extends L2GameServerPacket
writeH(0x00); // earth
writeH(0x00); // holy
writeH(0x00); // dark
writeH(0x00);
}
}
}

View File

@@ -48,24 +48,24 @@ public final class NewCharacterSuccess extends L2GameServerPacket
// TODO: Unhardcode these
writeD(chr.getRace().ordinal());
writeD(chr.getClassId().getId());
writeD(0x46);
writeD(0x63);
writeD(chr.getBaseSTR());
writeD(0x0A);
writeD(0x46);
writeD(0x01);
writeD(0x63);
writeD(chr.getBaseDEX());
writeD(0x0A);
writeD(0x46);
writeD(0x01);
writeD(0x63);
writeD(chr.getBaseCON());
writeD(0x0A);
writeD(0x46);
writeD(0x01);
writeD(0x63);
writeD(chr.getBaseINT());
writeD(0x0A);
writeD(0x46);
writeD(0x01);
writeD(0x63);
writeD(chr.getBaseWIT());
writeD(0x0A);
writeD(0x46);
writeD(0x01);
writeD(0x63);
writeD(chr.getBaseMEN());
writeD(0x0A);
writeD(0x01);
}
}
}

View File

@@ -62,22 +62,18 @@ public class NpcInfo extends AbstractMaskPacket<NpcInfoType>
_npc = npc;
_abnormalVisualEffects = npc.getCurrentAbnormalVisualEffects();
addComponentType(NpcInfoType.ATTACKABLE, NpcInfoType.UNKNOWN1, NpcInfoType.ID, NpcInfoType.POSITION, NpcInfoType.ALIVE, NpcInfoType.RUNNING);
if (npc.getHeading() > 0)
if (npc.getTemplate().isUsingServerSideName())
{
addComponentType(NpcInfoType.HEADING);
addComponentType(NpcInfoType.NAME);
}
if ((npc.getStat().getPAtkSpd() > 0) || (npc.getStat().getMAtkSpd() > 0))
{
addComponentType(NpcInfoType.ATK_CAST_SPEED);
}
addComponentType(NpcInfoType.ATTACKABLE, NpcInfoType.UNKNOWN1, NpcInfoType.TITLE, NpcInfoType.ID, NpcInfoType.POSITION, NpcInfoType.ALIVE, NpcInfoType.RUNNING);
if (npc.getRunSpeed() > 0)
{
addComponentType(NpcInfoType.SPEED_MULTIPLIER);
}
addComponentType(NpcInfoType.HEADING);
addComponentType(NpcInfoType.ATK_CAST_SPEED);
addComponentType(NpcInfoType.SPEED_MULTIPLIER);
if ((npc.getLeftHandItem() > 0) || (npc.getRightHandItem() > 0))
{
@@ -89,55 +85,17 @@ public class NpcInfo extends AbstractMaskPacket<NpcInfoType>
addComponentType(NpcInfoType.TEAM);
}
if (npc.getDisplayEffect() > 0)
{
addComponentType(NpcInfoType.DISPLAY_EFFECT);
}
addComponentType(NpcInfoType.DISPLAY_EFFECT);
if (npc.isInsideZone(ZoneId.WATER) || npc.isFlying())
{
addComponentType(NpcInfoType.SWIM_OR_FLY);
}
addComponentType(NpcInfoType.SWIM_OR_FLY);
if (npc.isFlying())
{
addComponentType(NpcInfoType.FLYING);
}
addComponentType(NpcInfoType.FLYING);
if (npc.getMaxHp() > 0)
{
addComponentType(NpcInfoType.MAX_HP);
}
addComponentType(NpcInfoType.MAX_HP);
if (npc.getMaxMp() > 0)
{
addComponentType(NpcInfoType.MAX_MP);
}
addComponentType(NpcInfoType.CURRENT_HP);
if (npc.getCurrentHp() <= npc.getMaxHp())
{
addComponentType(NpcInfoType.CURRENT_HP);
}
if (npc.getCurrentMp() <= npc.getMaxMp())
{
addComponentType(NpcInfoType.CURRENT_MP);
}
if (npc.getTemplate().isUsingServerSideName())
{
addComponentType(NpcInfoType.NAME);
}
if (npc.getTemplate().isUsingServerSideTitle() || (Config.SHOW_NPC_LVL && npc.isMonster()) || npc.isChampion())
{
addComponentType(NpcInfoType.TITLE);
}
if (!_abnormalVisualEffects.isEmpty())
{
addComponentType(NpcInfoType.ABNORMALS);
}
addComponentType(NpcInfoType.ABNORMALS);
if (npc.getEnchantEffect() > 0)
{
@@ -165,8 +123,6 @@ public class NpcInfo extends AbstractMaskPacket<NpcInfoType>
}
}
addComponentType(NpcInfoType.UNKNOWN8);
// TODO: Confirm me
if (npc.isInCombat())
{
@@ -215,7 +171,14 @@ public class NpcInfo extends AbstractMaskPacket<NpcInfoType>
}
case TITLE:
{
_initSize += type.getBlockLength() + (npc.getTitle().length() * 2);
if (npc.getTemplate().isUsingServerSideTitle())
{
_initSize += type.getBlockLength() + (npc.getTemplate().getTitle().length() * 2);
}
else
{
_initSize += type.getBlockLength();
}
break;
}
case NAME:
@@ -253,7 +216,14 @@ public class NpcInfo extends AbstractMaskPacket<NpcInfoType>
}
if (containsMask(NpcInfoType.TITLE))
{
writeS(_npc.getTitle());
if (_npc.getTemplate().isUsingServerSideTitle())
{
writeS(_npc.getTemplate().getTitle());
}
else
{
writeS("");
}
}
// Block 2
@@ -278,8 +248,8 @@ public class NpcInfo extends AbstractMaskPacket<NpcInfoType>
}
if (containsMask(NpcInfoType.ATK_CAST_SPEED))
{
writeD((int) _npc.getPAtkSpd());
writeD(_npc.getMAtkSpd());
writeD((int) _npc.getPAtkSpd());
}
if (containsMask(NpcInfoType.SPEED_MULTIPLIER))
{
@@ -401,4 +371,4 @@ public class NpcInfo extends AbstractMaskPacket<NpcInfoType>
}
}
}
}
}

View File

@@ -123,16 +123,28 @@ public final class NpcSay extends L2GameServerPacket
writeD(_textType.getClientId());
writeD(_npcId);
writeD(_npcString);
int size = 5;
if (_npcString == -1)
{
writeS(_text);
size--;
}
else if (_parameters != null)
{
for (String s : _parameters)
{
writeS(s);
size--;
}
}
for (int i = 1; i < size; i++)
{
writeS("");
}
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
}
}

View File

@@ -48,6 +48,6 @@ public class PartyMatchDetail extends L2GameServerPacket
writeD(_room.getLootType());
writeD(_room.getLocation());
writeS(_room.getTitle());
writeH(59064);
writeH(0x105);
}
}

View File

@@ -21,6 +21,7 @@ package com.l2jserver.gameserver.network.serverpackets;
import java.util.ArrayList;
import java.util.List;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.skills.BuffInfo;
@@ -51,7 +52,17 @@ public class PartySpelled extends L2GameServerPacket
if ((info != null) && info.isInUse())
{
writeD(info.getSkill().getDisplayId());
writeH(info.getSkill().getDisplayLevel());
if (info.getSkill().getDisplayLevel() < 100)
{
writeH(info.getSkill().getDisplayLevel());
writeH(0x00);
}
else
{
int maxLevel = SkillData.getInstance().getMaxLevel(info.getSkill().getDisplayId());
writeH(maxLevel);
writeH(info.getSkill().getDisplayLevel());
}
writeD(0x00);
writeH(info.getTime());
}

View File

@@ -18,6 +18,7 @@
*/
package com.l2jserver.gameserver.network.serverpackets;
import com.l2jserver.Config;
import com.l2jserver.gameserver.model.L2Clan;
public class PledgeShowInfoUpdate extends L2GameServerPacket
@@ -35,6 +36,7 @@ public class PledgeShowInfoUpdate extends L2GameServerPacket
writeC(0x8E);
// sending empty data so client will ask all the info in response ;)
writeD(_clan.getId());
writeD(Config.SERVER_ID);
writeD(_clan.getCrestId());
writeD(_clan.getLevel()); // clan level
writeD(_clan.getCastleId());

View File

@@ -20,6 +20,7 @@ package com.l2jserver.gameserver.network.serverpackets;
import java.util.Collection;
import com.l2jserver.Config;
import com.l2jserver.gameserver.model.L2Clan;
import com.l2jserver.gameserver.model.L2Clan.SubPledge;
import com.l2jserver.gameserver.model.L2ClanMember;
@@ -58,7 +59,7 @@ public class PledgeShowMemberListAll extends L2GameServerPacket
writeD(pledge == null ? 0 : 1);
writeD(_clan.getId());
writeD(0x00); // pledge db id
writeD(Config.SERVER_ID);
writeD(pledgeId);
writeS(_clan.getName());
writeS(_clan.getLeaderName());

View File

@@ -18,6 +18,7 @@
*/
package com.l2jserver.gameserver.network.serverpackets;
import com.l2jserver.Config;
import com.l2jserver.gameserver.model.L2Clan;
public final class PledgeStatusChanged extends L2GameServerPacket
@@ -33,7 +34,7 @@ public final class PledgeStatusChanged extends L2GameServerPacket
protected final void writeImpl()
{
writeC(0xCD);
writeD(0x00);
writeD(Config.SERVER_ID);
writeD(_clan.getLeaderId());
writeD(_clan.getId());
writeD(_clan.getCrestId());

View File

@@ -54,6 +54,8 @@ public class RecipeItemMakeInfo extends L2GameServerPacket
writeD((int) _activeChar.getCurrentMp());
writeD(_activeChar.getMaxMp());
writeD(_success ? 1 : 0); // item creation success/failed
writeC(0);
writeQ(0);
}
else
{

View File

@@ -41,5 +41,7 @@ public class RecipeShopItemInfo extends L2GameServerPacket
writeD(_player.getMaxMp());
writeD(0xffffffff);
writeQ(0x00);
writeC(0);
writeQ(0);
}
}

View File

@@ -63,9 +63,9 @@ public class RecipeShopManageList extends L2GameServerPacket
protected final void writeImpl()
{
writeC(0xDE);
writeD(_seller.getObjectId());
writeD((int) _seller.getAdena());
writeD(_isDwarven ? 0x00 : 0x01);
writeD((int) _seller.getCurrentMp());
writeD(_seller.getMaxMp());
if (_recipes == null)
{

View File

@@ -20,9 +20,9 @@ package com.l2jserver.gameserver.network.serverpackets;
public final class SetupGauge extends L2GameServerPacket
{
public static final int BLUE = 0;
public static final int BLUE = 2;
public static final int RED = 1;
public static final int CYAN = 2;
public static final int GREEN = 3;
private final int _dat1;
private final int _time;

View File

@@ -54,11 +54,28 @@ public class ShopPreviewInfo extends L2GameServerPacket
writeD(getFromList(Inventory.PAPERDOLL_LEGS));
writeD(getFromList(Inventory.PAPERDOLL_FEET));
writeD(getFromList(Inventory.PAPERDOLL_CLOAK));
writeD(getFromList(Inventory.PAPERDOLL_RHAND));
writeD(getFromList(Inventory.PAPERDOLL_LRHAND));
writeD(getFromList(Inventory.PAPERDOLL_HAIR));
writeD(getFromList(Inventory.PAPERDOLL_HAIR2));
writeD(getFromList(Inventory.PAPERDOLL_DHAIR));
writeD(getFromList(Inventory.PAPERDOLL_RBRACELET));
writeD(getFromList(Inventory.PAPERDOLL_LBRACELET));
writeD(getFromList(Inventory.PAPERDOLL_TALISMAN1));
writeD(getFromList(Inventory.PAPERDOLL_TALISMAN2));
writeD(getFromList(Inventory.PAPERDOLL_TALISMAN3));
writeD(getFromList(Inventory.PAPERDOLL_TALISMAN4));
writeD(getFromList(Inventory.PAPERDOLL_TALISMAN5));
writeD(getFromList(Inventory.PAPERDOLL_TALISMAN6));
writeD(getFromList(Inventory.PAPERDOLL_BELT));
writeD(getFromList(Inventory.PAPERDOLL_BROOCH));
writeD(getFromList(Inventory.PAPERDOLL_BROOCH_STONE1));
writeD(getFromList(Inventory.PAPERDOLL_BROOCH_STONE2));
writeD(getFromList(Inventory.PAPERDOLL_BROOCH_STONE3));
writeD(getFromList(Inventory.PAPERDOLL_BROOCH_STONE4));
writeD(getFromList(Inventory.PAPERDOLL_BROOCH_STONE5));
writeD(getFromList(Inventory.PAPERDOLL_BROOCH_STONE6));
writeD(0);
writeD(0);
writeD(0);
}
private int getFromList(int key)

View File

@@ -51,7 +51,7 @@ public class ShopPreviewList extends L2GameServerPacket
protected final void writeImpl()
{
writeC(0xF5);
writeD(5056);
writeD(0x00);
writeQ(_money); // current money
writeD(_listId);

View File

@@ -18,12 +18,16 @@
*/
package com.l2jserver.gameserver.network.serverpackets;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.enums.ShortcutType;
import com.l2jserver.gameserver.model.L2Augmentation;
import com.l2jserver.gameserver.model.Shortcut;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
public final class ShortCutInit extends L2GameServerPacket
{
private Shortcut[] _shortCuts;
private ShortcutInfo[] _shortCuts;
public ShortCutInit(L2PcInstance activeChar)
{
@@ -32,7 +36,68 @@ public final class ShortCutInit extends L2GameServerPacket
return;
}
_shortCuts = activeChar.getAllShortCuts();
Shortcut[] tmp = activeChar.getAllShortCuts();
_shortCuts = new ShortcutInfo[tmp.length];
int index = -1;
for (Shortcut shortCut : tmp)
{
index++;
_shortCuts[index] = convert(activeChar, shortCut);
}
}
/**
* @param player
* @param shortCut
* @return
*/
private ShortcutInfo convert(L2PcInstance player, Shortcut shortCut)
{
ShortcutInfo shortcutInfo = null;
int page = shortCut.getSlot() + (shortCut.getPage() * 12);
ShortcutType type = shortCut.getType();
int id = shortCut.getId();
int characterType = 0;
switch (type)
{
case ITEM:
int reuseGroup = -1,
currentReuse = 0,
reuse = 0,
augmentationId = 0;
characterType = shortCut.getCharacterType();
L2ItemInstance item = player.getInventory().getItemByObjectId(shortCut.getId());
if (item != null)
{
L2Augmentation augmentation = item.getAugmentation();
if (augmentation != null)
{
augmentationId = augmentation.getAugmentationId();
}
reuseGroup = shortCut.getSharedReuseGroup();
}
shortcutInfo = new ItemShortcutInfo(type, page, id, reuseGroup, currentReuse, reuse, augmentationId, characterType);
break;
case SKILL:
int level = shortCut.getLevel();
int skillReuseGroup = shortCut.getSharedReuseGroup();
boolean isDisabled = false; // FIXME: To implement !!!
shortcutInfo = new SkillShortcutInfo(type, page, id, skillReuseGroup, level, isDisabled, characterType);
break;
default:
shortcutInfo = new ShortcutInfo(type, page, id, characterType);
break;
}
return shortcutInfo;
}
@Override
@@ -40,32 +105,45 @@ public final class ShortCutInit extends L2GameServerPacket
{
writeC(0x45);
writeD(_shortCuts.length);
for (Shortcut sc : _shortCuts)
for (ShortcutInfo sc : _shortCuts)
{
writeD(sc.getType().ordinal());
writeD(sc.getSlot() + (sc.getPage() * 12));
writeD(sc.getPage());
switch (sc.getType())
{
case ITEM:
{
writeD(sc.getId());
writeD(0x01);
writeD(sc.getSharedReuseGroup());
writeD(0x00);
writeD(0x00);
writeH(0x00);
writeH(0x00);
ItemShortcutInfo item = (ItemShortcutInfo) sc;
writeD(item.getId());
writeD(item.getCharacterType());
writeD(item.getReuseGroup());
writeD(item.getCurrentReuse());
writeD(item.getBasicReuse());
writeD(item.get1stAugmentationId());
writeD(item.get2ndAugmentationId());
writeD(0x00); // TODO: Find me!
break;
}
case SKILL:
{
writeD(sc.getId());
writeD(sc.getLevel());
writeD(0x00); // TODO: Find me!
writeC(0x00); // C5
writeD(0x01); // C6
SkillShortcutInfo skill = (SkillShortcutInfo) sc;
writeD(skill.getId());
if ((skill.getLevel() < 100) || (skill.getLevel() > 10000))
{
writeD(skill.getLevel());
}
else
{
int maxLevel = SkillData.getInstance().getMaxLevel(skill.getId());
writeH(maxLevel);
writeH(skill.getLevel());
}
writeD(skill.getReuseGroup());
writeC(skill.isDisabled());
writeD(skill.getCharacterType());
break;
}
case ACTION:
@@ -74,9 +152,120 @@ public final class ShortCutInit extends L2GameServerPacket
case BOOKMARK:
{
writeD(sc.getId());
writeD(0x01); // C6
writeD(sc.getCharacterType());
}
}
}
}
protected class ShortcutInfo
{
private final ShortcutType _type;
private final int _page;
protected final int _id;
protected final int _characterType;
ShortcutInfo(ShortcutType type, int page, int id, int characterType)
{
_type = type;
_page = page;
_id = id;
_characterType = characterType;
}
public ShortcutType getType()
{
return _type;
}
public int getPage()
{
return _page;
}
public int getId()
{
return _id;
}
public int getCharacterType()
{
return _characterType;
}
}
private class SkillShortcutInfo extends ShortcutInfo
{
private final int _reuseGroup;
private final int _level;
private final boolean _isDisabled;
SkillShortcutInfo(ShortcutType type, int page, int id, int reuseGroup, int level, boolean isDisabled, int characterType)
{
super(type, page, id, characterType);
_level = level;
_reuseGroup = reuseGroup;
_isDisabled = isDisabled;
}
/**
* @return
*/
public boolean isDisabled()
{
return _isDisabled;
}
public int getReuseGroup()
{
return _reuseGroup;
}
public int getLevel()
{
return _level;
}
}
private class ItemShortcutInfo extends ShortcutInfo
{
private final int _reuseGroup;
private final int _currentReuse;
private final int _basicReuse;
private final int _augmentationId;
ItemShortcutInfo(ShortcutType type, int page, int id, int reuseGroup, int currentReuse, int basicReuse, int augmentationId, int characterType)
{
super(type, page, id, characterType);
_reuseGroup = reuseGroup;
_currentReuse = currentReuse;
_basicReuse = basicReuse;
_augmentationId = augmentationId;
}
public int getReuseGroup()
{
return _reuseGroup;
}
public int getCurrentReuse()
{
return _currentReuse;
}
public int getBasicReuse()
{
return _basicReuse;
}
public int get1stAugmentationId()
{
return 0x0000FFFF & _augmentationId;
}
public int get2ndAugmentationId()
{
return _augmentationId >> 16;
}
}
}

View File

@@ -18,6 +18,7 @@
*/
package com.l2jserver.gameserver.network.serverpackets;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.model.Shortcut;
public final class ShortCutRegister extends L2GameServerPacket
@@ -50,12 +51,22 @@ public final class ShortCutRegister extends L2GameServerPacket
writeD(0x00); // unknown
writeD(0x00); // item augment id
writeD(0x00); // TODO: Find me, item visual id ?
writeD(0x00);
break;
}
case SKILL:
{
writeD(_shortcut.getId());
writeD(_shortcut.getLevel());
if ((_shortcut.getLevel() < 100) || (_shortcut.getLevel() > 10000))
{
writeD(_shortcut.getLevel());
}
else
{
int _maxLevel = SkillData.getInstance().getMaxLevel(_shortcut.getId());
writeH(_maxLevel);
writeH(_shortcut.getLevel());
}
writeD(_shortcut.getSharedReuseGroup());
writeC(0x00); // C5
writeD(_shortcut.getCharacterType());

View File

@@ -21,6 +21,8 @@ package com.l2jserver.gameserver.network.serverpackets;
import java.util.ArrayList;
import java.util.List;
import com.l2jserver.gameserver.datatables.SkillData;
public final class SkillList extends L2GameServerPacket
{
private final List<Skill> _skills = new ArrayList<>();
@@ -63,7 +65,16 @@ public final class SkillList extends L2GameServerPacket
for (Skill temp : _skills)
{
writeD(temp.passive ? 1 : 0);
writeD(temp.level);
if (temp.level < 100)
{
writeD(temp.level);
}
else
{
int maxlevel = SkillData.getInstance().getMaxLevel(temp.id);
writeH(maxlevel);
writeH(temp.level);
}
writeD(temp.id);
writeD(-1); // GOD ReuseDelayShareGroupID
writeC(temp.disabled ? 1 : 0); // iSkillDisabled

View File

@@ -47,8 +47,8 @@ public final class StatusUpdate extends L2GameServerPacket
public static final int M_ATK = 0x16;
public static final int CAST_SPD = 0x17;
public static final int M_DEF = 0x18;
public static final int PVP_FLAG = 0x19;
public static final int KARMA = 0x1A;
public static final int PVP_FLAG = 0x1A;
public static final int KARMA = 0x1B;
public static final int CUR_CP = 0x21;
public static final int MAX_CP = 0x22;

View File

@@ -36,6 +36,6 @@ public class StopRotation extends L2GameServerPacket
writeD(_charObjId);
writeD(_degree);
writeD(_speed);
writeD(0); // ?
writeD(-2); // ?
}
}

View File

@@ -18,12 +18,16 @@
*/
package com.l2jserver.gameserver.network.serverpackets;
import com.l2jserver.Config;
import com.l2jserver.gameserver.data.xml.impl.ExperienceData;
import com.l2jserver.gameserver.enums.UserInfoType;
import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager;
import com.l2jserver.gameserver.model.Elementals;
import com.l2jserver.gameserver.model.L2Clan;
import com.l2jserver.gameserver.model.L2Party;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.L2Weapon;
import com.l2jserver.gameserver.model.items.type.WeaponType;
import com.l2jserver.gameserver.model.zone.ZoneId;
/**
@@ -148,7 +152,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
writeC(_activeChar.isGM() ? 0x01 : 0x00);
writeC(_activeChar.getRace().ordinal());
writeC(_activeChar.getAppearance().getSex() ? 0x01 : 0x00);
writeD(_activeChar.getBaseClass());
writeD(_activeChar.getInitialClassId());
writeD(_activeChar.getClassId().getId());
writeC(_activeChar.getLevel());
}
@@ -206,14 +210,37 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
writeH(6);
writeC(_activeChar.getMountType().ordinal());
writeC(_activeChar.getPrivateStoreType().getId());
writeC(_activeChar.hasDwarvenCraft() ? 1 : 0);
writeC(_activeChar.hasDwarvenCraft() || (_activeChar.getSkillLevel(248) > 0) ? 1 : 0);
writeC(_activeChar.getAbilityPointsUsed());
}
if (containsMask(UserInfoType.STATS))
{
writeH(56);
writeH(_activeChar.getActiveWeaponItem() != null ? 40 : 20);
if (_activeChar.getActiveWeaponItem() != null)
{
L2Weapon weaponItem = _activeChar.getActiveWeaponItem();
if (weaponItem.getItemType() == WeaponType.POLE)
{
writeH(80);
}
else if (weaponItem.getItemType() == WeaponType.BOW)
{
writeH(500);
}
else if (weaponItem.getItemType() == WeaponType.CROSSBOW)
{
writeH(400);
}
else
{
writeH(40);
}
}
else
{
writeH(0);
}
writeD((int) _activeChar.getPAtk(null));
writeD((int) _activeChar.getPAtkSpd());
writeD((int) _activeChar.getPDef(null));
@@ -292,8 +319,8 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
writeD(_activeChar.getClanId());
writeD(_activeChar.getClanCrestLargeId());
writeD(_activeChar.getClanCrestId());
writeC(_activeChar.isClanLeader() ? -1 : 0x00);
writeD(_activeChar.getClanPrivileges().getBitmask());
writeC(_activeChar.isClanLeader() ? 1 : 0);
writeD(_activeChar.getAllyId());
writeD(_activeChar.getAllyCrestId());
writeC(_activeChar.isInPartyMatchRoom() ? 0x01 : 0x00);
@@ -305,11 +332,12 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
writeC(_activeChar.getPvpFlag());
writeD(_activeChar.getReputation());
writeC(_activeChar.isNoble() ? 0x01 : 0x00);
writeC(_activeChar.isHero() ? 0x01 : 0x00);
writeC(_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA) ? 1 : 0);
writeC(_activeChar.getPledgeClass());
writeD(_activeChar.getPkKills());
writeD(_activeChar.getPvpKills());
writeD(_activeChar.getRecomLeft());
writeH(_activeChar.getRecomLeft());
writeH(_activeChar.getRecomHave());
}
if (containsMask(UserInfoType.VITA_FAME))
@@ -353,13 +381,13 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
writeH(0x00);
writeH(0x00);
writeH(_activeChar.getInventoryLimit());
writeC(0x00); // if greater than 1 show the attack cursor when interacting
writeC(_activeChar.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()) : 0);
}
if (containsMask(UserInfoType.UNK_3))
{
writeH(9);
writeC(0x00);
writeC(0x01);
writeH(0x00);
writeD(0x00);
}

View File

@@ -0,0 +1,48 @@
/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.serverpackets.dailymission;
import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
/**
* @author Mobius
*/
public class ExConnectedTimeAndGetTableReward extends L2GameServerPacket
{
public static final ExConnectedTimeAndGetTableReward STATIC_PACKET = new ExConnectedTimeAndGetTableReward();
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x189);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
}
}

View File

@@ -0,0 +1,61 @@
/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.serverpackets.dailymission;
import java.util.List;
import com.l2jserver.gameserver.data.xml.impl.DailyMissionData;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.holders.DailyMissionHolder;
import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
/**
* @author Mobius
*/
public class ExOneDayReceiveRewardList extends L2GameServerPacket
{
private final L2PcInstance _activeChar;
private final int _classId;
private final List<DailyMissionHolder> _availableMissions;
public ExOneDayReceiveRewardList(L2PcInstance activeChar)
{
_activeChar = activeChar;
_classId = activeChar.getBaseClassId();
_availableMissions = DailyMissionData.getInstance().getDailyLevelUpMissions(_classId);
}
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x188);
writeD(_classId);
writeD(0x00); // Day
writeD(_availableMissions.size()); // TODO: Implement all missions.
for (DailyMissionHolder mission : _availableMissions)
{
writeH(mission.getClientId()); // Reward
writeC(DailyMissionData.getInstance().isRewardAvailable(mission.getId(), _activeChar) ? 1 : 2); // 1 Available, 2 Not Available
writeC(0x00); // Requires multiple completion - YesOrNo
writeD(0x00); // Current progress
writeD(0x00); // Required total
}
}
}

View File

@@ -0,0 +1,41 @@
/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.serverpackets.dailymission;
import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
/**
* @author Mobius
*/
public class ExTodoListHTML extends L2GameServerPacket
{
public ExTodoListHTML()
{
}
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x18C);
writeC(0x01); // TodoListTab. 1=event List 2=zone List
writeS(""); // HTML name
writeS(""); // PreformattedHtml
}
}

View File

@@ -0,0 +1,46 @@
/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.serverpackets.dailymission;
import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
/**
* @author Mobius
*/
public class ExTodoListInzone extends L2GameServerPacket
{
public ExTodoListInzone()
{
}
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x18B);
writeH(0x00); // zone list size: if not select show all levels, this size=0, maybe I am LV3.
writeS(""); // HTML name
writeS(""); // Zone name
writeH(0x00); // Min level
writeH(0x00); // Max level
writeH(0x00); // Min players
writeH(0x00); // Max players
writeC(0x00); // Entry info 1=on 2=off 3=always
}
}

View File

@@ -0,0 +1,40 @@
/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.serverpackets.dailymission;
import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
/**
* @author Mobius
*/
public class ExTodoListRecommend extends L2GameServerPacket
{
public ExTodoListRecommend()
{
}
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x18A);
writeH(0x00); // Loop size.
// TODO: Add loop.
}
}

View File

@@ -42,7 +42,7 @@ public class FriendAddRequestResult extends L2GameServerPacket
_isOnline = activeChar.isOnlineInt();
_charObjectId = activeChar.getObjectId();
_charLevel = activeChar.getLevel();
_charClassId = activeChar.getActiveClass();
_charClassId = activeChar.getActiveClassId();
}
@Override

View File

@@ -42,7 +42,7 @@ public class L2FriendStatus extends L2GameServerPacket
public L2FriendStatus(L2PcInstance player, int type)
{
_objectId = player.getObjectId();
_classId = player.getActiveClass();
_classId = player.getActiveClassId();
_level = player.getLevel();
_name = player.getName();
_type = type;

View File

@@ -39,7 +39,7 @@ public class ExMentorAdd extends L2GameServerPacket
writeC(0xFE);
writeH(0x11C);
writeS(_mentor.getName());
writeD(_mentor.getActiveClass());
writeD(_mentor.getActiveClassId());
writeD(_mentor.getLevel());
}
}

View File

@@ -69,7 +69,7 @@ public class ListMenteeWaiting extends L2GameServerPacket
if ((1 <= (PLAYERS_PER_PAGE * _page)) && (1 > (PLAYERS_PER_PAGE * (_page - 1))))
{
writeS(player.getName());
writeD(player.getActiveClass());
writeD(player.getActiveClassId());
writeD(player.getLevel());
}
}