Jump to content

Paly

Members
  • Posts

    4
  • Credits

  • Joined

  • Last visited

  • Feedback

    0%

Everything posted by Paly

  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...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock