Fixed drop chance multiplier by item id.
This commit is contained in:
parent
ed4be650f8
commit
2c61857b12
@ -517,7 +517,7 @@ public class NpcViewMod implements IBypassHandler
|
|||||||
|
|
||||||
sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>");
|
sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>");
|
||||||
sb.append("<td width=205 align=center>");
|
sb.append("<td width=205 align=center>");
|
||||||
sb.append(chanceFormat.format(Math.min(generalDropItem.getChance(), 100)));
|
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=259> </td></tr></table>");
|
sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=259> </td></tr></table>");
|
||||||
|
|
||||||
height += 64;
|
height += 64;
|
||||||
|
@ -71,8 +71,40 @@ public class GroupedGeneralDropItem implements IDropItem
|
|||||||
for (GeneralDropItem gdi : getItems())
|
for (GeneralDropItem gdi : getItems())
|
||||||
{
|
{
|
||||||
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
||||||
if ((item == null) || !item.hasExImmediateEffect())
|
if (item == null)
|
||||||
{
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!item.hasExImmediateEffect())
|
||||||
|
{
|
||||||
|
// individual chance
|
||||||
|
Float individualDropChanceMultiplier = null;
|
||||||
|
if (killer.getActingPlayer().hasPremiumStatus())
|
||||||
|
{
|
||||||
|
final Float normalMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
final Float premiumMultiplier = Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
if ((normalMultiplier != null) && (premiumMultiplier != null))
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = normalMultiplier * premiumMultiplier;
|
||||||
|
}
|
||||||
|
else if (normalMultiplier != null)
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = normalMultiplier;
|
||||||
|
}
|
||||||
|
else if (premiumMultiplier != null)
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = premiumMultiplier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
}
|
||||||
|
if (individualDropChanceMultiplier != null)
|
||||||
|
{
|
||||||
|
return getChance() * individualDropChanceMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
return getChance() * getGlobalChanceMultiplier();
|
return getChance() * getGlobalChanceMultiplier();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +162,7 @@ public class GroupedGeneralDropItem implements IDropItem
|
|||||||
for (GeneralDropItem item : getItems())
|
for (GeneralDropItem item : getItems())
|
||||||
{
|
{
|
||||||
// Grouped item chance rates should not be modified.
|
// Grouped item chance rates should not be modified.
|
||||||
totalChance += item.getChance();
|
totalChance += item.getChance(victim, killer);
|
||||||
if (totalChance > random)
|
if (totalChance > random)
|
||||||
{
|
{
|
||||||
final Collection<ItemHolder> items = new ArrayList<>(1);
|
final Collection<ItemHolder> items = new ArrayList<>(1);
|
||||||
|
@ -517,7 +517,7 @@ public class NpcViewMod implements IBypassHandler
|
|||||||
|
|
||||||
sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>");
|
sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>");
|
||||||
sb.append("<td width=205 align=center>");
|
sb.append("<td width=205 align=center>");
|
||||||
sb.append(chanceFormat.format(Math.min(generalDropItem.getChance(), 100)));
|
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=259> </td></tr></table>");
|
sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=259> </td></tr></table>");
|
||||||
|
|
||||||
height += 64;
|
height += 64;
|
||||||
|
@ -71,8 +71,40 @@ public class GroupedGeneralDropItem implements IDropItem
|
|||||||
for (GeneralDropItem gdi : getItems())
|
for (GeneralDropItem gdi : getItems())
|
||||||
{
|
{
|
||||||
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
||||||
if ((item == null) || !item.hasExImmediateEffect())
|
if (item == null)
|
||||||
{
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!item.hasExImmediateEffect())
|
||||||
|
{
|
||||||
|
// individual chance
|
||||||
|
Float individualDropChanceMultiplier = null;
|
||||||
|
if (killer.getActingPlayer().hasPremiumStatus())
|
||||||
|
{
|
||||||
|
final Float normalMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
final Float premiumMultiplier = Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
if ((normalMultiplier != null) && (premiumMultiplier != null))
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = normalMultiplier * premiumMultiplier;
|
||||||
|
}
|
||||||
|
else if (normalMultiplier != null)
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = normalMultiplier;
|
||||||
|
}
|
||||||
|
else if (premiumMultiplier != null)
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = premiumMultiplier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
}
|
||||||
|
if (individualDropChanceMultiplier != null)
|
||||||
|
{
|
||||||
|
return getChance() * individualDropChanceMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
return getChance() * getGlobalChanceMultiplier();
|
return getChance() * getGlobalChanceMultiplier();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +162,7 @@ public class GroupedGeneralDropItem implements IDropItem
|
|||||||
for (GeneralDropItem item : getItems())
|
for (GeneralDropItem item : getItems())
|
||||||
{
|
{
|
||||||
// Grouped item chance rates should not be modified.
|
// Grouped item chance rates should not be modified.
|
||||||
totalChance += item.getChance();
|
totalChance += item.getChance(victim, killer);
|
||||||
if (totalChance > random)
|
if (totalChance > random)
|
||||||
{
|
{
|
||||||
final Collection<ItemHolder> items = new ArrayList<>(1);
|
final Collection<ItemHolder> items = new ArrayList<>(1);
|
||||||
|
@ -517,7 +517,7 @@ public class NpcViewMod implements IBypassHandler
|
|||||||
|
|
||||||
sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>");
|
sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>");
|
||||||
sb.append("<td width=205 align=center>");
|
sb.append("<td width=205 align=center>");
|
||||||
sb.append(chanceFormat.format(Math.min(generalDropItem.getChance(), 100)));
|
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=259> </td></tr></table>");
|
sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=259> </td></tr></table>");
|
||||||
|
|
||||||
height += 64;
|
height += 64;
|
||||||
|
@ -71,8 +71,40 @@ public class GroupedGeneralDropItem implements IDropItem
|
|||||||
for (GeneralDropItem gdi : getItems())
|
for (GeneralDropItem gdi : getItems())
|
||||||
{
|
{
|
||||||
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
||||||
if ((item == null) || !item.hasExImmediateEffect())
|
if (item == null)
|
||||||
{
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!item.hasExImmediateEffect())
|
||||||
|
{
|
||||||
|
// individual chance
|
||||||
|
Float individualDropChanceMultiplier = null;
|
||||||
|
if (killer.getActingPlayer().hasPremiumStatus())
|
||||||
|
{
|
||||||
|
final Float normalMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
final Float premiumMultiplier = Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
if ((normalMultiplier != null) && (premiumMultiplier != null))
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = normalMultiplier * premiumMultiplier;
|
||||||
|
}
|
||||||
|
else if (normalMultiplier != null)
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = normalMultiplier;
|
||||||
|
}
|
||||||
|
else if (premiumMultiplier != null)
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = premiumMultiplier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
}
|
||||||
|
if (individualDropChanceMultiplier != null)
|
||||||
|
{
|
||||||
|
return getChance() * individualDropChanceMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
return getChance() * getGlobalChanceMultiplier();
|
return getChance() * getGlobalChanceMultiplier();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +162,7 @@ public class GroupedGeneralDropItem implements IDropItem
|
|||||||
for (GeneralDropItem item : getItems())
|
for (GeneralDropItem item : getItems())
|
||||||
{
|
{
|
||||||
// Grouped item chance rates should not be modified.
|
// Grouped item chance rates should not be modified.
|
||||||
totalChance += item.getChance();
|
totalChance += item.getChance(victim, killer);
|
||||||
if (totalChance > random)
|
if (totalChance > random)
|
||||||
{
|
{
|
||||||
final Collection<ItemHolder> items = new ArrayList<>(1);
|
final Collection<ItemHolder> items = new ArrayList<>(1);
|
||||||
|
@ -93,7 +93,7 @@ public class NpcViewMod implements IBypassHandler
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
NpcViewMod.sendNpcView(activeChar, npc);
|
sendNpcView(activeChar, npc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "droplist":
|
case "droplist":
|
||||||
|
@ -71,8 +71,40 @@ public class GroupedGeneralDropItem implements IDropItem
|
|||||||
for (GeneralDropItem gdi : getItems())
|
for (GeneralDropItem gdi : getItems())
|
||||||
{
|
{
|
||||||
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
||||||
if ((item == null) || !item.hasExImmediateEffect())
|
if (item == null)
|
||||||
{
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!item.hasExImmediateEffect())
|
||||||
|
{
|
||||||
|
// individual chance
|
||||||
|
Float individualDropChanceMultiplier = null;
|
||||||
|
if (killer.getActingPlayer().hasPremiumStatus())
|
||||||
|
{
|
||||||
|
final Float normalMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
final Float premiumMultiplier = Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
if ((normalMultiplier != null) && (premiumMultiplier != null))
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = normalMultiplier * premiumMultiplier;
|
||||||
|
}
|
||||||
|
else if (normalMultiplier != null)
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = normalMultiplier;
|
||||||
|
}
|
||||||
|
else if (premiumMultiplier != null)
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = premiumMultiplier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
}
|
||||||
|
if (individualDropChanceMultiplier != null)
|
||||||
|
{
|
||||||
|
return getChance() * individualDropChanceMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
return getChance() * getGlobalChanceMultiplier();
|
return getChance() * getGlobalChanceMultiplier();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,12 +162,12 @@ public class GroupedGeneralDropItem implements IDropItem
|
|||||||
for (GeneralDropItem item : getItems())
|
for (GeneralDropItem item : getItems())
|
||||||
{
|
{
|
||||||
// Grouped item chance rates should not be modified.
|
// Grouped item chance rates should not be modified.
|
||||||
totalChance += item.getChance();
|
totalChance += item.getChance(victim, killer);
|
||||||
if (totalChance > random)
|
if (totalChance > random)
|
||||||
{
|
{
|
||||||
final Collection<ItemHolder> items = new ArrayList<>(1);
|
final Collection<ItemHolder> items = new ArrayList<>(1);
|
||||||
final long baseDropCount = Rnd.get(item.getMin(victim, killer), item.getMax(victim, killer));
|
final long baseDropCount = Rnd.get(item.getMin(victim, killer), item.getMax(victim, killer));
|
||||||
final long finaldropCount = (long) (Config.L2JMOD_OLD_DROP_BEHAVIOR ? (baseDropCount * Math.max(1, chance / 100)) + (chance > 100 && (chance % 100) > (Rnd.nextDouble() * 100) ? baseDropCount : 0) : baseDropCount);
|
final long finaldropCount = (long) (Config.L2JMOD_OLD_DROP_BEHAVIOR ? (baseDropCount * Math.max(1, chance / 100)) + ((chance > 100) && ((chance % 100) > (Rnd.nextDouble() * 100)) ? baseDropCount : 0) : baseDropCount);
|
||||||
items.add(new ItemHolder(item.getItemId(), finaldropCount));
|
items.add(new ItemHolder(item.getItemId(), finaldropCount));
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
@ -517,7 +517,7 @@ public class NpcViewMod implements IBypassHandler
|
|||||||
|
|
||||||
sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>");
|
sb.append("</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>");
|
||||||
sb.append("<td width=205 align=center>");
|
sb.append("<td width=205 align=center>");
|
||||||
sb.append(chanceFormat.format(Math.min(generalDropItem.getChance(), 100)));
|
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=259> </td></tr></table>");
|
sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=259> </td></tr></table>");
|
||||||
|
|
||||||
height += 64;
|
height += 64;
|
||||||
|
@ -71,8 +71,40 @@ public class GroupedGeneralDropItem implements IDropItem
|
|||||||
for (GeneralDropItem gdi : getItems())
|
for (GeneralDropItem gdi : getItems())
|
||||||
{
|
{
|
||||||
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
||||||
if ((item == null) || !item.hasExImmediateEffect())
|
if (item == null)
|
||||||
{
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!item.hasExImmediateEffect())
|
||||||
|
{
|
||||||
|
// individual chance
|
||||||
|
Float individualDropChanceMultiplier = null;
|
||||||
|
if (killer.getActingPlayer().hasPremiumStatus())
|
||||||
|
{
|
||||||
|
final Float normalMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
final Float premiumMultiplier = Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
if ((normalMultiplier != null) && (premiumMultiplier != null))
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = normalMultiplier * premiumMultiplier;
|
||||||
|
}
|
||||||
|
else if (normalMultiplier != null)
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = normalMultiplier;
|
||||||
|
}
|
||||||
|
else if (premiumMultiplier != null)
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = premiumMultiplier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
individualDropChanceMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(item.getId());
|
||||||
|
}
|
||||||
|
if (individualDropChanceMultiplier != null)
|
||||||
|
{
|
||||||
|
return getChance() * individualDropChanceMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
return getChance() * getGlobalChanceMultiplier();
|
return getChance() * getGlobalChanceMultiplier();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +162,7 @@ public class GroupedGeneralDropItem implements IDropItem
|
|||||||
for (GeneralDropItem item : getItems())
|
for (GeneralDropItem item : getItems())
|
||||||
{
|
{
|
||||||
// Grouped item chance rates should not be modified.
|
// Grouped item chance rates should not be modified.
|
||||||
totalChance += item.getChance();
|
totalChance += item.getChance(victim, killer);
|
||||||
if (totalChance > random)
|
if (totalChance > random)
|
||||||
{
|
{
|
||||||
final Collection<ItemHolder> items = new ArrayList<>(1);
|
final Collection<ItemHolder> items = new ArrayList<>(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user