Search the Community

Showing results for tags 'NPC'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

  • Lineage II Server Packs [Java]
  • Lineage II Server Packs [PTS]
  • Lineage II Server Scripts
  • Lineage II Client Scripts
  • Lineage II Items & Chars
  • Website Templates

Categories

  • Articles

Forums

  • General Zone
    • Announcements and News
    • Newbies Introduce Urself
    • Maxcheaters Competitions & Events
    • Votes/Polls Area
    • Report Section
    • Downloads Section
  • Lineage II General Section
    • General Discussion [English]
    • Request Support [English]
  • Lineage II Hacks,Cheats and Bots
    • Hacks & Cheats [English]
    • Request Hacks & Cheats [English]
    • Botting [English]
    • Request Botting [English]
  • Lineage II Private Servers
    • LineZeus.GR - Η Επιστροφή!
    • Private Servers
    • [Previews] L2 Private Servers
    • Clans and Alliances
  • Lineage II Marketplace
    • Marketplace [Items & Chars]
    • Marketplace [L2Packs & Files]
    • Marketplace [Powerlvl & Support]
  • Lineage II OFF Server Development
    • Server Development Discussion [L2OFF]
    • Request Server Development Help [L2OFF]
    • Server Shares & Files [L2OFF]
  • Lineage II Java Server Development
    • Server Development Discussion [L2J]
    • Request Server Development Help [L2J]
    • Server Shares & Files [L2J]
    • Private Projects [L2J]
  • Lineage II Client Development
    • Client Development Discussion
  • MMO Games
    • League of Legends
    • World Of Warcraft Area
    • Other Multiplayer Games
  • General Section
    • General Marketplace
    • Consoles/Mobiles/PDA Gaming Zone
    • Webmasters Zone
    • Hacking/Coding Zone
  • Graphics/GFX Zone
    • Graphics/GFX General Discussion
    • Graphics/GFX Showcase
    • Graphics/GFX Resources/Tools
  • VIP/SVIP/Donators Zone
    • VIPs/Donators Discussion
    • VIPs Lineage II
    • VIPs [GFX] Zone
    • VIPs Download Area
  • MaxCheaters Corner
    • Tech/World News
    • Off-Topics
    • Spam Topics
  • Gaming Expiriance's Topics

