Initial changes.

This commit is contained in:
MobiusDevelopment
2021-11-03 17:27:12 +00:00
parent fcc21d4ac4
commit 1b961fc155
54 changed files with 6232 additions and 77 deletions

View File

@@ -1168,42 +1168,42 @@ public class Config
public static String TITLE_FOR_PVP_AMOUNT4;
public static String TITLE_FOR_PVP_AMOUNT5;
public static boolean CHAT_ADMIN;
public static float[] PVE_MAGICAL_SKILL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVP_MAGICAL_SKILL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVE_MAGICAL_SKILL_DEFENCE_MULTIPLIERS = new float[190];
public static float[] PVP_MAGICAL_SKILL_DEFENCE_MULTIPLIERS = new float[190];
public static float[] PVE_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new float[190];
public static float[] PVP_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new float[190];
public static float[] PVE_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVP_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVE_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVP_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVE_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS = new float[190];
public static float[] PVP_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS = new float[190];
public static float[] PVE_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new float[190];
public static float[] PVP_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new float[190];
public static float[] PVE_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVP_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVE_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVP_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVE_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS = new float[190];
public static float[] PVP_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS = new float[190];
public static float[] PVE_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS = new float[190];
public static float[] PVP_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS = new float[190];
public static float[] PVE_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVP_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVE_BLOW_SKILL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVP_BLOW_SKILL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVE_BLOW_SKILL_DEFENCE_MULTIPLIERS = new float[190];
public static float[] PVP_BLOW_SKILL_DEFENCE_MULTIPLIERS = new float[190];
public static float[] PVE_ENERGY_SKILL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVP_ENERGY_SKILL_DAMAGE_MULTIPLIERS = new float[190];
public static float[] PVE_ENERGY_SKILL_DEFENCE_MULTIPLIERS = new float[190];
public static float[] PVP_ENERGY_SKILL_DEFENCE_MULTIPLIERS = new float[190];
public static float[] PLAYER_HEALING_SKILL_MULTIPLIERS = new float[190];
public static float[] SKILL_MASTERY_CHANCE_MULTIPLIERS = new float[190];
public static float[] EXP_AMOUNT_MULTIPLIERS = new float[190];
public static float[] SP_AMOUNT_MULTIPLIERS = new float[190];
public static float[] PVE_MAGICAL_SKILL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVP_MAGICAL_SKILL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVE_MAGICAL_SKILL_DEFENCE_MULTIPLIERS = new float[217];
public static float[] PVP_MAGICAL_SKILL_DEFENCE_MULTIPLIERS = new float[217];
public static float[] PVE_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new float[217];
public static float[] PVP_MAGICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new float[217];
public static float[] PVE_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVP_MAGICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVE_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVP_PHYSICAL_SKILL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVE_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS = new float[217];
public static float[] PVP_PHYSICAL_SKILL_DEFENCE_MULTIPLIERS = new float[217];
public static float[] PVE_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new float[217];
public static float[] PVP_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS = new float[217];
public static float[] PVE_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVP_PHYSICAL_SKILL_CRITICAL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVE_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVP_PHYSICAL_ATTACK_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVE_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS = new float[217];
public static float[] PVP_PHYSICAL_ATTACK_DEFENCE_MULTIPLIERS = new float[217];
public static float[] PVE_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS = new float[217];
public static float[] PVP_PHYSICAL_ATTACK_CRITICAL_CHANCE_MULTIPLIERS = new float[217];
public static float[] PVE_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVP_PHYSICAL_ATTACK_CRITICAL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVE_BLOW_SKILL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVP_BLOW_SKILL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVE_BLOW_SKILL_DEFENCE_MULTIPLIERS = new float[217];
public static float[] PVP_BLOW_SKILL_DEFENCE_MULTIPLIERS = new float[217];
public static float[] PVE_ENERGY_SKILL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVP_ENERGY_SKILL_DAMAGE_MULTIPLIERS = new float[217];
public static float[] PVE_ENERGY_SKILL_DEFENCE_MULTIPLIERS = new float[217];
public static float[] PVP_ENERGY_SKILL_DEFENCE_MULTIPLIERS = new float[217];
public static float[] PLAYER_HEALING_SKILL_MULTIPLIERS = new float[217];
public static float[] SKILL_MASTERY_CHANCE_MULTIPLIERS = new float[217];
public static float[] EXP_AMOUNT_MULTIPLIERS = new float[217];
public static float[] SP_AMOUNT_MULTIPLIERS = new float[217];
public static boolean MULTILANG_ENABLE;
public static List<String> MULTILANG_ALLOWED = new ArrayList<>();
public static String MULTILANG_DEFAULT;

View File

@@ -304,7 +304,8 @@ public enum CategoryType
HEAVY_ARMOR_CLASS,
LIGHT_ARMOR_CLASS,
ROBE_CLASS,
EXCEPT_ERTHEIA_CLASS;
EXCEPT_ERTHEIA_CLASS,
DEATH_KNIGHT_ALL_CLASS;
/**
* Finds category by it's name

View File

@@ -209,7 +209,13 @@ public enum ClassId implements IIdentifiable
STRATOMANCER(187, true, Race.ERTHEIA, CLOUD_BREAKER),
EVISCERATOR(188, false, Race.ERTHEIA, RIPPER),
SAYHA_SEER(189, true, Race.ERTHEIA, STRATOMANCER);
SAYHA_SEER(189, true, Race.ERTHEIA, STRATOMANCER),
DEATH_SOLDIER(212, false, Race.HUMAN, null),
DEATH_WARRIOR(213, false, Race.HUMAN, DEATH_SOLDIER),
DEATH_BERSERKER(214, false, Race.HUMAN, DEATH_WARRIOR),
DEATH_KNIGHT(215, false, Race.HUMAN, DEATH_BERSERKER),
SIGEL_DEATH_KNIGHT(216, false, Race.HUMAN, DEATH_KNIGHT);
/** The Identifier of the Class */
private final int _id;

View File

@@ -28,8 +28,8 @@ public enum UserInfoType implements IUpdateTypeComponent
BASE_STATS(0x02, 18),
MAX_HPCPMP(0x03, 14),
CURRENT_HPMPCP_EXP_SP(0x04, 38),
ENCHANTLEVEL(0x05, 4),
APPAREANCE(0x06, 15),
ENCHANTLEVEL(0x05, 5),
APPAREANCE(0x06, 19),
STATUS(0x07, 6),
STATS(0x08, 64),

View File

