Created
May 22, 2014 16:07
-
-
Save Battlecruiser/c9dea623220e5ba2cb2c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/dist/game/data/scripts/handlers/bypasshandlers/NpcViewMod.java b/dist/game/data/scripts/handlers/bypasshandlers/NpcViewMod.java | |
index e6d7699..9dabbab 100644 | |
--- a/dist/game/data/scripts/handlers/bypasshandlers/NpcViewMod.java | |
+++ b/dist/game/data/scripts/handlers/bypasshandlers/NpcViewMod.java | |
@@ -290,34 +290,7 @@ public class NpcViewMod implements IBypassHandler | |
final IDropItem dropItem = dropList.get(i); | |
if (dropItem instanceof GeneralDropItem) | |
{ | |
- final GeneralDropItem generalDropItem = (GeneralDropItem) dropItem; | |
- final L2Item item = ItemTable.getInstance().getTemplate(generalDropItem.getItemId()); | |
- sb.append("<table width=332 cellpadding=2 cellspacing=0 background=\"L2UI_CT1.Windows.Windows_DF_TooltipBG\">"); | |
- sb.append("<tr><td width=32 valign=top>"); | |
- sb.append("<img src=\"" + item.getIcon() + "\" width=32 height=32>"); | |
- sb.append("</td><td fixwidth=300 align=center><font name=\"hs9\" color=\"CD9000\">"); | |
- sb.append(item.getName()); | |
- sb.append("</font></td></tr><tr><td width=32></td><td width=300><table width=295 cellpadding=0 cellspacing=0>"); | |
- sb.append("<tr><td width=48 align=right valign=top><font color=\"LEVEL\">Amount:</font></td>"); | |
- sb.append("<td width=247 align=center>"); | |
- | |
- final long min = generalDropItem.getMin(npc, activeChar); | |
- final long max = generalDropItem.getMax(npc, activeChar); | |
- if (min == max) | |
- { | |
- sb.append(amountFormat.format(min)); | |
- } | |
- else | |
- { | |
- sb.append(amountFormat.format(min)); | |
- sb.append(" - "); | |
- sb.append(amountFormat.format(max)); | |
- } | |
- | |
- sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>"); | |
- sb.append("<td width=247 align=center>"); | |
- sb.append(chanceFormat.format(Math.min(generalDropItem.getChance(npc, activeChar), 100))); | |
- sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=300> </td></tr></table>"); | |
+ addGeneralDropItem(activeChar, npc, amountFormat, chanceFormat, sb, (GeneralDropItem) dropItem); | |
} | |
else if (dropItem instanceof GroupedGeneralDropItem) | |
{ | |
@@ -325,46 +298,21 @@ public class NpcViewMod implements IBypassHandler | |
if (generalGroupedDropItem.getItems().size() == 1) | |
{ | |
final GeneralDropItem generalDropItem = generalGroupedDropItem.getItems().get(0); | |
- final L2Item item = ItemTable.getInstance().getTemplate(generalDropItem.getItemId()); | |
- sb.append("<table width=332 cellpadding=2 cellspacing=0 background=\"L2UI_CT1.Windows.Windows_DF_TooltipBG\">"); | |
- sb.append("<tr><td width=32 valign=top>"); | |
- sb.append("<img src=\"" + item.getIcon() + "\" width=32 height=32>"); | |
- sb.append("</td><td fixwidth=300 align=center><font name=\"hs9\" color=\"CD9000\">"); | |
- sb.append(item.getName()); | |
- sb.append("</font></td></tr><tr><td width=32></td><td width=300><table width=295 cellpadding=0 cellspacing=0>"); | |
- sb.append("<tr><td width=48 align=right valign=top><font color=\"LEVEL\">Amount:</font></td>"); | |
- sb.append("<td width=247 align=center>"); | |
- | |
- final long min = generalDropItem.getMin(npc, activeChar); | |
- final long max = generalDropItem.getMax(npc, activeChar); | |
- if (min == max) | |
- { | |
- sb.append(amountFormat.format(min)); | |
- } | |
- else | |
- { | |
- sb.append(amountFormat.format(min)); | |
- sb.append(" - "); | |
- sb.append(amountFormat.format(max)); | |
- } | |
- | |
- sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>"); | |
- sb.append("<td width=247 align=center>"); | |
- sb.append(chanceFormat.format(Math.min(generalGroupedDropItem.getChance(npc, activeChar), 100))); | |
- sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=300> </td></tr></table>"); | |
+ addGeneralDropItem(activeChar, npc, amountFormat, chanceFormat, sb, generalDropItem); | |
} | |
else | |
{ | |
+ GroupedGeneralDropItem normalized = generalGroupedDropItem.normalizeMe(npc, activeChar); | |
sb.append("<table width=332 cellpadding=2 cellspacing=0 background=\"L2UI_CT1.Windows.Windows_DF_TooltipBG\">"); | |
sb.append("<tr><td width=32 valign=top><img src=\"L2UI_CT1.ICON_DF_premiumItem\" width=32 height=32></td>"); | |
sb.append("<td fixwidth=300 align=center><font name=\"ScreenMessageSmall\" color=\"CD9000\">One from group</font>"); | |
sb.append("</td></tr><tr><td width=32></td><td width=300><table width=295 cellpadding=0 cellspacing=0><tr>"); | |
sb.append("<td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>"); | |
sb.append("<td width=247 align=center>"); | |
- sb.append(chanceFormat.format(Math.min(generalGroupedDropItem.getChance(npc, activeChar), 100))); | |
+ sb.append(chanceFormat.format(Math.min(normalized.getChance(), 100))); | |
sb.append("%</td></tr></table><br>"); | |
- for (GeneralDropItem generalDropItem : generalGroupedDropItem.getItems()) | |
+ for (GeneralDropItem generalDropItem : normalized.getItems()) | |
{ | |
final L2Item item = ItemTable.getInstance().getTemplate(generalDropItem.getItemId()); | |
sb.append("<table width=291 cellpadding=2 cellspacing=0 background=\"L2UI_CT1.Windows.Windows_DF_TooltipBG\">"); | |
@@ -374,9 +322,9 @@ public class NpcViewMod implements IBypassHandler | |
sb.append(item.getName()); | |
sb.append("</font></td></tr><tr><td width=32></td><td width=259><table width=253 cellpadding=0 cellspacing=0>"); | |
sb.append("<tr><td width=48 align=right valign=top><font color=\"LEVEL\">Amount:</font></td><td width=205 align=center>"); | |
- | |
- final long min = generalDropItem.getMin(npc, activeChar); | |
- final long max = generalDropItem.getMax(npc, activeChar); | |
+ MinMax minMax = getPreciseMinMax(normalized.getChance(), generalDropItem.getMin(npc), generalDropItem.getMax(npc), generalDropItem.isPreciseCalculated()); | |
+ final long min = minMax.min; | |
+ final long max = minMax.max; | |
if (min == max) | |
{ | |
sb.append(amountFormat.format(min)); | |
@@ -433,4 +381,68 @@ public class NpcViewMod implements IBypassHandler | |
html = html.replaceAll("%items%", bodySb.toString()); | |
Util.sendCBHtml(activeChar, html); | |
} | |
+ | |
+ /** | |
+ * @param activeChar | |
+ * @param npc | |
+ * @param amountFormat | |
+ * @param chanceFormat | |
+ * @param sb | |
+ * @param dropItem | |
+ */ | |
+ private static void addGeneralDropItem(L2PcInstance activeChar, L2Npc npc, final DecimalFormat amountFormat, final DecimalFormat chanceFormat, final StringBuilder sb, final GeneralDropItem dropItem) | |
+ { | |
+ final L2Item item = ItemTable.getInstance().getTemplate(dropItem.getItemId()); | |
+ sb.append("<table width=332 cellpadding=2 cellspacing=0 background=\"L2UI_CT1.Windows.Windows_DF_TooltipBG\">"); | |
+ sb.append("<tr><td width=32 valign=top>"); | |
+ sb.append("<img src=\"" + item.getIcon() + "\" width=32 height=32>"); | |
+ sb.append("</td><td fixwidth=300 align=center><font name=\"hs9\" color=\"CD9000\">"); | |
+ sb.append(item.getName()); | |
+ sb.append("</font></td></tr><tr><td width=32></td><td width=300><table width=295 cellpadding=0 cellspacing=0>"); | |
+ sb.append("<tr><td width=48 align=right valign=top><font color=\"LEVEL\">Amount:</font></td>"); | |
+ sb.append("<td width=247 align=center>"); | |
+ MinMax minMax = getPreciseMinMax(dropItem.getChance(npc, activeChar), dropItem.getMin(npc), dropItem.getMax(npc), dropItem.isPreciseCalculated()); | |
+ | |
+ final long min = minMax.min; | |
+ final long max = minMax.max; | |
+ if (min == max) | |
+ { | |
+ sb.append(amountFormat.format(min)); | |
+ } | |
+ else | |
+ { | |
+ sb.append(amountFormat.format(min)); | |
+ sb.append(" - "); | |
+ sb.append(amountFormat.format(max)); | |
+ } | |
+ | |
+ sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>"); | |
+ sb.append("<td width=247 align=center>"); | |
+ sb.append(chanceFormat.format(Math.min(dropItem.getChance(npc, activeChar), 100))); | |
+ sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=300> </td></tr></table>"); | |
+ } | |
+ | |
+ private static class MinMax | |
+ { | |
+ public final long min, max; | |
+ | |
+ public MinMax(long min, long max) | |
+ { | |
+ this.min = min; | |
+ this.max = max; | |
+ | |
+ } | |
+ | |
+ } | |
+ | |
+ private static MinMax getPreciseMinMax(double chance, long min, long max, boolean isPrecise) | |
+ { | |
+ if (!isPrecise || (chance <= 100)) | |
+ { | |
+ return new MinMax(min, max); | |
+ } | |
+ | |
+ int mult = (int) (chance) / 100; | |
+ return new MinMax(mult * min, (chance % 100) > 0 ? (mult + 1) * max : mult * max); | |
+ } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment