123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- /*
- * 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 java.util.ArrayList;
- import com.l2jserver.gameserver.model.L2Effect;
- import com.l2jserver.gameserver.model.L2ItemInstance;
- import com.l2jserver.gameserver.model.L2Skill;
- 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.instance.L2PcInstance;
- import com.l2jserver.gameserver.network.SystemMessageId;
- import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
- import com.l2jserver.gameserver.templates.item.L2Item;
- public final class SystemMessage extends L2GameServerPacket
- {
- // d d (d S/d d/d dd)
- // |--------------> 0 - String 1-number 2-textref npcname (1000000-1002655) 3-textref itemname 4-textref skills 5-??
- private static final int TYPE_ZONE_NAME = 7;
- private static final int TYPE_ITEM_NUMBER = 6;
- private static final int TYPE_FORTRESS = 5; // maybe not only for fortress, rename if needed
- private static final int TYPE_SKILL_NAME = 4;
- private static final int TYPE_ITEM_NAME = 3;
- private static final int TYPE_NPC_NAME = 2;
- private static final int TYPE_NUMBER = 1;
- private static final int TYPE_TEXT = 0;
- private static final String _S__7A_SYSTEMMESSAGE = "[S] 62 SystemMessage";
- private int _messageId;
-
- private final ArrayList<SysMsgData> _info = new ArrayList<SysMsgData>();
- //private Vector<Integer> _types = new Vector<Integer>();
- //private Vector<Object> _values = new Vector<Object>();
- private int _skillLvL = 1;
- protected class SysMsgData
- {
- protected final int type;
- protected final Object value;
-
- protected SysMsgData(int t, Object val)
- {
- type = t;
- value = val;
- }
- }
-
- public SystemMessage(SystemMessageId messageId)
- {
- _messageId = messageId.getId();
- }
- /**
- * Use SystemMessage(SystemMessageId messageId) where possible instead
- */
- public SystemMessage(int messageId)
- {
- _messageId = messageId;
- }
- public static SystemMessage sendString(String msg)
- {
- SystemMessage sm = new SystemMessage(SystemMessageId.S1);
- sm.addString(msg);
- return sm;
- }
- public SystemMessage addString(String text)
- {
- _info.add(new SysMsgData(TYPE_TEXT, text));
- return this;
- }
- public SystemMessage addFortId(int number)
- {
- _info.add(new SysMsgData(TYPE_FORTRESS, number));
- return this;
- }
- public SystemMessage addNumber(int number)
- {
- _info.add(new SysMsgData(TYPE_NUMBER, number));
- return this;
- }
- public SystemMessage addItemNumber(long number)
- {
- _info.add(new SysMsgData(TYPE_ITEM_NUMBER, number));
- return this;
- }
-
- public SystemMessage addCharName(L2Character cha)
- {
- if (cha instanceof L2Npc)
- {
- if (((L2Npc)cha).getTemplate().serverSideName)
- return addString(((L2Npc)cha).getTemplate().name);
- else
- return addNpcName((L2Npc)cha);
- }
- if (cha instanceof L2PcInstance)
- return addPcName((L2PcInstance)cha);
- if (cha instanceof L2Summon)
- {
- if (((L2Summon)cha).getTemplate().serverSideName)
- return addString(((L2Summon)cha).getTemplate().name);
- else
- return addNpcName((L2Summon)cha);
- }
- return addString(cha.getName());
- }
- public SystemMessage addPcName(L2PcInstance pc)
- {
- return addString(pc.getAppearance().getVisibleName());
- }
- public SystemMessage addNpcName(L2Npc npc)
- {
- return addNpcName(npc.getTemplate());
- }
- public SystemMessage addNpcName(L2Summon npc)
- {
- return addNpcName(npc.getNpcId());
- }
- public SystemMessage addNpcName(L2NpcTemplate tpl)
- {
- if (tpl.isCustom())
- return addString(tpl.name);
- return addNpcName(tpl.npcId);
- }
- public SystemMessage addNpcName(int id)
- {
- _info.add(new SysMsgData(TYPE_NPC_NAME, 1000000+id));
- return this;
- }
- public SystemMessage addItemName(L2ItemInstance item)
- {
- return addItemName(item.getItem().getItemId());
- }
- public SystemMessage addItemName(L2Item item)
- {
- // TODO: template id for items
- return addItemName(item.getItemId());
- }
- public SystemMessage addItemName(int id)
- {
- _info.add(new SysMsgData(TYPE_ITEM_NAME, id));
- return this;
- }
- public SystemMessage addZoneName(int x, int y, int z)
- {
- int[] coord = {x, y, z};
- _info.add(new SysMsgData(TYPE_ZONE_NAME, coord));
- return this;
- }
- public SystemMessage addSkillName(L2Effect effect)
- {
- return addSkillName(effect.getSkill());
- }
- public SystemMessage addSkillName(L2Skill skill)
- {
- if (skill.getId() != skill.getDisplayId()) //custom skill - need nameId or smth like this.
- return addString(skill.getName());
- return addSkillName(skill.getId(), skill.getLevel());
- }
- public SystemMessage addSkillName(int id)
- {
- return addSkillName(id, 1);
- }
- public SystemMessage addSkillName(int id, int lvl)
- {
- _info.add(new SysMsgData(TYPE_SKILL_NAME, id));
- _skillLvL = lvl;
- return this;
- }
- @Override
- protected final void writeImpl()
- {
- writeC(0x62);
- writeD(_messageId);
- writeD(_info.size());
- for (SysMsgData data : _info)
- {
- int t = data.type;
- writeD(t);
- switch (t)
- {
- case TYPE_TEXT:
- writeS((String)data.value);
- break;
- case TYPE_ITEM_NUMBER:
- writeQ((Long)data.value);
- break;
- case TYPE_ITEM_NAME:
- case TYPE_FORTRESS:
- case TYPE_NUMBER:
- case TYPE_NPC_NAME:
- writeD((Integer)data.value);
- break;
- case TYPE_SKILL_NAME:
- writeD((Integer)data.value); // Skill Id
- writeD(_skillLvL); // Skill lvl
- break;
- case TYPE_ZONE_NAME:
- int[] coords = (int[])data.value;
- writeD(coords[0]);
- writeD(coords[1]);
- writeD(coords[2]);
- break;
- }
- }
- }
- @Override
- public String getType()
- {
- return _S__7A_SYSTEMMESSAGE;
- }
- public int getMessageID()
- {
- return _messageId;
- }
- }
|