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

@@ -53,6 +53,9 @@ import com.l2jserver.gameserver.network.clientpackets.compound.RequestNewEnchant
import com.l2jserver.gameserver.network.clientpackets.compound.RequestNewEnchantTry;
import com.l2jserver.gameserver.network.clientpackets.crystalization.RequestCrystallizeEstimate;
import com.l2jserver.gameserver.network.clientpackets.crystalization.RequestCrystallizeItemCancel;
import com.l2jserver.gameserver.network.clientpackets.dailymission.RequestOneDayRewardReceive;
import com.l2jserver.gameserver.network.clientpackets.dailymission.RequestTodoList;
import com.l2jserver.gameserver.network.clientpackets.dailymission.RequestTodoListHTML;
import com.l2jserver.gameserver.network.clientpackets.friend.RequestAnswerFriendInvite;
import com.l2jserver.gameserver.network.clientpackets.friend.RequestFriendDel;
import com.l2jserver.gameserver.network.clientpackets.friend.RequestFriendDetailInfo;
@@ -467,6 +470,9 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
case 0x67:
msg = new RequestPledgeCrest();
break;
case 0x6a:
// New Request Friend List
break;
case 0x6b: // RequestSendL2FriendSay
msg = new RequestSendFriendMsg();
break;
@@ -937,7 +943,7 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
msg = new RequestExEnchantItemAttribute();
break;
case 0x33:
msg = new RequestGotoLobby();
// already in AUTHED
break;
case 0x35:
msg = new MoveToLocationAirShip();
@@ -986,7 +992,7 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
msg = new RequestExEnchantSkillInfoDetail();
break;
case 0x44:
msg = new RequestExMagicSkillUseGround();
// already in 0x41
break;
case 0x45:
msg = new RequestFortressMapInfo();
@@ -1665,6 +1671,57 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
case 0x104:
msg = new RequestExAutoFish();
break;
case 0x105:
// msg = new RequestVipAttendanceItemList();
break;
case 0x106:
// msg = new RequestVipAttendanceCheck();
break;
case 0x107:
// msg = new RequestItemEnsoul();
break;
case 0x108:
// msg = new RequestVipProductList();
break;
case 0x109:
// msg = new RequestVipLuckyGameInfo();
break;
case 0x10A:
// msg = new RequestVipLuckyGameItemList();
break;
case 0x10B:
// msg = new RequestVipLuckyGameBonus();
break;
case 0x10C:
// msg = new ExRequestVipInfo();
break;
case 0x10D:
// msg = new RequestCaptchaAnswer();
break;
case 0x10E:
// msg = new RequestRefreshCaptchaImage();
break;
case 0x10F:
msg = new RequestTodoList();
break;
case 0x110:
msg = new RequestTodoListHTML();
break;
case 0x111:
msg = new RequestOneDayRewardReceive();
break;
case 0x112:
// msg = new RequestPledgeBonusOpen();
break;
case 0x113:
// msg = new RequestPledgeBonusRewardList();
break;
case 0x114:
// msg = new RequestPledgeBonusReward();
break;
case 0x115:
// msg = new RequestSSOAuthnToken();
break;
default:
printDebugDoubleOpcode(opcode, id2, buf, state, client);
break;

File diff suppressed because it is too large Load Diff

View File

@@ -87,7 +87,7 @@ public final class CharacterDelete extends L2GameClientPacket
_log.log(Level.SEVERE, "Error:", e);
}
CharSelectionInfo cl = new CharSelectionInfo(getClient().getAccountName(), getClient().getSessionId().playOkID1, 0);
CharSelectionInfo cl = new CharSelectionInfo(getClient().getAccountName(), getClient().getSessionId().playOkID1);
sendPacket(cl);
getClient().setCharSelection(cl.getCharInfo());
}

View File

@@ -49,7 +49,7 @@ public final class CharacterRestore extends L2GameClientPacket
}
getClient().markRestoredChar(_charSlot);
CharSelectionInfo cl = new CharSelectionInfo(getClient().getAccountName(), getClient().getSessionId().playOkID1, 0);
CharSelectionInfo cl = new CharSelectionInfo(getClient().getAccountName(), getClient().getSessionId().playOkID1);
sendPacket(cl);
getClient().setCharSelection(cl.getCharInfo());
final CharSelectInfoPackage charInfo = getClient().getCharSelection(_charSlot);

