ThelwHelpRePaidia Posted January 27, 2018 Posted January 27, 2018 (edited) Hello i have this code but i cant make it work with % chance on item if anyone can help package net.sf.l2j.gameserver.handler.voicedcommandhandlers; import java.util.StringTokenizer; import net.sf.l2j.commons.lang.StringUtil; import net.sf.l2j.gameserver.datatables.ItemTable; import net.sf.l2j.gameserver.datatables.NpcTable; import net.sf.l2j.gameserver.handler.IVoicedCommandHandler; import net.sf.l2j.gameserver.model.actor.instance.Player; import net.sf.l2j.gameserver.model.actor.template.NpcTemplate; import net.sf.l2j.gameserver.model.item.DropCategory; import net.sf.l2j.gameserver.model.item.DropData; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; public class ShiftClickToNpc implements IVoicedCommandHandler { private static final int PAGE_LIMIT = 20; private static String[] _voicedCommands = { "show_droplist" }; @Override public boolean useVoicedCommand(String command, Player activeChar, String target) { final StringTokenizer st = new StringTokenizer(command, " "); st.nextToken(); if (command.startsWith("show_droplist")) { try { int npcId = Integer.parseInt(st.nextToken()); int page = (st.hasMoreTokens()) ? Integer.parseInt(st.nextToken()) : 1; showNpcDropList(activeChar, npcId, page); } catch (Exception e) { activeChar.sendMessage("Usage: .show_droplist <npc_id> [<page>]"); } } return true; } private static void showNpcDropList(Player activeChar, int npcId, int page) { final NpcTemplate npcData = NpcTable.getInstance().getTemplate(npcId); if (npcData == null) { activeChar.sendMessage("Npc template is unknown for id: " + npcId + "."); return; } final StringBuilder sb = new StringBuilder(2000); StringUtil.append(sb, "<html><title>Show droplist page ", page, "</title><body><center><font color=\"LEVEL\">", npcData.getName(), " (", ")</font></center><br>"); if (!npcData.getDropData().isEmpty()) { sb.append("Drop type legend: <font color=\"3BB9FF\">Drop</font><br><table><tr><td width=20>item</td><td width=20>drop count</td></tr>"); int myPage = 1; int i = 0; int shown = 0; boolean hasMore = false; for (DropCategory cat : npcData.getDropData()) { if (shown == PAGE_LIMIT) { hasMore = true; break; } for (DropData drop : cat.getAllDrops()) { if (myPage != page) { i++; if (i == PAGE_LIMIT) { myPage++; i = 0; } continue; } if (shown == PAGE_LIMIT) { hasMore = true; break; } StringUtil.append(sb, "<font color=\\\"3BB9FF\\\"><tr><td>", ItemTable.getInstance().getTemplate(drop.getItemId()).getName(), " (", drop.getMinDrop(), " - ", drop.getMaxDrop(), ")</td></tr></font>"); shown++; } } sb.append("</table><table width=\"100%\" bgcolor=666666><tr>"); if (page > 1) { StringUtil.append(sb, "<td width=120><a action=\"bypass -h voiced_show_droplist ", npcId, " ", page - 1, "\">Prev Page</a></td>"); if (!hasMore) StringUtil.append(sb, "<td width=100>Page", page, "</td><td width=70></td></tr>"); } if (hasMore) { if (page <= 1) sb.append("<td width=120></td>"); StringUtil.append(sb, "<td width=100>Page ", page, "</td><td width=70><a action=\"bypass -h voiced_show_droplist ", npcId, " ", page + 1, "\">Next Page</a></td></tr>"); } sb.append("</table>"); } else sb.append("This NPC has no drops."); sb.append("</body></html>"); final NpcHtmlMessage html = new NpcHtmlMessage(0); html.setHtml(sb.toString()); activeChar.sendPacket(html); } @Override public String[] getVoicedCommandList() { return _voicedCommands; } } Edited January 27, 2018 by ThelwHelpRePaidia
1 SweeTs Posted January 27, 2018 Posted January 27, 2018 On 1/27/2018 at 3:02 PM, Nightw0lf said: bad aproach Expand But, but.. Having a voiced command to do exactly what shift click does is cool, UNIQUE feature :D Ok, you can keep the voiced command if you wish, just link it to showDrop of shift click. There is no reason to reuse (copy, paste) the code.
0 Nightw0lf Posted January 27, 2018 Posted January 27, 2018 bad aproach should be on npc and should be on shift+click -> drops with chances.
0 ThelwHelpRePaidia Posted January 27, 2018 Author Posted January 27, 2018 (edited) i tried to edit the npc.java but it didnt worked that's why i made voice command but it doesnt work this too im getting this error http://prntscr.com/i6grqu Edited January 27, 2018 by ThelwHelpRePaidia
0 ThelwHelpRePaidia Posted January 27, 2018 Author Posted January 27, 2018 i cant use code button dk why <code> if (Config.ALT_GAME_VIEWNPC) { final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile("data/html/custom/mobinfo.htm"); html.replace("%class%", getClass().getSimpleName()); html.replace("%id%", getTemplate().getNpcId()); html.replace("%lvl%", getTemplate().getLevel()); html.replace("%name%", getTemplate().getName()); html.replace("%race%", getTemplate().getRace().toString()); html.replace("%tmplid%", getTemplate().getIdTemplate()); html.replace("%castle%", (getCastle() != null) ? getCastle().getName() : "none"); html.replace("%aggro%", (this instanceof Attackable) ? ((Attackable) this).getTemplate().getAggroRange() : 0); html.replace("%corpse%", getTemplate().getCorpseTime()); html.replace("%enchant%", getTemplate().getEnchantEffect()); html.replace("%hp%", (int) getCurrentHp()); html.replace("%hpmax%", getMaxHp()); html.replace("%mp%", (int) getCurrentMp()); html.replace("%mpmax%", getMaxMp()); html.replace("%patk%", getPAtk(null)); html.replace("%matk%", getMAtk(null, null)); html.replace("%pdef%", getPDef(null)); html.replace("%mdef%", getMDef(null, null)); html.replace("%accu%", getAccuracy()); html.replace("%evas%", getEvasionRate(null)); html.replace("%crit%", getCriticalHit(null, null)); html.replace("%rspd%", getMoveSpeed()); html.replace("%aspd%", getPAtkSpd()); html.replace("%cspd%", getMAtkSpd()); html.replace("%str%", getSTR()); html.replace("%dex%", getDEX()); html.replace("%con%", getCON()); html.replace("%int%", getINT()); html.replace("%wit%", getWIT()); html.replace("%men%", getMEN()); html.replace("%loc%", getX() + " " + getY() + " " + getZ()); html.replace("%dist%", (int) Math.sqrt(player.getDistanceSq(this))); html.replace("%ele_dfire%", getDefenseElementValue((byte) 2)); html.replace("%ele_dwater%", getDefenseElementValue((byte) 3)); html.replace("%ele_dwind%", getDefenseElementValue((byte) 1)); html.replace("%ele_dearth%", getDefenseElementValue((byte) 4)); html.replace("%ele_dholy%", getDefenseElementValue((byte) 5)); html.replace("%ele_ddark%", getDefenseElementValue((byte) 6)); for (final DropCategory cat : getTemplate().getDropData()) { final FastList<DropData> drops = (FastList<DropData>) cat.getAllDrops(); if (drops != null) for (final DropData drop : drops) { if (drop == null || ItemTable.getInstance().getTemplate(drop.getItemId()) == null || drop.getItemId() == 57 || drop.getItemId() == 5575) { continue; } String name = ItemTable.getInstance().getTemplate(drop.getItemId()).getName(); int countmin = ItemTable.getInstance().getTemplate(drop.getMinDrop()).getItemId(); int countmax = ItemTable.getInstance().getTemplate(drop.getMaxDrop()).getItemId(); if (drop.getChance() > 700000) { html.replace("<tr><td align=\"center\"><font color=\"0066FF\">" + countmin + "-"+countmax+" "+name+"</font></td></tr>"); } else if (drop.getChance() > 500000) { html.replace("<tr><td align=\"center\"><font color=\"FF99FF\">" + countmin + "-"+countmax+" "+name+"</font></td></tr>"); } else if (drop.getChance() > 300000) { html.replace("<tr><td align=\"center\"><font color=\"LEVEL\">" + countmin + "-"+countmax+" "+name+"</font></td></tr>"); } else if (drop.getChance() > 100000) { html.replace("<tr><td align=\"center\"><font color=\"666666\">" + countmin + "-"+countmax+" "+name+"</font></td></tr>"); } else if (drop.getChance() > 10000) { html.replace("<tr><td align=\"center\"><font color=\"FF8C00\">" + countmin + "-"+countmax+" "+name+"</font></td></tr>"); } else { html.replace("<tr><td align=\"center\"><font color=\"FF0000\">" + countmin + "-"+countmax+" "+name+"</font></td></tr>"); } } } </code>
0 SweeTs Posted January 27, 2018 Posted January 27, 2018 Don't use any of your crappy code. Simply find place where shift click is displayed. There is a check if (player.isGM()) { display htm } and add else { copy the content of previous and remove useless rows which you dont want to display, yet, you will have to care about the bypass - RequestBypassToServer - as far as I rem }.
0 ThelwHelpRePaidia Posted January 27, 2018 Author Posted January 27, 2018 it's all good i fixed it it looks like this now http://prntscr.com/i6itv1
Question
ThelwHelpRePaidia
Hello i have this code but i cant make it work with % chance on item if anyone can help
6 answers to this question
Recommended Posts