Found 9 results

  1. Hi, I want to do an NPC for you, I hope that your NPC photos will be published here, adapted for interlude or HF5 I do it in my spare time. sorry for my English need more practice
  2. for the database radius 10 Height 50 http://uploads.ru/ArBoY.jpg Download
  3. Suitable for teleport NPS with sounds, with animation, with effects ... Who needs an NPC for HF5, write. LC Download
  4. 3 new monsters with effects for Interlude Download
  5. Καλησπέρα, Έχω ένα source, έκανα κάποιες βασικές αλλαγές στην Java, έκτισα και τώρα στο pack μου έχω βάλει αρκετά custom NPCs, έχω διάφορες αλλαγές στην SQL και πολλά ακόμα (στον gameserver, εκτός eclipse). Κάποια στιγμή πρέπει να γυρίσω στο Eclipse για να αλλάξω ακόμα κάποια πράγματα στην Java αλλά το καινούργιο build θα μου κάνει overwrite τις αλλαγές μου. Όποτε τι κάνουμε τώρα; Να περάσω της αλλαγές που έχω κάνει στο pack μέσα στο source ώστε να κάνω build και να είναι όλα έτοιμα ή να έχω backup όλα τα υπόλοιπα που έβαλα στο pack και ένα αρχείο .sql για τις αλλαγές ώστε κάθε φορά που θα κάνω build θα κάνω ένα copy-paste και καθάρισα; Ψάχνω την "φόρμουλα", τον θεωρητικά πιο σωστό τρόπο ώστε να κάνω την ζωή μου ευκολότερη. Υ.Γ. Είμαι στα πρώτα βήματα στον τομέα και μπορεί η λογική μου στο πως να το κάνω όλο αυτό να είναι εξ αρχής λάθος οπότε οποιαδήποτε συμβουλή, είμαι όλος "μάτια". Thanks, George
  6. Hi everyone, I've been exporting hellbound monsters from Freya client to Interlude client, textures, meshes, sounds, the entire pack. But there is one monster that I belieave it isn't as easy as everything else. Im talking about the SandStorm. SandStorm monster is a Skeleton Pikeman with a SandStorm on top of him, and I don't know how to put a Sandstorm on top of him. This is Skeleton Pikemon. This is the SandStorm. Can someone help me? I've been working with UnrealEd 3.0 (it lets me import and create meshes and animations and simply copy paste them in the Lineage2 folder) Thanks in advance.
  7. Hello guys, I want to share with you my buffer ( nothing special but i like ). The buffer is Tryskell on acis and i edited htmls and the instance too (Free rev). Added fighter/mage set (with configs) with buffs animation :not bad: And Manual buffs. Also, I am not 'pro' :dat: so... There may be some mistakes.. Download Changes: ### Eclipse Workspace Patch 1.0 #P aCis_gameserver Index: config/npcs.properties =================================================================== --- config/npcs.properties (revision 5) +++ config/npcs.properties (working copy) @@ -52,6 +52,12 @@ # The list of buffs, under a skillId,buffPrice,groupType format. BufferBuffs = 264,0,Songs;265,0,Songs;266,0,Songs;267,0,Songs;268,0,Songs;269,0,Songs;270,0,Songs;304,0,Songs;305,0,Songs;306,0,Songs;308,0,Songs;349,0,Songs;363,0,Songs;364,0,Songs;271,0,Dances;272,0,Dances;273,0,Dances;274,0,Dances;275,0,Dances;276,0,Dances;277,0,Dances;309,0,Dances;310,0,Dances;311,0,Dances;1002,0,Warcryer;1006,0,Warcryer;1007,0,Warcryer;1009,0,Warcryer;1308,0,Warcryer;1309,0,Warcryer;1310,0,Warcryer;1362,0,Warcryer;1390,0,Warcryer;1391,0,Warcryer;1413,0,Warcryer;1416,0,Overlord;1003,0,Overlord;1004,0,Overlord;1005,0,Overlord;1008,0,Overlord;1249,0,Overlord;1364,0,Overlord;1365,0,Overlord;1032,0,Prophet;1033,0,Prophet;1035,0,Prophet;1036,0,Prophet;1040,0,Prophet;1043,0,Prophet;1044,0,Prophet;1045,0,Prophet;1048,0,Prophet;1059,0,Shillen_Elder;1062,0,Prophet;1068,0,Prophet;1073,0,Elder;1077,0,Shillen_Elder;1078,0,Shillen_Elder;1085,0,Prophet;1086,0,Prophet;1087,0,Elder;1182,0,Elder;1189,0,Shillen_Elder;1191,0,Prophet;1204,0,Prophet;1242,0,Shillen_Elder;1243,0,Prophet;1259,0,Elder;1268,0,Shillen_Elder;1303,0,Shillen_Elder;1304,0,Elder;1352,0,Elder;1353,0,Elder;1354,0,Elder;1388,0,Shillen_Elder;1389,0,Shillen_Elder;1392,0,Prophet;1393,0,Elder;1397,0,Elder;1355,0,Elder;1356,0,Prophet;1357,0,Shillen_Elder;1363,0,Warcryer;1414,0,Overlord +#Set of fighter buffs +FighterSet = 1087,1243,1204,1068,1388,1040,1036,1035,1048,1045,1077,1242,1086,1043,1268,1036,1363,1240,1062,271,274,275,310,304,308,306,264,267,269,349,364,268,270,1416 + +#Set of Mage buffs +MageSet = 1087,1243,1204,1040,1036,1048,1045,1389,1062,1363,1085,1059,1303,1304,273,276,365,268,270,349,264,267,268,306,308,1416 + #============================================================= # Misc #============================================================= Index: java/net/sf/l2j/Config.java =================================================================== --- java/net/sf/l2j/Config.java (revision 5) +++ java/net/sf/l2j/Config.java (working copy) @@ -297,6 +297,10 @@ public static int CHAMPION_REWARD_QTY; /** Buffer */ + public static String FIGHTER_SET; + public static int[] FIGHTER_SET_LIST; + public static String MAGE_SET; + public static int[] MAGE_SET_LIST; public static int BUFFER_MAX_SCHEMES; public static int BUFFER_MAX_SKILLS; public static int BUFFER_STATIC_BUFF_COST; @@ -885,7 +889,19 @@ BUFFER_MAX_SKILLS = npcs.getProperty("BufferMaxSkillsPerScheme", 24); BUFFER_STATIC_BUFF_COST = npcs.getProperty("BufferStaticCostPerBuff", -1); BUFFER_BUFFS = npcs.getProperty("BufferBuffs"); + FIGHTER_SET = npcs.getProperty("FighterSet", "2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650"); + MAGE_SET = npcs.getProperty("MageSet", "2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650"); + + String[] FighterList = FIGHTER_SET.split(","); + FIGHTER_SET_LIST = new int[FighterList.length]; + for (int i = 0; i < FighterList.length; i++) + FIGHTER_SET_LIST[i] = Integer.parseInt(FighterList[i]); + String[] MageList = MAGE_SET.split(","); + MAGE_SET_LIST = new int[MageList.length]; + for (int i = 0; i < MageList.length; i++) + MAGE_SET_LIST[i] = Integer.parseInt(MageList[i]); + BUFFER_BUFFLIST = new HashMap<>(); for (String skillInfo : BUFFER_BUFFS.split(";")) { Index: java/net/sf/l2j/gameserver/model/actor/instance/L2BufferInstance.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/instance/L2BufferInstance.java (revision 5) +++ java/net/sf/l2j/gameserver/model/actor/instance/L2BufferInstance.java (working copy) @@ -27,9 +27,11 @@ import net.sf.l2j.commons.lang.StringUtil; import net.sf.l2j.gameserver.datatables.BufferTable; import net.sf.l2j.gameserver.datatables.SkillTable; +import net.sf.l2j.gameserver.model.L2Skill; import net.sf.l2j.gameserver.model.actor.L2Character; import net.sf.l2j.gameserver.model.actor.L2Summon; import net.sf.l2j.gameserver.model.actor.template.NpcTemplate; +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; public class L2BufferInstance extends L2NpcInstance @@ -42,8 +44,11 @@ @Override public void onBypassFeedback(L2PcInstance player, String command) { StringTokenizer st = new StringTokenizer(command, " "); String currentCommand = st.nextToken(); + int buffid = 0; if (currentCommand.startsWith("menu")) { @@ -52,13 +57,29 @@ html.replace("%objectId%", getObjectId()); player.sendPacket(html); } + if (currentCommand.startsWith("chat")) + { + final NpcHtmlMessage html = new NpcHtmlMessage(0); + html.setFile(getHtmlPath(getNpcId(), Integer.parseInt(st.nextToken()))); + html.replace("%objectId%", getObjectId()); + player.sendPacket(html); + } else if (currentCommand.startsWith("cleanup")) { + L2Skill buff; + buff = SkillTable.getInstance().getInfo(1056, 1); + buff.getEffects(this, player); player.stopAllEffectsExceptThoseThatLastThroughDeath(); + player.broadcastPacket(new MagicSkillUse(this, player, 1056, 1, 5, 0)); final L2Summon summon = player.getPet(); if (summon != null) + { + buff.getEffects(this, summon); + summon.broadcastPacket(new MagicSkillUse(this, summon, 1056, 1, 5, 0)); summon.stopAllEffectsExceptThoseThatLastThroughDeath(); + } + final NpcHtmlMessage html = new NpcHtmlMessage(0); html.setFile(getHtmlPath(getNpcId(), 0)); @@ -69,10 +90,17 @@ { player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp()); player.setCurrentCp(player.getMaxCp()); + L2Skill buff = SkillTable.getInstance().getInfo(1218, 1); + buff.getEffects(this, player); + player.broadcastPacket(new MagicSkillUse(this, player, 1218, 1, 5, 0)); final L2Summon summon = player.getPet(); if (summon != null) + { + buff.getEffects(this, player); + summon.broadcastPacket(new MagicSkillUse(this, summon, 1218, 1, 5, 0)); summon.setCurrentHpMp(summon.getMaxHp(), summon.getMaxMp()); + } final NpcHtmlMessage html = new NpcHtmlMessage(0); html.setFile(getHtmlPath(getNpcId(), 0)); @@ -103,6 +131,53 @@ { showEditSchemeWindow(player, st.nextToken(), st.nextToken()); } + if (currentCommand.startsWith("getbuff")) + { + buffid = Integer.parseInt(st.nextToken()); + int nextWindow = Integer.parseInt(st.nextToken()); + if (buffid != 0) + { + L2Skill buff =SkillTable.getInstance().getInfo(buffid, SkillTable.getInstance().getMaxLevel(buffid)); + buff.getEffects(this, player); + player.broadcastPacket(new MagicSkillUse(this, player, buffid, SkillTable.getInstance().getMaxLevel(buffid), 0, 0)); + final NpcHtmlMessage html = new NpcHtmlMessage(0); + html.setFile(getHtmlPath(getNpcId(), nextWindow)); + html.replace("%objectId%", getObjectId()); + player.sendPacket(html); + } + } + else if (currentCommand.startsWith("fighterSet")) + { + int fighterSet[] = Config.FIGHTER_SET_LIST; + player.stopAllEffectsExceptThoseThatLastThroughDeath(); + L2Skill buff ; + for (int id: fighterSet) + { + buff = SkillTable.getInstance().getInfo(id, SkillTable.getInstance().getMaxLevel(id)); + buff.getEffects(this, player); + player.broadcastPacket(new MagicSkillUse(this, player, id, buff.getLevel(), 0, 0)); + } + final NpcHtmlMessage html = new NpcHtmlMessage(0); + html.setFile(getHtmlPath(getNpcId(), 0)); + html.replace("%objectId%", getObjectId()); + player.sendPacket(html); + } + else if (currentCommand.startsWith("mageSet")) + { + int mageSet[] = Config.MAGE_SET_LIST; + player.stopAllEffectsExceptThoseThatLastThroughDeath(); + L2Skill buff ; + for (int id: mageSet) + { + buff = SkillTable.getInstance().getInfo(id, SkillTable.getInstance().getMaxLevel(id)); + buff.getEffects(this, player); + player.broadcastPacket(new MagicSkillUse(this, player, id, buff.getLevel(), 0, 0)); + } + final NpcHtmlMessage html = new NpcHtmlMessage(0); + html.setFile(getHtmlPath(getNpcId(), 0)); + html.replace("%objectId%", getObjectId()); + player.sendPacket(html); + } else if (currentCommand.startsWith("skill")) { final String groupType = st.nextToken(); @@ -226,7 +301,7 @@ final Map<String, ArrayList<Integer>> schemes = BufferTable.getInstance().getPlayerSchemes(player.getObjectId()); if (schemes == null || schemes.isEmpty()) - sb.append("<font color=\"LEVEL\">You haven't defined any scheme, please go to 'Manage my schemes' and create at least one valid scheme.</font>"); + sb.append("<center><font color=\"LEVEL\">You haven't defined any scheme</font></center>"); else { for (Map.Entry<String, ArrayList<Integer>> scheme : schemes.entrySet()) @@ -254,12 +329,14 @@ final Map<String, ArrayList<Integer>> schemes = BufferTable.getInstance().getPlayerSchemes(player.getObjectId()); if (schemes == null || schemes.isEmpty()) - sb.append("<font color=\"LEVEL\">You haven't created any scheme.</font>"); + sb.append("<center><font color=\"3399CC\">You haven't created any scheme.</font></center>"); else { - sb.append("<table>"); + sb.append("<table bgcolor=000000 width =300>"); for (Map.Entry<String, ArrayList<Integer>> scheme : schemes.entrySet()) - StringUtil.append(sb, "<tr><td width=140>", scheme.getKey(), " (", scheme.getValue().size(), " skill(s))</td><td width=60><button value=\"Clear\" action=\"bypass -h npc_%objectId%_clearscheme ", scheme.getKey(), "\" width=55 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td><td width=60><button value=\"Drop\" action=\"bypass -h npc_%objectId%_deletescheme ", scheme.getKey(), "\" width=55 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"); + StringUtil.append(sb, "<tr><td width=140><font color=\"3399CC\">", scheme.getKey(), " (", scheme.getValue().size(), " skill(s))</font></td><td width=60><button value=\"Clear\" action=\"bypass -h npc_%objectId%_clearscheme ", scheme.getKey(), "\" width=75 height=15 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\"></td><td width=60><button value=\"Drop\" action=\"bypass -h npc_%objectId%_deletescheme ", scheme.getKey(), "\" width=75 height=15 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\"></td></tr>"); sb.append("</table>"); } @@ -311,17 +388,17 @@ { final Map<String, ArrayList<Integer>> schemes = BufferTable.getInstance().getPlayerSchemes(player.getObjectId()); if (schemes == null || schemes.isEmpty()) - return "Please create at least one scheme."; + return "<table bgcolor=000000 width =300><tr><td align=center width=300><font color=\"3399CC\">Please create at least one scheme.</font></td></tr></table>"; final StringBuilder sb = new StringBuilder(200); - sb.append("<table>"); + sb.append("<table bgcolor=000000 width =300>"); for (Map.Entry<String, ArrayList<Integer>> scheme : schemes.entrySet()) { if (schemeName.equalsIgnoreCase(scheme.getKey())) - StringUtil.append(sb, "<tr><td width=200>", scheme.getKey(), " (<font color=\"LEVEL\">", scheme.getValue().size(), "</font> / ", Config.BUFFER_MAX_SKILLS, " skill(s))</td></tr>"); + StringUtil.append(sb, "<tr><td align=center width=300>", scheme.getKey(), " (<font color=\"LEVEL\">", scheme.getValue().size(), "</font> / ", Config.BUFFER_MAX_SKILLS, " skill(s))</td></tr>"); else - StringUtil.append(sb, "<tr><td width=200><a action=\"bypass -h npc_%objectId%_editschemes none ", scheme.getKey(), "\">", scheme.getKey(), " (", scheme.getValue().size(), " / ", Config.BUFFER_MAX_SKILLS, " skill(s))</a></td></tr>"); + StringUtil.append(sb, "<tr><td align=center width=300><font color=\"3399CC\"><a action=\"bypass -h npc_%objectId%_editschemes none ", scheme.getKey(), "\">", scheme.getKey(), " (", scheme.getValue().size(), " / ", Config.BUFFER_MAX_SKILLS, " skill(s))</a></font></td></tr>"); } sb.append("</table>"); @@ -394,7 +471,7 @@ { final List<Integer> skills = BufferTable.getInstance().getScheme(player.getObjectId(), schemeName); if (skills.isEmpty()) - return "That scheme is empty."; + return "<font color=\"3399CC\">That scheme is empty.</font>"; final StringBuilder sb = new StringBuilder(500); sb.append("<table>");
  8. proudly presents probably first custom npc, that has been designed and developed together with my good friend. custom npc shows ranking of top players with the best score in three basic categories (TOP PVP, TOP PK, TOP ONLINE). lists refreshes automaticaly every x minutes and generates y players in the ranking table. variables are fully customizable and configurable, but never tested with none-default values. to successfully implement npc just follow three simple steps. preview: http://s29.postimg.org/bxq590bj9/ranking_npc.gif first you have to create new file in proper package (gameserver/model/actor/instance/), name: L2StatusInstance.java /* * 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 2, 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * http://www.gnu.org/copyleft/gpl.html */ package net.sf.l2j.gameserver.model.actor.instance; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.StringTokenizer; import java.util.logging.Level; import net.sf.l2j.L2DatabaseFactory; import net.sf.l2j.gameserver.ThreadPoolManager; import net.sf.l2j.gameserver.cache.HtmCache; import net.sf.l2j.gameserver.model.actor.template.NpcTemplate; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; public class L2StatusInstance extends L2NpcInstance { private class PlayerInfo { public PlayerInfo(int pos,String n, int pvps, int pks ,int ontime, Boolean iso) { position = pos; Nick = n; pvpCount = pvps; pkCount = pks; onlineTime = ontime; isOnline = iso; } public int position; public String Nick; public int pvpCount; public int pkCount; public int onlineTime; public Boolean isOnline; } //delay interval (in minutes): private final int delayForCheck = 5; //number of players to be listed private int pvpListCount = 10; private int pkListCount = 10; private int onlineListCount = 10; private PlayerInfo [] topPvPList = new PlayerInfo [pvpListCount]; private PlayerInfo [] topPkList = new PlayerInfo [pkListCount]; private PlayerInfo [] topOnlineList = new PlayerInfo [onlineListCount]; public L2StatusInstance(int objectId, NpcTemplate template) { super(objectId, template); ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new RefreshAllLists(), 10000, delayForCheck * 60000); } private class RefreshAllLists implements Runnable { public void run() { ReloadData(); } } private void ReloadData() { try (Connection con = L2DatabaseFactory.getInstance().getConnection()) { PreparedStatement statement = con.prepareStatement("SELECT char_name, pvpkills, online FROM characters ORDER BY pvpkills DESC, char_name ASC LIMIT 10"); ResultSet result = statement.executeQuery(); //refreshing top pvp list int i = 0; //index of array while (result.next()) { topPvPList[i] = new PlayerInfo(i+1,result.getString("char_name"),result.getInt("pvpkills"),0,0,result.getBoolean("online")); i++; } //refreshing top pk list statement = con.prepareStatement("SELECT char_name, pkkills, online FROM characters ORDER BY pkkills DESC, char_name ASC LIMIT 10"); result = statement.executeQuery(); i = 0; //index of array while (result.next()) { topPkList[i] = new PlayerInfo(i+1,result.getString("char_name"),0,result.getInt("pkkills"),0,result.getBoolean("online")); i++; } //refreshing top online list statement = con.prepareStatement("SELECT char_name, onlinetime, online FROM characters ORDER BY onlinetime DESC, char_name ASC LIMIT 10"); result = statement.executeQuery(); i = 0; //index of array while (result.next()) { topOnlineList[i] = new PlayerInfo(i+1,result.getString("char_name"),0,0,result.getInt("onlinetime"),result.getBoolean("online")); i++; } result.close(); statement.close(); } catch (SQLException e) { _log.log(Level.WARNING, "ranking (status): could not load statistics informations" + e.getMessage(), e); } } @Override public void onSpawn() { ReloadData(); } @Override public void showChatWindow(L2PcInstance player) { GeneratePvPList(player); } @Override public void onBypassFeedback(L2PcInstance player, String command) { StringTokenizer st = new StringTokenizer(command, " "); String currentCommand = st.nextToken(); if (currentCommand.startsWith("pvplist")) { GeneratePvPList(player); } else if (currentCommand.startsWith("pklist")) { GeneratePKList(player); } else if (currentCommand.startsWith("onlinelist")) { GenerateOnlineList(player); } super.onBypassFeedback(player, command); } private void GeneratePvPList(L2PcInstance p) { StringBuilder _PVPranking = new StringBuilder(); for (PlayerInfo player : topPvPList) { if (player == null) break; _PVPranking.append("<table width=\"290\"><tr>"); _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>"); _PVPranking.append("<td FIXWIDTH=\"17\" align=\"center\">"+player.position+"</td>"); _PVPranking.append("<td FIXWIDTH=\"158\" align=\"center\">"+player.Nick+"</td>"); _PVPranking.append("<td FIXWIDTH=\"90\" align=\"center\">"+player.pvpCount+"</td>"); _PVPranking.append("<td FIXWIDTH=\"50\" align=\"center\">"+((player.isOnline) ? "<font color=\"00FF00\">ON</font>" : "<font color=\"CC0000\">OFF</font>")+"</td>"); _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>"); _PVPranking.append("</tr></table>"); _PVPranking.append("<img src=\"L2UI.Squaregray\" width=\"300\" height=\"1\">"); } NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(getHtmlPath(getNpcId(), 0)); html.replace("%objectId%", getObjectId()); html.replace("%pvplist%", _PVPranking.toString()); p.sendPacket(html); } private void GeneratePKList(L2PcInstance p) { StringBuilder _PVPranking = new StringBuilder(); for (PlayerInfo player : topPkList) { if (player == null) break; _PVPranking.append("<table width=\"290\"><tr>"); _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>"); _PVPranking.append("<td FIXWIDTH=\"17\" align=\"center\">"+player.position+"</td>"); _PVPranking.append("<td FIXWIDTH=\"158\" align=\"center\">"+player.Nick+"</td>"); _PVPranking.append("<td FIXWIDTH=\"90\" align=\"center\">"+player.pkCount+"</td>"); _PVPranking.append("<td FIXWIDTH=\"50\" align=\"center\">"+((player.isOnline) ? "<font color=\"00FF00\">ON</font>" : "<font color=\"CC0000\">OFF</font>")+"</td>"); _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>"); _PVPranking.append("</tr></table>"); _PVPranking.append("<img src=\"L2UI.Squaregray\" width=\"300\" height=\"1\">"); } NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(getHtmlPath(getNpcId(), 2)); html.replace("%objectId%", getObjectId()); html.replace("%pklist%", _PVPranking.toString()); p.sendPacket(html); } private void GenerateOnlineList(L2PcInstance p) { StringBuilder _PVPranking = new StringBuilder(); for (PlayerInfo player : topOnlineList) { if (player == null) break; _PVPranking.append("<table width=\"290\"><tr>"); _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>"); _PVPranking.append("<td FIXWIDTH=\"17\" align=\"center\">"+player.position+"</td>"); _PVPranking.append("<td FIXWIDTH=\"158\" align=\"center\">"+player.Nick+"</td>"); _PVPranking.append("<td FIXWIDTH=\"90\" align=\"center\">"+ConverTime(player.onlineTime)+"</td>"); _PVPranking.append("<td FIXWIDTH=\"50\" align=\"center\">"+((player.isOnline) ? "<font color=\"00FF00\">ON</font>" : "<font color=\"CC0000\">OFF</font>")+"</td>"); _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>"); _PVPranking.append("</tr></table>"); _PVPranking.append("<img src=\"L2UI.Squaregray\" width=\"300\" height=\"1\">"); } NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(getHtmlPath(getNpcId(), 3)); html.replace("%objectId%", getObjectId()); html.replace("%onlinelist%", _PVPranking.toString()); p.sendPacket(html); } private String ConverTime(long seconds) { long remainder = seconds; int days = (int) remainder / (24*3600); remainder = remainder -(days * 3600 * 24); int hours = (int) (remainder / 3600); remainder = remainder -(hours * 3600); int minutes = (int) (remainder / 60); remainder = remainder -(hours * 60); seconds = remainder; String timeInText = ""; if (days > 0) timeInText = days+"<font color=\"LEVEL\">D</font> "; if (hours > 0) timeInText = timeInText+ hours+"<font color=\"LEVEL\">H</font> "; if (minutes >0) timeInText = timeInText+ minutes+"<font color=\"LEVEL\">M</font>"; if (timeInText=="") { if(seconds>0) { timeInText = seconds+"<font color=\"LEVEL\">S</font>"; } else { timeInText = "N/A"; } } return timeInText; } @Override public String getHtmlPath(int npcId, int val) { String filename; if (val == 0) filename = "data/html/Status/" + npcId + ".htm"; else filename = "data/html/Status/" + npcId + "-" + val + ".htm"; if (HtmCache.getInstance().isLoadable(filename)) return filename; return "data/html/Status/" + npcId + ".htm"; } }create new npc with our dedicated type or use the one below: <npc id="50012" idTemplate="31549" name="STATISTICS WALL" title="L2EUPHORIA.COM"> <set name="level" val="70"/> <set name="radius" val="32"/> <set name="height" val="46.5"/> <set name="rHand" val="0"/> <set name="lHand" val="0"/> <set name="type" val="L2Status"/> <set name="exp" val="0"/> <set name="sp" val="0"/> <set name="hp" val="2444.46819"/> <set name="mp" val="1345.8"/> <set name="hpRegen" val="7.5"/> <set name="mpRegen" val="2.7"/> <set name="pAtk" val="688.86373"/> <set name="pDef" val="295.91597"/> <set name="mAtk" val="470.40463"/> <set name="mDef" val="216.53847"/> <set name="crit" val="4"/> <set name="atkSpd" val="253"/> <set name="str" val="40"/> <set name="int" val="21"/> <set name="dex" val="30"/> <set name="wit" val="20"/> <set name="con" val="43"/> <set name="men" val="20"/> <set name="corpseTime" val="7"/> <set name="walkSpd" val="50"/> <set name="runSpd" val="120"/> <set name="dropHerbGroup" val="0"/> <set name="attackRange" val="40"/> <ai type="default" ssCount="0" ssRate="0" spsCount="0" spsRate="0" aggro="0" canMove="true" seedable="false"/> </npc>dowload this archive(contains necessary .htmls) and extract to: gameserver/data/html/.remember to keep these files in proper folder (Status) and use correct npc type (L2Status).