View File

@@ -70,6 +70,7 @@ import com.l2jserver.gameserver.network.serverpackets.Die;
import com.l2jserver.gameserver.network.serverpackets.EtcStatusUpdate;
import com.l2jserver.gameserver.network.serverpackets.ExAcquireAPSkillList;
import com.l2jserver.gameserver.network.serverpackets.ExAdenaInvenCount;
import com.l2jserver.gameserver.network.serverpackets.ExAutoSoulShot;
import com.l2jserver.gameserver.network.serverpackets.ExBasicActionList;
import com.l2jserver.gameserver.network.serverpackets.ExBeautyItemList;
import com.l2jserver.gameserver.network.serverpackets.ExCastleState;
@@ -103,16 +104,11 @@ import com.l2jserver.gameserver.network.serverpackets.ShortCutInit;
import com.l2jserver.gameserver.network.serverpackets.SkillCoolTime;
import com.l2jserver.gameserver.network.serverpackets.SkillList;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.network.serverpackets.dailymission.ExConnectedTimeAndGetTableReward;
import com.l2jserver.gameserver.network.serverpackets.friend.L2FriendList;
/**
* Enter World Packet Handler
* <p>
* <p>
* 0000: 03
* <p>
* packet format rev87 bddddbdcccccccccccccccccccc
* <p>
*/
public class EnterWorld extends L2GameClientPacket
{
@@ -660,6 +656,15 @@ public class EnterWorld extends L2GameClientPacket
activeChar.sendPacket(new ExAcquireAPSkillList(activeChar));
activeChar.sendPacket(new ExWorldChatCnt(activeChar));
// Underground auto shots system.
activeChar.sendPacket(new ExAutoSoulShot(0, 0, 0));
activeChar.sendPacket(new ExAutoSoulShot(0, 0, 1));
activeChar.sendPacket(new ExAutoSoulShot(0, 0, 2));
activeChar.sendPacket(new ExAutoSoulShot(0, 0, 3));
// Underground daily rewards system.
activeChar.sendPacket(ExConnectedTimeAndGetTableReward.STATIC_PACKET);
// Unstuck players that had client open when server crashed.
activeChar.sendPacket(ActionFailed.STATIC_PACKET);
}

View File

@@ -103,7 +103,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
return;
}
if ((_level < 1) || (_level > 1000) || (_id < 1) || (_id > 32000))
if ((_level < 1) || (_level > 10000) || (_id < 1) || (_id > 32000))
{
Util.handleIllegalPlayerAction(activeChar, "Wrong Packet Data in Aquired Skill", Config.DEFAULT_PUNISH);
_log.warning("Recived Wrong Packet Data in Aquired Skill - id: " + _id + " level: " + _level + " for " + activeChar);

View File

@@ -1186,7 +1186,7 @@ public final class RequestActionUse extends L2GameClientPacket
}
if (activeChar.isFishing())
{
sendPacket(SystemMessageId.YOU_CANNOT_DO_THAT_WHILE_FISHING3);
sendPacket(SystemMessageId.YOU_CANNOT_DO_THAT_WHILE_FISHING);
return;
}
@@ -1241,7 +1241,7 @@ public final class RequestActionUse extends L2GameClientPacket
if (requester.isFishing())
{
sendPacket(SystemMessageId.YOU_CANNOT_DO_THAT_WHILE_FISHING3);
sendPacket(SystemMessageId.YOU_CANNOT_DO_THAT_WHILE_FISHING);
return;
}

View File

@@ -82,7 +82,7 @@ public final class RequestAnswerJoinParty extends L2GameClientPacket
{
if (requestor.isInParty())
{
if (requestor.getParty().getMemberCount() >= 9)
if (requestor.getParty().getMemberCount() >= 7)
{
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_PARTY_IS_FULL);
player.sendPacket(sm);

View File

@@ -114,7 +114,7 @@ public final class RequestAutoSoulShot extends L2GameClientPacket
// Activate shots
activeChar.addAutoSoulShot(_itemId);
activeChar.sendPacket(new ExAutoSoulShot(_itemId, _type));
activeChar.sendPacket(new ExAutoSoulShot(_itemId, 1, isSoulshot ? 2 : 3));
// Send message
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_AUTOMATIC_USE_OF_S1_HAS_BEEN_ACTIVATED);
@@ -149,7 +149,7 @@ public final class RequestAutoSoulShot extends L2GameClientPacket
// Activate shots
activeChar.addAutoSoulShot(_itemId);
activeChar.sendPacket(new ExAutoSoulShot(_itemId, _type));
activeChar.sendPacket(new ExAutoSoulShot(_itemId, 1, isSoulshot ? 0 : 1));
// Send message
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_AUTOMATIC_USE_OF_S1_HAS_BEEN_ACTIVATED);
@@ -164,7 +164,30 @@ public final class RequestAutoSoulShot extends L2GameClientPacket
{
// Cancel auto shots
activeChar.removeAutoSoulShot(_itemId);
activeChar.sendPacket(new ExAutoSoulShot(_itemId, _type));
switch (item.getEtcItem().getDefaultAction())
{
case SOULSHOT:
case FISHINGSHOT:
{
activeChar.sendPacket(new ExAutoSoulShot(_itemId, 0, 0));
break;
}
case SPIRITSHOT:
{
activeChar.sendPacket(new ExAutoSoulShot(_itemId, 0, 1));
break;
}
case SUMMON_SOULSHOT:
{
activeChar.sendPacket(new ExAutoSoulShot(_itemId, 0, 2));
break;
}
case SUMMON_SPIRITSHOT:
{
activeChar.sendPacket(new ExAutoSoulShot(_itemId, 0, 3));
break;
}
}
// Send message
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_AUTOMATIC_USE_OF_S1_HAS_BEEN_DEACTIVATED);

View File

@@ -120,6 +120,15 @@ public final class RequestConfirmCancelItem extends L2GameClientPacket
case S84:
price = 920000;
break;
case R:
price = 1840000;
break;
case R95:
price = 3680000;
break;
case R99:
price = 7360000;
break;
// TODO: S84 TOP price 3.2M
// any other item type is not augmentable
default:

View File

@@ -35,13 +35,22 @@ public class RequestDispel extends L2GameClientPacket
private int _objectId;
private int _skillId;
private int _skillLevel;
private int _fullLevel;
@Override
protected void readImpl()
{
_objectId = readD();
_skillId = readD();
_skillLevel = readD();
_fullLevel = readD();
if (_fullLevel < 100)
{
_skillLevel = _fullLevel;
}
else
{
_skillLevel = _fullLevel >> 16;
}
}
@Override

View File

@@ -129,7 +129,7 @@ public final class RequestDropItem extends L2GameClientPacket
if (activeChar.isFishing())
{
// You can't mount, dismount, break and drop items while fishing
activeChar.sendPacket(SystemMessageId.YOU_CANNOT_DO_THAT_WHILE_FISHING2);
activeChar.sendPacket(SystemMessageId.YOU_CANNOT_DO_THAT_WHILE_FISHING);
return;
}
if (activeChar.isFlying())

View File

@@ -143,7 +143,7 @@ public final class RequestEnchantItem extends L2GameClientPacket
// attempting to destroy scroll
if (activeChar.getInventory().destroyItem("Enchant", scroll.getObjectId(), 1, activeChar, item) == null)
{
activeChar.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT2);
activeChar.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT);
Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant with a scroll he doesn't have", Config.DEFAULT_PUNISH);
activeChar.removeRequest(request.getClass());
activeChar.sendPacket(new EnchantResult(EnchantResult.ERROR, 0, 0));
@@ -155,7 +155,7 @@ public final class RequestEnchantItem extends L2GameClientPacket
{
if (activeChar.getInventory().destroyItem("Enchant", support.getObjectId(), 1, activeChar, item) == null)
{
activeChar.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT2);
activeChar.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT);
Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant with a support item he doesn't have", Config.DEFAULT_PUNISH);
activeChar.removeRequest(request.getClass());
activeChar.sendPacket(new EnchantResult(EnchantResult.ERROR, 0, 0));

View File

