Jump to content

Paly

Members
  • Posts

    4
  • Credits

  • Joined

  • Last visited

  • Feedback

    0%

About Paly

Profile Information

  • Gender
    Male

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Paly's Achievements

Apprentice

Apprentice (3/16)

  • Dedicated Rare
  • One Month Later Rare
  • Week One Done Rare
  • First Post Rare
  • Conversation Starter Rare

Recent Badges

0

Reputation

  1. Hello, you save me. Many many thanks! it works perfectly. I was using L2AchievementManager and the system dont found the npc! So many thanks to all of you. I will try lucera. Im on Orion cause it works fine for now and got all the mods i wanted: bang points, offline trade/craft, no core bugs, and now achievements. Sorry for the bad reply without <code> I want to ask a little things that maybe are very easy for u guys. How can i create a new item? i need to add it to handlers? i want no make a new sp scroll, that gives exp no sp. i can imagine is not so simple like create a new npc id in custom npc. I follow this steps, create a new code in etcitems. then edit the etcitems in system, and i think i need to add the ability item in source?
  2. * L2jOrion Project - www.l2jorion.com * * 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 l2jorion.game.model.actor.instance; import java.util.List; import java.util.StringTokenizer; import l2jorion.Config; import l2jorion.game.datatables.sql.ItemTable; import l2jorion.game.enums.AchType; import l2jorion.game.managers.AchievementManager; import l2jorion.game.model.AchievementHolder; import l2jorion.game.network.serverpackets.NpcHtmlMessage; import l2jorion.game.templates.L2Item; import l2jorion.game.templates.L2NpcTemplate; import l2jorion.game.util.Util; public final class L2AchievementInstance extends L2FolkInstance { private final static int PAGE_LIMIT = Config.PAGE_LIMIT; public L2AchievementInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void onBypassFeedback(L2PcInstance player, String command) { final StringTokenizer st = new StringTokenizer(command, " "); String currentCommand = st.nextToken(); if (currentCommand.startsWith("Chat")) { int val = Integer.parseInt(st.nextToken()); showChatWindow(player, val); } } @Override public void showChatWindow(L2PcInstance player, int val) { final NpcHtmlMessage html = new NpcHtmlMessage(0); html.setFile(getHtmlPath(player, getNpcId(), 0)); html.replace("%objectId%", getObjectId()); html.replace("%list%", getList(player, val)); player.sendPacket(html); } public static int countPagesNumber(int objectsSize, int pageSize) { return objectsSize / pageSize + (objectsSize % pageSize == 0 ? 0 : 1); } private String getList(L2PcInstance player, int page) { // Retrieve the entire types list based on group type. List<AchType> list = AchievementManager.getInstance().getTypeList(player); // Calculate page number. final int max = countPagesNumber(list.size(), PAGE_LIMIT); page = page > max ? max : page < 1 ? 1 : page; // Cut skills list up to page number. list = list.subList((page - 1) * PAGE_LIMIT, Math.min(page * PAGE_LIMIT, list.size())); final StringBuilder sb = new StringBuilder(); int row = 0; for (AchType type : list) { boolean exist = player.getAchievement().getData().containsKey(type); boolean completed = false; int getLevel = exist ? player.getAchievement().getData().get(type).getId() - 1 : 0; int getCount = exist ? player.getAchievement().getData().get(type).getValue() : 0; int allStages = AchievementManager.getInstance().getStages(type).size(); if (AchievementManager.getInstance().getStages(type).size() < (getLevel + 1)) { getLevel = AchievementManager.getInstance().getStages(type).size() - 1; completed = true; } AchievementHolder ach = AchievementManager.getInstance().getAchievements().get(type).get(getLevel); sb.append("<img src=l2ui.squareblack width=296 height=1><table cellspacing=1 cellpadding=1 width=296 bgcolor=000000><tr>"); sb.append("<td width=40 height=40 align=center><button width=32 height=32 back=" + ach.getIcon() + " fore=" + ach.getIcon() + "></td>"); sb.append("<td width=256>" + ach.getName().toUpperCase() + " " + (completed ? "<font color=00FF00>Completed</font>" : "") + "<br1>"); sb.append("Stage:<font color=LEVEL>" + ach.getLevel() + "/" + allStages + "</font> Reward:<font color=LEVEL>" + Util.formatAdena(ach.getRewardCount()) + "</font> " + getItemNameById(ach.getRewardId()) + "<br1>"); sb.append("<font color=B09878>" + (completed ? "[" + ach.getName() + " achievement completed]" : ach.getDescription().replaceAll("%required%", getCount + "/" + ach.getRequired())) + "</font></td></tr></table>"); sb.append("<table cellspacing=0 cellpadding=0 width=300 height=15><tr><td>" + generateBar(300, 15, completed ? ach.getRequired() : getCount, ach.getRequired()) + "</td></tr></table>"); sb.append("<img src=l2ui.squareblack width=296 height=1><img height=3>"); row++; } for (int i = PAGE_LIMIT; i > row; i--) { sb.append("<img height=47>"); } // Build page footer. sb.append("<table width=300><tr>"); sb.append("<td align=left width=100>" + (page > 1 ? "<button value=\"< PREV\" action=\"bypass npc_" + getObjectId() + "_Chat " + (page - 1) + "\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" : "") + "</td>"); sb.append("<td align=center width=100>Page " + page + "/" + max + "</td>"); sb.append("<td align=right width=100>" + (page < max ? "<button value=\"NEXT >\" action=\"bypass npc_" + getObjectId() + "_Chat " + (page + 1) + "\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" : "") + "</td>"); sb.append("</tr></table>"); return sb.toString(); } public String generateBar(int width, int height, int current, int max) { final StringBuilder sb = new StringBuilder(); current = current > max ? max : current; int bar = Math.max((width * (current * 100 / max) / 100), 0); sb.append("<table width=" + width + " cellspacing=0 cellpadding=0><tr><td width=" + bar + " align=center><img src=L2UI_CH3.BR_BAR1_CP width=" + bar + " height=" + height + "/></td>"); sb.append("<td width=" + (width - bar) + " align=center><img src=L2UI_CH3.BR_BAR1_HP1 width=" + (width - bar) + " height=" + height + "/></td></tr></table>"); return sb.toString(); } @Override public String getHtmlPath(L2PcInstance player, final int npcId, final int val) { return "data/html/achievements/" + npcId + "" + (val == 0 ? "" : "-" + val) + ".htm"; } public String getItemNameById(int itemId) { L2Item item = ItemTable.getInstance().getTemplate(itemId); String itemName = "NoName"; if (itemId != 0) { itemName = item.getName(); } return itemName; } } i tried /achievement .achievement .achiv /achiv .achievements /achievements nothing. its funny cause i receive the system msg ingame when i unlock an achievment like adquire noblesse and so This is the achievementManager page package l2jorion.game.managers; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import l2jorion.Config; import l2jorion.game.enums.AchType; import l2jorion.game.model.AchievementHolder; import l2jorion.game.model.actor.instance.L2PcInstance; import l2jorion.game.templates.StatsSet; import l2jorion.logger.Logger; import l2jorion.logger.LoggerFactory; import l2jorion.util.xml.IXmlReader; public class AchievementManager implements IXmlReader { private static Logger LOG = LoggerFactory.getLogger(AchievementManager.class); private final Map<AchType, List<AchievementHolder>> _achievements = new LinkedHashMap<>(); public AchievementManager() { load(); } @Override public void load() { parseDatapackFile("./data/xml/achievements.xml"); LOG.info("Loaded {} of {} achievements data.", _achievements.size(), AchType.values().length); } public void reload() { _achievements.clear(); load(); } @Override public void parseDocument(Document doc) { for (Node a = doc.getFirstChild(); a != null; a = a.getNextSibling()) { if ("list".equalsIgnoreCase(a.getNodeName())) { for (Node b = a.getFirstChild(); b != null; b = b.getNextSibling()) { if ("achievement".equalsIgnoreCase(b.getNodeName())) { final NamedNodeMap attrs = b.getAttributes(); final AchType type = AchType.valueOf(parseString(attrs, "type")); final StatsSet set = new StatsSet(); set.set("icon", parseString(attrs, "icon")); set.set("name", parseString(attrs, "name")); set.set("desc", parseString(attrs, "desc")); final List<AchievementHolder> levels = new ArrayList<>(); for (Node c = b.getFirstChild(); c != null; c = c.getNextSibling()) { if ("stage".equalsIgnoreCase(c.getNodeName())) { set.add(parseAttributes(c)); levels.add(new AchievementHolder(set)); } } _achievements.put(type, levels); } } } } } public List<AchievementHolder> getStages(AchType type) { return _achievements.get(type); } public AchievementHolder getAchievement(AchType type, int level) { return _achievements.get(type).stream().filter(x -> x.getLevel() == level).findFirst().orElse(null); } public Map<AchType, List<AchievementHolder>> getAchievements() { return _achievements; } public List<AchType> getTypeList(L2PcInstance player) { List<AchType> list = new ArrayList<>(); for (AchType type : _achievements.keySet()) { if (type == AchType.SPOIL && !player.getSkills().containsKey(254)) { continue; } if (type == AchType.LEADER && player.getClan() != null && !player.isClanLeader()) { continue; } if ((type == AchType.CLAN_LEVEL_UP || type == AchType.CASTLE) && !player.isClanLeader()) { continue; } if (type == AchType.ACADEMY && player.getClassId().level() > 1 && player.getAchievement().getLevel(AchType.ACADEMY) != 2) { continue; } if (type == AchType.MONSTER_CHAMPION && Config.L2JMOD_CHAMPION_FREQUENCY == 0) { continue; } list.add(type); } return list; } public static AchievementManager getInstance() { return SingletonHolder.INSTANCE; } private static class SingletonHolder { protected static final AchievementManager INSTANCE = new AchievementManager(); } } This is Achievement Instance page: * L2jOrion Project - www.l2jorion.com * * 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 l2jorion.game.model.actor.instance; import java.util.List; import java.util.StringTokenizer; import l2jorion.Config; import l2jorion.game.datatables.sql.ItemTable; import l2jorion.game.enums.AchType; import l2jorion.game.managers.AchievementManager; import l2jorion.game.model.AchievementHolder; import l2jorion.game.network.serverpackets.NpcHtmlMessage; import l2jorion.game.templates.L2Item; import l2jorion.game.templates.L2NpcTemplate; import l2jorion.game.util.Util; public final class L2AchievementInstance extends L2FolkInstance { private final static int PAGE_LIMIT = Config.PAGE_LIMIT; public L2AchievementInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void onBypassFeedback(L2PcInstance player, String command) { final StringTokenizer st = new StringTokenizer(command, " "); String currentCommand = st.nextToken(); if (currentCommand.startsWith("Chat")) { int val = Integer.parseInt(st.nextToken()); showChatWindow(player, val); } } @Override public void showChatWindow(L2PcInstance player, int val) { final NpcHtmlMessage html = new NpcHtmlMessage(0); html.setFile(getHtmlPath(player, getNpcId(), 0)); html.replace("%objectId%", getObjectId()); html.replace("%list%", getList(player, val)); player.sendPacket(html); } public static int countPagesNumber(int objectsSize, int pageSize) { return objectsSize / pageSize + (objectsSize % pageSize == 0 ? 0 : 1); } private String getList(L2PcInstance player, int page) { // Retrieve the entire types list based on group type. List<AchType> list = AchievementManager.getInstance().getTypeList(player); // Calculate page number. final int max = countPagesNumber(list.size(), PAGE_LIMIT); page = page > max ? max : page < 1 ? 1 : page; // Cut skills list up to page number. list = list.subList((page - 1) * PAGE_LIMIT, Math.min(page * PAGE_LIMIT, list.size())); final StringBuilder sb = new StringBuilder(); int row = 0; for (AchType type : list) { boolean exist = player.getAchievement().getData().containsKey(type); boolean completed = false; int getLevel = exist ? player.getAchievement().getData().get(type).getId() - 1 : 0; int getCount = exist ? player.getAchievement().getData().get(type).getValue() : 0; int allStages = AchievementManager.getInstance().getStages(type).size(); if (AchievementManager.getInstance().getStages(type).size() < (getLevel + 1)) { getLevel = AchievementManager.getInstance().getStages(type).size() - 1; completed = true; } AchievementHolder ach = AchievementManager.getInstance().getAchievements().get(type).get(getLevel); sb.append("<img src=l2ui.squareblack width=296 height=1><table cellspacing=1 cellpadding=1 width=296 bgcolor=000000><tr>"); sb.append("<td width=40 height=40 align=center><button width=32 height=32 back=" + ach.getIcon() + " fore=" + ach.getIcon() + "></td>"); sb.append("<td width=256>" + ach.getName().toUpperCase() + " " + (completed ? "<font color=00FF00>Completed</font>" : "") + "<br1>"); sb.append("Stage:<font color=LEVEL>" + ach.getLevel() + "/" + allStages + "</font> Reward:<font color=LEVEL>" + Util.formatAdena(ach.getRewardCount()) + "</font> " + getItemNameById(ach.getRewardId()) + "<br1>"); sb.append("<font color=B09878>" + (completed ? "[" + ach.getName() + " achievement completed]" : ach.getDescription().replaceAll("%required%", getCount + "/" + ach.getRequired())) + "</font></td></tr></table>"); sb.append("<table cellspacing=0 cellpadding=0 width=300 height=15><tr><td>" + generateBar(300, 15, completed ? ach.getRequired() : getCount, ach.getRequired()) + "</td></tr></table>"); sb.append("<img src=l2ui.squareblack width=296 height=1><img height=3>"); row++; } for (int i = PAGE_LIMIT; i > row; i--) { sb.append("<img height=47>"); } // Build page footer. sb.append("<table width=300><tr>"); sb.append("<td align=left width=100>" + (page > 1 ? "<button value=\"< PREV\" action=\"bypass npc_" + getObjectId() + "_Chat " + (page - 1) + "\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" : "") + "</td>"); sb.append("<td align=center width=100>Page " + page + "/" + max + "</td>"); sb.append("<td align=right width=100>" + (page < max ? "<button value=\"NEXT >\" action=\"bypass npc_" + getObjectId() + "_Chat " + (page + 1) + "\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" : "") + "</td>"); sb.append("</tr></table>"); return sb.toString(); } public String generateBar(int width, int height, int current, int max) { final StringBuilder sb = new StringBuilder(); current = current > max ? max : current; int bar = Math.max((width * (current * 100 / max) / 100), 0); sb.append("<table width=" + width + " cellspacing=0 cellpadding=0><tr><td width=" + bar + " align=center><img src=L2UI_CH3.BR_BAR1_CP width=" + bar + " height=" + height + "/></td>"); sb.append("<td width=" + (width - bar) + " align=center><img src=L2UI_CH3.BR_BAR1_HP1 width=" + (width - bar) + " height=" + height + "/></td></tr></table>"); return sb.toString(); } @Override public String getHtmlPath(L2PcInstance player, final int npcId, final int val) { return "data/html/achievements/" + npcId + "" + (val == 0 ? "" : "-" + val) + ".htm"; } public String getItemNameById(int itemId) { L2Item item = ItemTable.getInstance().getTemplate(itemId); String itemName = "NoName"; if (itemId != 0) { itemName = item.getName(); } return itemName; } }
  3. Thanks for the quick reply guys, and sorry for bother with this dumb questions. Its l2jOrion source, rev17+rev21. there is a ini in configs to enable achievement system, that is the wierd thing. this is the achievement.xml in gamesever/data but i dont know how to hook it to a npc to work ingame since its not an html
  4. Hello everyone, im a new user on this community. Im a newbie but learning more and more about jass and code. Im already got a live server and my problem is with the NPC achievement system. My source got the achievement system cause every time i complete an achievement a message system is shown. But no NPC.. In server files /data there is a file achievement.xml with requierements for achievements. i know how to make a npc who reads html and make a multisell, but i dont know how to read xml and make that file to work with a npc. I tried to call that achievement.xml like a multisell shop but it doesnt work-. can anybody help me?
×
×
  • Create New...