123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 |
- /*
- * 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 com.l2jserver.gameserver.network.serverpackets;
- import com.l2jserver.Config;
- import com.l2jserver.gameserver.datatables.ClanTable;
- import com.l2jserver.gameserver.instancemanager.TownManager;
- import com.l2jserver.gameserver.model.L2Clan;
- import com.l2jserver.gameserver.model.actor.L2Character;
- import com.l2jserver.gameserver.model.actor.L2Npc;
- import com.l2jserver.gameserver.model.actor.L2Summon;
- import com.l2jserver.gameserver.model.actor.L2Trap;
- import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.skills.AbnormalEffect;
- /**
- * This class ...
- *
- * @version $Revision: 1.7.2.4.2.9 $ $Date: 2005/04/11 10:05:54 $
- */
- public abstract class AbstractNpcInfo extends L2GameServerPacket
- {
- // ddddddddddddddddddffffdddcccccSSddd dddddc
- // ddddddddddddddddddffffdddcccccSSddd dddddccffd
-
- private static final String _S__22_NPCINFO = "[S] 0c NpcInfo";
- protected int _x, _y, _z, _heading;
- protected int _idTemplate;
- protected boolean _isAttackable, _isSummoned;
- protected int _mAtkSpd, _pAtkSpd;
-
- /**
- * Run speed, swimming run speed and flying run speed
- */
- protected int _runSpd;
-
- /**
- * Walking speed, swimming walking speed and flying walking speed
- */
- protected int _walkSpd;
-
- protected int _rhand, _lhand, _chest, _enchantEffect;
- protected double _collisionHeight, _collisionRadius;
- protected String _name = "";
- protected String _title = "";
-
- public AbstractNpcInfo(L2Character cha)
- {
- _isSummoned = cha.isShowSummonAnimation();
- _x = cha.getX();
- _y = cha.getY();
- _z = cha.getZ();
- _heading = cha.getHeading();
- _mAtkSpd = cha.getMAtkSpd();
- _pAtkSpd = cha.getPAtkSpd();
- _runSpd = cha.getTemplate().baseRunSpd;
- _walkSpd = cha.getTemplate().baseWalkSpd;
- }
-
- /* (non-Javadoc)
- * @see com.l2jserver.gameserver.serverpackets.ServerBasePacket#getType()
- */
- @Override
- public String getType()
- {
- return _S__22_NPCINFO;
- }
-
- /**
- * Packet for Npcs
- */
- public static class NpcInfo extends AbstractNpcInfo
- {
- private L2Npc _npc;
- private int _clanCrest = 0;
- private int _allyCrest = 0;
- private int _allyId = 0;
- private int _clanId = 0;
- private int _displayEffect = 0;
-
- public NpcInfo(L2Npc cha, L2Character attacker)
- {
- super(cha);
- _npc = cha;
- _idTemplate = cha.getTemplate().idTemplate; // On every subclass
- _rhand = cha.getRightHandItem(); // On every subclass
- _lhand = cha.getLeftHandItem(); // On every subclass
- _enchantEffect = cha.getEnchantEffect();
- _collisionHeight = cha.getCollisionHeight();// On every subclass
- _collisionRadius = cha.getCollisionRadius();// On every subclass
- _isAttackable = cha.isAutoAttackable(attacker);
- if (cha.getTemplate().serverSideName)
- _name = cha.getName();// On every subclass
-
- if (Config.L2JMOD_CHAMPION_ENABLE && cha.isChampion())
- _title = (Config.L2JMOD_CHAMP_TITLE); // On every subclass
- else if (cha.getTemplate().serverSideTitle)
- _title = cha.getTemplate().title; // On every subclass
- else
- _title = cha.getTitle(); // On every subclass
-
- if (Config.SHOW_NPC_LVL && _npc instanceof L2MonsterInstance)
- {
- String t = "Lv " + cha.getLevel() + (cha.getAggroRange() > 0 ? "*" : "");
- if (_title != null)
- t += " " + _title;
-
- _title = t;
- }
-
- // npc crest of owning clan/ally of castle
- if (cha instanceof L2NpcInstance && cha.isInsideZone(L2Character.ZONE_TOWN) && (Config.SHOW_CREST_WITHOUT_QUEST || cha.getCastle().getShowNpcCrest()) && cha.getCastle().getOwnerId() != 0)
- {
- int townId = TownManager.getTown(_x, _y, _z).getTownId();
- if (townId != 33 && townId != 22)
- {
- L2Clan clan = ClanTable.getInstance().getClan(cha.getCastle().getOwnerId());
- _clanCrest = clan.getCrestId();
- _clanId = clan.getClanId();
- _allyCrest = clan.getAllyCrestId();
- _allyId = clan.getAllyId();
- }
- }
-
- _displayEffect = cha.getDisplayEffect();
- }
-
- @Override
- protected void writeImpl()
- {
- writeC(0x0c);
- writeD(_npc.getObjectId());
- writeD(_idTemplate + 1000000); // npctype id
- writeD(_isAttackable ? 1 : 0);
- writeD(_x);
- writeD(_y);
- writeD(_z);
- writeD(_heading);
- writeD(0x00);
- writeD(_mAtkSpd);
- writeD(_pAtkSpd);
- writeD(_runSpd);
- writeD(_walkSpd);
- writeD(_runSpd); // swim run speed
- writeD(_walkSpd); // swim walk speed
- writeD(_runSpd); // swim run speed
- writeD(_walkSpd); // swim walk speed
- writeD(_runSpd); // fly run speed
- writeD(_walkSpd); // fly run speed
- writeF(_npc.getMovementSpeedMultiplier());
- writeF(_npc.getAttackSpeedMultiplier());
- writeF(_collisionRadius);
- writeF(_collisionHeight);
- writeD(_rhand); // right hand weapon
- writeD(_chest);
- writeD(_lhand); // left hand weapon
- writeC(1); // name above char 1=true ... ??
- writeC(_npc.isRunning() ? 1 : 0);
- writeC(_npc.isInCombat() ? 1 : 0);
- writeC(_npc.isAlikeDead() ? 1 : 0);
- writeC(_isSummoned ? 2 : 0); // 0=teleported 1=default 2=summoned
- writeS(_name);
- writeS(_title);
- writeD(0x00); // Title color 0=client default
- writeD(0x00); //pvp flag
- writeD(0x00); // karma
-
- writeD(_npc.getAbnormalEffect()); // C2
- writeD(_clanId); //clan id
- writeD(_clanCrest); //crest id
- writeD(_allyId); // ally id
- writeD(_allyCrest); // all crest
- writeC(_npc.isFlying() ? 2 : 0); // C2
- writeC(0x00); // title color 0=client
-
- writeF(_collisionRadius);
- writeF(_collisionHeight);
- writeD(_enchantEffect); // C4
- writeD(_npc.isFlying() ? 1 : 0); // C6
- writeD(0x00);
- writeD(_npc.getColorEffect());// CT1.5 Pet form and skills, Color effect
- writeC(_npc.isHideName() ? 0x00 : 0x01);
- writeC(_npc.isHideName() ? 0x00 : 0x01);
- writeD(_npc.getSpecialEffect());
- writeD(_displayEffect);
- }
- }
-
- public static class TrapInfo extends AbstractNpcInfo
- {
- private L2Trap _trap;
-
- public TrapInfo(L2Trap cha, L2Character attacker)
- {
- super(cha);
-
- _trap = cha;
- _idTemplate = cha.getTemplate().idTemplate;
- _isAttackable = cha.isAutoAttackable(attacker);
- _rhand = 0;
- _lhand = 0;
- _collisionHeight = _trap.getTemplate().fCollisionHeight;
- _collisionRadius = _trap.getTemplate().fCollisionRadius;
- if (cha.getTemplate().serverSideName)
- _name = cha.getName();
- _title = cha.getOwner() != null ? cha.getOwner().getName() : "";
- _runSpd = _trap.getRunSpeed();
- _walkSpd = _trap.getWalkSpeed();
- }
-
- @Override
- protected void writeImpl()
- {
- writeC(0x0c);
- writeD(_trap.getObjectId());
- writeD(_idTemplate + 1000000); // npctype id
- writeD(_isAttackable ? 1 : 0);
- writeD(_x);
- writeD(_y);
- writeD(_z);
- writeD(_heading);
- writeD(0x00);
- writeD(_mAtkSpd);
- writeD(_pAtkSpd);
- writeD(_runSpd);
- writeD(_walkSpd);
- writeD(_runSpd); // swim run speed
- writeD(_walkSpd); // swim walk speed
- writeD(_runSpd); // fly run speed
- writeD(_walkSpd); // fly walk speed
- writeD(_runSpd); // fly run speed
- writeD(_walkSpd); // fly walk speed
- writeF(_trap.getMovementSpeedMultiplier());
- writeF(_trap.getAttackSpeedMultiplier());
- writeF(_collisionRadius);
- writeF(_collisionHeight);
- writeD(_rhand); // right hand weapon
- writeD(_chest);
- writeD(_lhand); // left hand weapon
- writeC(1); // name above char 1=true ... ??
- writeC(1);
- writeC(_trap.isInCombat() ? 1 : 0);
- writeC(_trap.isAlikeDead() ? 1 : 0);
- writeC(_isSummoned ? 2 : 0); // 0=teleported 1=default 2=summoned
- writeS(_name);
- writeS(_title);
- writeD(0x00); // title color 0 = client default
-
- writeD(_trap.getPvpFlag());
- writeD(_trap.getKarma());
-
- writeD(_trap.getAbnormalEffect()); // C2
- writeD(0x00); //clan id
- writeD(0x00); //crest id
- writeD(0000); // C2
- writeD(0000); // C2
- writeC(0000); // C2
-
- writeC(0x00); // Title color 0=client default
-
- writeF(_collisionRadius);
- writeF(_collisionHeight);
- writeD(0x00); // C4
- writeD(0x00); // C6
- writeD(0x00);
- writeD(0);//CT1.5 Pet form and skills
- writeC(0x01);
- writeC(0x01);
- writeD(0x00);
- }
- }
-
- /**
- * Packet for summons
- */
- public static class SummonInfo extends AbstractNpcInfo
- {
- private L2Summon _summon;
- private int _form = 0;
- private int _val = 0;
-
- public SummonInfo(L2Summon cha, L2Character attacker, int val)
- {
- super(cha);
- _summon = cha;
- _val = val;
- if (_summon.isShowSummonAnimation())
- _val = 2; //override for spawn
-
- int npcId = cha.getTemplate().npcId;
-
- if (npcId == 16041 || npcId == 16042)
- {
- if (cha.getLevel() > 84)
- _form = 3;
- else if (cha.getLevel() > 79)
- _form = 2;
- else if (cha.getLevel() > 74)
- _form = 1;
- }
- else if (npcId == 16025 || npcId == 16037)
- {
- if (cha.getLevel() > 69)
- _form = 3;
- else if (cha.getLevel() > 64)
- _form = 2;
- else if (cha.getLevel() > 59)
- _form = 1;
- }
-
- // fields not set on AbstractNpcInfo
- _isAttackable = cha.isAutoAttackable(attacker);
- _rhand = cha.getWeapon();
- _lhand = 0;
- _chest = cha.getArmor();
- _enchantEffect = cha.getTemplate().enchantEffect;
- _name = cha.getName();
- _title = cha.getOwner() != null ? ((!cha.getOwner().isOnline()) ? "" : cha.getOwner().getName()) : ""; // when owner online, summon will show in title owner name
- _idTemplate = cha.getTemplate().idTemplate;
- _collisionHeight = cha.getTemplate().fCollisionHeight;
- _collisionRadius = cha.getTemplate().fCollisionRadius;
- _invisible = cha.getOwner() != null ? cha.getOwner().getAppearance().getInvisible() : false;
- }
-
- @Override
- protected void writeImpl()
- {
- boolean gmSeeInvis = false;
- if (_invisible)
- {
- L2PcInstance tmp = getClient().getActiveChar();
- if (tmp != null && tmp.isGM())
- gmSeeInvis = true;
- }
-
- writeC(0x0c);
- writeD(_summon.getObjectId());
- writeD(_idTemplate + 1000000); // npctype id
- writeD(_isAttackable ? 1 : 0);
- writeD(_x);
- writeD(_y);
- writeD(_z);
- writeD(_heading);
- writeD(0x00);
- writeD(_mAtkSpd);
- writeD(_pAtkSpd);
- writeD(_runSpd);
- writeD(_walkSpd);
- writeD(_runSpd); // swim run speed
- writeD(_walkSpd); // swim walk speed
- writeD(_runSpd); // fly run speed
- writeD(_walkSpd); // fly walk speed
- writeD(_runSpd); // fly run speed
- writeD(_walkSpd); // fly walk speed
- writeF(_summon.getMovementSpeedMultiplier());
- writeF(_summon.getAttackSpeedMultiplier());
- writeF(_collisionRadius);
- writeF(_collisionHeight);
- writeD(_rhand); // right hand weapon
- writeD(_chest);
- writeD(_lhand); // left hand weapon
- writeC(1); // name above char 1=true ... ??
- writeC(1); // always running 1=running 0=walking
- writeC(_summon.isInCombat() ? 1 : 0);
- writeC(_summon.isAlikeDead() ? 1 : 0);
- writeC(_val); // 0=teleported 1=default 2=summoned
- writeS(_name);
- writeS(_title);
- writeD(0x01);// Title color 0=client default
-
- writeD(_summon.getPvpFlag());
- writeD(_summon.getKarma());
-
- writeD(gmSeeInvis ? _summon.getAbnormalEffect() | AbnormalEffect.STEALTH.getMask() : _summon.getAbnormalEffect());
-
- writeD(0x00); //clan id
- writeD(0x00); //crest id
- writeD(0000); // C2
- writeD(0000); // C2
- writeC(0000); // C2
-
- writeC(_summon.getTeam());// Title color 0=client default
-
- writeF(_collisionRadius);
- writeF(_collisionHeight);
- writeD(_enchantEffect); // C4
- writeD(0x00); // C6
- writeD(0x00);
- writeD(_form); //CT1.5 Pet form and skills
- writeC(0x01);
- writeC(0x01);
- writeD(_summon.getSpecialEffect());
- }
- }
- }
|