@@ -52,13 +52,22 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
private int _skillId;
private int _skillLvl;
private int _fullLvl;
@Override
protected void readImpl()
{
_type = readD();
_skillId = readD();
_skillLvl = readD();
_fullLvl = readD();
if (_fullLvl < 100)
{
_skillLvl = _fullLvl;
}
else
{
_skillLvl = _fullLvl >> 16;
}
}
@Override
@@ -104,6 +113,7 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
{
return;
}
final int _elvl = ((_skillLvl % 100) - 1) / 10;
if (_type == 0) // enchant
{
final EnchantSkillHolder esd = s.getEnchantSkillHolder(_skillLvl);
@@ -117,8 +127,7 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
final int requiredSp = esd.getSpCost() * costMultiplier;
if (player.getSp() >= requiredSp)
{
// only first lvl requires book
final boolean usesBook = (_skillLvl % 100) == 1; // 101, 201, 301 ...
final boolean usesBook = true;
final int reqItemId;
if (player.getClassId().level() == 3)
{
@@ -126,7 +135,18 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
}
else
{
reqItemId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK;
if (_elvl == 0)
{
reqItemId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK;
}
else if (_elvl == 1)
{
reqItemId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_V2;
}
else
{
reqItemId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_V3;
}
}
final L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId);
@@ -188,7 +208,15 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
}
else
{
player.addSkill(SkillData.getInstance().getSkill(_skillId, s.getBaseLevel()), true);
if (player.getClassId().level() == 3)
{
player.addSkill(SkillData.getInstance().getSkill(_skillId, s.getBaseLevel()), true);
}
else
{
final int _clvl = ((((_skillLvl % 100) - 1) / 10) * 10) + ((_skillLvl / 1000) * 1000);
player.addSkill(SkillData.getInstance().getSkill(_skillId, _clvl), true);
}
player.sendPacket(SystemMessageId.SKILL_ENCHANT_FAILED_THE_SKILL_WILL_BE_INITIALIZED);
player.sendPacket(ExEnchantSkillResult.valueOf(false));
@@ -229,7 +257,18 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
}
else
{
reqItemId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK;
if (_elvl == 0)
{
reqItemId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK;
}
else if (_elvl == 1)
{
reqItemId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_V2;
}
else
{
reqItemId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_V3;
}
}
final EnchantSkillHolder esd = s.getEnchantSkillHolder(_skillLvl);
final int beforeEnchantSkillLevel = player.getSkillLevel(_skillId);
@@ -333,104 +372,7 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
}
else if (_type == 2) // untrain
{
if ((_skillLvl % 100) == 0)
{
_skillLvl = s.getBaseLevel();
}
final int reqItemId;
if (player.getClassId().level() == 3)
{
reqItemId = EnchantSkillGroupsData.UNTRAIN_ENCHANT_BOOK_OLD;
}
else
{
reqItemId = EnchantSkillGroupsData.UNTRAIN_ENCHANT_BOOK;
}
final int beforeUntrainSkillLevel = player.getSkillLevel(_skillId);
if (((beforeUntrainSkillLevel - 1) != _skillLvl) && (((beforeUntrainSkillLevel % 100) != 1) || (_skillLvl != s.getBaseLevel())))
{
return;
}
EnchantSkillHolder esd = s.getEnchantSkillHolder(beforeUntrainSkillLevel);
int requiredSp = esd.getSpCost();
int requireditems = esd.getAdenaCost();
L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId);
if (Config.ES_SP_BOOK_NEEDED)
{
if (spb == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL);
return;
}
}
if (player.getInventory().getAdena() < requireditems)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL);
return;
}
boolean check = true;
if (Config.ES_SP_BOOK_NEEDED)
{
check &= player.destroyItem("Consume", spb.getObjectId(), 1, player, true);
}
check &= player.destroyItemByItemId("Consume", Inventory.ADENA_ID, requireditems, player, true);
if (!check)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL);
return;
}
player.getStat().addSp((int) (requiredSp * 0.8));
if (Config.LOG_SKILL_ENCHANTS)
{
LogRecord record = new LogRecord(Level.INFO, "Untrain");
record.setParameters(new Object[]
{
player,
skill,
spb
});
record.setLoggerName("skill");
_logEnchant.log(record);
}
player.addSkill(skill, true);
player.sendPacket(ExEnchantSkillResult.valueOf(true));
if (Config.DEBUG)
{
_log.fine("Learned skill ID: " + _skillId + " Level: " + _skillLvl + " for " + requiredSp + " SP, " + requireditems + " Adena.");
}
player.sendPacket(new UserInfo(player));
if (_skillLvl > 100)
{
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.UNTRAIN_OF_ENCHANT_SKILL_WAS_SUCCESSFUL_CURRENT_LEVEL_OF_ENCHANT_SKILL_S1_HAS_BEEN_DECREASED_BY_1);
sm.addSkillName(_skillId);
player.sendPacket(sm);
}
else
{
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.UNTRAIN_OF_ENCHANT_SKILL_WAS_SUCCESSFUL_CURRENT_LEVEL_OF_ENCHANT_SKILL_S1_BECAME_0_AND_ENCHANT_SKILL_WILL_BE_INITIALIZED);
sm.addSkillName(_skillId);
player.sendPacket(sm);
}
player.sendSkillList();
final int afterUntrainSkillLevel = player.getSkillLevel(_skillId);
player.sendPacket(new ExEnchantSkillInfo(_skillId, afterUntrainSkillLevel));
player.sendPacket(new ExEnchantSkillInfoDetail(2, _skillId, afterUntrainSkillLevel - 1, player));
player.updateShortCuts(_skillId, afterUntrainSkillLevel);
return;
}
else if (_type == 3) // change route
{
@@ -441,17 +383,28 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
}
else
{
reqItemId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK;
if (_elvl == 0)
{
reqItemId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK;
}
else if (_elvl == 1)
{
reqItemId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_V2;
}
else
{
reqItemId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_V3;
}
}
final int beforeEnchantSkillLevel = player.getSkillLevel(_skillId);
if (beforeEnchantSkillLevel <= 100)
if (beforeEnchantSkillLevel <= 1000)
{
return;
}
int currentEnchantLevel = beforeEnchantSkillLevel % 100;
if (currentEnchantLevel != (_skillLvl % 100))
int currentEnchantLevel = beforeEnchantSkillLevel % 1000;
if (currentEnchantLevel != (_skillLvl % 1000))
{
return;
}
@@ -495,7 +448,7 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
int levelPenalty = Rnd.get(Math.min(4, currentEnchantLevel));
_skillLvl -= levelPenalty;
if ((_skillLvl % 100) == 0)
if ((_skillLvl % 1000) == 0)
{
_skillLvl = s.getBaseLevel();
}
@@ -534,9 +487,9 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ENCHANT_SKILL_ROUTE_CHANGE_WAS_SUCCESSFUL_LV_OF_ENCHANT_SKILL_S1_HAS_BEEN_DECREASED_BY_S2);
sm.addSkillName(_skillId);
if (_skillLvl > 100)
if (_skillLvl > 1000)
{
sm.addInt(_skillLvl % 100);
sm.addInt(_skillLvl % 1000);
}
else
{
@@ -558,7 +511,26 @@ public final class RequestExEnchantSkill extends L2GameClientPacket
}
else if (_type == 4) // 100% enchant
{
int reqItemId = EnchantSkillGroupsData.IMMORTAL_SCROLL;
final int reqItemId;
if (player.getClassId().level() == 3)
{
reqItemId = EnchantSkillGroupsData.IMMORTAL_SCROLL;
}
else
{
if (_elvl == 0)
{
reqItemId = EnchantSkillGroupsData.IMMORTAL_SCROLL;
}
else if (_elvl == 1)
{
reqItemId = EnchantSkillGroupsData.IMMORTAL_SCROLL_V2;
}
else
{
reqItemId = EnchantSkillGroupsData.IMMORTAL_SCROLL_V3;
}
}
final int beforeEnchantSkillLevel = player.getSkillLevel(_skillId);
if (beforeEnchantSkillLevel != s.getMinSkillLevel(_skillLvl))
{

View File

@@ -34,12 +34,21 @@ public final class RequestExEnchantSkillInfo extends L2GameClientPacket
private int _skillId;
private int _skillLvl;
private int _fullLvl;
@Override
protected void readImpl()
{
_skillId = readD();
_skillLvl = readD();
_fullLvl = readD();
if (_fullLvl < 100)
{
_skillLvl = _fullLvl;
}
else
{
_skillLvl = _fullLvl >> 16;
}
}
@Override

View File

@@ -34,13 +34,22 @@ public final class RequestExEnchantSkillInfoDetail extends L2GameClientPacket
private int _type;
private int _skillId;
private int _skillLvl;
private int _fullLvl;
@Override
protected void readImpl()
{
_type = readD();
_skillId = readD();
_skillLvl = readD();
_fullLvl = readD();
if (_fullLvl < 100)
{
_skillLvl = _fullLvl;
}
else
{
_skillLvl = _fullLvl >> 16;
}
}
@Override
@@ -66,7 +75,7 @@ public final class RequestExEnchantSkillInfoDetail extends L2GameClientPacket
}
else if (_type == 2)
{
reqSkillLvl = _skillLvl + 1; // untrain
return;
}
else if (_type == 3)
{
@@ -82,7 +91,7 @@ public final class RequestExEnchantSkillInfoDetail extends L2GameClientPacket
}
// if reqlvl is 100,200,.. check base skill lvl enchant
if ((reqSkillLvl % 100) == 0)
if ((reqSkillLvl % 1000) == 0)
{
L2EnchantSkillLearn esl = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_skillId);
if (esl != null)
@@ -102,7 +111,7 @@ public final class RequestExEnchantSkillInfoDetail extends L2GameClientPacket
else if (playerSkillLvl != reqSkillLvl)
{
// change route is different skill lvl but same enchant
if ((_type == 3) && ((playerSkillLvl % 100) != (_skillLvl % 100)))
if ((_type == 3) && ((playerSkillLvl % 1000) != (_skillLvl % 1000)))
{
return;
}

View File

@@ -114,7 +114,7 @@ public final class RequestGiveItemToPet extends L2GameClientPacket
if (!pet.getInventory().validateWeight(item, _amount))
{
player.sendPacket(SystemMessageId.YOUR_PET_CANNOT_CARRY_ANY_MORE_ITEMS2);
player.sendPacket(SystemMessageId.YOUR_PET_CANNOT_CARRY_ANY_MORE_ITEMS);
return;
}

View File

@@ -79,7 +79,7 @@ public final class RequestJoinAlly extends L2GameClientPacket
sm.addString(activeChar.getClan().getAllyName());
sm.addString(activeChar.getName());
target.sendPacket(sm);
target.sendPacket(new AskJoinAlly(activeChar.getObjectId(), activeChar.getClan().getAllyName()));
target.sendPacket(new AskJoinAlly(activeChar.getObjectId(), activeChar.getClan().getAllyName(), activeChar.getName()));
}
@Override

View File

@@ -76,7 +76,8 @@ public final class RequestJoinPledge extends L2GameClientPacket
final String pledgeName = activeChar.getClan().getName();
final String subPledgeName = (activeChar.getClan().getSubPledge(_pledgeType) != null ? activeChar.getClan().getSubPledge(_pledgeType).getName() : null);
target.sendPacket(new AskJoinPledge(activeChar.getObjectId(), subPledgeName, _pledgeType, pledgeName));
final String askjoinName = activeChar.getName();
target.sendPacket(new AskJoinPledge(activeChar.getObjectId(), subPledgeName, _pledgeType, pledgeName, askjoinName));
}
public int getPledgeType()

