Addition of ExUserViewInfoParameters.

Thanks to CostyKiller.
This commit is contained in:
MobiusDevelopment 2022-08-09 22:37:15 +00:00
parent 2ca01e1195
commit 5acec331a5
6 changed files with 2257 additions and 0 deletions

View File

@ -332,6 +332,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExUserBoostStat;
import org.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
import org.l2jmobius.gameserver.network.serverpackets.ExUserInfoCubic;
import org.l2jmobius.gameserver.network.serverpackets.ExUserInfoInvenWeight;
import org.l2jmobius.gameserver.network.serverpackets.ExUserViewInfoParameter;
import org.l2jmobius.gameserver.network.serverpackets.ExVitalExInfo;
import org.l2jmobius.gameserver.network.serverpackets.ExVitalityEffectInfo;
import org.l2jmobius.gameserver.network.serverpackets.GetOnVehicle;
@ -4214,6 +4215,7 @@ public class Player extends Playable
{
// Send user info to the current player
sendPacket(new UserInfo(this));
sendPacket(new ExUserViewInfoParameter(this));
// Broadcast char info to known players
broadcastCharInfo();

View File

@ -0,0 +1,641 @@
/*
* This file is part of the L2J Mobius project.
*
* This program 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.
*
* This program 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 org.l2jmobius.gameserver.network.serverpackets;
import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.enums.ItemGrade;
import org.l2jmobius.gameserver.enums.ShotType;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.stats.Stat;
import org.l2jmobius.gameserver.model.stats.TraitType;
import org.l2jmobius.gameserver.network.OutgoingPackets;
/**
* @author Mobius
*/
public class ExUserViewInfoParameter implements IClientOutgoingPacket
{
private final Player _player;
public ExUserViewInfoParameter(Player player)
{
_player = player;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_USER_VIEW_INFO_PARAMETER.writeId(packet);
int index = 0;
// Number of parameters.
packet.writeD(147);
// XXX Attack Section
// P. Atk. (%)
packet.writeH(index++);
packet.writeD((_player.getPAtk() / Config.MAX_PATK) * 100);
// P. Atk. (num.)
packet.writeH(index++);
packet.writeD(_player.getPAtk());
// M. Atk. (%)
packet.writeH(index++);
packet.writeD((_player.getMAtk() / Config.MAX_MATK) * 100);
// M. Atk. (num)
packet.writeH(index++);
packet.writeD(_player.getMAtk());
// Soulshot Damage - Activation
packet.writeH(index++);
packet.writeD((_player.isChargedShot(ShotType.BLESSED_SOULSHOTS) || _player.isChargedShot(ShotType.SOULSHOTS)) ? (10000 + (_player.getActiveRubyJewel() != null ? (int) _player.getActiveRubyJewel().getBonus() * 1000 : 0)) : 0);
// Spiritshot Damage - Activation
packet.writeH(index++);
packet.writeD((_player.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) || _player.isChargedShot(ShotType.SPIRITSHOTS)) ? (10000 + (_player.getActiveShappireJewel() != null ? (int) _player.getActiveShappireJewel().getBonus() * 1000 : 0)) : 0);
// Soulshot Damage - Enchanted Weapons
packet.writeH(index++);
packet.writeD((((_player.getActiveWeaponInstance() != null) && _player.getActiveWeaponInstance().isEnchanted()) ? (int) (_player.getActiveWeaponInstance().getEnchantLevel() * (_player.getActiveWeaponItem().getItemGrade() == ItemGrade.S ? 1.6 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.A ? 1.4 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.B ? 0.7 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.C) ? 0.4 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.D) ? 0.4 : 0) * 100) : 0));
// Spiritshot Damage - Enchanted Weapons
packet.writeH(index++);
packet.writeD((((_player.getActiveWeaponInstance() != null) && _player.getActiveWeaponInstance().isEnchanted()) ? (int) (_player.getActiveWeaponInstance().getEnchantLevel() * (_player.getActiveWeaponItem().getItemGrade() == ItemGrade.S ? 1.6 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.A ? 1.4 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.B ? 0.7 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.C) ? 0.4 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.D) ? 0.4 : 0) * 100) : 0));
// Soulshot Damage - Misc.
packet.writeH(index++);
packet.writeD(_player.getActiveRubyJewel() != null ? (int) _player.getActiveRubyJewel().getBonus() * 1000 : 0);
// Spiritshot Damage - Misc.
packet.writeH(index++);
packet.writeD(_player.getActiveShappireJewel() != null ? (int) _player.getActiveShappireJewel().getBonus() * 1000 : 0);
// P. Skill Power (%)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Power (%)
packet.writeH(index++);
packet.writeD(0);
// Basic PvP Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_PHYSICAL_ATTACK_DAMAGE) * 100);
// P. Skill Damage in PvP
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_PHYSICAL_SKILL_DAMAGE) * 100);
// M. Skill Damage in PvP
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_MAGICAL_SKILL_DAMAGE) * 100);
// Basic PvE Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_PHYSICAL_ATTACK_DAMAGE) * 100);
// P. Skill Damage in PvE
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_PHYSICAL_SKILL_DAMAGE) * 100);
// M. Skill Damage in PvE
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_MAGICAL_SKILL_DAMAGE) * 100);
// XXX Defense Section
// P. Def. (%)
packet.writeH(index++);
packet.writeD((_player.getTemplate().getBasePDef() / _player.getPDef()) * 100);
// P. Def. (num.)
packet.writeH(index++);
packet.writeD(_player.getPDef());
// M. Def. (%)
packet.writeH(index++);
packet.writeD((_player.getTemplate().getBaseMDef() / _player.getMDef()) * 100);
// M. Def. (num.)
packet.writeH(index++);
packet.writeD(_player.getMDef());
// Received PvP Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_DAMAGE_TAKEN));
// Received P. Skill Damage in PvP
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Damage in PvP
packet.writeH(index++);
packet.writeD(0);
// Received PvE Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_DAMAGE_TAKEN));
// Received P. Skill Damage in PvE
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Damage in PvE
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
// Shield Defense (%)
packet.writeH(index++);
// packet.writeD((_player.getStat().getShldDef() - _player.getShldDef()) / _player.getShldDef());
packet.writeD(_player.getStat().getShldDef());
// Shield Defence (num.)
packet.writeH(index++);
packet.writeD(_player.getShldDef());
// Shield Defence Rate
packet.writeH(index++);
packet.writeD(_player.getStat().getShldDef());
// M. Damage Resistance (%)
packet.writeH(index++);
packet.writeD(0);
// M. Damage Resistance (num.)
packet.writeH(index++);
packet.writeD(0);
// M. Damage Reflection (%)
packet.writeH(index++);
packet.writeD(0);
// M. Damage Reflection Resistance
packet.writeH(index++);
packet.writeD(0);
// Received Fixed Damage (%)
packet.writeH(index++);
packet.writeD(0);
// Casting Interruption Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Casting Interruption Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Accuracy Section
// P. Accuracy (%)
packet.writeH(index++);
packet.writeD(0);
// P. Accuracy (num.)
packet.writeH(index++);
packet.writeD(_player.getAccuracy());
// M. Accuracy (%)
packet.writeH(index++);
packet.writeD(0);
// M. Accuracy (num.)
packet.writeH(index++);
packet.writeD(_player.getMagicAccuracy());
// Vital Point Attack Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Vital Point Attack Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Evasion Section
// P. Evasion (%)
packet.writeH(index++);
packet.writeD(((_player.getEvasionRate() * 100) / Config.MAX_EVASION));
// P. Evasion (num.)
packet.writeH(index++);
packet.writeD(_player.getEvasionRate());
// M. Evasion (%)
packet.writeH(index++);
packet.writeD(((_player.getMagicEvasionRate() * 100) / Config.MAX_EVASION));
// M. Evasion (num.)
packet.writeH(index++);
packet.writeD(_player.getMagicEvasionRate());
// Received Vital Point Attack Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Received Vital Point Attack Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// P. Skill Evasion (%)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Evasion (%)
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
packet.writeH(index++);
packet.writeD(0);
// XXX Speed Section
// Atk. Spd. (%)
packet.writeH(index++);
packet.writeD(((_player.getPAtkSpd() * 100) / Config.MAX_PATK_SPEED));
// Atk. Spd. (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getPAtkSpd());
// Casting Spd. (%)
packet.writeH(index++);
packet.writeD((_player.getMAtkSpd() * 100) / Config.MAX_MATK_SPEED);
// Casting Spd. (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getMAtkSpd());
// Speed (%)
packet.writeH(index++);
packet.writeD((int) ((_player.getMoveSpeed() * 100) / Config.MAX_RUN_SPEED));
// Speed (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMoveSpeed());
// XXX Critical Rate Section
// Basic Critical Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getCriticalHit());
// Basic Critical Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getCriticalHit());
// P. Skill Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// P. Skill Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Critical Damage Section
// Basic Critical Damage (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.CRITICAL_DAMAGE) * 100);
// Basic Critical Damage (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getCriticalDmg(1) * 100);
// P. Skill Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// P. Skill Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Recovery Section
// HP ReCovery Potions' Effect (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_HP) * 100);
// HP Recovery Potions' Effect (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_HP) * 100);
// MP Recovery Potions' Effect (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_MP) * 100);
// MP Recovery Potions' Effect (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_MP) * 100);
// HP Recovery Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getHpRegen());
// HP Recovery Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getHpRegen());
// HP Recovery Rate while standing (%)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while standing (num.)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while sitting (%)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while sitting (num.)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while walking (%)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while walking (num.)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while running (%)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while running (num.)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getHpRegen() : 0);
// MP Recovery Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getMpRegen());
// MP Recovery Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getMpRegen());
// MP Recovery Rate while standing (%)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while standing (num.)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while sitting (%)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while sitting (num.)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while walking (%)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while walking (num.)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while running (%)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while running (num.)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getMpRegen() : 0);
// CP Recovery Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getCpRegen());
// CP Recovery Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getCpRegen());
// CP Recovery Rate while standing (%)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while standing (num.)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while sitting (%)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while sitting (num.)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while walking (%)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while walking (num.)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while running (%)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while running (num.)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getCpRegen() : 0);
// XXX Skill Cooldown Section
// P. Skill Cooldown (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getReuseTypeValue(1) * 100);
// M. Skill Cooldown (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getReuseTypeValue(2) * 100);
// Song/ Dance Cooldown (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getReuseTypeValue(3) * 100);
// XXX MP Consumption Section
// P. Skill MP Consumption Decrease (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(1) * 100);
// M. Skill MP Consumption Decrease (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(2) * 100);
// Song/ Dance MP Consumption Decrease (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(3) * 100);
// P. Skill MP Consumption Decrease (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(1) * 100);
// M. Skill MP Consumption Decrease (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(2) * 100);
// Song/ Dance MP Consumption Decrease (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(3) * 100);
// XXX Anomalies Section
// Paralysis Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.PARALYZE) * 100);
// Shock Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SHOCK) * 100);
// Knockback Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.KNOCKBACK) * 100);
// Sleep Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SLEEP) * 100);
// Imprisonment Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.IMPRISON) * 100);
// Pull Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.PULL) * 100);
// Fear Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.FEAR) * 100);
// Silence Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SILENCE) * 100);
// Hold Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.HOLD) * 100);
// Suppression Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SUPPRESSION) * 100);
// Infection Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.INFECTION) * 100);
// Paralysis Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.PARALYZE) * 100);
// Shock Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SHOCK) * 100);
// Knockback Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.KNOCKBACK) * 100);
// Sleep Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SLEEP) * 100);
// Imprisonment Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.IMPRISON) * 100);
// Pull Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.PULL) * 100);
// Fear Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.FEAR) * 100);
// Silence Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SLEEP) * 100);
// Hold Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.HOLD) * 100);
// Suppresion Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SUPPRESSION) * 100);
// Infection Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.INFECTION) * 100);
return true;
}
}