@@ -461,6 +461,7 @@ public class PlayerInstance extends Playable
protected int _baseClass;
protected int _activeClass;
protected int _classIndex = 0;
private boolean _isDeathKnight = false;
/** data for mounted pets */
private int _controlItemId;
@@ -6684,6 +6685,10 @@ public class PlayerInstance extends Playable
{
player._activeClass = activeClassId;
}
if (CategoryData.getInstance().isInCategory(CategoryType.DEATH_KNIGHT_ALL_CLASS, activeClassId))
{
player._isDeathKnight = true;
}
player.setApprentice(rset.getInt("apprentice"));
player.setSponsor(rset.getInt("sponsor"));
@@ -8661,6 +8666,14 @@ public class PlayerInstance extends Playable
return getClassId().isMage();
}
/**
* @return True if the PlayerInstance is a Death Knight.
*/
public boolean isDeathKnight()
{
return _isDeathKnight;
}
public boolean isMounted()
{
return _mountType != MountType.NONE;

View File

@@ -1130,7 +1130,7 @@ public class SkillCaster implements Runnable
return false;
}
if (skill.isBad()&& !player.isOnSoloEvent())
if (skill.isBad() && !player.isOnSoloEvent())
{
final WorldObject target = player.getTarget();
if ((target != null) && target.isPlayable() && (player.getTeam() == target.getActingPlayer().getTeam()))

View File

@@ -659,7 +659,54 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
EX_PLEDGE_RANKING_LIST(0x1F6, null, ConnectionState.IN_GAME),
EX_ITEM_RESTORE_LIST(0x1F7, null, ConnectionState.IN_GAME),
EX_ITEM_RESTORE(0x1F8, null, ConnectionState.IN_GAME),
EX_MAX(0x1F9, null, ConnectionState.IN_GAME);
// 338
EX_DETHRONE_INFO(0x1F9, null, ConnectionState.IN_GAME),
EX_DETHRONE_RANKING_INFO(0x1FA, null, ConnectionState.IN_GAME),
EX_DETHRONE_SERVER_INFO(0x1FB, null, ConnectionState.IN_GAME),
EX_DETHRONE_DISTRICT_OCCUPATION_INFO(0x1FC, null, ConnectionState.IN_GAME),
EX_DETHRONE_DAILY_MISSION_INFO(0x1FD, null, ConnectionState.IN_GAME),
EX_DETHRONE_DAILY_MISSION_GET_REWARD(0x1FE, null, ConnectionState.IN_GAME),
EX_DETHRONE_PREV_SEASON_INFO(0x1FF, null, ConnectionState.IN_GAME),
EX_DETHRONE_GET_REWARD(0x200, null, ConnectionState.IN_GAME),
EX_DETHRONE_ENTER(0x201, null, ConnectionState.IN_GAME),
EX_DETHRONE_LEAVE(0x202, null, ConnectionState.IN_GAME),
EX_DETHRONE_CHECK_NAME(0x203, null, ConnectionState.IN_GAME),
EX_DETHRONE_CHANGE_NAME(0x204, null, ConnectionState.IN_GAME),
EX_DETHRONE_CONNECT_CASTLE(0x205, null, ConnectionState.IN_GAME),
EX_DETHRONE_DISCONNECT_CASTLE(0x206, null, ConnectionState.IN_GAME),
EX_CHANGE_NICKNAME_COLOR_ICON(0x207, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_MOVE_TO_HOST(0x208, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_RETURN_TO_ORIGIN_PEER(0x209, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_CASTLE_INFO(0x20A, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_CASTLE_SIEGE_INFO(0x20B, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_CASTLE_SIEGE_JOIN(0x20C, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_CASTLE_SIEGE_ATTACKER_LIST(0x20D, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_PLEDGE_MERCENARY_RECRUIT_INFO_SET(0x20E, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_PLEDGE_MERCENARY_MEMBER_LIST(0x20F, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_PLEDGE_MERCENARY_MEMBER_JOIN(0x210, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_TELEPORT(0x211, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_OBSERVER_START(0x212, null, ConnectionState.IN_GAME),
EX_PRIVATE_STORE_SEARCH_LIST(0x213, null, ConnectionState.IN_GAME),
EX_PRIVATE_STORE_SEARCH_STATISTICS(0x214, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_HOST_CASTLE_SIEGE_RANKING_INFO(0x215, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_CASTLE_SIEGE_RANKING_INFO(0x216, null, ConnectionState.IN_GAME),
EX_WORLDCASTLEWAR_SIEGE_MAINBATTLE_HUD_INFO(0x217, null, ConnectionState.IN_GAME),
EX_NEW_HENNA_LIST(0x218, null, ConnectionState.IN_GAME),
EX_NEW_HENNA_EQUIP(0x219, null, ConnectionState.IN_GAME),
EX_NEW_HENNA_UNEQUIP(0x21A, null, ConnectionState.IN_GAME),
EX_NEW_HENNA_POTEN_SELECT(0x21B, null, ConnectionState.IN_GAME),
EX_NEW_HENNA_POTEN_ENCHANT(0x21C, null, ConnectionState.IN_GAME),
EX_NEW_HENNA_COMPOSE(0x21D, null, ConnectionState.IN_GAME),
EX_REQUEST_INVITE_PARTY(0x21E, null, ConnectionState.IN_GAME),
EX_ITEM_USABLE_LIST(0x21F, null, ConnectionState.IN_GAME),
EX_PACKETREADCOUNTPERSECOND(0x220, null, ConnectionState.IN_GAME),
EX_SELECT_GLOBAL_EVENT_UI(0x221, null, ConnectionState.IN_GAME),
EX_L2PASS_INFO(0x222, null, ConnectionState.IN_GAME),
EX_L2PASS_REQUEST_REWARD(0x2231, null, ConnectionState.IN_GAME),
EX_L2PASS_REQUEST_REWARD_ALL(0x224, null, ConnectionState.IN_GAME),
EX_L2PASS_BUY_PREMIUM(0x225, null, ConnectionState.IN_GAME),
EX_SAYHAS_SUPPORT_TOGGLE(0x226, null, ConnectionState.IN_GAME),
EX_MAX(0x227, null, ConnectionState.IN_GAME);
public static final ExIncomingPackets[] PACKET_ARRAY;

View File

@@ -981,7 +981,54 @@ public enum OutgoingPackets
EX_ITEM_RESTORE_LIST(0xFE, 0x2B4),
EX_ITEM_RESTORE(0xFE, 0x2B5),
EX_PLEDGE_COIN_INFO(0xFE, 0x2B6),
EX_MAX(0xFE, 0x2B7);
// 338
EX_DETHRONE_INFO(0xFE, 0x2B7),
EX_DETHRONE_RANKING_INFO(0xFE, 0x2B8),
EX_DETHRONE_SERVER_INFO(0xFE, 0x2B9),
EX_DETHRONE_DISTRICT_OCCUPATION_INFO(0xFE, 0x2BA),
EX_DETHRONE_DAILY_MISSION_INFO(0xFE, 0x2BB),
EX_DETHRONE_DAILY_MISSION_GET_REWARD(0xFE, 0x2BC),
EX_DETHRONE_DAILY_MISSION_COMPLETE(0xFE, 0x2BD),
EX_DETHRONE_PREV_SEASON_INFO(0xFE, 0x2BE),
EX_DETHRONE_GET_REWARD(0xFE, 0x2BF),
EX_DETHRONE_CHECK_NAME(0xFE, 0x2C0),
EX_DETHRONE_CHANGE_NAME(0xFE, 0x2C1),
EX_DETHRONE_CONNECT_CASTLE(0xFE, 0x2C2),
EX_DETHRONE_DISCONNECT_CASTLE(0xFE, 0x2C3),
EX_DETHRONE_SEASON_INFO(0xFE, 0x2C4),
EX_SERVERLIMIT_ITEM_ANNOUNCE(0xFE, 0x2C5),
EX_CHANGE_NICKNAME_COLOR_ICON(0xFE, 0x2C6),
EX_WORLDCASTLEWAR_HOST_CASTLE_SIEGE_HUD_INFO(0xFE, 0x2C7),
EX_WORLDCASTLEWAR_CASTLE_INFO(0xFE, 0x2C8),
EX_WORLDCASTLEWAR_CASTLE_SIEGE_INFO(0xFE, 0x2C9),
EX_WORLDCASTLEWAR_CASTLE_SIEGE_HUD_INFO(0xFE, 0x2CA),
EX_WORLDCASTLEWAR_CASTLE_SIEGE_ATTACKER_LIST(0xFE, 0x2CB),
EX_WORLDCASTLEWAR_PLEDGE_MERCENARY_MEMBER_LIST(0xFE, 0x2CC),
EX_WORLDCASTLEWAR_PLEDGE_MERCENARY_MEMBER_JOIN(0xFE, 0x2CD),
EX_WORLDCASTLEWAR_SIEGE_MAINBATTLE_OCCUPY_INFO(0xFE, 0x2CE),
EX_WORLDCASTLEWAR_SIEGE_MAINBATTLE_HERO_WEAPON_INFO(0xFE, 0x2CF),
EX_WORLDCASTLEWAR_SIEGE_MAINBATTLE_HERO_WEAPON_USER(0xFE, 0x2D0),
EX_WORLDCASTLEWAR_SIEGE_MAINBATTLE_SIEGE_GOLEM_INFO(0xFE, 0x2D1),
EX_WORLDCASTLEWAR_SIEGE_MAINBATTLE_DOOR_INFO(0xFE, 0x2D2),
EX_WORLDCASTLEWAR_SIEGE_MAINBATTLE_HUD_INFO(0xFE, 0x2D3),
EX_PRIVATE_STORE_SEARCH_ITEM(0xFE, 0x2D4),
EX_PRIVATE_STORE_SEARCH_HISTORY(0xFE, 0x2D5),
EX_PRIVATE_STORE_SEARCH_STATISTICS(0xFE, 0x2D6),
EX_WORLDCASTLEWAR_HOST_CASTLE_SIEGE_RANKING_INFO(0xFE, 0x2D7),
EX_WORLDCASTLEWAR_CASTLE_SIEGE_RANKING_INFO(0xFE, 0x2D8),
EX_NEW_HENNA_LIST(0xFE, 0x2D9),
EX_NEW_HENNA_EQUIP(0xFE, 0x2DA),
EX_NEW_HENNA_UNEQUIP(0xFE, 0x2DB),
EX_NEW_HENNA_POTEN_SELECT(0xFE, 0x2DC),
EX_NEW_HENNA_POTEN_ENCHANT(0xFE, 0x2DD),
EX_NEW_HENNA_COMPOSE(0xFE, 0x2DE),
EX_REQUEST_INVITE_PARTY(0xFE, 0x2DF),
EX_INIT_GLOBAL_EVENT_UI(0xFE, 0x2E0),
EX_SHOW_GLOBAL_EVENT_UI(0xFE, 0x2E1),
EX_L2PASS_SIMPLE_INFO(0xFE, 0x2E2),
EX_L2PASS_INFO(0xFE, 0x2E3),
EX_SAYHAS_SUPPORT_INFO(0xFE, 0x2E4),
EX_MAX(0xFE, 0x2E5);
private final int _id1;
private final int _id2;

View File

@@ -131,7 +131,8 @@ public class CharInfo implements IClientOutgoingPacket
packet.writeH(_player.getRace().ordinal()); // Confirmed
packet.writeC(_player.getAppearance().isFemale() ? 0x01 : 0x00); // Confirmed
packet.writeD(_player.getBaseClass()); // Confirmed
packet.writeD(_player.isDeathKnight() ? 212 : _player.getBaseClass());
for (int slot : getPaperdollOrder())
{
@@ -282,6 +283,13 @@ public class CharInfo implements IClientOutgoingPacket
// Rank.
packet.writeC(RankManager.getInstance().getPlayerGlobalRank(_player) == 1 ? 1 : RankManager.getInstance().getPlayerRaceRank(_player) == 1 ? 2 : 0);
packet.writeH(0x00); // 338
packet.writeD(0x00); // 338
packet.writeD(0x00); // 338
packet.writeC(0x00); // 338
packet.writeD(_player.getVisualHairColor() + 1); // 338 - DK color.
packet.writeD(0x00); // 338
return true;
}

View File

@@ -29,7 +29,9 @@ import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.sql.ClanTable;
import org.l2jmobius.gameserver.data.xml.CategoryData;
import org.l2jmobius.gameserver.data.xml.ExperienceData;
import org.l2jmobius.gameserver.enums.CategoryType;
import org.l2jmobius.gameserver.instancemanager.PremiumManager;
import org.l2jmobius.gameserver.model.CharSelectInfoPackage;
import org.l2jmobius.gameserver.model.VariationInstance;
@@ -298,6 +300,9 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(0x00); // 235 - ban time left
packet.writeD((int) (charInfoPackage.getLastAccess() / 1000)); // 235 - last play time
packet.writeC(0x00); // 338
packet.writeD(charInfoPackage.getHairColor() + 1); // 338 - DK color.
}
return true;
}
@@ -402,7 +407,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
charInfopackage.setRace(chardata.getInt("race"));
final int baseClassId = chardata.getInt("base_class");
int baseClassId = chardata.getInt("base_class");
// Death Knight check.
if (CategoryData.getInstance().isInCategory(CategoryType.DEATH_KNIGHT_ALL_CLASS, baseClassId))
{
baseClassId = 212;
}
final int activeClassId = chardata.getInt("classid");
charInfopackage.setX(chardata.getInt("x"));
charInfopackage.setY(chardata.getInt("y"));

View File

@@ -299,7 +299,7 @@ public class NpcInfo extends AbstractMaskPacket<NpcInfoType>
packet.writeD(_npc.getObjectId());
packet.writeC(_npc.isShowSummonAnimation() ? 0x02 : 0x00); // // 0=teleported 1=default 2=summoned
packet.writeH(37); // mask_bits_37
packet.writeH(38); // 338 - mask_bits_38
packet.writeB(_masks);
// Block 1

View File

@@ -201,18 +201,20 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
if (containsMask(UserInfoType.ENCHANTLEVEL))
{
packet.writeH(4);
packet.writeH(5); // 338
packet.writeC(_enchantLevel);
packet.writeC(_armorEnchant);
packet.writeC(0x00); // 338 - cBackEnchant?
}
if (containsMask(UserInfoType.APPAREANCE))
{
packet.writeH(15);
packet.writeH(19); // 338
packet.writeD(_player.getVisualHair());
packet.writeD(_player.getVisualHairColor());
packet.writeD(_player.getVisualFace());
packet.writeC(_player.isHairAccessoryEnabled() ? 0x01 : 0x00);
packet.writeD(_player.getVisualHairColor() + 1); // 338 - DK color.
}
if (containsMask(UserInfoType.STATUS))