View File

@@ -70,7 +70,7 @@ public final class RequestPreviewItem extends L2GameClientPacket
{
try
{
activeChar.sendPacket(SystemMessageId.YOU_ARE_NO_LONGER_TRYING_ON_EQUIPMENT2);
activeChar.sendPacket(SystemMessageId.YOU_ARE_NO_LONGER_TRYING_ON_EQUIPMENT);
activeChar.sendPacket(new ExUserInfoEquipSlot(activeChar));
}
catch (Exception e)

View File

@@ -37,7 +37,7 @@ public final class RequestPrivateStoreSell extends L2GameClientPacket
{
private static final String _C__9F_REQUESTPRIVATESTORESELL = "[C] 9F RequestPrivateStoreSell";
private static final int BATCH_LENGTH = 32; // length of the one item
private static final int BATCH_LENGTH = 34; // length of the one item
private int _storePlayerId;
private ItemRequest[] _items = null;
@@ -61,6 +61,7 @@ public final class RequestPrivateStoreSell extends L2GameClientPacket
readH(); // TODO analyse this
long cnt = readQ();
long price = readQ();
readH(); // TODO analyse this
if ((objectId < 1) || (itemId < 1) || (cnt < 1) || (price < 0))
{

View File

@@ -60,7 +60,7 @@ public final class RequestReplyStartPledgeWar extends L2GameClientPacket
}
else
{
requestor.sendPacket(SystemMessageId.THE_S1_CLAN_DID_NOT_RESPOND_WAR_PROCLAMATION_HAS_BEEN_REFUSED2);
requestor.sendPacket(SystemMessageId.THE_S1_CLAN_DID_NOT_RESPOND_WAR_PROCLAMATION_HAS_BEEN_REFUSED);
}
activeChar.setActiveRequester(null);
requestor.onTransactionResponse();

View File

@@ -43,6 +43,10 @@ public final class RequestShortCutReg extends L2GameClientPacket
_page = slot / 12;
_id = readD();
_lvl = readD();
if ((typeId == 2) && (_lvl > 10000))
{
_lvl = _lvl >> 16;
}
_characterType = readD();
}

View File

@@ -33,14 +33,14 @@ public final class RequestWithDrawPremiumItem extends L2GameClientPacket
private static final String _C__D0_52_REQUESTWITHDRAWPREMIUMITEM = "[C] D0:52 RequestWithDrawPremiumItem";
private int _itemNum;
private int _charId;
// private int _charId;
private long _itemCount;
@Override
protected void readImpl()
{
_itemNum = readD();
_charId = readD();
_itemNum = (int) readQ();
// _charId = readD();
_itemCount = readQ();
}
@@ -57,11 +57,9 @@ public final class RequestWithDrawPremiumItem extends L2GameClientPacket
{
return;
}
else if (activeChar.getObjectId() != _charId)
{
Util.handleIllegalPlayerAction(activeChar, "[RequestWithDrawPremiumItem] Incorrect owner, Player: " + activeChar.getName(), Config.DEFAULT_PUNISH);
return;
}
/*
* else if (activeChar.getObjectId() != _charId) { Util.handleIllegalPlayerAction(activeChar, "[RequestWithDrawPremiumItem] Incorrect owner, Player: " + activeChar.getName(), Config.DEFAULT_PUNISH); return; }
*/
else if (activeChar.getPremiumItemList().isEmpty())
{
Util.handleIllegalPlayerAction(activeChar, "[RequestWithDrawPremiumItem] Player: " + activeChar.getName() + " try to get item with empty list!", Config.DEFAULT_PUNISH);

View File

@@ -41,7 +41,7 @@ public final class SetPrivateStoreListBuy extends L2GameClientPacket
{
private static final String _C__9A_SETPRIVATESTORELISTBUY = "[C] 9A SetPrivateStoreListBuy";
private static final int BATCH_LENGTH = 44; // length of the one item
private static final int BATCH_LENGTH = 46; // length of the one item
private Item[] _items = null;
@@ -81,6 +81,7 @@ public final class SetPrivateStoreListBuy extends L2GameClientPacket
defenseAttributes[i] = readH(); // Defense attributes
}
int appearanceId = readD(); // Appearance ID
readH(); // ?
boolean canUse = false;
for (L2ItemInstance item : player.getInventory().getItemsByItemId(itemId))
{

View File

@@ -31,7 +31,6 @@ import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.handler.IItemHandler;
import com.l2jserver.gameserver.handler.ItemHandler;
import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
import com.l2jserver.gameserver.model.PcCondOverride;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.effects.L2EffectType;
import com.l2jserver.gameserver.model.holders.SkillHolder;
@@ -153,7 +152,7 @@ public final class UseItem extends L2GameClientPacket
if (activeChar.isFishing() && ((_itemId < 6535) || (_itemId > 6540)))
{
// You cannot do anything else while fishing
activeChar.sendPacket(SystemMessageId.YOU_CANNOT_DO_THAT_WHILE_FISHING3);
activeChar.sendPacket(SystemMessageId.YOU_CANNOT_DO_THAT_WHILE_FISHING);
return;
}
@@ -244,61 +243,6 @@ public final class UseItem extends L2GameClientPacket
{
return;
}
// Don't allow other Race to Wear Kamael exclusive Weapons.
if (!item.isEquipped() && item.isWeapon() && !activeChar.canOverrideCond(PcCondOverride.ITEM_CONDITIONS))
{
L2Weapon wpn = (L2Weapon) item.getItem();
switch (activeChar.getRace())
{
case ERTHEIA:
{
switch (wpn.getItemType())
{
case SWORD:
case DAGGER:
case BOW:
case POLE:
case NONE:
case DUAL:
case RAPIER:
case ANCIENTSWORD:
case CROSSBOW:
case DUALDAGGER:
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
break;
}
case KAMAEL:
{
switch (wpn.getItemType())
{
case NONE:
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
break;
}
case HUMAN:
case DWARF:
case ELF:
case DARK_ELF:
case ORC:
{
switch (wpn.getItemType())
{
case RAPIER:
case CROSSBOW:
case ANCIENTSWORD:
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
break;
}
}
}
break;
}
case L2Item.SLOT_CHEST:
@@ -309,7 +253,7 @@ public final class UseItem extends L2GameClientPacket
case L2Item.SLOT_FULL_ARMOR:
case L2Item.SLOT_LEGS:
{
if ((activeChar.getRace() == Race.ERTHEIA) && ((item.getItem().getItemType() == ArmorType.HEAVY) || (item.getItem().getItemType() == ArmorType.SHIELD) || (item.getItem().getItemType() == ArmorType.SIGIL)))
if ((activeChar.getRace() == Race.ERTHEIA) && (activeChar.isMageClass()) && ((item.getItem().getItemType() == ArmorType.SHIELD) || (item.getItem().getItemType() == ArmorType.SIGIL)))
{
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;

View File

@@ -381,6 +381,7 @@ public class RequestShapeShiftingItem extends L2GameClientPacket
final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(targetItem);
if (inventory.getItemByObjectId(stone.getObjectId()) == null)
{
iu.addRemovedItem(stone);
@@ -389,6 +390,19 @@ public class RequestShapeShiftingItem extends L2GameClientPacket
{
iu.addModifiedItem(stone);
}
if (appearanceStone.getType() == AppearanceType.NORMAL)
{
if (inventory.getItemByObjectId(extracItem.getObjectId()) == null)
{
iu.addRemovedItem(extracItem);
}
else
{
iu.addModifiedItem(extracItem);
}
}
player.sendPacket(iu);
player.removeRequest(ShapeShiftingItemRequest.class);

View File

@@ -0,0 +1,54 @@
/*
* 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.clientpackets.dailymission;
import com.l2jserver.gameserver.data.xml.impl.DailyMissionData;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket;
/**
* @author Mobius
*/
public class RequestOneDayRewardReceive extends L2GameClientPacket
{
private int _reward;
@Override
protected void readImpl()
{
_reward = readC();
}
@Override
protected void runImpl()
{
final L2PcInstance player = getClient().getActiveChar();
if (player == null)
{
return;
}
DailyMissionData.getInstance().rewardPlayer(_reward, player);
}
@Override
public String getType()
{
return getClass().getSimpleName();
}
}

View File

@@ -0,0 +1,76 @@
/*
* 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.clientpackets.dailymission;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket;
import com.l2jserver.gameserver.network.serverpackets.dailymission.ExOneDayReceiveRewardList;
import com.l2jserver.gameserver.network.serverpackets.dailymission.ExTodoListInzone;
/**
* @author Mobius
*/
public class RequestTodoList extends L2GameClientPacket
{
private int _tab;
@SuppressWarnings("unused")
private int _showAllLevels;
@Override
protected void readImpl()
{
_tab = readC(); // Daily Reward = 9, Event = 1, Instance Zone = 2
_showAllLevels = readC(); // Disabled = 0, Enabled = 1
}
@Override
protected void runImpl()
{
final L2PcInstance player = getClient().getActiveChar();
if (player == null)
{
return;
}
switch (_tab)
{
case 1:
{
player.sendPacket(new ExTodoListInzone());
break;
}
case 2:
{
player.sendPacket(new ExTodoListInzone());
break;
}
case 9:
{
player.sendPacket(new ExOneDayReceiveRewardList(player));
break;
}
}
}
@Override
public String getType()
{
return getClass().getSimpleName();
}
}

View File

@@ -0,0 +1,56 @@
/*
* 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.clientpackets.dailymission;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket;
/**
* @author Mobius
*/
public class RequestTodoListHTML extends L2GameClientPacket
{
@SuppressWarnings("unused")
private int _tab;
@SuppressWarnings("unused")
private String _linkName;
@Override
protected void readImpl()
{
_tab = readC();
_linkName = readS();
}
@Override
protected void runImpl()
{
final L2PcInstance player = getClient().getActiveChar();
if (player == null)
{
return;
}
}
@Override
public String getType()
{
return getClass().getSimpleName();
}
}

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

Some files were not shown because too many files have changed in this diff Show More