View File

@ -335,6 +335,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExUserBoostStat;
import org.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
import org.l2jmobius.gameserver.network.serverpackets.ExUserInfoCubic;
import org.l2jmobius.gameserver.network.serverpackets.ExUserInfoInvenWeight;
import org.l2jmobius.gameserver.network.serverpackets.ExUserViewInfoParameter;
import org.l2jmobius.gameserver.network.serverpackets.ExVitalExInfo;
import org.l2jmobius.gameserver.network.serverpackets.ExVitalityEffectInfo;
import org.l2jmobius.gameserver.network.serverpackets.GetOnVehicle;
@ -4229,6 +4230,7 @@ public class Player extends Playable
{
// Send user info to the current player
sendPacket(new UserInfo(this));
sendPacket(new ExUserViewInfoParameter(this));
// Broadcast char info to known players
broadcastCharInfo();

View File

@ -0,0 +1,805 @@
/*
* This file is part of the L2J Mobius project.
*
* This program 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.
*
* This program 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 org.l2jmobius.gameserver.network.serverpackets;
import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.enums.ItemGrade;
import org.l2jmobius.gameserver.enums.ShotType;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.item.type.WeaponType;
import org.l2jmobius.gameserver.model.stats.Stat;
import org.l2jmobius.gameserver.model.stats.TraitType;
import org.l2jmobius.gameserver.network.OutgoingPackets;
/**
* @author Mobius
*/
public class ExUserViewInfoParameter implements IClientOutgoingPacket
{
private final Player _player;
public ExUserViewInfoParameter(Player player)
{
_player = player;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_USER_VIEW_INFO_PARAMETER.writeId(packet);
int index = 0;
// Number of parameters.
packet.writeD(185);
// XXX Attack Section
// P. Atk. (%)
packet.writeH(index++);
packet.writeD((_player.getPAtk() / Config.MAX_PATK) * 100);
// P. Atk. (num.)
packet.writeH(index++);
packet.writeD(_player.getPAtk());
// M. Atk. (%)
packet.writeH(index++);
packet.writeD((_player.getMAtk() / Config.MAX_MATK) * 100);
// M. Atk. (num)
packet.writeH(index++);
packet.writeD(_player.getMAtk());
// Soulshot Damage - Activation
packet.writeH(index++);
packet.writeD((_player.isChargedShot(ShotType.BLESSED_SOULSHOTS) || _player.isChargedShot(ShotType.SOULSHOTS)) ? (10000 + (_player.getActiveRubyJewel() != null ? (int) _player.getActiveRubyJewel().getBonus() * 1000 : 0)) : 0);
// Spiritshot Damage - Activation
packet.writeH(index++);
packet.writeD((_player.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) || _player.isChargedShot(ShotType.SPIRITSHOTS)) ? (10000 + (_player.getActiveShappireJewel() != null ? (int) _player.getActiveShappireJewel().getBonus() * 1000 : 0)) : 0);
// Soulshot Damage - Enchanted Weapons
packet.writeH(index++);
packet.writeD((((_player.getActiveWeaponInstance() != null) && _player.getActiveWeaponInstance().isEnchanted()) ? (int) (_player.getActiveWeaponInstance().getEnchantLevel() * (_player.getActiveWeaponItem().getItemGrade() == ItemGrade.S ? 1.6 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.A ? 1.4 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.B ? 0.7 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.C) ? 0.4 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.D) ? 0.4 : 0) * 100) : 0));
// Spiritshot Damage - Enchanted Weapons
packet.writeH(index++);
packet.writeD((((_player.getActiveWeaponInstance() != null) && _player.getActiveWeaponInstance().isEnchanted()) ? (int) (_player.getActiveWeaponInstance().getEnchantLevel() * (_player.getActiveWeaponItem().getItemGrade() == ItemGrade.S ? 1.6 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.A ? 1.4 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.B ? 0.7 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.C) ? 0.4 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.D) ? 0.4 : 0) * 100) : 0));
// Soulshot Damage - Misc.
packet.writeH(index++);
packet.writeD(_player.getActiveRubyJewel() != null ? (int) _player.getActiveRubyJewel().getBonus() * 1000 : 0);
// Spiritshot Damage - Misc.
packet.writeH(index++);
packet.writeD(_player.getActiveShappireJewel() != null ? (int) _player.getActiveShappireJewel().getBonus() * 1000 : 0);
// Basic PvP Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_PHYSICAL_ATTACK_DAMAGE) * 100);
// P. Skill Damage in PvP
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_PHYSICAL_SKILL_DAMAGE) * 100);
// M. Skill Damage in PvP
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_MAGICAL_SKILL_DAMAGE) * 100);
// Inflicted PvP Damage
packet.writeH(index++);
packet.writeD(0);
// PvP Damage Decrease Ignore
packet.writeH(index++);
packet.writeD(0);
// Basic PvE Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_PHYSICAL_ATTACK_DAMAGE) * 100);
// P. Skill Damage in PvE
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_PHYSICAL_SKILL_DAMAGE) * 100);
// M. Skill Damage in PvE
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_MAGICAL_SKILL_DAMAGE) * 100);
// PvE Damage
packet.writeH(index++);
packet.writeD(0);
// PvE Damage Decrease Ignore
packet.writeH(index++);
packet.writeD(0);
// Basic Power
packet.writeH(index++);
packet.writeD(0);
// P. Skill Power
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PHYSICAL_SKILL_POWER) * 100);
// M. Skill Power
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.MAGICAL_SKILL_POWER) * 100);
// AoE Skill Damage
packet.writeH(index++);
packet.writeD(0);
// Damage Bonus - Sword
packet.writeH(index++);
packet.writeD(((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.SWORD)) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Ancient Sword
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.ANCIENTSWORD) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Dagger
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.DAGGER) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Rapier
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.RAPIER) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Blunt Weapon
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && ((_player.getActiveWeaponInstance().getItemType() == WeaponType.ETC) || (_player.getActiveWeaponInstance().getItemType() == WeaponType.BLUNT) || (_player.getActiveWeaponInstance().getItemType() == WeaponType.DUALBLUNT)) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Spear
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.POLE) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Fists
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && ((_player.getActiveWeaponInstance().getItemType() == WeaponType.FIST) || (_player.getActiveWeaponInstance().getItemType() == WeaponType.DUALFIST)) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Dual Swords
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.DUAL) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Bow
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && ((_player.getActiveWeaponInstance().getItemType() == WeaponType.BOW) || (_player.getActiveWeaponInstance().getItemType() == WeaponType.CROSSBOW) || (_player.getActiveWeaponInstance().getItemType() == WeaponType.TWOHANDCROSSBOW)) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Firearms
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.PISTOLS) ? _player.getStat().getWeaponBonusPAtk() : 0);
// XXX Defense Section
// P. Def. (%)
packet.writeH(index++);
packet.writeD((_player.getTemplate().getBasePDef() / _player.getPDef()) * 100);
// P. Def. (num.)
packet.writeH(index++);
packet.writeD(_player.getPDef());
// M. Def. (%)
packet.writeH(index++);
packet.writeD((_player.getTemplate().getBaseMDef() / _player.getMDef()) * 100);
// M. Def. (num.)
packet.writeH(index++);
packet.writeD(_player.getMDef());
// Soulshot Damage Resistance
packet.writeH(index++);
packet.writeD(0);
// Spiritshot Damage Resistance
packet.writeH(index++);
packet.writeD(0);
// Received basic PvP Damage
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Damage in PvP
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Damage in PvP
packet.writeH(index++);
packet.writeD(0);
// Received PvP Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_DAMAGE_TAKEN));
// PvP Damage Decrease
packet.writeH(index++);
packet.writeD(0);
// Received basic PvE Damage
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Damage in PvE
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Damage in PvE
packet.writeH(index++);
packet.writeD(0);
// Received PvE Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_DAMAGE_TAKEN));
// PvE Damage Decrease
packet.writeH(index++);
packet.writeD(0);
// Received basic damage power
packet.writeH(index++);
packet.writeD(0);
// P. Skill Power when hit
packet.writeH(index++);
packet.writeD(0);
// M. Skill Power when hit
packet.writeH(index++);
packet.writeD(0);
// Received AoE Skill Damage
packet.writeH(index++);
packet.writeD(0);
// Damage Resistance Bonus - Sword
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SWORD) * 100);
// Damage Resistance Bonus - Ancient Sword
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.ANCIENTSWORD) * 100);
// Damage Resistance Bonus - Dagger
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.DAGGER) * 100);
// Damage Resistance Bonus - Rapier
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.RAPIER) * 100);
// Damage Resistance Bonus - Blunt Weapon
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.BLUNT) * 100);
// Damage Resistance Bonus - Spear
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.POLE) * 100);
// Damage Resistance Bonus - Fists
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.FIST) * 100);
// Damage Resistance Bonus - Dual Swords
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.DUAL) * 100);
// Damage Resistance Bonus - Bow
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.BOW) * 100);
// Damage Resistance Bonus - Firearms
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.PISTOLS) * 100);
// Shield Defense (%)
packet.writeH(index++);
// packet.writeD((_player.getStat().getShldDef() - _player.getShldDef()) / _player.getShldDef());
packet.writeD(_player.getStat().getShldDef());
// Shield Defence (num.)
packet.writeH(index++);
packet.writeD(_player.getShldDef());
// Shield Defence Rate
packet.writeH(index++);
packet.writeD(_player.getStat().getShldDef());
// M. Damage Resistance (%)
packet.writeH(index++);
packet.writeD(0);
// M. Damage Resistance (num.)
packet.writeH(index++);
packet.writeD(0);
// M. Damage Reflection (%)
packet.writeH(index++);
packet.writeD(0);
// M. Damage Reflection Resistance
packet.writeH(index++);
packet.writeD(0);
// Received Fixed Damage (%)
packet.writeH(index++);
packet.writeD(0);
// Casting Interruption Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Casting Interruption Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Accuracy Section
// P. Accuracy (%)
packet.writeH(index++);
packet.writeD(0);
// P. Accuracy (num.)
packet.writeH(index++);
packet.writeD(_player.getAccuracy());
// M. Accuracy (%)
packet.writeH(index++);
packet.writeD(0);
// M. Accuracy (num.)
packet.writeH(index++);
packet.writeD(_player.getMagicAccuracy());
// Vital Point Attack Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Vital Point Attack Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Evasion Section
// P. Evasion (%)
packet.writeH(index++);
packet.writeD(((_player.getEvasionRate() * 100) / Config.MAX_EVASION));
// P. Evasion (num.)
packet.writeH(index++);
packet.writeD(_player.getEvasionRate());
// M. Evasion (%)
packet.writeH(index++);
packet.writeD(((_player.getMagicEvasionRate() * 100) / Config.MAX_EVASION));
// M. Evasion (num.)
packet.writeH(index++);
packet.writeD(_player.getMagicEvasionRate());
// Received Vital Point Attack Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Received Vital Point Attack Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// P. Skill Evasion (%)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Evasion (%)
packet.writeH(index++);
packet.writeD(0);
// XXX Speed Section
// Atk. Spd. (%)
packet.writeH(index++);
packet.writeD(((_player.getPAtkSpd() * 100) / Config.MAX_PATK_SPEED));
// Atk. Spd. (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getPAtkSpd());
// Casting Spd. (%)
packet.writeH(index++);
packet.writeD((_player.getMAtkSpd() * 100) / Config.MAX_MATK_SPEED);
// Casting Spd. (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getMAtkSpd());
// Speed (%)
packet.writeH(index++);
packet.writeD((int) ((_player.getMoveSpeed() * 100) / Config.MAX_RUN_SPEED));
// Speed (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMoveSpeed());
// XXX Critical Rate Section
// Basic Critical Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getCriticalHit());
// Basic Critical Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getCriticalHit());
// P. Skill Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// P. Skill Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// Received basic Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Received basic Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Critical Damage Section
// Basic Critical Damage (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.CRITICAL_DAMAGE) * 100);
// Basic Critical Damage (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getCriticalDmg(1) * 100);
// P. Skill Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// P. Skill Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// Received Basic Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// Received Basic Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Recovery Section
// HP ReCovery Potions' Effect (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_HP) * 100);
// HP Recovery Potions' Effect (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_HP) * 100);
// MP Recovery Potions' Effect (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_MP) * 100);
// MP Recovery Potions' Effect (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_MP) * 100);
// HP Recovery Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getHpRegen());
// HP Recovery Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getHpRegen());
// HP Recovery Rate while standing (%)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while standing (num.)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while sitting (%)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while sitting (num.)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while walking (%)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while walking (num.)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while running (%)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while running (num.)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getHpRegen() : 0);
// MP Recovery Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getMpRegen());
// MP Recovery Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getMpRegen());
// MP Recovery Rate while standing (%)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while standing (num.)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while sitting (%)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while sitting (num.)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while walking (%)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while walking (num.)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while running (%)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while running (num.)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getMpRegen() : 0);
// CP Recovery Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getCpRegen());
// CP Recovery Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getCpRegen());
// CP Recovery Rate while standing (%)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while standing (num.)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while sitting (%)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while sitting (num.)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while walking (%)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while walking (num.)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while running (%)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while running (num.)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getCpRegen() : 0);
// XXX Skill Cooldown Section
// P. Skill Cooldown (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getReuseTypeValue(1) * 100);
// M. Skill Cooldown (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getReuseTypeValue(2) * 100);
// Song/ Dance Cooldown (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getReuseTypeValue(3) * 100);
// XXX MP Consumption Section
// P. Skill MP Consumption Decrease (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(1) * 100);
// M. Skill MP Consumption Decrease (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(2) * 100);
// Song/ Dance MP Consumption Decrease (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(3) * 100);
// P. Skill MP Consumption Decrease (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(1) * 100);
// M. Skill MP Consumption Decrease (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(2) * 100);
// Song/ Dance MP Consumption Decrease (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(3) * 100);
// XXX Anomalies Section
// Buff Cancel Resistance Bonus (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.RESIST_DISPEL_BUFF) * 100);
// Debuff/ Anomaly Resistance Bonus (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ABNORMAL_RESIST_MAGICAL) * 100);
// Paralysis Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.PARALYZE) * 100);
// Shock Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SHOCK) * 100);
// Knockback Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.KNOCKBACK) * 100);
// Sleep Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SLEEP) * 100);
// Imprisonment Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.IMPRISON) * 100);
// Pull Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.PULL) * 100);
// Fear Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.FEAR) * 100);
// Silence Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SILENCE) * 100);
// Hold Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.HOLD) * 100);
// Suppression Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SUPPRESSION) * 100);
// Infection Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.INFECTION) * 100);
// Paralysis Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.PARALYZE) * 100);
// Shock Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SHOCK) * 100);
// Knockback Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.KNOCKBACK) * 100);
// Sleep Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SLEEP) * 100);
// Imprisonment Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.IMPRISON) * 100);
// Pull Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.PULL) * 100);
// Fear Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.FEAR) * 100);
// Silence Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SLEEP) * 100);
// Hold Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.HOLD) * 100);
// Suppresion Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SUPPRESSION) * 100);
// Infection Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.INFECTION) * 100);
return true;
}
}

