package packet_readers.lineage2.infos; import java.lang.reflect.Field; import java.util.*; import org.napile.primitive.sets.IntSet; import org.napile.primitive.sets.impl.HashIntSet; import packet_readers.lineage2.holders.NpcNameHolder; import packet_readers.lineage2.holders.SkillNameHolder; import com.jds.jn.network.packets.DecryptedPacket; /** * Author: VISTALL * Company: J Develop Station * Date: 17:58:15/05.06.2010 */ public class L2NpcInfo extends L2DialogObject { private final String _name; private final String _title; private final int _npcId; private final int _pAttackSpeed; private final int _mAttackSpeed; private final int _runSpd; private final int _walkSpd; private final double _collisionRadius; private final double _collisionHeight; private final int _hp; private final int _mp; private int _level = 1; private final int _rhand; private final int _armor; private final int _lhand; private final boolean _showName; private final Map<Integer, L2SkillInfo> _skills = new HashMap<Integer, L2SkillInfo>(); private final Set<L2Loc> _spawnLocInfo = new HashSet<L2Loc>(); private final Set<L2NpcSayInfo> _says = new HashSet<L2NpcSayInfo>(); private final Set<L2Loc> _moveLocs = new HashSet<L2Loc>(); private final IntSet _states = new HashIntSet(); public L2NpcInfo(DecryptedPacket p) { _npcId = p.getInt("npcId") - 1000000; _name = NpcNameHolder.getInstance().name(_npcId); _title = NpcNameHolder.getInstance().title(_npcId); _mAttackSpeed = p.getInt("mAttackSpeed"); _pAttackSpeed = p.getInt("pAttackSpeed"); _runSpd = p.getInt("run_spd"); _walkSpd = p.getInt("walk_spd"); _collisionRadius = p.getDouble("col_radius"); _collisionHeight = p.getDouble("col_height"); _rhand = p.getInt("rhand"); _armor = p.getInt("armor"); _lhand = p.getInt("lhand"); _hp = p.getInt("max_hp"); _mp = p.getInt("max_mp"); _showName = p.getInt("show_name") == 1; _spawnLocInfo.add(new L2Loc(p)); } public String toXML() { String xml = "\t<npc id=\"%npcId%\" name=\"%name%\" title=\"%title%\">\n" + "\t\t<set name=\"collision_radius\" value=\"%collisionRadius%\" />\n" + "\t\t<set name=\"collision_height\" value=\"%collisionHeight%\" />\n" + "\t\t<set name=\"level\" value=\"%level%\" />\n" + "\t\t<set name=\"type\" value=\"Npc\" />\n" + "\t\t<set name=\"ai_type\" value=\"CharacterAI\" />\n" + "\t\t<set name=\"baseAtkRange\" value=\"40\" />\n" + "\t\t<set name=\"baseAtkType\" value=\"SWORD\" />\n" + "\t\t<set name=\"baseHpMax\" value=\"%hp%\" />\n" + "\t\t<set name=\"baseMpMax\" value=\"%mp%\" />\n" + "\t\t<set name=\"baseHpReg\" value=\"7.5\" />\n" + "\t\t<set name=\"baseHpRate\" value=\"1\" />\n" + "\t\t<set name=\"baseMpReg\" value=\"2.7\" />\n" + "\t\t<set name=\"baseSTR\" value=\"40\" />\n" + "\t\t<set name=\"baseCON\" value=\"43\" />\n" + "\t\t<set name=\"baseDEX\" value=\"30\" />\n" + "\t\t<set name=\"baseINT\" value=\"21\" />\n" + "\t\t<set name=\"baseWIT\" value=\"20\" />\n" + "\t\t<set name=\"baseMEN\" value=\"10\" />\n" + "\t\t<set name=\"rewardExp\" value=\"0\" />\n" + "\t\t<set name=\"rewardSp\" value=\"0\" />\n" + "\t\t<set name=\"rewardRp\" value=\"0\" />\n" + "\t\t<set name=\"basePAtk\" value=\"500\" />\n" + "\t\t<set name=\"basePDef\" value=\"500\" />\n" + "\t\t<set name=\"baseMAtk\" value=\"500\" />\n" + "\t\t<set name=\"baseMDef\" value=\"500\" />\n" + "\t\t<set name=\"basePAtkSpd\" value=\"%pAttackSpeed%\" />\n" + "\t\t<set name=\"baseMAtkSpd\" value=\"%mAttackSpeed%\" />\n" + "\t\t<set name=\"aggroRange\" value=\"0\" />\n" + "\t\t<set name=\"baseWalkSpd\" value=\"%walkSpd%\" />\n" + "\t\t<set name=\"baseRunSpd\" value=\"%runSpd%\" />\n" + "\t\t<set name=\"baseShldDef\" value=\"0\" />\n" + "\t\t<set name=\"baseShldRate\" value=\"0\" />\n" + "\t\t<set name=\"baseCritRate\" value=\"40\" />\n" + "\t\t<set name=\"texture\" value=\"\" />\n"; if(_armor != 0 || _lhand != 0 || _rhand != 0) { xml += "\t\t<equip>\n"; if(_armor != 0) xml += "\t\t\t<armor item_id=\"%armor%\" />\n"; if(_lhand != 0) xml += "\t\t\t<lhand item_id=\"%lhand%\" />\n"; if(_rhand != 0) xml += "\t\t\t<rhand item_id=\"%rhand%\" />\n"; xml += "\t\t</equip>\n"; } if(_skills.size() != 0) { xml += "\t\t<skills>\n"; for(L2SkillInfo info : _skills.values()) xml += String.format("\t\t\t<skill id=\"%d\" level=\"%d\" /> <!--%s-->\n", info.getId(), info.getLevel(), SkillNameHolder.getInstance().name(info.getId(), info.getLevel())); xml += "\t\t</skills>\n"; } if(!_showName) { xml += "\t\t<ai_params>\n"; xml += "\t\t\t<set name=\"showName\" value=\"false\" />\n"; xml += "\t\t</ai_params>\n"; } xml += "\t</npc>\n"; for(Field d : L2NpcInfo.class.getDeclaredFields()) { String name = "%" + d.getName().replace("_", "") + "%"; if(xml.contains(name)) { try { xml = xml.replace(name, String.valueOf(d.get(this))); } catch (IllegalAccessException e) { e.printStackTrace(); } } } return xml; } public void setLevel(int level) { _level = level; } public boolean hasSkill(int f) { return _skills.containsKey(f); } public void addSkill(L2SkillInfo f) { _skills.put(f.getId(), f); } public int getNpcId() { return _npcId; } public Set<L2Loc> getSpawnLoc() { return _spawnLocInfo; } public Set<L2NpcSayInfo> getSays() { return _says; } public Set<L2Loc> getMoveLocs() { return _moveLocs; } public IntSet getStates() { return _states; } }