Skip to content

Instantly share code, notes, and snippets.

@Battlecruiser
Created May 22, 2014 16:07
Show Gist options
  • Save Battlecruiser/c9dea623220e5ba2cb2c to your computer and use it in GitHub Desktop.
Save Battlecruiser/c9dea623220e5ba2cb2c to your computer and use it in GitHub Desktop.
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>&nbsp;</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>&nbsp;</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>&nbsp;</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