Fixed drop chance multiplier by item id.

This commit is contained in:
MobiusDev 2017-10-04 01:09:16 +00:00
parent ed4be650f8
commit 2c61857b12
10 changed files with 176 additions and 16 deletions

View File

@ -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>&nbsp;</td></tr></table>"); sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=259>&nbsp;</td></tr></table>");
height += 64; height += 64;

View File

@ -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);

View File

@ -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>&nbsp;</td></tr></table>"); sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=259>&nbsp;</td></tr></table>");
height += 64; height += 64;

View File

@ -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);

View File

@ -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>&nbsp;</td></tr></table>"); sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=259>&nbsp;</td></tr></table>");
height += 64; height += 64;

View File

@ -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);

View File

@ -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":

View File

@ -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;
} }

View File

@ -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>&nbsp;</td></tr></table>"); sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=259>&nbsp;</td></tr></table>");
height += 64; height += 64;

View File

@ -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);