View File

@ -337,6 +337,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExUserBoostStat;
import org.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
import org.l2jmobius.gameserver.network.serverpackets.ExUserInfoCubic;
import org.l2jmobius.gameserver.network.serverpackets.ExUserInfoInvenWeight;
import org.l2jmobius.gameserver.network.serverpackets.ExUserViewInfoParameter;
import org.l2jmobius.gameserver.network.serverpackets.ExVitalExInfo;
import org.l2jmobius.gameserver.network.serverpackets.ExVitalityEffectInfo;
import org.l2jmobius.gameserver.network.serverpackets.GetOnVehicle;
@ -4266,6 +4267,7 @@ public class Player extends Playable
{
// Send user info to the current player
sendPacket(new UserInfo(this));
sendPacket(new ExUserViewInfoParameter(this));
// Broadcast char info to known players
broadcastCharInfo();

View File

@ -0,0 +1,805 @@
/*
* This file is part of the L2J Mobius project.
*
* This program 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.
*
* This program 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 org.l2jmobius.gameserver.network.serverpackets;
import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.enums.ItemGrade;
import org.l2jmobius.gameserver.enums.ShotType;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.item.type.WeaponType;
import org.l2jmobius.gameserver.model.stats.Stat;
import org.l2jmobius.gameserver.model.stats.TraitType;
import org.l2jmobius.gameserver.network.OutgoingPackets;
/**
* @author Mobius
*/
public class ExUserViewInfoParameter implements IClientOutgoingPacket
{
private final Player _player;
public ExUserViewInfoParameter(Player player)
{
_player = player;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_USER_VIEW_INFO_PARAMETER.writeId(packet);
int index = 0;
// Number of parameters.
packet.writeD(185);
// XXX Attack Section
// P. Atk. (%)
packet.writeH(index++);
packet.writeD((_player.getPAtk() / Config.MAX_PATK) * 100);
// P. Atk. (num.)
packet.writeH(index++);
packet.writeD(_player.getPAtk());
// M. Atk. (%)
packet.writeH(index++);
packet.writeD((_player.getMAtk() / Config.MAX_MATK) * 100);
// M. Atk. (num)
packet.writeH(index++);
packet.writeD(_player.getMAtk());
// Soulshot Damage - Activation
packet.writeH(index++);
packet.writeD((_player.isChargedShot(ShotType.BLESSED_SOULSHOTS) || _player.isChargedShot(ShotType.SOULSHOTS)) ? (10000 + (_player.getActiveRubyJewel() != null ? (int) _player.getActiveRubyJewel().getBonus() * 1000 : 0)) : 0);
// Spiritshot Damage - Activation
packet.writeH(index++);
packet.writeD((_player.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) || _player.isChargedShot(ShotType.SPIRITSHOTS)) ? (10000 + (_player.getActiveShappireJewel() != null ? (int) _player.getActiveShappireJewel().getBonus() * 1000 : 0)) : 0);
// Soulshot Damage - Enchanted Weapons
packet.writeH(index++);
packet.writeD((((_player.getActiveWeaponInstance() != null) && _player.getActiveWeaponInstance().isEnchanted()) ? (int) (_player.getActiveWeaponInstance().getEnchantLevel() * (_player.getActiveWeaponItem().getItemGrade() == ItemGrade.S ? 1.6 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.A ? 1.4 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.B ? 0.7 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.C) ? 0.4 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.D) ? 0.4 : 0) * 100) : 0));
// Spiritshot Damage - Enchanted Weapons
packet.writeH(index++);
packet.writeD((((_player.getActiveWeaponInstance() != null) && _player.getActiveWeaponInstance().isEnchanted()) ? (int) (_player.getActiveWeaponInstance().getEnchantLevel() * (_player.getActiveWeaponItem().getItemGrade() == ItemGrade.S ? 1.6 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.A ? 1.4 : _player.getActiveWeaponItem().getItemGrade() == ItemGrade.B ? 0.7 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.C) ? 0.4 : _player.getActiveWeaponItem().getItemGrade().equals(ItemGrade.D) ? 0.4 : 0) * 100) : 0));
// Soulshot Damage - Misc.
packet.writeH(index++);
packet.writeD(_player.getActiveRubyJewel() != null ? (int) _player.getActiveRubyJewel().getBonus() * 1000 : 0);
// Spiritshot Damage - Misc.
packet.writeH(index++);
packet.writeD(_player.getActiveShappireJewel() != null ? (int) _player.getActiveShappireJewel().getBonus() * 1000 : 0);
// Basic PvP Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_PHYSICAL_ATTACK_DAMAGE) * 100);
// P. Skill Damage in PvP
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_PHYSICAL_SKILL_DAMAGE) * 100);
// M. Skill Damage in PvP
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_MAGICAL_SKILL_DAMAGE) * 100);
// Inflicted PvP Damage
packet.writeH(index++);
packet.writeD(0);
// PvP Damage Decrease Ignore
packet.writeH(index++);
packet.writeD(0);
// Basic PvE Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_PHYSICAL_ATTACK_DAMAGE) * 100);
// P. Skill Damage in PvE
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_PHYSICAL_SKILL_DAMAGE) * 100);
// M. Skill Damage in PvE
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_MAGICAL_SKILL_DAMAGE) * 100);
// PvE Damage
packet.writeH(index++);
packet.writeD(0);
// PvE Damage Decrease Ignore
packet.writeH(index++);
packet.writeD(0);
// Basic Power
packet.writeH(index++);
packet.writeD(0);
// P. Skill Power
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PHYSICAL_SKILL_POWER) * 100);
// M. Skill Power
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.MAGICAL_SKILL_POWER) * 100);
// AoE Skill Damage
packet.writeH(index++);
packet.writeD(0);
// Damage Bonus - Sword
packet.writeH(index++);
packet.writeD(((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.SWORD)) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Ancient Sword
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.ANCIENTSWORD) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Dagger
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.DAGGER) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Rapier
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.RAPIER) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Blunt Weapon
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && ((_player.getActiveWeaponInstance().getItemType() == WeaponType.ETC) || (_player.getActiveWeaponInstance().getItemType() == WeaponType.BLUNT) || (_player.getActiveWeaponInstance().getItemType() == WeaponType.DUALBLUNT)) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Spear
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.POLE) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Fists
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && ((_player.getActiveWeaponInstance().getItemType() == WeaponType.FIST) || (_player.getActiveWeaponInstance().getItemType() == WeaponType.DUALFIST)) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Dual Swords
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.DUAL) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Bow
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && ((_player.getActiveWeaponInstance().getItemType() == WeaponType.BOW) || (_player.getActiveWeaponInstance().getItemType() == WeaponType.CROSSBOW) || (_player.getActiveWeaponInstance().getItemType() == WeaponType.TWOHANDCROSSBOW)) ? _player.getStat().getWeaponBonusPAtk() : 0);
// Damage Bonus - Firearms
packet.writeH(index++);
packet.writeD((_player.getActiveWeaponInstance() != null) && (_player.getActiveWeaponInstance().getItemType() == WeaponType.PISTOLS) ? _player.getStat().getWeaponBonusPAtk() : 0);
// XXX Defense Section
// P. Def. (%)
packet.writeH(index++);
packet.writeD((_player.getTemplate().getBasePDef() / _player.getPDef()) * 100);
// P. Def. (num.)
packet.writeH(index++);
packet.writeD(_player.getPDef());
// M. Def. (%)
packet.writeH(index++);
packet.writeD((_player.getTemplate().getBaseMDef() / _player.getMDef()) * 100);
// M. Def. (num.)
packet.writeH(index++);
packet.writeD(_player.getMDef());
// Soulshot Damage Resistance
packet.writeH(index++);
packet.writeD(0);
// Spiritshot Damage Resistance
packet.writeH(index++);
packet.writeD(0);
// Received basic PvP Damage
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Damage in PvP
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Damage in PvP
packet.writeH(index++);
packet.writeD(0);
// Received PvP Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVP_DAMAGE_TAKEN));
// PvP Damage Decrease
packet.writeH(index++);
packet.writeD(0);
// Received basic PvE Damage
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Damage in PvE
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Damage in PvE
packet.writeH(index++);
packet.writeD(0);
// Received PvE Damage
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.PVE_DAMAGE_TAKEN));
// PvE Damage Decrease
packet.writeH(index++);
packet.writeD(0);
// Received basic damage power
packet.writeH(index++);
packet.writeD(0);
// P. Skill Power when hit
packet.writeH(index++);
packet.writeD(0);
// M. Skill Power when hit
packet.writeH(index++);
packet.writeD(0);
// Received AoE Skill Damage
packet.writeH(index++);
packet.writeD(0);
// Damage Resistance Bonus - Sword
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SWORD) * 100);
// Damage Resistance Bonus - Ancient Sword
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.ANCIENTSWORD) * 100);
// Damage Resistance Bonus - Dagger
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.DAGGER) * 100);
// Damage Resistance Bonus - Rapier
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.RAPIER) * 100);
// Damage Resistance Bonus - Blunt Weapon
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.BLUNT) * 100);
// Damage Resistance Bonus - Spear
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.POLE) * 100);
// Damage Resistance Bonus - Fists
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.FIST) * 100);
// Damage Resistance Bonus - Dual Swords
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.DUAL) * 100);
// Damage Resistance Bonus - Bow
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.BOW) * 100);
// Damage Resistance Bonus - Firearms
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.PISTOLS) * 100);
// Shield Defense (%)
packet.writeH(index++);
// packet.writeD((_player.getStat().getShldDef() - _player.getShldDef()) / _player.getShldDef());
packet.writeD(_player.getStat().getShldDef());
// Shield Defence (num.)
packet.writeH(index++);
packet.writeD(_player.getShldDef());
// Shield Defence Rate
packet.writeH(index++);
packet.writeD(_player.getStat().getShldDef());
// M. Damage Resistance (%)
packet.writeH(index++);
packet.writeD(0);
// M. Damage Resistance (num.)
packet.writeH(index++);
packet.writeD(0);
// M. Damage Reflection (%)
packet.writeH(index++);
packet.writeD(0);
// M. Damage Reflection Resistance
packet.writeH(index++);
packet.writeD(0);
// Received Fixed Damage (%)
packet.writeH(index++);
packet.writeD(0);
// Casting Interruption Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Casting Interruption Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Accuracy Section
// P. Accuracy (%)
packet.writeH(index++);
packet.writeD(0);
// P. Accuracy (num.)
packet.writeH(index++);
packet.writeD(_player.getAccuracy());
// M. Accuracy (%)
packet.writeH(index++);
packet.writeD(0);
// M. Accuracy (num.)
packet.writeH(index++);
packet.writeD(_player.getMagicAccuracy());
// Vital Point Attack Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Vital Point Attack Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Evasion Section
// P. Evasion (%)
packet.writeH(index++);
packet.writeD(((_player.getEvasionRate() * 100) / Config.MAX_EVASION));
// P. Evasion (num.)
packet.writeH(index++);
packet.writeD(_player.getEvasionRate());
// M. Evasion (%)
packet.writeH(index++);
packet.writeD(((_player.getMagicEvasionRate() * 100) / Config.MAX_EVASION));
// M. Evasion (num.)
packet.writeH(index++);
packet.writeD(_player.getMagicEvasionRate());
// Received Vital Point Attack Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Received Vital Point Attack Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// P. Skill Evasion (%)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Evasion (%)
packet.writeH(index++);
packet.writeD(0);
// XXX Speed Section
// Atk. Spd. (%)
packet.writeH(index++);
packet.writeD(((_player.getPAtkSpd() * 100) / Config.MAX_PATK_SPEED));
// Atk. Spd. (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getPAtkSpd());
// Casting Spd. (%)
packet.writeH(index++);
packet.writeD((_player.getMAtkSpd() * 100) / Config.MAX_MATK_SPEED);
// Casting Spd. (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getMAtkSpd());
// Speed (%)
packet.writeH(index++);
packet.writeD((int) ((_player.getMoveSpeed() * 100) / Config.MAX_RUN_SPEED));
// Speed (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMoveSpeed());
// XXX Critical Rate Section
// Basic Critical Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getCriticalHit());
// Basic Critical Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getCriticalHit());
// P. Skill Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// P. Skill Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// Received basic Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Received basic Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Critical Rate (%)
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Critical Rate (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Critical Damage Section
// Basic Critical Damage (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.CRITICAL_DAMAGE) * 100);
// Basic Critical Damage (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getCriticalDmg(1) * 100);
// P. Skill Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// P. Skill Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// M. Skill Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// Received Basic Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// Received Basic Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// Received P. Skill Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Critical Damage (%)
packet.writeH(index++);
packet.writeD(0);
// Received M. Skill Critical Damage (num.)
packet.writeH(index++);
packet.writeD(0);
// XXX Recovery Section
// HP ReCovery Potions' Effect (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_HP) * 100);
// HP Recovery Potions' Effect (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_HP) * 100);
// MP Recovery Potions' Effect (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_MP) * 100);
// MP Recovery Potions' Effect (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ADDITIONAL_POTION_MP) * 100);
// HP Recovery Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getHpRegen());
// HP Recovery Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getHpRegen());
// HP Recovery Rate while standing (%)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while standing (num.)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while sitting (%)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while sitting (num.)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while walking (%)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while walking (num.)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while running (%)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getHpRegen() : 0);
// HP Recovery Rate while running (num.)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getHpRegen() : 0);
// MP Recovery Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getMpRegen());
// MP Recovery Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getMpRegen());
// MP Recovery Rate while standing (%)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while standing (num.)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while sitting (%)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while sitting (num.)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while walking (%)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while walking (num.)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while running (%)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getMpRegen() : 0);
// MP Recovery Rate while running (num.)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getMpRegen() : 0);
// CP Recovery Rate (%)
packet.writeH(index++);
packet.writeD(_player.getStat().getCpRegen());
// CP Recovery Rate (num.)
packet.writeH(index++);
packet.writeD(_player.getStat().getCpRegen());
// CP Recovery Rate while standing (%)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while standing (num.)
packet.writeH(index++);
packet.writeD(!_player.isMoving() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while sitting (%)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while sitting (num.)
packet.writeH(index++);
packet.writeD(_player.isSitting() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while walking (%)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while walking (num.)
packet.writeH(index++);
packet.writeD((_player.isMoving() && !_player.isRunning()) ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while running (%)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getCpRegen() : 0);
// CP Recovery Rate while running (num.)
packet.writeH(index++);
packet.writeD(_player.isRunning() ? _player.getStat().getCpRegen() : 0);
// XXX Skill Cooldown Section
// P. Skill Cooldown (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getReuseTypeValue(1) * 100);
// M. Skill Cooldown (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getReuseTypeValue(2) * 100);
// Song/ Dance Cooldown (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getReuseTypeValue(3) * 100);
// XXX MP Consumption Section
// P. Skill MP Consumption Decrease (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(1) * 100);
// M. Skill MP Consumption Decrease (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(2) * 100);
// Song/ Dance MP Consumption Decrease (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(3) * 100);
// P. Skill MP Consumption Decrease (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(1) * 100);
// M. Skill MP Consumption Decrease (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(2) * 100);
// Song/ Dance MP Consumption Decrease (num.)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getMpConsumeTypeValue(3) * 100);
// XXX Anomalies Section
// Buff Cancel Resistance Bonus (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.RESIST_DISPEL_BUFF) * 100);
// Debuff/ Anomaly Resistance Bonus (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getValue(Stat.ABNORMAL_RESIST_MAGICAL) * 100);
// Paralysis Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.PARALYZE) * 100);
// Shock Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SHOCK) * 100);
// Knockback Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.KNOCKBACK) * 100);
// Sleep Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SLEEP) * 100);
// Imprisonment Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.IMPRISON) * 100);
// Pull Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.PULL) * 100);
// Fear Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.FEAR) * 100);
// Silence Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SILENCE) * 100);
// Hold Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.HOLD) * 100);
// Suppression Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.SUPPRESSION) * 100);
// Infection Atk. Rate (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getAttackTrait(TraitType.INFECTION) * 100);
// Paralysis Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.PARALYZE) * 100);
// Shock Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SHOCK) * 100);
// Knockback Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.KNOCKBACK) * 100);
// Sleep Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SLEEP) * 100);
// Imprisonment Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.IMPRISON) * 100);
// Pull Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.PULL) * 100);
// Fear Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.FEAR) * 100);
// Silence Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SLEEP) * 100);
// Hold Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.HOLD) * 100);
// Suppresion Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.SUPPRESSION) * 100);
// Infection Resistance (%)
packet.writeH(index++);
packet.writeD((int) _player.getStat().getDefenceTrait(TraitType.INFECTION) * 100);
return true;
}
}