Drops rework.
This commit is contained in:
@@ -1,10 +0,0 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Old Drop Behavior
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Enables L2J old drop behavior
|
||||
# The old L2J system used to add amount of items drop per 100% range of chance.
|
||||
# For example, if chance is 230% when rate are applied, it will do :
|
||||
# amount dropped = (2 * getRandomAmount(min,max)) + 30% chance to get ad additional getRandomAmount(min,max)
|
||||
# Default : False
|
||||
OldDropBehavior = False
|
||||
@@ -229,11 +229,6 @@ AutoDeleteInvalidQuestData = False
|
||||
# Retail: True
|
||||
StoryQuestRewardBuff = True
|
||||
|
||||
# If True, allows a special handling for drops when chance raises over 100% (eg. when applying chance rates).
|
||||
# True value causes better drop handling at higher rates.
|
||||
# Default: True
|
||||
PreciseDropCalculation = True
|
||||
|
||||
# Allow creating multiple non-stackable items at one time?
|
||||
# Default: True
|
||||
MultipleItemDrop = True
|
||||
|
||||
@@ -174,36 +174,6 @@ GrandChaosTime = 10
|
||||
MinionChaosTime = 10
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Drops
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# The min and max level difference used for level gap calculation
|
||||
# this is only for how many levels higher the player is than the monster
|
||||
# Default: 8
|
||||
DropAdenaMinLevelDifference = 8
|
||||
# Default: 15
|
||||
DropAdenaMaxLevelDifference = 15
|
||||
|
||||
# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
|
||||
# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
|
||||
# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
|
||||
# Default: 10
|
||||
DropAdenaMinLevelGapChance = 10
|
||||
|
||||
# The min and max level difference used for level gap calculation
|
||||
# this is only for how many levels higher the player is than the monster
|
||||
# Default: 5
|
||||
DropItemMinLevelDifference = 5
|
||||
# Default: 10
|
||||
DropItemMaxLevelDifference = 10
|
||||
|
||||
# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
|
||||
# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
|
||||
# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
|
||||
# Default: 10
|
||||
DropItemMinLevelGapChance = 10
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Vitality
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@@ -5,39 +5,6 @@
|
||||
# Warning:
|
||||
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Item Rates
|
||||
# ---------------------------------------------------------------------------
|
||||
# Warning: to achieve old l2j behavior before drops rework you need to enable OldDropBehavior in Custom.ini
|
||||
# and increase only chance multipliers! Remember if you increase both chance and amount you will have higher rates than expected
|
||||
# Example: if amount multiplier is 5 and chance multiplier is 5 you will end up with 5*5 = 25 drop rates so be careful!
|
||||
|
||||
# Multiplies the amount of items dropped from monster on ground when it dies.
|
||||
DeathDropAmountMultiplier = 1
|
||||
# Multiplies the amount of items looted from monster when a skill like Sweeper(Spoil) is used.
|
||||
CorpseDropAmountMultiplier = 1
|
||||
# Multiplies the amount of items dropped from monster on ground when it dies.
|
||||
HerbDropAmountMultiplier = 1
|
||||
RaidDropAmountMultiplier = 1
|
||||
|
||||
# Multiplies the chance of items that can be dropped from monster on ground when it dies.
|
||||
DeathDropChanceMultiplier = 1
|
||||
# Multiplies the chance of items that can be looted from monster when a skill like Sweeper(Spoil) is used.
|
||||
CorpseDropChanceMultiplier = 1
|
||||
# Multiplies the chance of items that can be dropped from monster on ground when it dies.
|
||||
HerbDropChanceMultiplier = 1
|
||||
RaidDropChanceMultiplier = 1
|
||||
|
||||
# List of items affected by custom drop rate by id, used now for Adena rate too.
|
||||
# Usage: itemId1,multiplier1;itemId2,multiplier2;...
|
||||
# Note: Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
|
||||
# Example for Raid boss 1x jewelry: 6656,1;6657,1;6658,1;6659,1;6660,1;6661,1;6662,1;8191,1;10170,1;10314,1;
|
||||
# Default: 57,1
|
||||
DropAmountMultiplierByItemId = 57,1
|
||||
DropChanceMultiplierByItemId = 57,1
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Standard Settings (Retail value = 1)
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -109,6 +76,68 @@ RateQuestRewardRecipe = 1
|
||||
RateQuestRewardMaterial = 1
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Item Drop Rates
|
||||
# ---------------------------------------------------------------------------
|
||||
# Remember if you increase both chance and amount you will have higher rates than expected.
|
||||
# Example: if amount multiplier is 5 and chance multiplier is 5 you will end up with 5*5 = 25 drop rates so be careful!
|
||||
|
||||
# Multiplies the amount of items rewarded from monsters when they die.
|
||||
DeathDropAmountMultiplier = 1
|
||||
# Multiplies the amount of items rewarded from monsters when a Spoil skill is used.
|
||||
SpoilDropAmountMultiplier = 1
|
||||
# Multiplies the amount of items rewarded from monsters when they die.
|
||||
HerbDropAmountMultiplier = 1
|
||||
RaidDropAmountMultiplier = 1
|
||||
|
||||
# Multiplies the chance of items that can be rewarded from monsters when they die.
|
||||
DeathDropChanceMultiplier = 1
|
||||
# Multiplies the chance of items that can be rewarded from monsters when a Spoil skill is used.
|
||||
SpoilDropChanceMultiplier = 1
|
||||
# Multiplies the chance of items that can be rewarded from monsters when they die.
|
||||
HerbDropChanceMultiplier = 1
|
||||
RaidDropChanceMultiplier = 1
|
||||
|
||||
# List of items affected by custom drop rate by id, used now for Adena rate too.
|
||||
# Usage: itemId1,multiplier1;itemId2,multiplier2;...
|
||||
# Note: Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
|
||||
# Example for Raid boss 1x jewelry: 6656,1;6657,1;6658,1;6659,1;6660,1;6661,1;6662,1;8191,1;10170,1;10314,1;
|
||||
# Default: 57,1
|
||||
DropAmountMultiplierByItemId = 57,1
|
||||
DropChanceMultiplierByItemId = 57,1
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Item Drop Level Difference Settings
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# The min and max level difference used for level gap calculation
|
||||
# this is only for how many levels higher the player is than the monster
|
||||
# Default: 8
|
||||
DropAdenaMinLevelDifference = 8
|
||||
# Default: 15
|
||||
DropAdenaMaxLevelDifference = 15
|
||||
|
||||
# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
|
||||
# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
|
||||
# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
|
||||
# Default: 10
|
||||
DropAdenaMinLevelGapChance = 10
|
||||
|
||||
# The min and max level difference used for level gap calculation
|
||||
# this is only for how many levels higher the player is than the monster
|
||||
# Default: 5
|
||||
DropItemMinLevelDifference = 5
|
||||
# Default: 10
|
||||
DropItemMaxLevelDifference = 10
|
||||
|
||||
# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
|
||||
# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
|
||||
# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
|
||||
# Default: 10
|
||||
DropItemMinLevelGapChance = 10
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Vitality system rates. Works only if EnableVitality = True
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@@ -265,7 +265,7 @@ public class AdminAdmin implements IAdminCommandHandler
|
||||
}
|
||||
case "RateDropSpoil":
|
||||
{
|
||||
Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER = Float.valueOf(pValue);
|
||||
Config.RATE_SPOIL_DROP_CHANCE_MULTIPLIER = Float.valueOf(pValue);
|
||||
break;
|
||||
}
|
||||
case "EnchantChanceElementStone":
|
||||
@@ -462,7 +462,7 @@ public class AdminAdmin implements IAdminCommandHandler
|
||||
replyMSG.append("<tr><td><font color=\"00AA00\">Drop:</font></td><td></td><td></td></tr>");
|
||||
replyMSG.append("<tr><td><font color=\"LEVEL\">Rate EXP</font> = " + Config.RATE_XP + "</td><td><edit var=\"param1\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig RateXp $param1\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
||||
replyMSG.append("<tr><td><font color=\"LEVEL\">Rate SP</font> = " + Config.RATE_SP + "</td><td><edit var=\"param2\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig RateSp $param2\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
||||
replyMSG.append("<tr><td><font color=\"LEVEL\">Rate Drop Spoil</font> = " + Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER + "</td><td><edit var=\"param4\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig RateDropSpoil $param4\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
||||
replyMSG.append("<tr><td><font color=\"LEVEL\">Rate Drop Spoil</font> = " + Config.RATE_SPOIL_DROP_CHANCE_MULTIPLIER + "</td><td><edit var=\"param4\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig RateDropSpoil $param4\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
||||
replyMSG.append("<tr><td width=140></td><td width=40></td><td width=40></td></tr>");
|
||||
replyMSG.append("<tr><td><font color=\"00AA00\">Enchant:</font></td><td></td><td></td></tr>");
|
||||
replyMSG.append("<tr><td><font color=\"LEVEL\">Enchant Element Stone</font> = " + Config.ENCHANT_CHANCE_ELEMENT_STONE + "</td><td><edit var=\"param8\" width=40 height=15></td><td><button value=\"Set\" action=\"bypass -h admin_setconfig EnchantChanceElementStone $param8\" width=40 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
||||
|
||||
@@ -18,14 +18,15 @@ package handlers.bypasshandlers;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.CommonUtil;
|
||||
import com.l2jmobius.gameserver.cache.HtmCache;
|
||||
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import com.l2jmobius.gameserver.enums.AttributeType;
|
||||
import com.l2jmobius.gameserver.enums.DropType;
|
||||
import com.l2jmobius.gameserver.handler.IBypassHandler;
|
||||
import com.l2jmobius.gameserver.model.L2Object;
|
||||
import com.l2jmobius.gameserver.model.L2Spawn;
|
||||
@@ -34,10 +35,7 @@ import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.drops.DropListScope;
|
||||
import com.l2jmobius.gameserver.model.drops.GeneralDropItem;
|
||||
import com.l2jmobius.gameserver.model.drops.GroupedGeneralDropItem;
|
||||
import com.l2jmobius.gameserver.model.drops.IDropItem;
|
||||
import com.l2jmobius.gameserver.model.holders.DropHolder;
|
||||
import com.l2jmobius.gameserver.model.items.L2Item;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||
import com.l2jmobius.gameserver.util.HtmlUtil;
|
||||
@@ -106,10 +104,10 @@ public class NpcViewMod implements IBypassHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
final String dropListScopeString = st.nextToken();
|
||||
final String dropListTypeString = st.nextToken();
|
||||
try
|
||||
{
|
||||
final DropListScope dropListScope = Enum.valueOf(DropListScope.class, dropListScopeString);
|
||||
final DropType dropListType = Enum.valueOf(DropType.class, dropListTypeString);
|
||||
final L2Object target = L2World.getInstance().findObject(Integer.parseInt(st.nextToken()));
|
||||
final L2Npc npc = target instanceof L2Npc ? (L2Npc) target : null;
|
||||
if (npc == null)
|
||||
@@ -117,7 +115,7 @@ public class NpcViewMod implements IBypassHandler
|
||||
return false;
|
||||
}
|
||||
final int page = st.hasMoreElements() ? Integer.parseInt(st.nextToken()) : 0;
|
||||
sendNpcDropList(activeChar, npc, dropListScope, page);
|
||||
sendNpcDropList(activeChar, npc, dropListType, page);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
@@ -125,7 +123,7 @@ public class NpcViewMod implements IBypassHandler
|
||||
}
|
||||
catch (IllegalArgumentException e)
|
||||
{
|
||||
_log.warning("Bypass[NpcViewMod] unknown drop list scope: " + dropListScopeString);
|
||||
_log.warning("Bypass[NpcViewMod] unknown drop list scope: " + dropListTypeString);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
@@ -336,21 +334,22 @@ public class NpcViewMod implements IBypassHandler
|
||||
activeChar.sendPacket(html);
|
||||
}
|
||||
|
||||
public static String getDropListButtons(L2Npc npc)
|
||||
private static String getDropListButtons(L2Npc npc)
|
||||
{
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final Map<DropListScope, List<IDropItem>> dropLists = npc.getTemplate().getDropLists();
|
||||
if ((dropLists != null) && !dropLists.isEmpty() && (dropLists.containsKey(DropListScope.DEATH) || dropLists.containsKey(DropListScope.CORPSE)))
|
||||
final List<DropHolder> dropListDeath = npc.getTemplate().getDropList(DropType.DROP);
|
||||
final List<DropHolder> dropListSpoil = npc.getTemplate().getDropList(DropType.SPOIL);
|
||||
if ((dropListDeath != null) || (dropListSpoil != null))
|
||||
{
|
||||
sb.append("<table width=275 cellpadding=0 cellspacing=0><tr>");
|
||||
if (dropLists.containsKey(DropListScope.DEATH))
|
||||
if (dropListDeath != null)
|
||||
{
|
||||
sb.append("<td align=center><button value=\"Show Drop\" width=100 height=25 action=\"bypass NpcViewMod dropList DEATH " + npc.getObjectId() + "\" back=\"L2UI_CT1.Button_DF_Calculator_Down\" fore=\"L2UI_CT1.Button_DF_Calculator\"></td>");
|
||||
sb.append("<td align=center><button value=\"Show Drop\" width=100 height=25 action=\"bypass NpcViewMod dropList DROP " + npc.getObjectId() + "\" back=\"L2UI_CT1.Button_DF_Calculator_Down\" fore=\"L2UI_CT1.Button_DF_Calculator\"></td>");
|
||||
}
|
||||
|
||||
if (dropLists.containsKey(DropListScope.CORPSE))
|
||||
if (dropListSpoil != null)
|
||||
{
|
||||
sb.append("<td align=center><button value=\"Show Spoil\" width=100 height=25 action=\"bypass NpcViewMod dropList CORPSE " + npc.getObjectId() + "\" back=\"L2UI_CT1.Button_DF_Calculator_Down\" fore=\"L2UI_CT1.Button_DF_Calculator\"></td>");
|
||||
sb.append("<td align=center><button value=\"Show Spoil\" width=100 height=25 action=\"bypass NpcViewMod dropList SPOIL " + npc.getObjectId() + "\" back=\"L2UI_CT1.Button_DF_Calculator_Down\" fore=\"L2UI_CT1.Button_DF_Calculator\"></td>");
|
||||
}
|
||||
|
||||
sb.append("</tr></table>");
|
||||
@@ -358,10 +357,10 @@ public class NpcViewMod implements IBypassHandler
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static void sendNpcDropList(L2PcInstance activeChar, L2Npc npc, DropListScope dropListScope, int page)
|
||||
private static void sendNpcDropList(L2PcInstance activeChar, L2Npc npc, DropType dropType, int page)
|
||||
{
|
||||
final List<IDropItem> dropList = npc.getTemplate().getDropList(dropListScope);
|
||||
if ((dropList == null) || dropList.isEmpty())
|
||||
final List<DropHolder> dropList = npc.getTemplate().getDropList(dropType);
|
||||
if (dropList == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -378,7 +377,7 @@ public class NpcViewMod implements IBypassHandler
|
||||
pagesSb.append("<table><tr>");
|
||||
for (int i = 0; i < pages; i++)
|
||||
{
|
||||
pagesSb.append("<td align=center><button value=\"" + (i + 1) + "\" width=20 height=20 action=\"bypass NpcViewMod dropList " + dropListScope + " " + npc.getObjectId() + " " + i + "\" back=\"L2UI_CT1.Button_DF_Calculator_Down\" fore=\"L2UI_CT1.Button_DF_Calculator\"></td>");
|
||||
pagesSb.append("<td align=center><button value=\"" + (i + 1) + "\" width=20 height=20 action=\"bypass NpcViewMod dropList " + dropType + " " + npc.getObjectId() + " " + i + "\" back=\"L2UI_CT1.Button_DF_Calculator_Down\" fore=\"L2UI_CT1.Button_DF_Calculator\"></td>");
|
||||
}
|
||||
pagesSb.append("</tr></table>");
|
||||
}
|
||||
@@ -409,124 +408,126 @@ public class NpcViewMod implements IBypassHandler
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
int height = 64;
|
||||
final IDropItem dropItem = dropList.get(i);
|
||||
if (dropItem instanceof GeneralDropItem)
|
||||
final DropHolder dropItem = dropList.get(i);
|
||||
final L2Item item = ItemTable.getInstance().getTemplate(dropItem.getItemId());
|
||||
|
||||
// real time server rate calculations
|
||||
double rateChance = 1;
|
||||
double rateAmount = 1;
|
||||
if (dropType == DropType.SPOIL)
|
||||
{
|
||||
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>");
|
||||
rateChance = Config.RATE_SPOIL_DROP_CHANCE_MULTIPLIER;
|
||||
rateAmount = Config.RATE_SPOIL_DROP_AMOUNT_MULTIPLIER;
|
||||
|
||||
final long min = generalDropItem.getMin(npc, activeChar);
|
||||
final long max = generalDropItem.getMax(npc, activeChar);
|
||||
if (min == max)
|
||||
// also check premium rates if available
|
||||
if (Config.PREMIUM_SYSTEM_ENABLED && activeChar.hasPremiumStatus())
|
||||
{
|
||||
sb.append(amountFormat.format(min));
|
||||
rateChance *= Config.PREMIUM_RATE_SPOIL_CHANCE;
|
||||
rateAmount *= Config.PREMIUM_RATE_SPOIL_AMOUNT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Config.RATE_DROP_CHANCE_BY_ID.get(dropItem.getItemId()) != null)
|
||||
{
|
||||
rateChance *= Config.RATE_DROP_CHANCE_BY_ID.get(dropItem.getItemId());
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
rateChance *= Config.RATE_HERB_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
else if (npc.isRaid())
|
||||
{
|
||||
rateChance *= Config.RATE_RAID_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.append(amountFormat.format(min));
|
||||
sb.append(" - ");
|
||||
sb.append(amountFormat.format(max));
|
||||
rateChance *= Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
|
||||
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>");
|
||||
}
|
||||
else if (dropItem instanceof GroupedGeneralDropItem)
|
||||
{
|
||||
final GroupedGeneralDropItem generalGroupedDropItem = (GroupedGeneralDropItem) dropItem;
|
||||
if (generalGroupedDropItem.getItems().size() == 1)
|
||||
if (Config.RATE_DROP_AMOUNT_BY_ID.get(dropItem.getItemId()) != null)
|
||||
{
|
||||
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)
|
||||
rateAmount *= Config.RATE_DROP_AMOUNT_BY_ID.get(dropItem.getItemId());
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
rateAmount *= Config.RATE_HERB_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
else if (npc.isRaid())
|
||||
{
|
||||
rateAmount *= Config.RATE_RAID_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
else
|
||||
{
|
||||
rateAmount *= Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
|
||||
// also check premium rates if available
|
||||
if (Config.PREMIUM_SYSTEM_ENABLED && activeChar.hasPremiumStatus())
|
||||
{
|
||||
if (Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(dropItem.getItemId()) != null)
|
||||
{
|
||||
sb.append(amountFormat.format(min));
|
||||
rateChance *= Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(dropItem.getItemId());
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
// TODO: Premium herb chance? :)
|
||||
}
|
||||
else if (npc.isRaid())
|
||||
{
|
||||
// TODO: Premium raid chance? :)
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.append(amountFormat.format(min));
|
||||
sb.append(" - ");
|
||||
sb.append(amountFormat.format(max));
|
||||
rateChance *= Config.PREMIUM_RATE_DROP_CHANCE;
|
||||
}
|
||||
|
||||
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>");
|
||||
}
|
||||
else
|
||||
{
|
||||
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("%</td></tr></table><br>");
|
||||
|
||||
for (GeneralDropItem generalDropItem : generalGroupedDropItem.getItems())
|
||||
if (Config.PREMIUM_RATE_DROP_AMOUNT_BY_ID.get(dropItem.getItemId()) != null)
|
||||
{
|
||||
final L2Item item = ItemTable.getInstance().getTemplate(generalDropItem.getItemId());
|
||||
sb.append("<table width=291 cellpadding=2 cellspacing=0 background=\"L2UI_CT1.Windows.Windows_DF_TooltipBG\">");
|
||||
sb.append("<tr><td width=32 valign=top>");
|
||||
String icon = item.getIcon();
|
||||
if (icon == null)
|
||||
{
|
||||
icon = "icon.etc_question_mark_i00";
|
||||
}
|
||||
sb.append("<img src=\"" + icon + "\" width=32 height=32>");
|
||||
sb.append("</td><td fixwidth=259 align=center><font name=\"hs9\" color=\"CD9000\">");
|
||||
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);
|
||||
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=205 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=259> </td></tr></table>");
|
||||
|
||||
height += 64;
|
||||
rateAmount *= Config.PREMIUM_RATE_DROP_AMOUNT_BY_ID.get(dropItem.getItemId());
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
// TODO: Premium herb amount? :)
|
||||
}
|
||||
else if (npc.isRaid())
|
||||
{
|
||||
// TODO: Premium raid amount? :)
|
||||
}
|
||||
else
|
||||
{
|
||||
rateAmount *= Config.PREMIUM_RATE_DROP_AMOUNT;
|
||||
}
|
||||
|
||||
sb.append("</td></tr><tr><td width=32></td><td width=300> </td></tr></table>");
|
||||
}
|
||||
}
|
||||
|
||||
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() == null ? "icon.etc_question_mark_i00" : 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 = (long) (dropItem.getMin() * rateAmount);
|
||||
final long max = (long) (dropItem.getMax() * rateAmount);
|
||||
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((long) dropItem.getChance() * rateChance, 100)));
|
||||
sb.append("%</td></tr></table></td></tr><tr><td width=32></td><td width=300> </td></tr></table>");
|
||||
|
||||
if ((sb.length() + rightSb.length() + leftSb.length()) < 16000) // limit of 32766?
|
||||
{
|
||||
if (leftHeight >= (rightHeight + height))
|
||||
|
||||
@@ -22,23 +22,21 @@ import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.cache.HtmCache;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.NpcData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.SpawnsData;
|
||||
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import com.l2jmobius.gameserver.enums.DropType;
|
||||
import com.l2jmobius.gameserver.handler.CommunityBoardHandler;
|
||||
import com.l2jmobius.gameserver.handler.IParseBoardHandler;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
||||
import com.l2jmobius.gameserver.model.drops.DropListScope;
|
||||
import com.l2jmobius.gameserver.model.drops.GeneralDropItem;
|
||||
import com.l2jmobius.gameserver.model.drops.GroupedGeneralDropItem;
|
||||
import com.l2jmobius.gameserver.model.drops.IDropItem;
|
||||
import com.l2jmobius.gameserver.model.holders.DropHolder;
|
||||
import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import com.l2jmobius.gameserver.model.items.L2Item;
|
||||
import com.l2jmobius.gameserver.model.spawns.NpcSpawnTemplate;
|
||||
@@ -56,40 +54,40 @@ public class DropSearchBoard implements IParseBoardHandler
|
||||
"_bbs_npc_trace"
|
||||
};
|
||||
|
||||
class DropHolder
|
||||
class CBDropHolder
|
||||
{
|
||||
int itemId;
|
||||
int npcId;
|
||||
byte npcLevel;
|
||||
long basemin;
|
||||
long basemax;
|
||||
double baseGroupChance;
|
||||
double basechance;
|
||||
boolean isSweep;
|
||||
long min;
|
||||
long max;
|
||||
double chance;
|
||||
boolean isSpoil;
|
||||
boolean isRaid;
|
||||
|
||||
public DropHolder(L2NpcTemplate npc, GeneralDropItem item, double groupChance, boolean isSweep)
|
||||
public CBDropHolder(L2NpcTemplate npcTemplate, DropHolder dropHolder)
|
||||
{
|
||||
itemId = item.getItemId();
|
||||
npcId = npc.getId();
|
||||
npcLevel = npc.getLevel();
|
||||
basemin = item.getMin();
|
||||
basemax = item.getMax();
|
||||
baseGroupChance = groupChance;
|
||||
basechance = item.getChance();
|
||||
this.isSweep = isSweep;
|
||||
isSpoil = dropHolder.getDropType() == DropType.SPOIL;
|
||||
itemId = dropHolder.getItemId();
|
||||
npcId = npcTemplate.getId();
|
||||
npcLevel = npcTemplate.getLevel();
|
||||
min = dropHolder.getMin();
|
||||
max = dropHolder.getMax();
|
||||
chance = dropHolder.getChance();
|
||||
isRaid = npcTemplate.getType().equals("L2RaidBoss") || npcTemplate.getType().equals("L2GrandBoss");
|
||||
}
|
||||
|
||||
/**
|
||||
* only for debug'/;
|
||||
* only for debug
|
||||
*/
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "DropHolder [itemId=" + itemId + ", npcId=" + npcId + ", npcLevel=" + npcLevel + ", basemin=" + basemin + ", basemax=" + basemax + ", baseGroupChance=" + baseGroupChance + ", basechance=" + basechance + ", isSweep=" + isSweep + "]";
|
||||
return "DropHolder [itemId=" + itemId + ", npcId=" + npcId + ", npcLevel=" + npcLevel + ", min=" + min + ", max=" + max + ", chance=" + chance + ", isSpoil=" + isSpoil + "]";
|
||||
}
|
||||
}
|
||||
|
||||
private final Map<Integer, List<DropHolder>> DROP_INDEX_CACHE = new HashMap<>();
|
||||
private final Map<Integer, List<CBDropHolder>> DROP_INDEX_CACHE = new HashMap<>();
|
||||
|
||||
// nonsupport items
|
||||
private final Set<Integer> BLOCK_ID = new HashSet<>();
|
||||
@@ -104,44 +102,39 @@ public class DropSearchBoard implements IParseBoardHandler
|
||||
|
||||
private void buildDropIndex()
|
||||
{
|
||||
NpcData.getInstance().getTemplates(npc -> npc.getDropLists() != null).forEach(npcTemplate ->
|
||||
NpcData.getInstance().getTemplates(npc -> npc.getDropList(DropType.DROP) != null).forEach(npcTemplate ->
|
||||
{
|
||||
for (Entry<DropListScope, List<IDropItem>> entry : npcTemplate.getDropLists().entrySet())
|
||||
for (DropHolder dropHolder : npcTemplate.getDropList(DropType.DROP))
|
||||
{
|
||||
entry.getValue().forEach(idrop ->
|
||||
{
|
||||
if (idrop instanceof GroupedGeneralDropItem)
|
||||
{
|
||||
GroupedGeneralDropItem ggd = (GroupedGeneralDropItem) idrop;
|
||||
ggd.getItems().stream().forEach(gd -> addToDropList(npcTemplate, gd, ggd.getChance(), entry.getKey() == DropListScope.CORPSE));
|
||||
}
|
||||
else
|
||||
{
|
||||
GeneralDropItem gd = (GeneralDropItem) idrop;
|
||||
addToDropList(npcTemplate, gd, 100.0, entry.getKey() == DropListScope.CORPSE);
|
||||
}
|
||||
});
|
||||
addToDropList(npcTemplate, dropHolder);
|
||||
}
|
||||
});
|
||||
NpcData.getInstance().getTemplates(npc -> npc.getDropList(DropType.SPOIL) != null).forEach(npcTemplate ->
|
||||
{
|
||||
for (DropHolder dropHolder : npcTemplate.getDropList(DropType.SPOIL))
|
||||
{
|
||||
addToDropList(npcTemplate, dropHolder);
|
||||
}
|
||||
});
|
||||
|
||||
DROP_INDEX_CACHE.values().stream().forEach(l -> l.sort((d1, d2) -> Byte.valueOf(d1.npcLevel).compareTo(Byte.valueOf(d2.npcLevel))));
|
||||
}
|
||||
|
||||
private void addToDropList(L2NpcTemplate npcTemplate, GeneralDropItem gd, double groupChance, boolean isSweep)
|
||||
private void addToDropList(L2NpcTemplate npcTemplate, DropHolder dropHolder)
|
||||
{
|
||||
if (BLOCK_ID.contains(gd.getItemId()))
|
||||
if (BLOCK_ID.contains(dropHolder.getItemId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
List<DropHolder> dropList = DROP_INDEX_CACHE.get(gd.getItemId());
|
||||
List<CBDropHolder> dropList = DROP_INDEX_CACHE.get(dropHolder.getItemId());
|
||||
if (dropList == null)
|
||||
{
|
||||
dropList = new ArrayList<>();
|
||||
DROP_INDEX_CACHE.put(gd.getItemId(), dropList);
|
||||
DROP_INDEX_CACHE.put(dropHolder.getItemId(), dropList);
|
||||
}
|
||||
|
||||
dropList.add(new DropHolder(npcTemplate, gd, groupChance, isSweep));
|
||||
dropList.add(new CBDropHolder(npcTemplate, dropHolder));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -164,7 +157,7 @@ public class DropSearchBoard implements IParseBoardHandler
|
||||
final DecimalFormat chanceFormat = new DecimalFormat("0.00##");
|
||||
int itemId = Integer.parseInt(params[1]);
|
||||
int page = Integer.parseInt(params[2]);
|
||||
List<DropHolder> list = DROP_INDEX_CACHE.get(itemId);
|
||||
List<CBDropHolder> list = DROP_INDEX_CACHE.get(itemId);
|
||||
int pages = list.size() / 14;
|
||||
if (pages == 0)
|
||||
{
|
||||
@@ -176,13 +169,106 @@ public class DropSearchBoard implements IParseBoardHandler
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (int index = start; index <= end; index++)
|
||||
{
|
||||
DropHolder dropHolder = list.get(index);
|
||||
CBDropHolder cbDropHolder = list.get(index);
|
||||
|
||||
// real time server rate calculations
|
||||
double rateChance = 1;
|
||||
double rateAmount = 1;
|
||||
if (cbDropHolder.isSpoil)
|
||||
{
|
||||
rateChance = Config.RATE_SPOIL_DROP_CHANCE_MULTIPLIER;
|
||||
rateAmount = Config.RATE_SPOIL_DROP_AMOUNT_MULTIPLIER;
|
||||
|
||||
// also check premium rates if available
|
||||
if (Config.PREMIUM_SYSTEM_ENABLED && player.hasPremiumStatus())
|
||||
{
|
||||
rateChance *= Config.PREMIUM_RATE_SPOIL_CHANCE;
|
||||
rateAmount *= Config.PREMIUM_RATE_SPOIL_AMOUNT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
final L2Item item = ItemTable.getInstance().getTemplate(cbDropHolder.itemId);
|
||||
|
||||
if (Config.RATE_DROP_CHANCE_BY_ID.get(cbDropHolder.itemId) != null)
|
||||
{
|
||||
rateChance *= Config.RATE_DROP_CHANCE_BY_ID.get(cbDropHolder.itemId);
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
rateChance *= Config.RATE_HERB_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
else if (cbDropHolder.isRaid)
|
||||
{
|
||||
rateAmount *= Config.RATE_RAID_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
else
|
||||
{
|
||||
rateChance *= Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
|
||||
if (Config.RATE_DROP_AMOUNT_BY_ID.get(cbDropHolder.itemId) != null)
|
||||
{
|
||||
rateAmount *= Config.RATE_DROP_AMOUNT_BY_ID.get(cbDropHolder.itemId);
|
||||
}
|
||||
else if (cbDropHolder.isRaid)
|
||||
{
|
||||
rateAmount *= Config.RATE_RAID_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
rateAmount *= Config.RATE_HERB_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
else
|
||||
{
|
||||
rateAmount *= Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
|
||||
// also check premium rates if available
|
||||
if (Config.PREMIUM_SYSTEM_ENABLED && player.hasPremiumStatus())
|
||||
{
|
||||
if (Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(cbDropHolder.itemId) != null)
|
||||
{
|
||||
rateChance *= Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(cbDropHolder.itemId);
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
// TODO: Premium herb chance? :)
|
||||
}
|
||||
else if (cbDropHolder.isRaid)
|
||||
{
|
||||
// TODO: Premium raid chance? :)
|
||||
}
|
||||
else
|
||||
{
|
||||
rateChance *= Config.PREMIUM_RATE_DROP_CHANCE;
|
||||
}
|
||||
|
||||
if (Config.PREMIUM_RATE_DROP_AMOUNT_BY_ID.get(cbDropHolder.itemId) != null)
|
||||
{
|
||||
rateAmount *= Config.PREMIUM_RATE_DROP_AMOUNT_BY_ID.get(cbDropHolder.itemId);
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
// TODO: Premium herb amount? :)
|
||||
}
|
||||
else if (cbDropHolder.isRaid)
|
||||
{
|
||||
// TODO: Premium raid amount? :)
|
||||
}
|
||||
else
|
||||
{
|
||||
rateAmount *= Config.PREMIUM_RATE_DROP_AMOUNT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
builder.append("<tr>");
|
||||
builder.append("<td width=30>").append(dropHolder.npcLevel).append("</td>");
|
||||
builder.append("<td width=170>").append("<a action=\"bypass _bbs_npc_trace " + dropHolder.npcId + "\">").append("&@").append(dropHolder.npcId).append(";").append("</a>").append("</td>");
|
||||
builder.append("<td width=80 align=CENTER>").append(dropHolder.basemin).append("-").append(dropHolder.basemax).append("</td>");
|
||||
builder.append("<td width=50 align=CENTER>").append(chanceFormat.format((dropHolder.basechance * dropHolder.baseGroupChance) / 100)).append("%").append("</td>");
|
||||
builder.append("<td width=50 align=CENTER>").append(dropHolder.isSweep ? "Sweep" : "Drop").append("</td>");
|
||||
builder.append("<td width=30>").append(cbDropHolder.npcLevel).append("</td>");
|
||||
builder.append("<td width=170>").append("<a action=\"bypass _bbs_npc_trace " + cbDropHolder.npcId + "\">").append("&@").append(cbDropHolder.npcId).append(";").append("</a>").append("</td>");
|
||||
builder.append("<td width=80 align=CENTER>").append(cbDropHolder.min * rateAmount).append("-").append(cbDropHolder.max * rateAmount).append("</td>");
|
||||
builder.append("<td width=50 align=CENTER>").append(chanceFormat.format(cbDropHolder.chance * rateChance)).append("%").append("</td>");
|
||||
builder.append("<td width=50 align=CENTER>").append(cbDropHolder.isSpoil ? "Spoil" : "Drop").append("</td>");
|
||||
builder.append("</tr>");
|
||||
}
|
||||
|
||||
@@ -204,7 +290,7 @@ public class DropSearchBoard implements IParseBoardHandler
|
||||
List<NpcSpawnTemplate> spawnList = SpawnsData.getInstance().getNpcSpawns(npc -> npc.getId() == npcId);
|
||||
if (spawnList.isEmpty())
|
||||
{
|
||||
player.sendMessage("cant find any spawn maybe boss or instance mob");
|
||||
player.sendMessage("Cannot find any spawn. Maybe dropped by a boss or instance monster.");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -49,15 +49,15 @@ public class Premium implements IVoicedCommandHandler
|
||||
html.append("<tr><td>Rate SP: <font color=\"LEVEL\"> x" + Config.RATE_SP + "<br1></font></td></tr>");
|
||||
html.append("<tr><td>Drop Chance: <font color=\"LEVEL\"> x" + Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER + "<br1></font></td></tr><br>");
|
||||
html.append("<tr><td>Drop Amount: <font color=\"LEVEL\"> x" + Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER + "<br1></font></td></tr><br>");
|
||||
html.append("<tr><td>Spoil Chance: <font color=\"LEVEL\"> x" + Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER + "<br1></font></td></tr><br>");
|
||||
html.append("<tr><td>Spoil Amount: <font color=\"LEVEL\"> x" + Config.RATE_CORPSE_DROP_AMOUNT_MULTIPLIER + "<br><br></font></td></tr><br>");
|
||||
html.append("<tr><td>Spoil Chance: <font color=\"LEVEL\"> x" + Config.RATE_SPOIL_DROP_CHANCE_MULTIPLIER + "<br1></font></td></tr><br>");
|
||||
html.append("<tr><td>Spoil Amount: <font color=\"LEVEL\"> x" + Config.RATE_SPOIL_DROP_AMOUNT_MULTIPLIER + "<br><br></font></td></tr><br>");
|
||||
html.append("<tr><td><center>Premium Info & Rules<br></td></tr>");
|
||||
html.append("<tr><td>Rate XP: <font color=\"LEVEL\"> x" + (Config.RATE_XP * Config.PREMIUM_RATE_XP) + "<br1></font></td></tr>");
|
||||
html.append("<tr><td>Rate SP: <font color=\"LEVEL\"> x" + (Config.RATE_SP * Config.PREMIUM_RATE_SP) + "<br1></font></td></tr>");
|
||||
html.append("<tr><td>Drop Chance: <font color=\"LEVEL\"> x" + (Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER * Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER * Config.PREMIUM_RATE_DROP_CHANCE) + "<br1></font></td></tr>");
|
||||
html.append("<tr><td>Drop Amount: <font color=\"LEVEL\"> x" + (Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER * Config.PREMIUM_RATE_DROP_AMOUNT) + "<br1></font></td></tr>");
|
||||
html.append("<tr><td>Spoil Chance: <font color=\"LEVEL\"> x" + (Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER * Config.PREMIUM_RATE_SPOIL_CHANCE) + "<br1></font></td></tr>");
|
||||
html.append("<tr><td>Spoil Amount: <font color=\"LEVEL\"> x" + (Config.RATE_CORPSE_DROP_AMOUNT_MULTIPLIER * Config.PREMIUM_RATE_SPOIL_AMOUNT) + "<br1></font></td></tr>");
|
||||
html.append("<tr><td>Spoil Chance: <font color=\"LEVEL\"> x" + (Config.RATE_SPOIL_DROP_CHANCE_MULTIPLIER * Config.PREMIUM_RATE_SPOIL_CHANCE) + "<br1></font></td></tr>");
|
||||
html.append("<tr><td>Spoil Amount: <font color=\"LEVEL\"> x" + (Config.RATE_SPOIL_DROP_AMOUNT_MULTIPLIER * Config.PREMIUM_RATE_SPOIL_AMOUNT) + "<br1></font></td></tr>");
|
||||
html.append("<tr><td> <font color=\"70FFCA\">1. Premium benefits CAN NOT BE TRANSFERED.<br1></font></td></tr>");
|
||||
html.append("<tr><td> <font color=\"70FFCA\">2. Premium does not effect party members.<br1></font></td></tr>");
|
||||
html.append("<tr><td> <font color=\"70FFCA\">3. Premium benefits effect ALL characters in same account.</font></td></tr>");
|
||||
@@ -71,8 +71,8 @@ public class Premium implements IVoicedCommandHandler
|
||||
html.append("<tr><td>Rate SP: <font color=\"LEVEL\">x" + (Config.RATE_SP * Config.PREMIUM_RATE_SP) + " <br1></font></td></tr>");
|
||||
html.append("<tr><td>Drop Chance: <font color=\"LEVEL\">x" + (Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER * Config.PREMIUM_RATE_DROP_CHANCE) + " <br1></font></td></tr>");
|
||||
html.append("<tr><td>Drop Amount: <font color=\"LEVEL\">x" + (Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER * Config.PREMIUM_RATE_DROP_AMOUNT) + " <br1></font></td></tr>");
|
||||
html.append("<tr><td>Spoil Chance: <font color=\"LEVEL\">x" + (Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER * Config.PREMIUM_RATE_SPOIL_CHANCE) + " <br1></font></td></tr>");
|
||||
html.append("<tr><td>Spoil Amount: <font color=\"LEVEL\">x" + (Config.RATE_CORPSE_DROP_AMOUNT_MULTIPLIER * Config.PREMIUM_RATE_SPOIL_AMOUNT) + " <br1></font></td></tr>");
|
||||
html.append("<tr><td>Spoil Chance: <font color=\"LEVEL\">x" + (Config.RATE_SPOIL_DROP_CHANCE_MULTIPLIER * Config.PREMIUM_RATE_SPOIL_CHANCE) + " <br1></font></td></tr>");
|
||||
html.append("<tr><td>Spoil Amount: <font color=\"LEVEL\">x" + (Config.RATE_SPOIL_DROP_AMOUNT_MULTIPLIER * Config.PREMIUM_RATE_SPOIL_AMOUNT) + " <br1></font></td></tr>");
|
||||
html.append("<tr><td>Expires: <font color=\"00A5FF\">" + format.format(endDate) + "</font></td></tr>");
|
||||
html.append("<tr><td>Current Date: <font color=\"70FFCA\">" + format.format(System.currentTimeMillis()) + "<br><br></font></td></tr>");
|
||||
html.append("<tr><td><center>Premium Info & Rules<br></center></td></tr>");
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -45,7 +45,7 @@
|
||||
<height normal="23" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="15" min="1" max="1" chance="0.075" /> <!-- Short Spear -->
|
||||
<item id="57" min="42" max="100" chance="70" /> <!-- Adena -->
|
||||
<item id="1831" min="1" max="1" chance="10.71" /> <!-- Antidote -->
|
||||
@@ -54,11 +54,11 @@
|
||||
<item id="1866" min="1" max="1" chance="2.649" /> <!-- Suede -->
|
||||
<item id="2011" min="1" max="1" chance="0.75" /> <!-- Short Spear Edge -->
|
||||
<item id="2140" min="1" max="1" chance="0.75" /> <!-- Recipe: High-grade Suede -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1866" min="1" max="1" chance="26.26" /> <!-- Suede -->
|
||||
<item id="2013" min="1" max="1" chance="0.75" /> <!-- Forest Bow Shaft -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21101" level="24" type="L2Monster" name="Langk Lizardman Shaman">
|
||||
@@ -117,7 +117,7 @@
|
||||
<height normal="29" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="176" min="1" max="1" chance="0.075" /> <!-- Apprentice's Staff -->
|
||||
<item id="2501" min="1" max="1" chance="0.075" /> <!-- Bone Club -->
|
||||
<item id="57" min="84" max="196" chance="70" /> <!-- Adena -->
|
||||
@@ -125,11 +125,11 @@
|
||||
<item id="1867" min="1" max="1" chance="7.693" /> <!-- Animal Skin -->
|
||||
<item id="2175" min="1" max="1" chance="4.744" /> <!-- Recipe: Boots -->
|
||||
<item id="1866" min="1" max="1" chance="3.777" /> <!-- Suede -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1872" min="1" max="1" chance="89.32" /> <!-- Animal Bone -->
|
||||
<item id="44" min="1" max="1" chance="1.342" /> <!-- Leather Helmet -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21102" level="30" type="L2Monster" name="Watchman of the Plains">
|
||||
@@ -187,18 +187,18 @@
|
||||
<height normal="20" grown="24" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="116" max="271" chance="70" /> <!-- Adena -->
|
||||
<item id="1872" min="1" max="1" chance="13.32" /> <!-- Animal Bone -->
|
||||
<item id="1933" min="1" max="1" chance="3.535" /> <!-- Dark Stocking Fabric -->
|
||||
<item id="1936" min="1" max="1" chance="2.456" /> <!-- White Tunic Pattern -->
|
||||
<item id="1882" min="1" max="1" chance="2.256" /> <!-- Leather -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="2153" min="1" max="1" chance="7.288" /> <!-- Recipe: Tiger's Eye -->
|
||||
<item id="1900" min="1" max="1" chance="5.142" /> <!-- Necklace Chain of Magic -->
|
||||
<item id="2183" min="1" max="1" chance="3.125" /> <!-- Recipe: Mithril Banded Mail -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21103" level="31" type="L2Monster" name="Roughly Hewn Rock Golem">
|
||||
@@ -255,7 +255,7 @@
|
||||
<height normal="40.3" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="125" max="290" chance="70" /> <!-- Adena -->
|
||||
<item id="1865" min="1" max="1" chance="4.377" /> <!-- Varnish -->
|
||||
<item id="1869" min="1" max="1" chance="4.374" /> <!-- Iron Ore -->
|
||||
@@ -264,11 +264,11 @@
|
||||
<item id="1935" min="1" max="1" chance="1.881" /> <!-- Scale Mail Fragment -->
|
||||
<item id="1873" min="1" max="1" chance="1.716" /> <!-- Silver Nugget -->
|
||||
<item id="2185" min="1" max="1" chance="0.75" /> <!-- Recipe: Iron Boots -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1879" min="1" max="1" chance="12.96" /> <!-- Cokes -->
|
||||
<item id="1933" min="1" max="1" chance="8.829" /> <!-- Dark Stocking Fabric -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21104" level="32" type="L2Monster" name="Delu Lizardman Supplier">
|
||||
@@ -320,18 +320,18 @@
|
||||
<height normal="23" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="133" max="311" chance="70" /> <!-- Adena -->
|
||||
<item id="1864" min="1" max="3" chance="24.28" /> <!-- Stem -->
|
||||
<item id="1866" min="1" max="1" chance="15.42" /> <!-- Suede -->
|
||||
<item id="1878" min="1" max="1" chance="9.339" /> <!-- Durable Braid -->
|
||||
<item id="2264" min="1" max="1" chance="0.3" /> <!-- Recipe: Two-handed Sword -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1061" min="1" max="1" chance="33.92" /> <!-- Major Healing Potion -->
|
||||
<item id="1876" min="1" max="1" chance="10.63" /> <!-- Mithril Ore -->
|
||||
<item id="1935" min="1" max="1" chance="3.034" /> <!-- Scale Mail Fragment -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21105" level="33" type="L2Monster" name="Delu Lizardman Special Agent">
|
||||
@@ -383,7 +383,7 @@
|
||||
<height normal="22" grown="27" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="143" max="334" chance="70" /> <!-- Adena -->
|
||||
<item id="1864" min="1" max="1" chance="13.06" /> <!-- Stem -->
|
||||
<item id="1866" min="1" max="1" chance="4.125" /> <!-- Suede -->
|
||||
@@ -391,12 +391,12 @@
|
||||
<item id="1878" min="1" max="1" chance="2.543" /> <!-- Durable Braid -->
|
||||
<item id="1938" min="1" max="1" chance="2.481" /> <!-- Mithril Banded Mail Material -->
|
||||
<item id="2154" min="1" max="1" chance="0.75" /> <!-- Recipe: Elven Earring -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="2155" min="1" max="1" chance="9.263" /> <!-- Recipe: Elven Ring -->
|
||||
<item id="1901" min="1" max="1" chance="8.034" /> <!-- Tiger's Eye Stone -->
|
||||
<item id="2154" min="1" max="1" chance="6.161" /> <!-- Recipe: Elven Earring -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21106" level="34" type="L2Monster" name="Cursed Watchman">
|
||||
@@ -456,19 +456,19 @@
|
||||
<height normal="20" grown="24" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="152" max="354" chance="70" /> <!-- Adena -->
|
||||
<item id="1872" min="1" max="1" chance="27.6" /> <!-- Animal Bone -->
|
||||
<item id="1341" min="60" max="180" chance="11.25" /> <!-- Bone Arrow -->
|
||||
<item id="1882" min="1" max="1" chance="4.66" /> <!-- Leather -->
|
||||
<item id="2186" min="1" max="1" chance="0.75" /> <!-- Recipe: Brigandine -->
|
||||
<item id="8317" min="1" max="1" chance="0.3" /> <!-- Recipe: Lesser Giant's Hammer -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1885" min="1" max="1" chance="5.119" /> <!-- High-grade Suede -->
|
||||
<item id="1938" min="1" max="1" chance="4.1" /> <!-- Mithril Banded Mail Material -->
|
||||
<item id="5550" min="1" max="1" chance="0.75" /> <!-- Reinforced Metal Plate -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21107" level="35" type="L2Monster" name="Delu Lizardman Commander">
|
||||
@@ -521,18 +521,18 @@
|
||||
<height normal="30" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="295" max="689" chance="70" /> <!-- Adena -->
|
||||
<item id="1864" min="3" max="9" chance="17.93" /> <!-- Stem -->
|
||||
<item id="1866" min="2" max="6" chance="8.67" /> <!-- Suede -->
|
||||
<item id="1878" min="2" max="6" chance="4.075" /> <!-- Durable Braid -->
|
||||
<item id="2188" min="1" max="1" chance="3.632" /> <!-- Recipe: Manticore Skin Gaiters -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1940" min="1" max="1" chance="18.12" /> <!-- Iron Boot Design -->
|
||||
<item id="1939" min="1" max="1" chance="10.35" /> <!-- Mithril Banded Gaiters Material -->
|
||||
<item id="2156" min="1" max="1" chance="9.6" /> <!-- Recipe: Elven Necklace -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21108" level="67" type="L2Monster" name="Glow Wisp">
|
||||
@@ -629,7 +629,7 @@
|
||||
<height normal="29" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="110" min="1" max="1" chance="0.03" /> <!-- Doom Shield -->
|
||||
<item id="284" min="1" max="1" chance="0.003" /> <!-- Dark Elven Longbow -->
|
||||
<item id="57" min="589" max="1376" chance="70" /> <!-- Adena -->
|
||||
@@ -641,15 +641,15 @@
|
||||
<item id="1876" min="1" max="1" chance="3.483" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="2.918" /> <!-- Cokes -->
|
||||
<item id="4112" min="1" max="1" chance="0.75" /> <!-- Dark Elven Longbow Shaft -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1866" min="1" max="1" chance="90.47" /> <!-- Suede -->
|
||||
<item id="1870" min="1" max="3" chance="69.14" /> <!-- Coal -->
|
||||
<item id="1871" min="1" max="3" chance="68.63" /> <!-- Charcoal -->
|
||||
<item id="1895" min="1" max="1" chance="38.32" /> <!-- Metallic Fiber -->
|
||||
<item id="1876" min="1" max="1" chance="28.81" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="23.37" /> <!-- Cokes -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21110" level="69" type="L2Monster" name="Swamp Predator">
|
||||
@@ -705,7 +705,7 @@
|
||||
<height normal="35" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="171" min="1" max="1" chance="0.003" /> <!-- Deadman's Glory -->
|
||||
<item id="57" min="609" max="1421" chance="70" /> <!-- Adena -->
|
||||
<item id="1872" min="1" max="3" chance="18.23" /> <!-- Animal Bone -->
|
||||
@@ -713,13 +713,13 @@
|
||||
<item id="1881" min="1" max="1" chance="3.526" /> <!-- Coarse Bone Powder -->
|
||||
<item id="4043" min="1" max="1" chance="0.75" /> <!-- Asofe -->
|
||||
<item id="4116" min="1" max="1" chance="0.75" /> <!-- Deadman's Glory Stone -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1872" min="1" max="7" chance="71.91" /> <!-- Animal Bone -->
|
||||
<item id="1867" min="1" max="7" chance="70.36" /> <!-- Animal Skin -->
|
||||
<item id="1881" min="1" max="1" chance="28.4" /> <!-- Coarse Bone Powder -->
|
||||
<item id="4043" min="1" max="1" chance="7.26" /> <!-- Asofe -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21111" level="70" type="L2Monster" name="Lava Wyrm">
|
||||
@@ -771,7 +771,7 @@
|
||||
<height normal="72" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="234" min="1" max="1" chance="0.003" /> <!-- Demon's Dagger -->
|
||||
<item id="57" min="629" max="1467" chance="70" /> <!-- Adena -->
|
||||
<item id="1872" min="1" max="3" chance="18.42" /> <!-- Animal Bone -->
|
||||
@@ -779,13 +779,13 @@
|
||||
<item id="1881" min="1" max="1" chance="3.646" /> <!-- Coarse Bone Powder -->
|
||||
<item id="4043" min="1" max="1" chance="0.75" /> <!-- Asofe -->
|
||||
<item id="4119" min="1" max="1" chance="0.75" /> <!-- Demon's Dagger Edge -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1872" min="1" max="7" chance="76.32" /> <!-- Animal Bone -->
|
||||
<item id="1867" min="1" max="7" chance="74.29" /> <!-- Animal Skin -->
|
||||
<item id="1881" min="1" max="1" chance="28.84" /> <!-- Coarse Bone Powder -->
|
||||
<item id="4043" min="1" max="1" chance="7.459" /> <!-- Asofe -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21112" level="71" type="L2Monster" name="Hames Orc Foot Soldier">
|
||||
@@ -841,7 +841,7 @@
|
||||
<height normal="29" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="175" min="1" max="1" chance="0.003" /> <!-- Art of Battle Axe -->
|
||||
<item id="57" min="648" max="1513" chance="70" /> <!-- Adena -->
|
||||
<item id="1866" min="1" max="1" chance="12.61" /> <!-- Suede -->
|
||||
@@ -851,15 +851,15 @@
|
||||
<item id="1876" min="1" max="1" chance="3.853" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="3.178" /> <!-- Cokes -->
|
||||
<item id="4117" min="1" max="1" chance="0.75" /> <!-- Art of Battle Axe Blade -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1870" min="1" max="3" chance="77.83" /> <!-- Coal -->
|
||||
<item id="1871" min="1" max="3" chance="76.26" /> <!-- Charcoal -->
|
||||
<item id="1866" min="1" max="3" chance="50.79" /> <!-- Suede -->
|
||||
<item id="1895" min="1" max="1" chance="43.05" /> <!-- Metallic Fiber -->
|
||||
<item id="1876" min="1" max="1" chance="30.23" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="25.2" /> <!-- Cokes -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21113" level="71" type="L2Monster" name="Hames Orc Sniper">
|
||||
@@ -914,7 +914,7 @@
|
||||
<height normal="27" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="2391" min="1" max="1" chance="0.03" /> <!-- Blue Wolf Leather Armor -->
|
||||
<item id="57" min="648" max="1513" chance="70" /> <!-- Adena -->
|
||||
<item id="1866" min="1" max="1" chance="12.23" /> <!-- Suede -->
|
||||
@@ -924,15 +924,15 @@
|
||||
<item id="1876" min="1" max="1" chance="3.735" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="3.211" /> <!-- Cokes -->
|
||||
<item id="4082" min="1" max="1" chance="2.235" /> <!-- Blue Wolf Leather Armor Texture -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1871" min="1" max="3" chance="76.54" /> <!-- Charcoal -->
|
||||
<item id="1870" min="1" max="3" chance="76.5" /> <!-- Coal -->
|
||||
<item id="1866" min="1" max="3" chance="50.71" /> <!-- Suede -->
|
||||
<item id="1895" min="1" max="1" chance="44.94" /> <!-- Metallic Fiber -->
|
||||
<item id="1876" min="1" max="1" chance="31.41" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="24.94" /> <!-- Cokes -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21114" level="70" type="L2Monster" name="Cursed Guardian">
|
||||
@@ -983,7 +983,7 @@
|
||||
<height normal="45" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="234" min="1" max="1" chance="0.003" /> <!-- Demon's Dagger -->
|
||||
<item id="57" min="629" max="1467" chance="70" /> <!-- Adena -->
|
||||
<item id="1869" min="1" max="1" chance="17.7" /> <!-- Iron Ore -->
|
||||
@@ -993,15 +993,15 @@
|
||||
<item id="4039" min="1" max="1" chance="0.75" /> <!-- Mold Glue -->
|
||||
<item id="4119" min="1" max="1" chance="0.75" /> <!-- Demon's Dagger Edge -->
|
||||
<item id="4042" min="1" max="1" chance="0.3" /> <!-- Enria -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1869" min="1" max="3" chance="72.71" /> <!-- Iron Ore -->
|
||||
<item id="1873" min="1" max="1" chance="61.09" /> <!-- Silver Nugget -->
|
||||
<item id="1880" min="1" max="1" chance="15.15" /> <!-- Steel -->
|
||||
<item id="1874" min="1" max="1" chance="9.994" /> <!-- Oriharukon Ore -->
|
||||
<item id="4039" min="1" max="1" chance="5.036" /> <!-- Mold Glue -->
|
||||
<item id="4042" min="1" max="1" chance="2.417" /> <!-- Enria -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21115" level="73" type="L2Monster" name="Hames Orc Shaman">
|
||||
@@ -1119,7 +1119,7 @@
|
||||
<height normal="24" grown="28.8" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="2380" min="1" max="1" chance="0.0075" /> <!-- Blue Wolf Gaiters -->
|
||||
<item id="148" min="1" max="1" chance="0.003" /> <!-- Sword of Valhalla -->
|
||||
<item id="358" min="1" max="1" chance="0.003" /> <!-- Blue Wolf Breastplate -->
|
||||
@@ -1137,8 +1137,8 @@
|
||||
<item id="4108" min="1" max="1" chance="0.3" /> <!-- Sword of Valhalla Blade -->
|
||||
<item id="4114" min="1" max="1" chance="0.3" /> <!-- Damascus Sword Blade -->
|
||||
<item id="948" min="1" max="1" chance="0.03" /> <!-- Scroll: Enchant Armor (B-grade) -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1866" min="1" max="1" chance="89.915" /> <!-- Suede -->
|
||||
<item id="1870" min="1" max="3" chance="69.54" /> <!-- Coal -->
|
||||
<item id="1871" min="1" max="3" chance="68.67" /> <!-- Charcoal -->
|
||||
@@ -1146,7 +1146,7 @@
|
||||
<item id="1876" min="1" max="1" chance="27.32" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="23.72" /> <!-- Cokes -->
|
||||
<item id="1875" min="1" max="1" chance="9.147" /> <!-- Stone of Purity -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21117" level="19" type="L2Monster" name="Kasha Imp">
|
||||
@@ -1193,7 +1193,7 @@
|
||||
<height normal="30" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="38" min="1" max="1" chance="0.75" /> <!-- Low Boots -->
|
||||
<item id="50" min="1" max="1" chance="0.75" /> <!-- Leather Gloves -->
|
||||
<item id="57" min="42" max="100" chance="70" /> <!-- Adena -->
|
||||
@@ -1205,12 +1205,12 @@
|
||||
<item id="1869" min="1" max="1" chance="2.854" /> <!-- Iron Ore -->
|
||||
<item id="1866" min="1" max="1" chance="1.85" /> <!-- Suede -->
|
||||
<item id="2139" min="1" max="1" chance="0.75" /> <!-- Recipe: Steel Mold -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1800" min="1" max="1" chance="8.487" /> <!-- Recipe: Piece Bone Breastplate -->
|
||||
<item id="1897" min="1" max="1" chance="6.435" /> <!-- Necklace of Wisdom Chain -->
|
||||
<item id="734" min="1" max="1" chance="4.555" /> <!-- Wind Walk Potion -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21118" level="20" type="L2Monster" name="Baar Dre Vanul">
|
||||
@@ -1259,7 +1259,7 @@
|
||||
<height normal="36" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="945" min="1" max="1" chance="1.413" /> <!-- Skeleton Buckler -->
|
||||
<item id="102" min="1" max="1" chance="0.75" /> <!-- Round Shield -->
|
||||
<item id="44" min="1" max="1" chance="0.3" /> <!-- Leather Helmet -->
|
||||
@@ -1272,12 +1272,12 @@
|
||||
<item id="1871" min="1" max="1" chance="3.123" /> <!-- Charcoal -->
|
||||
<item id="1866" min="1" max="1" chance="2.104" /> <!-- Suede -->
|
||||
<item id="2142" min="1" max="1" chance="0.75" /> <!-- Recipe: Varnish of Purity -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1925" min="1" max="1" chance="19.6" /> <!-- Leather Glove Lining -->
|
||||
<item id="1801" min="1" max="1" chance="14.16" /> <!-- Recipe: Piece Bone Gaiters -->
|
||||
<item id="1924" min="1" max="1" chance="9.565" /> <!-- Leather Helmet Design -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21119" level="21" type="L2Monster" name="Kasha Hobgoblin">
|
||||
@@ -1330,7 +1330,7 @@
|
||||
<height normal="24" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="27" min="1" max="1" chance="0.3" /> <!-- Durable Leather Shirt -->
|
||||
<item id="33" min="1" max="1" chance="0.3" /> <!-- Durable Leather Gaiters -->
|
||||
<item id="57" min="72" max="168" chance="70" /> <!-- Adena -->
|
||||
@@ -1342,12 +1342,12 @@
|
||||
<item id="1929" min="1" max="1" chance="2.491" /> <!-- Durable Leather Gaiter Material -->
|
||||
<item id="1866" min="1" max="1" chance="2.239" /> <!-- Suede -->
|
||||
<item id="1927" min="1" max="1" chance="1.521" /> <!-- Durable Leather Shirt Pattern -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1868" min="1" max="1" chance="76.16" /> <!-- Thread -->
|
||||
<item id="1873" min="1" max="1" chance="15.01" /> <!-- Silver Nugget -->
|
||||
<item id="1898" min="1" max="1" chance="3.808" /> <!-- Blue Diamond Necklace Gem -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21120" level="22" type="L2Monster" name="Kasha Imp Turen">
|
||||
@@ -1401,7 +1401,7 @@
|
||||
<height normal="30" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="87" min="1" max="1" chance="0.03" /> <!-- Iron Hammer -->
|
||||
<item id="155" min="1" max="1" chance="0.03" /> <!-- Flanged Mace -->
|
||||
<item id="177" min="1" max="1" chance="0.03" /> <!-- Mage Staff -->
|
||||
@@ -1414,12 +1414,12 @@
|
||||
<item id="1866" min="1" max="1" chance="2.039" /> <!-- Suede -->
|
||||
<item id="2014" min="1" max="1" chance="0.3" /> <!-- Iron Hammer Head -->
|
||||
<item id="2255" min="1" max="1" chance="0.075" /> <!-- Recipe: Saber -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="2151" min="1" max="1" chance="11.1" /> <!-- Recipe: Necklace of Devotion -->
|
||||
<item id="1926" min="1" max="1" chance="4.023" /> <!-- Piece Bone Breastplate Fragment -->
|
||||
<item id="1804" min="1" max="1" chance="1.583" /> <!-- Recipe: Soulshot (D-grade) -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21121" level="23" type="L2Monster" name="Kasha Dire Wolf">
|
||||
@@ -1471,18 +1471,18 @@
|
||||
<height normal="11" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="257" min="1" max="1" chance="0.075" /> <!-- Viper Fang -->
|
||||
<item id="57" min="76" max="177" chance="70" /> <!-- Adena -->
|
||||
<item id="1867" min="1" max="1" chance="6.983" /> <!-- Animal Skin -->
|
||||
<item id="1872" min="1" max="1" chance="6.87" /> <!-- Animal Bone -->
|
||||
<item id="1881" min="1" max="1" chance="0.75" /> <!-- Coarse Bone Powder -->
|
||||
<item id="2258" min="1" max="1" chance="0.3" /> <!-- Recipe: Temptation of Abyss -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1881" min="1" max="1" chance="7.951" /> <!-- Coarse Bone Powder -->
|
||||
<item id="1927" min="1" max="1" chance="4.69" /> <!-- Durable Leather Shirt Pattern -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21122" level="24" type="L2Monster" name="Kasha Bugbear">
|
||||
@@ -1535,7 +1535,7 @@
|
||||
<height normal="35" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="273" min="1" max="1" chance="0.03" /> <!-- Compound Bow -->
|
||||
<item id="57" min="84" max="196" chance="70" /> <!-- Adena -->
|
||||
<item id="1868" min="1" max="1" chance="11.22" /> <!-- Thread -->
|
||||
@@ -1543,12 +1543,12 @@
|
||||
<item id="2016" min="1" max="1" chance="0.75" /> <!-- Compound Bow Shaft -->
|
||||
<item id="5268" min="1" max="1" chance="0.3" /> <!-- Recipe: Greater Soulshot Compressed Package (D-grade) -->
|
||||
<item id="5278" min="1" max="1" chance="0.3" /> <!-- Recipe: Greater Blessed Spiritshot Compressed Package (D-grade) -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="2176" min="1" max="1" chance="21.03" /> <!-- Recipe: Leather Boots -->
|
||||
<item id="1928" min="1" max="1" chance="6.338" /> <!-- Piece Bone Gaiter Fragment -->
|
||||
<item id="1929" min="1" max="1" chance="5.569" /> <!-- Durable Leather Gaiter Material -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21123" level="25" type="L2Monster" name="Baar Dre Vanul Destroyer">
|
||||
@@ -1604,18 +1604,18 @@
|
||||
<height normal="36" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="88" max="207" chance="70" /> <!-- Adena -->
|
||||
<item id="1878" min="1" max="1" chance="11.91" /> <!-- Durable Braid -->
|
||||
<item id="2178" min="1" max="1" chance="4.671" /> <!-- Recipe: Dark Stockings -->
|
||||
<item id="1874" min="1" max="1" chance="1.871" /> <!-- Oriharukon Ore -->
|
||||
<item id="5220" min="1" max="1" chance="1.115" /> <!-- Metal Hardener -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="2152" min="1" max="1" chance="8.056" /> <!-- Recipe: Magic Necklace -->
|
||||
<item id="1899" min="1" max="1" chance="7.219" /> <!-- Necklace of Devotion Chain -->
|
||||
<item id="1874" min="1" max="1" chance="3.032" /> <!-- Oriharukon Ore -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21124" level="18" type="L2Monster" name="Red Eye Barbed Bat">
|
||||
@@ -1664,7 +1664,7 @@
|
||||
<height normal="33.5" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="309" min="1" max="1" chance="0.075" /> <!-- Tears of Eva -->
|
||||
<item id="310" min="1" max="1" chance="0.075" /> <!-- Relic of the Saints -->
|
||||
<item id="57" min="41" max="97" chance="70" /> <!-- Adena -->
|
||||
@@ -1675,12 +1675,12 @@
|
||||
<item id="1871" min="1" max="1" chance="2.758" /> <!-- Charcoal -->
|
||||
<item id="1866" min="1" max="1" chance="1.803" /> <!-- Suede -->
|
||||
<item id="1800" min="1" max="1" chance="0.75" /> <!-- Recipe: Piece Bone Breastplate -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1865" min="1" max="1" chance="27.16" /> <!-- Varnish -->
|
||||
<item id="1897" min="1" max="1" chance="6.229" /> <!-- Necklace of Wisdom Chain -->
|
||||
<item id="735" min="1" max="1" chance="2.249" /> <!-- Haste Potion -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21125" level="19" type="L2Monster" name="Northern Trimden">
|
||||
@@ -1723,7 +1723,7 @@
|
||||
<height normal="25.5" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="15" min="1" max="1" chance="0.075" /> <!-- Short Spear -->
|
||||
<item id="57" min="42" max="100" chance="70" /> <!-- Adena -->
|
||||
<item id="1864" min="1" max="1" chance="5.739" /> <!-- Stem -->
|
||||
@@ -1734,12 +1734,12 @@
|
||||
<item id="1866" min="1" max="1" chance="1.913" /> <!-- Suede -->
|
||||
<item id="2011" min="1" max="1" chance="0.75" /> <!-- Short Spear Edge -->
|
||||
<item id="2140" min="1" max="1" chance="0.75" /> <!-- Recipe: High-grade Suede -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1801" min="1" max="1" chance="13.43" /> <!-- Recipe: Piece Bone Gaiters -->
|
||||
<item id="1924" min="1" max="1" chance="8.714" /> <!-- Leather Helmet Design -->
|
||||
<item id="1800" min="1" max="1" chance="8.572" /> <!-- Recipe: Piece Bone Breastplate -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21126" level="20" type="L2Monster" name="Kerope Werewolf">
|
||||
@@ -1786,7 +1786,7 @@
|
||||
<height normal="29.7" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="24" min="1" max="1" chance="0.3" /> <!-- Bone Breastplate -->
|
||||
<item id="31" min="1" max="1" chance="0.3" /> <!-- Bone Gaiters -->
|
||||
<item id="390" min="1" max="1" chance="0.3" /> <!-- Cotton Shirt -->
|
||||
@@ -1799,12 +1799,12 @@
|
||||
<item id="1871" min="1" max="1" chance="3.061" /> <!-- Charcoal -->
|
||||
<item id="1866" min="1" max="1" chance="2.136" /> <!-- Suede -->
|
||||
<item id="2143" min="1" max="1" chance="0.75" /> <!-- Recipe: Synthetic Cokes -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1864" min="1" max="1" chance="60.3" /> <!-- Stem -->
|
||||
<item id="1865" min="1" max="1" chance="28.54" /> <!-- Varnish -->
|
||||
<item id="1925" min="1" max="1" chance="18.56" /> <!-- Leather Glove Lining -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21127" level="21" type="L2Monster" name="Northern Goblin">
|
||||
@@ -1857,7 +1857,7 @@
|
||||
<height normal="15" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="32" min="1" max="1" chance="0.3" /> <!-- Piece Bone Gaiters -->
|
||||
<item id="25" min="1" max="1" chance="0.075" /> <!-- Piece Bone Breastplate -->
|
||||
<item id="26" min="1" max="1" chance="0.075" /> <!-- Bronze Breastplate -->
|
||||
@@ -1872,12 +1872,12 @@
|
||||
<item id="1928" min="1" max="1" chance="1.864" /> <!-- Piece Bone Gaiter Fragment -->
|
||||
<item id="1926" min="1" max="1" chance="1.266" /> <!-- Piece Bone Breastplate Fragment -->
|
||||
<item id="2151" min="1" max="1" chance="0.75" /> <!-- Recipe: Necklace of Devotion -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1898" min="1" max="1" chance="3.859" /> <!-- Blue Diamond Necklace Gem -->
|
||||
<item id="1926" min="1" max="1" chance="3.726" /> <!-- Piece Bone Breastplate Fragment -->
|
||||
<item id="1804" min="1" max="1" chance="1.508" /> <!-- Recipe: Soulshot (D-grade) -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21128" level="22" type="L2Monster" name="Spine Golem">
|
||||
@@ -1934,7 +1934,7 @@
|
||||
<height normal="40.3" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="1102" min="1" max="1" chance="0.3" /> <!-- Tunic of Magic -->
|
||||
<item id="1105" min="1" max="1" chance="0.3" /> <!-- Stockings of Magic -->
|
||||
<item id="57" min="76" max="179" chance="70" /> <!-- Adena -->
|
||||
@@ -1945,12 +1945,12 @@
|
||||
<item id="1869" min="1" max="1" chance="2.919" /> <!-- Iron Ore -->
|
||||
<item id="1866" min="1" max="1" chance="2.039" /> <!-- Suede -->
|
||||
<item id="2256" min="1" max="1" chance="0.075" /> <!-- Recipe: Assassin Knife -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1869" min="1" max="1" chance="40.93" /> <!-- Iron Ore -->
|
||||
<item id="2151" min="1" max="1" chance="10.54" /> <!-- Recipe: Necklace of Devotion -->
|
||||
<item id="1927" min="1" max="1" chance="3.183" /> <!-- Durable Leather Shirt Pattern -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21129" level="23" type="L2Monster" name="Kerope Werewolf Chief">
|
||||
@@ -2002,7 +2002,7 @@
|
||||
<height normal="29.7" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="846" min="1" max="1" chance="0.3" /> <!-- Coral Earring -->
|
||||
<item id="878" min="1" max="1" chance="0.3" /> <!-- Blue Coral Ring -->
|
||||
<item id="909" min="1" max="1" chance="0.3" /> <!-- Blue Diamond Necklace -->
|
||||
@@ -2011,12 +2011,12 @@
|
||||
<item id="1865" min="1" max="1" chance="6.91" /> <!-- Varnish -->
|
||||
<item id="1898" min="1" max="1" chance="2.119" /> <!-- Blue Diamond Necklace Gem -->
|
||||
<item id="3032" min="1" max="1" chance="0.3" /> <!-- Recipe: Spiritshot (D-grade) -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1870" min="1" max="1" chance="39.74" /> <!-- Coal -->
|
||||
<item id="2176" min="1" max="1" chance="18.74" /> <!-- Recipe: Leather Boots -->
|
||||
<item id="1928" min="1" max="1" chance="5.797" /> <!-- Piece Bone Gaiter Fragment -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21130" level="24" type="L2Monster" name="Northern Goblin Captain">
|
||||
@@ -2069,7 +2069,7 @@
|
||||
<height normal="15" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="39" min="1" max="1" chance="0.3" /> <!-- Boots (item) -->
|
||||
<item id="51" min="1" max="1" chance="0.3" /> <!-- Bracer -->
|
||||
<item id="57" min="84" max="196" chance="70" /> <!-- Adena -->
|
||||
@@ -2078,12 +2078,12 @@
|
||||
<item id="1866" min="1" max="1" chance="3.803" /> <!-- Suede -->
|
||||
<item id="5273" min="1" max="1" chance="0.3" /> <!-- Recipe: Greater Spiritshot Compressed Package (D-grade) -->
|
||||
<item id="5278" min="1" max="1" chance="0.3" /> <!-- Recipe: Greater Blessed Spiritshot Compressed Package (D-grade) -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="2177" min="1" max="1" chance="13.56" /> <!-- Recipe: Bone Helmet -->
|
||||
<item id="1930" min="1" max="1" chance="11.13" /> <!-- Boot Lining -->
|
||||
<item id="1929" min="1" max="1" chance="5.647" /> <!-- Durable Leather Gaiter Material -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21131" level="25" type="L2Monster" name="Reinforced Spine Golem">
|
||||
@@ -2140,7 +2140,7 @@
|
||||
<height normal="40.3" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="88" max="207" chance="70" /> <!-- Adena -->
|
||||
<item id="1932" min="1" max="1" chance="15.01" /> <!-- Bone Helmet Design -->
|
||||
<item id="1872" min="1" max="1" chance="6.514" /> <!-- Animal Bone -->
|
||||
@@ -2148,12 +2148,12 @@
|
||||
<item id="1881" min="1" max="1" chance="0.75" /> <!-- Coarse Bone Powder -->
|
||||
<item id="1875" min="1" max="1" chance="0.3" /> <!-- Stone of Purity -->
|
||||
<item id="2180" min="1" max="1" chance="0.3" /> <!-- Recipe: Scale Mail -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1867" min="1" max="1" chance="61.48" /> <!-- Animal Skin -->
|
||||
<item id="1872" min="1" max="1" chance="60.49" /> <!-- Animal Bone -->
|
||||
<item id="1899" min="1" max="1" chance="7.161" /> <!-- Necklace of Devotion Chain -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21132" level="24" type="L2Monster" name="Underground Kobold">
|
||||
|
||||
@@ -661,7 +661,7 @@
|
||||
</clan_list>
|
||||
</ai>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="495" max="955" chance="70" /> <!-- Adena -->
|
||||
<item id="156" min="1" max="1" chance="0.013" /> <!-- Hand Axe -->
|
||||
<item id="167" min="1" max="1" chance="0.013" /> <!-- Scalpel -->
|
||||
@@ -671,12 +671,12 @@
|
||||
<item id="1881" min="1" max="1" chance="1.719" /> <!-- Coarse Bone Powder -->
|
||||
<item id="1875" min="1" max="1" chance="0.857" /> <!-- Stone of Purity -->
|
||||
<item id="5437" min="1" max="1" chance="0.315" /> <!-- Recipe: Heavy Sword(100%) -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1931" min="1" max="1" chance="15.0011" /> <!-- Leather Boots Lining -->
|
||||
<item id="2152" min="1" max="1" chance="20.2039" /> <!-- Recipe: Enchanted Necklace -->
|
||||
<item id="1932" min="1" max="1" chance="18.2156" /> <!-- Bone Helmet Design -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
<collision>
|
||||
<radius normal="10" />
|
||||
@@ -1833,7 +1833,7 @@
|
||||
<height normal="43" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="217" min="1" max="1" chance="0.075" /> <!-- Shining Knife -->
|
||||
<item id="218" min="1" max="1" chance="0.075" /> <!-- Throwing Knife -->
|
||||
<item id="57" min="41" max="97" chance="70" /> <!-- Adena -->
|
||||
@@ -1843,12 +1843,12 @@
|
||||
<item id="1871" min="1" max="1" chance="3.273" /> <!-- Charcoal -->
|
||||
<item id="1869" min="1" max="1" chance="3.191" /> <!-- Iron Ore -->
|
||||
<item id="1866" min="1" max="1" chance="2.124" /> <!-- Suede -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1868" min="1" max="1" chance="52.46" /> <!-- Thread -->
|
||||
<item id="1897" min="1" max="1" chance="6.266" /> <!-- Necklace of Wisdom Chain -->
|
||||
<item id="734" min="1" max="1" chance="4.401" /> <!-- Wind Walk Potion -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21258" level="71" type="L2Monster" name="Fallen Orc Shaman">
|
||||
|
||||
@@ -2780,7 +2780,7 @@
|
||||
<height normal="25" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="538" max="1257" chance="70" /> <!-- Adena -->
|
||||
<item id="1871" min="1" max="1" chance="15.08" /> <!-- Charcoal -->
|
||||
<item id="1866" min="1" max="1" chance="10.61" /> <!-- Suede -->
|
||||
@@ -2789,15 +2789,15 @@
|
||||
<item id="6345" min="1" max="1" chance="4.253" /> <!-- Sealed Phoenix Ring Gemstone -->
|
||||
<item id="1876" min="1" max="1" chance="3.143" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="2.638" /> <!-- Cokes -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1866" min="1" max="1" chance="87.78" /> <!-- Suede -->
|
||||
<item id="1870" min="1" max="3" chance="64.1" /> <!-- Coal -->
|
||||
<item id="1871" min="1" max="3" chance="62.6" /> <!-- Charcoal -->
|
||||
<item id="1895" min="1" max="1" chance="37.44" /> <!-- Metallic Fiber -->
|
||||
<item id="1876" min="1" max="1" chance="26.3" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="20.68" /> <!-- Cokes -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21651" level="74" type="L2Monster" name="Flame Drake">
|
||||
@@ -2852,7 +2852,7 @@
|
||||
<height normal="28" grown="33" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="538" max="1257" chance="70" /> <!-- Adena -->
|
||||
<item id="1871" min="1" max="1" chance="15.39" /> <!-- Charcoal -->
|
||||
<item id="1866" min="1" max="1" chance="10.06" /> <!-- Suede -->
|
||||
@@ -2861,15 +2861,15 @@
|
||||
<item id="6345" min="1" max="1" chance="4.216" /> <!-- Sealed Phoenix Ring Gemstone -->
|
||||
<item id="1876" min="1" max="1" chance="3.105" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="2.626" /> <!-- Cokes -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1866" min="1" max="1" chance="85.91" /> <!-- Suede -->
|
||||
<item id="1870" min="1" max="3" chance="63.5" /> <!-- Coal -->
|
||||
<item id="1871" min="1" max="3" chance="63.43" /> <!-- Charcoal -->
|
||||
<item id="1895" min="1" max="1" chance="37.84" /> <!-- Metallic Fiber -->
|
||||
<item id="1876" min="1" max="1" chance="24.31" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="20.42" /> <!-- Cokes -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21652" level="75" type="L2Monster" name="Fiery Ifrit">
|
||||
@@ -2905,7 +2905,7 @@
|
||||
<height normal="39" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="554" max="1294" chance="70" /> <!-- Adena -->
|
||||
<item id="1871" min="1" max="1" chance="16.45" /> <!-- Charcoal -->
|
||||
<item id="1866" min="1" max="1" chance="10.73" /> <!-- Suede -->
|
||||
@@ -2914,15 +2914,15 @@
|
||||
<item id="1876" min="1" max="1" chance="3.281" /> <!-- Mithril Ore -->
|
||||
<item id="6341" min="1" max="1" chance="3.165" /> <!-- Sealed Phoenix Earring Gemstone -->
|
||||
<item id="1879" min="1" max="1" chance="2.742" /> <!-- Cokes -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1866" min="1" max="1" chance="90.76" /> <!-- Suede -->
|
||||
<item id="1870" min="1" max="3" chance="66.56" /> <!-- Coal -->
|
||||
<item id="1871" min="1" max="3" chance="64.12" /> <!-- Charcoal -->
|
||||
<item id="1895" min="1" max="1" chance="37.01" /> <!-- Metallic Fiber -->
|
||||
<item id="1876" min="1" max="1" chance="25.55" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="21.64" /> <!-- Cokes -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21653" level="75" type="L2Monster" name="Ikedit">
|
||||
@@ -2958,7 +2958,7 @@
|
||||
<height normal="54.5" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="57" min="554" max="1294" chance="70" /> <!-- Adena -->
|
||||
<item id="1870" min="1" max="1" chance="13.81" /> <!-- Coal -->
|
||||
<item id="1871" min="1" max="1" chance="13.79" /> <!-- Charcoal -->
|
||||
@@ -2968,15 +2968,15 @@
|
||||
<item id="1876" min="1" max="1" chance="2.824" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="2.26" /> <!-- Cokes -->
|
||||
<item id="90045" min="1" max="1" chance="0.0075" /> <!-- Magical Tablet -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1866" min="1" max="1" chance="89.86" /> <!-- Suede -->
|
||||
<item id="1871" min="1" max="3" chance="64.54" /> <!-- Charcoal -->
|
||||
<item id="1870" min="1" max="3" chance="64.38" /> <!-- Coal -->
|
||||
<item id="1895" min="1" max="1" chance="38.33" /> <!-- Metallic Fiber -->
|
||||
<item id="1876" min="1" max="1" chance="27.2" /> <!-- Mithril Ore -->
|
||||
<item id="1879" min="1" max="1" chance="21.46" /> <!-- Cokes -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="21654" level="81" type="L2Monster" name="Dreco" title="Earth Guardian">
|
||||
|
||||
@@ -733,7 +733,7 @@
|
||||
<height normal="44" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="5319" min="1" max="1" chance="0.03" /> <!-- Sealed Majestic Boots -->
|
||||
<item id="57" min="5301" max="12380" chance="70" /> <!-- Adena -->
|
||||
<item id="1865" min="7" max="21" chance="21.4" /> <!-- Varnish -->
|
||||
@@ -743,14 +743,14 @@
|
||||
<item id="5502" min="1" max="1" chance="3.605" /> <!-- Sealed Boots of Nightmare Lining -->
|
||||
<item id="5514" min="1" max="1" chance="3.601" /> <!-- Sealed Gauntlets of Nightmare Design -->
|
||||
<item id="5503" min="1" max="1" chance="3.593" /> <!-- Sealed Majestic Boot Lining -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1865" min="1" max="31" chance="92.99" /> <!-- Varnish -->
|
||||
<item id="5404" min="1" max="1" chance="4.281" /> <!-- Recipe: Sealed Gauntlets of Nightmare (60%) -->
|
||||
<item id="5380" min="1" max="1" chance="4.226" /> <!-- Recipe: Sealed Boots of Nightmare (60%) -->
|
||||
<item id="5382" min="1" max="1" chance="4.221" /> <!-- Recipe: Sealed Majestic Boots (60%) -->
|
||||
<item id="5406" min="1" max="1" chance="4.221" /> <!-- Recipe: Sealed Majestic Gauntlets (60%) -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="23735" level="100" type="L2Monster" name="Captive Familiar Spirit">
|
||||
|
||||
@@ -330,7 +330,7 @@
|
||||
<height normal="60" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="503" min="1" max="1" chance="0.03" /> <!-- Sealed Zubei's Helmet -->
|
||||
<item id="2415" min="1" max="1" chance="0.03" /> <!-- Sealed Avadon Circlet -->
|
||||
<item id="2416" min="1" max="1" chance="0.0075" /> <!-- Sealed Blue Wolf Helmet -->
|
||||
@@ -344,12 +344,12 @@
|
||||
<item id="1875" min="1" max="1" chance="1.929" /> <!-- Stone of Purity -->
|
||||
<item id="4088" min="1" max="1" chance="1.907" /> <!-- Sealed Blue Wolf Helmet Design -->
|
||||
<item id="90012" min="1" max="1" chance="0.03" /> <!-- Common Life Stone -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1870" min="1" max="7" chance="81.63" /> <!-- Coal -->
|
||||
<item id="1875" min="1" max="1" chance="21.29" /> <!-- Stone of Purity -->
|
||||
<item id="1874" min="1" max="1" chance="21.05" /> <!-- Oriharukon Ore -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
</list>
|
||||
|
||||
@@ -45,13 +45,13 @@
|
||||
<height normal="43.5" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="910" min="2" max="4" chance="33.09" /> <!-- Necklace of Devotion -->
|
||||
<item id="847" min="4" max="8" chance="30.81" /> <!-- Red Crescent -->
|
||||
<item id="890" min="4" max="8" chance="30.28" /> <!-- Ring of Devotion -->
|
||||
<item id="955" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="1866" min="2" max="6" chance="100" /> <!-- Scroll: Enchant Armor (D-grade)-->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25002" level="22" type="L2Monster" name="Kutus' Escort" title="Raid Fighter">
|
||||
@@ -179,7 +179,7 @@
|
||||
<height normal="47" grown="27.6" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="316" min="1" max="1" chance="6.378" /> <!-- Sage's Blood -->
|
||||
<item id="628" min="1" max="1" chance="6.361" /> <!-- Hoplon -->
|
||||
<item id="317" min="1" max="1" chance="6.354" /> <!-- Tome of Blood -->
|
||||
@@ -189,7 +189,7 @@
|
||||
<item id="955" min="2" max="4" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="3" max="8" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25005" level="29" type="L2Monster" name="Turek Mercenary Archer" title="Raid Fighter">
|
||||
@@ -310,7 +310,7 @@
|
||||
<height normal="25.5" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="851" min="2" max="2" chance="18.38" /> <!-- Onyx Beast's Eye Earring -->
|
||||
<item id="882" min="2" max="2" chance="18.33" /> <!-- Mithril Ring -->
|
||||
<item id="914" min="1" max="1" chance="17.73" /> <!-- Dark Necklace -->
|
||||
@@ -322,7 +322,7 @@
|
||||
<item id="955" min="10" max="10" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="70000" min="5" max="15" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="956" min="5" max="15" chance="49.85" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25008" level="41" type="L2Monster" name="Cletu's Confidant" title="Raid Fighter">
|
||||
@@ -442,7 +442,7 @@
|
||||
<height normal="90" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="195" min="1" max="1" chance="3.549" /> <!-- Cursed Staff -->
|
||||
<item id="2502" min="1" max="1" chance="3.546" /> <!-- Dwarven War Hammer -->
|
||||
<item id="227" min="1" max="1" chance="3.528" /> <!-- Stiletto -->
|
||||
@@ -458,7 +458,7 @@
|
||||
<item id="952" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Armor (C-grade) -->
|
||||
<item id="70000" min="9" max="27" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="951" min="1" max="1" chance="28.66" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25011" level="54" type="L2Monster" name="Thieles' Escort" title="Raid Fighter">
|
||||
@@ -583,7 +583,7 @@
|
||||
<height normal="39" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="883" min="1" max="3" chance="29.55" /> <!-- Aquastone Ring -->
|
||||
<item id="915" min="1" max="3" chance="28.55" /> <!-- Aquastone Necklace -->
|
||||
<item id="852" min="1" max="3" chance="28.5" /> <!-- Moonstone Earring -->
|
||||
@@ -626,7 +626,7 @@
|
||||
<item id="952" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Armor (C-grade) -->
|
||||
<item id="70000" min="8" max="23" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="951" min="5" max="15" chance="29.49" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25014" level="49" type="L2Monster" name="Ghost of Peasant" title="Raid Fighter">
|
||||
@@ -874,7 +874,7 @@
|
||||
<height normal="73" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="156" min="1" max="1" chance="7.546" /> <!-- Hand Axe -->
|
||||
<item id="221" min="1" max="1" chance="7.53" /> <!-- Assassin Knife -->
|
||||
<item id="166" min="1" max="1" chance="7.5175" /> <!-- Heavy Mace -->
|
||||
@@ -883,7 +883,7 @@
|
||||
<item id="101" min="1" max="1" chance="7.434" /> <!-- Scroll of Wisdom -->
|
||||
<item id="70000" min="3" max="8" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
<item id="955" min="1" max="1" chance="48.86" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25020" level="34" type="L2RaidBoss" name="Breka Warlock Pastu" title="Raid Boss">
|
||||
@@ -931,7 +931,7 @@
|
||||
<height normal="35" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="628" min="1" max="1" chance="5.877" /> <!-- Hoplon -->
|
||||
<item id="239" min="1" max="1" chance="5.859" /> <!-- Mystic Knife -->
|
||||
<item id="317" min="1" max="1" chance="5.835" /> <!-- Tome of Blood -->
|
||||
@@ -941,7 +941,7 @@
|
||||
<item id="955" min="2" max="4" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="4" max="11" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25021" level="33" type="L2Monster" name="Pastu's Silhouette" title="Raid Fighter">
|
||||
@@ -1071,7 +1071,7 @@
|
||||
<height normal="76" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="880" min="1" max="3" chance="29.21" /> <!-- Black Pearl Ring -->
|
||||
<item id="849" min="1" max="3" chance="28.27" /> <!-- Tiger's Eye -->
|
||||
<item id="912" min="1" max="1" chance="27.74" /> <!-- Near Forest Necklace -->
|
||||
@@ -1083,7 +1083,7 @@
|
||||
<item id="955" min="2" max="4" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="4" max="11" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25024" level="33" type="L2Monster" name="Jeruna's Escort Captain" title="Raid Fighter">
|
||||
@@ -1205,7 +1205,7 @@
|
||||
<height normal="24" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="193" min="1" max="1" chance="1.957" /> <!-- Stick of Faith -->
|
||||
<item id="72" min="1" max="1" chance="1.95" /> <!-- StormBringer -->
|
||||
<item id="160" min="1" max="1" chance="1.946" /> <!-- Battle Axe -->
|
||||
@@ -1224,7 +1224,7 @@
|
||||
<item id="952" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Armor (C-grade) -->
|
||||
<item id="70000" min="7" max="21" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
<item id="951" min="1" max="1" chance="31.24" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25027" level="48" type="L2Monster" name="Ketra Marksman" title="Raid Fighter">
|
||||
@@ -1591,7 +1591,7 @@
|
||||
<height normal="63" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="918" min="1" max="1" chance="27.66" /> <!-- Adamantite Necklace -->
|
||||
<item id="856" min="1" max="1" chance="26.55" /> <!-- Adamantite Earring -->
|
||||
<item id="887" min="1" max="1" chance="25.83" /> <!-- Adamantite Ring -->
|
||||
@@ -1638,7 +1638,7 @@
|
||||
<item id="70000" min="15" max="45" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="948" min="1" max="1" chance="80.24" /> <!-- Scroll: Enchant Armor (B-grade) -->
|
||||
<item id="947" min="1" max="1" chance="19.92" /> <!-- Scroll: Enchant Weapon (B-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25036" level="69" type="L2Monster" name="Cabrio Captor" title="Raid Fighter">
|
||||
@@ -1769,14 +1769,14 @@
|
||||
<height normal="75" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="847" min="2" max="10" chance="33.03" /> <!-- Red Crescent -->
|
||||
<item id="890" min="2" max="10" chance="32" /> <!-- Ring of Devotion -->
|
||||
<item id="910" min="2" max="4" chance="30.17" /> <!-- Necklace of Devotion -->
|
||||
<item id="955" min="2" max="8" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="3" max="8" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25039" level="27" type="L2Monster" name="Tirak's Escort" title="Raid Fighter">
|
||||
@@ -1902,7 +1902,7 @@
|
||||
<height normal="76" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="912" min="1" max="1" chance="31" /> <!-- Near Forest Necklace -->
|
||||
<item id="880" min="1" max="3" chance="30.69" /> <!-- Black Pearl Ring -->
|
||||
<item id="849" min="1" max="3" chance="30.41" /> <!-- Tiger's Eye -->
|
||||
@@ -1914,7 +1914,7 @@
|
||||
<item id="955" min="2" max="4" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="4" max="11" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25042" level="34" type="L2Monster" name="Remmel's Archer" title="Raid Fighter">
|
||||
@@ -2040,7 +2040,7 @@
|
||||
<height normal="39" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="297" min="1" max="1" chance="5.06" /> <!-- Glaive -->
|
||||
<item id="262" min="1" max="1" chance="5.047" /> <!-- Scallop Jamadhr -->
|
||||
<item id="159" min="1" max="1" chance="5.044" /> <!-- Bonebreaker -->
|
||||
@@ -2051,7 +2051,7 @@
|
||||
<item id="955" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="2" max="8" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="7" max="20" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25045" level="46" type="L2Monster" name="Barion's Dark Wizard" title="Raid Fighter">
|
||||
@@ -2183,7 +2183,7 @@
|
||||
<height normal="47.5" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="226" min="1" max="1" chance="1.955" /> <!-- Cursed Dagger -->
|
||||
<item id="191" min="1" max="1" chance="1.94" /> <!-- Heavy Doom Hammer -->
|
||||
<item id="173" min="1" max="1" chance="1.936" /> <!-- Skull Graver -->
|
||||
@@ -2205,7 +2205,7 @@
|
||||
<item id="952" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Armor (C-grade) -->
|
||||
<item id="70000" min="7" max="21" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="951" min="1" max="1" chance="30.62" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25048" level="48" type="L2Monster" name="Karte's Chief Knight" title="Raid Fighter">
|
||||
@@ -2335,7 +2335,7 @@
|
||||
<height normal="141" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="281" min="1" max="1" chance="2.564" /> <!-- Crystallized Ice Bow -->
|
||||
<item id="230" min="1" max="1" chance="2.558" /> <!-- Needle Wolverine -->
|
||||
<item id="192" min="1" max="1" chance="2.546" /> <!-- Crystal Staff -->
|
||||
@@ -2357,7 +2357,7 @@
|
||||
<item id="952" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Armor (C-grade) -->
|
||||
<item id="70000" min="8" max="23" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="951" min="1" max="1" chance="31.48" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25051" level="65" type="L2RaidBoss" name="Rahha" title="Raid Boss">
|
||||
@@ -2405,7 +2405,7 @@
|
||||
<height normal="34" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="887" min="1" max="3" chance="30.74" /> <!-- Adamantite Ring -->
|
||||
<item id="918" min="1" max="1" chance="30.61" /> <!-- Adamantite Necklace -->
|
||||
<item id="856" min="1" max="1" chance="28.71" /> <!-- Adamantite Earring -->
|
||||
@@ -2420,7 +2420,7 @@
|
||||
<item id="70000" min="13" max="38" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="947" min="1" max="1" chance="50.33" /> <!-- Scroll: Enchant Weapon (B-grade) -->
|
||||
<item id="948" min="1" max="1" chance="49.93" /> <!-- Scroll: Enchant Armor (B-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25052" level="64" type="L2Monster" name="Priestess of Rahha" title="Raid Fighter">
|
||||
@@ -2671,7 +2671,7 @@
|
||||
<height normal="50" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="914" min="1" max="1" chance="32.48" /> <!-- Dark Necklace -->
|
||||
<item id="882" min="1" max="3" chance="31.18" /> <!-- Mithril Ring -->
|
||||
<item id="851" min="1" max="3" chance="30.92" /> <!-- Onyx Beast's Eye Earring -->
|
||||
@@ -2683,7 +2683,7 @@
|
||||
<item id="955" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="2" max="8" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="6" max="18" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25058" level="44" type="L2Monster" name="Beacon's Shooter" title="Raid Fighter">
|
||||
@@ -2937,7 +2937,7 @@
|
||||
<height normal="51" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="238" min="1" max="1" chance="6.45" /> <!-- Dagger of Mana -->
|
||||
<item id="278" min="1" max="1" chance="6.437" /> <!-- Gastraphetes -->
|
||||
<item id="260" min="1" max="1" chance="6.421" /> <!-- Triple-Edged Jamadhr -->
|
||||
@@ -2946,7 +2946,7 @@
|
||||
<item id="955" min="2" max="4" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="4" max="11" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25064" level="40" type="L2RaidBoss" name="Wizard of Storm Teruk" title="Raid Boss">
|
||||
@@ -3000,7 +3000,7 @@
|
||||
<height normal="55" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="851" min="1" max="1" chance="31.14" /> <!-- Onyx Beast's Eye Earring -->
|
||||
<item id="882" min="1" max="1" chance="30.72" /> <!-- Mithril Ring -->
|
||||
<item id="914" min="1" max="1" chance="30.41" /> <!-- Dark Necklace -->
|
||||
@@ -3012,7 +3012,7 @@
|
||||
<item id="955" min="2" max="4" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="5" max="14" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25065" level="39" type="L2Monster" name="Teruk's Escort" title="Raid Fighter">
|
||||
@@ -3134,7 +3134,7 @@
|
||||
<height normal="60" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="915" min="1" max="3" chance="31.5" /> <!-- Aquastone Necklace -->
|
||||
<item id="883" min="1" max="3" chance="28.96" /> <!-- Aquastone Ring -->
|
||||
<item id="852" min="1" max="3" chance="28.5" /> <!-- Moonstone Earring -->
|
||||
@@ -3177,7 +3177,7 @@
|
||||
<item id="952" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Armor (C-grade) -->
|
||||
<item id="70000" min="8" max="24" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="951" min="1" max="1" chance="29.26" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25068" level="51" type="L2Monster" name="Shaka's Sniper" title="Raid Fighter">
|
||||
@@ -3551,7 +3551,7 @@
|
||||
<height normal="20" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="168" min="1" max="1" chance="5.717" /> <!-- Work Hammer -->
|
||||
<item id="123" min="1" max="1" chance="5.714" /> <!-- Saber -->
|
||||
<item id="258" min="1" max="1" chance="5.712" /> <!-- Bagh-Nakh -->
|
||||
@@ -3562,7 +3562,7 @@
|
||||
<item id="178" min="1" max="1" chance="5.604" /> <!-- Bone Staff -->
|
||||
<item id="291" min="1" max="1" chance="5.596" /> <!-- Trident -->
|
||||
<item id="70000" min="3" max="8" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25077" level="24" type="L2Monster" name="Escort Captain Dogun" title="Raid Fighter">
|
||||
@@ -3804,7 +3804,7 @@
|
||||
<height normal="26" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="260" min="1" max="1" chance="2.004" /> <!-- Triple-Edged Jamadhr -->
|
||||
<item id="278" min="1" max="1" chance="2.003" /> <!-- Gastraphetes -->
|
||||
<item id="130" min="1" max="1" chance="2.002" /> <!-- Elven Sword -->
|
||||
@@ -3825,7 +3825,7 @@
|
||||
<item id="955" min="2" max="4" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="5" max="14" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25083" level="38" type="L2Monster" name="Cat Gang" title="Raid Fighter">
|
||||
@@ -3951,7 +3951,7 @@
|
||||
<height normal="51" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="914" min="1" max="1" chance="32.16" /> <!-- Dark Necklace -->
|
||||
<item id="851" min="1" max="3" chance="32.08" /> <!-- Onyx Beast's Eye Earring -->
|
||||
<item id="882" min="1" max="3" chance="30.44" /> <!-- Mithril Ring -->
|
||||
@@ -3963,7 +3963,7 @@
|
||||
<item id="955" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="2" max="8" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="6" max="17" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25086" level="43" type="L2Monster" name="Timak Orc Ranger" title="Raid Fighter">
|
||||
@@ -4086,7 +4086,7 @@
|
||||
<height normal="63" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="882" min="1" max="3" chance="31.14" /> <!-- Mithril Ring -->
|
||||
<item id="914" min="1" max="1" chance="31.03" /> <!-- Dark Necklace -->
|
||||
<item id="851" min="1" max="3" chance="30.5" /> <!-- Onyx Beast's Eye Earring -->
|
||||
@@ -4097,7 +4097,7 @@
|
||||
<item id="955" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="2" max="8" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="6" max="17" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25089" level="59" type="L2RaidBoss" name="Soulless Wild Boar" title="Raid Boss">
|
||||
@@ -4144,7 +4144,7 @@
|
||||
<height normal="27" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="103" min="1" max="3" chance="2.563" /> <!-- Tower Shield -->
|
||||
<item id="64" min="1" max="3" chance="2.562" /> <!-- Compound Boots -->
|
||||
<item id="441" min="1" max="1" chance="2.552" /> <!-- Demon's Tunic -->
|
||||
@@ -4188,7 +4188,7 @@
|
||||
<item id="952" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Armor (C-grade) -->
|
||||
<item id="70000" min="11" max="32" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="951" min="1" max="1" chance="29.02" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25090" level="58" type="L2Monster" name="Soulless Wolf" title="Raid Fighter">
|
||||
@@ -4440,7 +4440,7 @@
|
||||
<height normal="21" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="166" min="1" max="1" chance="8.567" /> <!-- Heavy Mace -->
|
||||
<item id="312" min="1" max="1" chance="8.543" /> <!-- Branch of Life -->
|
||||
<item id="156" min="1" max="1" chance="8.535" /> <!-- Hand Axe -->
|
||||
@@ -4449,7 +4449,7 @@
|
||||
<item id="167" min="1" max="1" chance="8.458" /> <!-- Scalpel -->
|
||||
<item id="955" min="2" max="10" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="70000" min="3" max="8" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25096" level="28" type="L2Monster" name="Renoa's Elpy" title="Raid Fighter">
|
||||
@@ -4577,7 +4577,7 @@
|
||||
<height normal="43" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="880" min="1" max="3" chance="31.33" /> <!-- Black Pearl Ring -->
|
||||
<item id="912" min="1" max="1" chance="30.74" /> <!-- Near Forest Necklace -->
|
||||
<item id="849" min="1" max="3" chance="30.49" /> <!-- Tiger's Eye -->
|
||||
@@ -4589,7 +4589,7 @@
|
||||
<item id="955" min="2" max="4" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="4" max="11" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25099" level="56" type="L2RaidBoss" name="Rotting Tree Repiro" title="Raid Boss">
|
||||
@@ -4638,7 +4638,7 @@
|
||||
<height normal="80" grown="96" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="285" min="1" max="1" chance="4.2305" /> <!-- Noble Elven Bow -->
|
||||
<item id="195" min="1" max="1" chance="4.2165" /> <!-- Cursed Staff -->
|
||||
<item id="242" min="1" max="1" chance="4.213" /> <!-- Soulfire Dirk -->
|
||||
@@ -4654,7 +4654,7 @@
|
||||
<item id="952" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Armor (C-grade) -->
|
||||
<item id="70000" min="9" max="27" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="951" min="1" max="1" chance="29.3" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
</list>
|
||||
@@ -800,7 +800,7 @@
|
||||
<height normal="58" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="93" min="1" max="1" chance="3.63" /> <!-- Winged Spear -->
|
||||
<item id="172" min="1" max="1" chance="3.605" /> <!-- Heavy Bone Club -->
|
||||
<item id="169" min="1" max="1" chance="3.597" /> <!-- Skull Breaker -->
|
||||
@@ -812,7 +812,7 @@
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="4" max="11" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
<!-- FIXME: Also drops herbs. -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25119" level="50" type="L2RaidBoss" name="Fairy Queen's Messenger Berun" title="Raid Boss">
|
||||
@@ -1111,7 +1111,7 @@
|
||||
<height normal="87" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="918" min="1" max="1" chance="31.31" /> <!-- Adamantite Necklace -->
|
||||
<item id="856" min="1" max="1" chance="31.12" /> <!-- Adamantite Earring -->
|
||||
<item id="887" min="1" max="3" chance="29.93" /> <!-- Adamantite Ring -->
|
||||
@@ -1127,7 +1127,7 @@
|
||||
<item id="947" min="1" max="1" chance="50.93" /> <!-- Scroll: Enchant Weapon (B-grade) -->
|
||||
<item id="948" min="1" max="1" chance="49.42" /> <!-- Scroll: Enchant Armor (B-grade) -->
|
||||
<!-- FIXME: Also drops herbs. -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25126" level="79" type="L2RaidBoss" name="Longhorn Golkonda" title="Raid Boss">
|
||||
@@ -1228,7 +1228,7 @@
|
||||
<height normal="57" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="432" min="1" max="3" chance="8.069" /> <!-- Cursed Tunic -->
|
||||
<item id="604" min="2" max="6" chance="8.067" /> <!-- Quality Leather Gloves -->
|
||||
<item id="465" min="1" max="3" chance="8.017" /> <!-- Cursed Stockings -->
|
||||
@@ -1242,7 +1242,7 @@
|
||||
<item id="955" min="1" max="1" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<!-- FIXME: Also drops herbs. -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25128" level="33" type="L2RaidBoss" name="Vuku Grand Priest Gharmash" title="Raid Boss">
|
||||
@@ -2536,7 +2536,7 @@
|
||||
<height normal="126" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="852" min="1" max="3" chance="31.77" /> <!-- Moonstone Earring -->
|
||||
<item id="883" min="1" max="3" chance="30.36" /> <!-- Aquastone Ring -->
|
||||
<item id="915" min="1" max="1" chance="30.22" /> <!-- Aquastone Necklace -->
|
||||
@@ -2562,7 +2562,7 @@
|
||||
<item id="70000" min="7" max="20" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
<item id="951" min="1" max="1" chance="28.73" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
<!-- FIXME: Also drops herbs. -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25159" level="54" type="L2RaidBoss" name="Paniel the Unicorn" title="Raid Boss">
|
||||
@@ -2956,7 +2956,7 @@
|
||||
<height normal="52" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="849" min="1" max="3" chance="32.76" /> <!-- Tiger's Eye -->
|
||||
<item id="880" min="1" max="3" chance="31.55" /> <!-- Black Pearl Ring -->
|
||||
<item id="912" min="1" max="1" chance="30.2" /> <!-- Near Forest Necklace -->
|
||||
@@ -2969,7 +2969,7 @@
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="3" max="8" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
<!-- FIXME: Also drops herbs. -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25170" level="38" type="L2RaidBoss" name="Lizardmen Captain Hellion" title="Raid Boss">
|
||||
|
||||
@@ -3099,7 +3099,7 @@
|
||||
<height normal="43.5" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="314" min="1" max="1" chance="5.74" /> <!-- Proof of Revenge -->
|
||||
<item id="258" min="1" max="1" chance="5.71" /> <!-- Bagh-Nakh -->
|
||||
<item id="313" min="1" max="1" chance="5.7" /> <!-- Temptation of Abyss -->
|
||||
@@ -3112,7 +3112,7 @@
|
||||
<item id="955" min="2" max="8" chance="100" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<item id="70000" min="3" max="8" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
<!-- FIXME: Also drops herbs. -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25273" level="50" type="L2RaidBoss" name="Carnamakos" title="Raid Boss">
|
||||
|
||||
@@ -3990,7 +3990,7 @@
|
||||
<height normal="40.5" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="912" min="1" max="1" chance="23.28" /> <!-- Near Forest Necklace -->
|
||||
<item id="849" min="1" max="3" chance="22.76" /> <!-- Tiger's Eye -->
|
||||
<item id="880" min="1" max="3" chance="22.31" /> <!-- Black Pearl Ring -->
|
||||
@@ -4006,7 +4006,7 @@
|
||||
<item id="956" min="5" max="15" chance="100" /> <!-- Scroll: Enchant Armor (D-grade) -->
|
||||
<item id="70000" min="3" max="9" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
<!-- FIXME: Also drops herbs. -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25392" level="32" type="L2RaidBoss" name="Queen's Royal Guard Captain" title="Raid Boss">
|
||||
|
||||
@@ -1659,7 +1659,7 @@
|
||||
<height normal="52" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="159" min="1" max="1" chance="5.45" /> <!-- Bonebreaker -->
|
||||
<item id="2499" min="1" max="1" chance="5.428" /> <!-- Elven Long Sword -->
|
||||
<item id="280" min="1" max="1" chance="5.424" /> <!-- Light Crossbow -->
|
||||
@@ -1671,7 +1671,7 @@
|
||||
<item id="70000" min="6" max="18" chance="100" /> <!-- Sealed Rune - Lv. 1 -->
|
||||
<item id="955" min="1" max="1" chance="49.25" /> <!-- Scroll: Enchant Weapon (D-grade) -->
|
||||
<!-- FIXME: Also drops herbs. -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="25438" level="44" type="L2RaidBoss" name="Thief Kelbar" title="Raid Boss">
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
<height normal="53" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="882" min="1" max="3" chance="34.9" /> <!-- Mithril Ring -->
|
||||
<item id="915" min="1" max="1" chance="34.38" /> <!-- Aquastone Necklace -->
|
||||
<item id="852" min="1" max="3" chance="34.33" /> <!-- Moonstone Earring -->
|
||||
@@ -149,7 +149,7 @@
|
||||
<item id="2430" min="1" max="3" chance="5.483" /> <!-- Karmian Boots -->
|
||||
<item id="2387" min="1" max="1" chance="5.481" /> <!-- Reinforced Mithril Gaiters -->
|
||||
<item id="70000" min="76" max="228" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29002" level="29" type="L2Monster" name="Queen Ant Larva">
|
||||
@@ -365,7 +365,7 @@
|
||||
<height normal="75" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="854" min="1" max="3" chance="34.44" /> <!-- Earring of Seal -->
|
||||
<item id="1127" min="1" max="3" chance="34.14" /> <!-- Forgotten Boots -->
|
||||
<item id="1149" min="1" max="3" chance="33.75" /> <!-- Shining Circlet -->
|
||||
@@ -442,7 +442,7 @@
|
||||
<item id="301" min="1" max="1" chance="4.098" /> <!-- Scorpion -->
|
||||
<item id="70000" min="297" max="891" chance="100" /> <!-- Sealed Rune - Stage 1 -->
|
||||
<item id="8620" min="1" max="3" chance="49.66" /> <!-- Ancient Book: Divine Inspiration (Manuscript) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29007" level="50" type="L2Monster" name="Death Knight">
|
||||
@@ -492,7 +492,7 @@
|
||||
<height normal="31" grown="36" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="162" min="1" max="1" chance="0.003" /> <!-- War Axe -->
|
||||
<item id="174" min="1" max="1" chance="0.003" /> <!-- Nirvana Axe -->
|
||||
<item id="196" min="1" max="1" chance="0.003" /> <!-- Stick of Eternity -->
|
||||
@@ -519,11 +519,11 @@
|
||||
<item id="2099" min="1" max="1" chance="0.3" /> <!-- Stick of Eternity Shaft -->
|
||||
<item id="2102" min="1" max="1" chance="0.3" /> <!-- Pa'agrio Hammer Head -->
|
||||
<item id="2360" min="1" max="1" chance="0.03" /> <!-- Recipe: Orcish Poleaxe -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1914" min="1" max="1" chance="46.73" /> <!-- Earring of Seal Gemstone -->
|
||||
<item id="3011" min="1" max="1" chance="22.02" /> <!-- Recipe: Divine Boots -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29008" level="55" type="L2Monster" name="Doom Wraith">
|
||||
@@ -621,7 +621,7 @@
|
||||
<height normal="25.5" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="1126" min="1" max="1" chance="0.075" /> <!-- Crimson Boots -->
|
||||
<item id="2434" min="1" max="1" chance="0.075" /> <!-- Rind Leather Boots -->
|
||||
<item id="2455" min="1" max="1" chance="0.075" /> <!-- Plated Leather Gloves -->
|
||||
@@ -642,11 +642,11 @@
|
||||
<item id="1885" min="1" max="1" chance="1.627" /> <!-- High-grade Suede -->
|
||||
<item id="2339" min="1" max="1" chance="0.03" /> <!-- Recipe: Inferno Staff -->
|
||||
<item id="2350" min="1" max="1" chance="0.03" /> <!-- Recipe: Pa'agrio Axe -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1895" min="1" max="5" chance="65.95" /> <!-- Metallic Fiber -->
|
||||
<item id="2944" min="1" max="1" chance="62.87" /> <!-- Karmian Glove Fabric -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29010" level="46" type="L2Monster" name="Validus">
|
||||
@@ -693,7 +693,7 @@
|
||||
<height normal="29" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="354" min="1" max="1" chance="0.03" /> <!-- Chain Mail Shirt -->
|
||||
<item id="232" min="1" max="1" chance="0.0075" /> <!-- Dark Elven Dagger -->
|
||||
<item id="281" min="1" max="1" chance="0.0075" /> <!-- Crystallized Ice Bow -->
|
||||
@@ -708,12 +708,12 @@
|
||||
<item id="2074" min="5" max="15" chance="0.75" /> <!-- Crystallized Ice Bow Shaft -->
|
||||
<item id="2319" min="1" max="1" chance="0.075" /> <!-- Recipe: Raid Sword -->
|
||||
<item id="951" min="1" max="1" chance="0.03" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1873" min="1" max="3" chance="83.29" /> <!-- Silver Nugget -->
|
||||
<item id="2060" min="1" max="1" chance="3.426" /> <!-- StormBringer Blade -->
|
||||
<item id="2067" min="1" max="1" chance="3.17" /> <!-- Crystal Staff Head -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29011" level="49" type="L2Monster" name="Susceptor">
|
||||
@@ -811,7 +811,7 @@
|
||||
<height normal="34" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="1126" min="1" max="1" chance="0.075" /> <!-- Crimson Boots -->
|
||||
<item id="2434" min="1" max="1" chance="0.075" /> <!-- Rind Leather Boots -->
|
||||
<item id="2455" min="1" max="1" chance="0.075" /> <!-- Plated Leather Gloves -->
|
||||
@@ -833,11 +833,11 @@
|
||||
<item id="1973" min="3" max="9" chance="0.75" /> <!-- Pa'agrio Hand Design -->
|
||||
<item id="2344" min="1" max="1" chance="0.075" /> <!-- Recipe: Grace Dagger -->
|
||||
<item id="951" min="1" max="1" chance="0.075" /> <!-- Scroll: Enchant Weapon (C-grade) -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="2073" min="1" max="1" chance="7.903" /> <!-- Chakram Edge -->
|
||||
<item id="2352" min="1" max="1" chance="2.133" /> <!-- Recipe: Widow Maker -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29013" level="45" type="L2Monster" name="Premo">
|
||||
@@ -884,7 +884,7 @@
|
||||
<height normal="35" grown="43" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="631" min="1" max="1" chance="0.3" /> <!-- Eldarake -->
|
||||
<item id="2945" min="1" max="1" chance="0.3" /> <!-- Chain Shield -->
|
||||
<item id="2413" min="1" max="1" chance="0.075" /> <!-- Chain Hood -->
|
||||
@@ -900,12 +900,12 @@
|
||||
<item id="2207" min="1" max="1" chance="0.3" /> <!-- Oriharukon Ore -->
|
||||
<item id="2323" min="1" max="1" chance="0.075" /> <!-- Recipe: Elemental Bow -->
|
||||
<item id="2326" min="1" max="1" chance="0.075" /> <!-- Recipe: Horn of Glory -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="1876" min="1" max="1" chance="79.28" /> <!-- Mithril Ore -->
|
||||
<item id="1962" min="1" max="1" chance="13.55" /> <!-- Karmian Tunic Pattern -->
|
||||
<item id="2073" min="1" max="1" chance="3.096" /> <!-- Chakram Edge -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29014" level="50" type="L2GrandBoss" name="Orfen">
|
||||
@@ -959,7 +959,7 @@
|
||||
<height normal="143" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="887" min="1" max="3" chance="34.78" /> <!-- Adamantite Ring -->
|
||||
<item id="918" min="1" max="1" chance="34.06" /> <!-- Adamantite Necklace -->
|
||||
<item id="856" min="1" max="3" chance="33.27" /> <!-- Adamantite Earring -->
|
||||
@@ -1010,7 +1010,7 @@
|
||||
<item id="4051" min="20" max="80" chance="12.26" /> <!-- Adamantite Necklace Chain -->
|
||||
<item id="4439" min="20" max="80" chance="12.07" /> <!-- Avadon Shield Fragment -->
|
||||
<item id="4065" min="20" max="80" chance="12.07" /> <!-- Avadon Gaiter Material -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29015" level="48" type="L2Monster" name="Laikel">
|
||||
@@ -1231,7 +1231,7 @@
|
||||
<height normal="300" />
|
||||
</collision>
|
||||
<drop_lists> <!-- CT2.5 -->
|
||||
<death>
|
||||
<drop>
|
||||
<item id="8620" min="10" max="30" chance="50" /> <!-- Ancient Book: Divine Inspiration (Manuscript) -->
|
||||
<item id="80" min="1" max="2" chance="25" /> <!-- Tallum Blade -->
|
||||
<item id="98" min="1" max="2" chance="25" /> <!-- Halberd -->
|
||||
@@ -1295,7 +1295,7 @@
|
||||
<item id="57" min="14000000" max="18000000" chance="100" /> <!-- Adena -->
|
||||
<item id="57" min="14000000" max="18000000" chance="100" /> <!-- Adena -->
|
||||
<item id="57" min="9000000" max="13000000" chance="100" /> <!-- Adena -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29020" level="75" type="L2GrandBoss" name="Baium">
|
||||
@@ -1337,7 +1337,7 @@
|
||||
<height normal="174" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="6328" min="1" max="3" chance="51.82" /> <!-- Sealed Majestic Ring -->
|
||||
<item id="49580" min="1" max="1" chance="30.47" /> <!-- Baium's Ring -->
|
||||
<item id="6327" min="1" max="1" chance="20.23" /> <!-- Sealed Majestic Earring -->
|
||||
@@ -1410,7 +1410,7 @@
|
||||
<item id="33808" min="1" max="1" chance="50.09" /> <!-- Improved Scroll: Enchant Weapon (B-grade) -->
|
||||
<item id="729" min="1" max="1" chance="50.04" /> <!-- Scroll: Enchant Weapon (A-grade) -->
|
||||
<item id="49682" min="1" max="1" chance="25.99" /> <!-- Baium’s Soul -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29021" level="74" type="L2Monster" name="Archangel">
|
||||
@@ -1495,7 +1495,7 @@
|
||||
<height normal="32" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="6328" min="1" max="1" chance="52.5" /> <!-- Sealed Majestic Ring -->
|
||||
<!-- <item id="90763" min="1" max="1" chance="20.82" /> Zaken's Earring Not used Saviors client -->
|
||||
<item id="6327" min="1" max="1" chance="20.33" /> <!-- Sealed Majestic Earring -->
|
||||
@@ -1566,7 +1566,7 @@
|
||||
<item id="33808" min="1" max="1" chance="33.38" /> <!-- Improved Scroll: Enchant Weapon (B-grade) -->
|
||||
<item id="729" min="1" max="1" chance="24.09" /> <!-- Scroll: Enchant Weapon (A-grade) -->
|
||||
<item id="730" min="1" max="1" chance="24.08" /> <!-- Scroll: Enchant Armor (A-grade) -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29023" level="58" type="L2Monster" name="Maiden Doll">
|
||||
@@ -1615,18 +1615,18 @@
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="97" min="1" max="1" chance="0.0075" /> <!-- Lance -->
|
||||
<item id="268" min="1" max="1" chance="0.0075" /> <!-- Bellion Cestus -->
|
||||
<item id="57" min="2433" max="5685" chance="70" /> <!-- Adena -->
|
||||
<item id="1887" min="1" max="1" chance="10.51" /> <!-- Varnish of Purity -->
|
||||
<item id="4120" min="1" max="1" chance="1.697" /> <!-- Bellion Cestus Edge -->
|
||||
<item id="4115" min="1" max="1" chance="1.686" /> <!-- Lance Blade -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="948" min="1" max="1" chance="4.351" /> <!-- Scroll: Enchant Armor (B-grade) -->
|
||||
<item id="947" min="1" max="1" chance="0.75" /> <!-- Scroll: Enchant Weapon (B-grade) -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29024" level="59" type="L2Monster" name="Veil Master">
|
||||
@@ -1674,7 +1674,7 @@
|
||||
<height normal="40" />
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<drop>
|
||||
<item id="79" min="1" max="1" chance="0.003" /> <!-- Damascus-->
|
||||
<item id="171" min="1" max="1" chance="0.003" /> <!-- Deadman's Glory -->
|
||||
<item id="57" min="1372" max="3205" chance="70" /> <!-- Adena -->
|
||||
@@ -1686,11 +1686,11 @@
|
||||
<item id="1871" min="9" max="27" chance="2.287" /> <!-- Charcoal -->
|
||||
<item id="4114" min="1" max="1" chance="0.75" /> <!-- Damascus Sword Blade -->
|
||||
<item id="4116" min="1" max="1" chance="0.75" /> <!-- Deadman's Glory Stone -->
|
||||
</death>
|
||||
<corpse>
|
||||
</drop>
|
||||
<spoil>
|
||||
<item id="948" min="1" max="1" chance="2.495" /> <!-- Scroll: Enchant Armor (B-grade) -->
|
||||
<item id="947" min="1" max="1" chance="0.3" /> <!-- Scroll: Enchant Weapon (B-grade) -->
|
||||
</corpse>
|
||||
</spoil>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29025" level="75" type="L2Npc" name="Baium">
|
||||
@@ -1853,7 +1853,7 @@
|
||||
<height normal="15" />
|
||||
</collision>
|
||||
<drop_lists> <!-- CT2.5 -->
|
||||
<death>
|
||||
<drop>
|
||||
<item id="8620" min="10" max="30" chance="50" /> <!-- Ancient Book: Divine Inspiration (Manuscript) -->
|
||||
<item id="80" min="1" max="2" chance="25" /> <!-- Tallum Blade -->
|
||||
<item id="98" min="1" max="2" chance="25" /> <!-- Halberd -->
|
||||
@@ -1917,7 +1917,7 @@
|
||||
<item id="57" min="14000000" max="18000000" chance="100" /> <!-- Adena -->
|
||||
<item id="57" min="14000000" max="18000000" chance="100" /> <!-- Adena -->
|
||||
<item id="57" min="9000000" max="13000000" chance="100" /> <!-- Adena -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29067" level="1" type="L2GrandBoss" name="Antharas">
|
||||
@@ -1963,7 +1963,7 @@
|
||||
<height normal="15" />
|
||||
</collision>
|
||||
<drop_lists> <!-- CT2.5 -->
|
||||
<death>
|
||||
<drop>
|
||||
<item id="8620" min="1" max="1" chance="25" /> <!-- Ancient Book: Divine Inspiration -->
|
||||
<item id="80" min="1" max="2" chance="25" /> <!-- Tallum Blade -->
|
||||
<item id="98" min="1" max="2" chance="25" /> <!-- Halberd -->
|
||||
@@ -2027,7 +2027,7 @@
|
||||
<item id="57" min="14000000" max="18000000" chance="100" /> <!-- Adena -->
|
||||
<item id="57" min="14000000" max="18000000" chance="100" /> <!-- Adena -->
|
||||
<item id="57" min="9000000" max="13000000" chance="100" /> <!-- Adena -->
|
||||
</death>
|
||||
</drop>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
<npc id="29068" level="79" type="L2GrandBoss" name="Antharas" title="Land Dragon">
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
<xs:complexType name="drop_list">
|
||||
<xs:choice minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:element name="item" type="drop_list_item" />
|
||||
<xs:element name="group">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="item" type="drop_list_item" minOccurs="1" maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
<xs:attribute name="chance" type="xs:decimal" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:choice>
|
||||
</xs:complexType>
|
||||
<xs:element name="list">
|
||||
@@ -267,9 +259,9 @@
|
||||
<xs:element name="drop_lists" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="death" type="drop_list" minOccurs="0" maxOccurs="1" />
|
||||
<xs:element name="corpse" type="drop_list" minOccurs="0" maxOccurs="1" />
|
||||
<xs:element name="lucky_corpse" type="drop_list" minOccurs="0" maxOccurs="1" />
|
||||
<xs:element name="drop" type="drop_list" minOccurs="0" maxOccurs="1" />
|
||||
<xs:element name="spoil" type="drop_list" minOccurs="0" maxOccurs="1" />
|
||||
<xs:element name="lucky_drop" type="drop_list" minOccurs="0" maxOccurs="1" />
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
@@ -118,7 +118,6 @@ public final class Config
|
||||
public static final String CUSTOM_FIND_PVP_CONFIG_FILE = "./config/Custom/FindPvP.ini";
|
||||
public static final String CUSTOM_MULTILANGUAL_SUPPORT_CONFIG_FILE = "./config/Custom/MultilingualSupport.ini";
|
||||
public static final String CUSTOM_OFFLINE_TRADE_CONFIG_FILE = "./config/Custom/OfflineTrade.ini";
|
||||
public static final String CUSTOM_OLD_DROP_BEHAVIOR_CONFIG_FILE = "./config/Custom/OldDropBehavior.ini";
|
||||
public static final String CUSTOM_PASSWORD_CHANGE_CONFIG_FILE = "./config/Custom/PasswordChange.ini";
|
||||
public static final String CUSTOM_PC_CAFE_CONFIG_FILE = "./config/Custom/PcCafe.ini";
|
||||
public static final String CUSTOM_PREMIUM_SYSTEM_CONFIG_FILE = "./config/Custom/PremiumSystem.ini";
|
||||
@@ -454,7 +453,6 @@ public final class Config
|
||||
public static boolean ORDER_QUEST_LIST_BY_QUESTID;
|
||||
public static boolean AUTODELETE_INVALID_QUEST_DATA;
|
||||
public static boolean ENABLE_STORY_QUEST_BUFF_REWARD;
|
||||
public static boolean PRECISE_DROP_CALCULATION;
|
||||
public static boolean MULTIPLE_ITEM_DROP;
|
||||
public static boolean FORCE_INVENTORY_UPDATE;
|
||||
public static boolean LAZY_CACHE;
|
||||
@@ -697,11 +695,11 @@ public final class Config
|
||||
public static float RATE_QUEST_REWARD_RECIPE;
|
||||
public static float RATE_QUEST_REWARD_MATERIAL;
|
||||
public static float RATE_DEATH_DROP_AMOUNT_MULTIPLIER;
|
||||
public static float RATE_CORPSE_DROP_AMOUNT_MULTIPLIER;
|
||||
public static float RATE_SPOIL_DROP_AMOUNT_MULTIPLIER;
|
||||
public static float RATE_HERB_DROP_AMOUNT_MULTIPLIER;
|
||||
public static float RATE_RAID_DROP_AMOUNT_MULTIPLIER;
|
||||
public static float RATE_DEATH_DROP_CHANCE_MULTIPLIER;
|
||||
public static float RATE_CORPSE_DROP_CHANCE_MULTIPLIER;
|
||||
public static float RATE_SPOIL_DROP_CHANCE_MULTIPLIER;
|
||||
public static float RATE_HERB_DROP_CHANCE_MULTIPLIER;
|
||||
public static float RATE_RAID_DROP_CHANCE_MULTIPLIER;
|
||||
public static Map<Integer, Float> RATE_DROP_AMOUNT_BY_ID;
|
||||
@@ -996,7 +994,6 @@ public final class Config
|
||||
public static int DUALBOX_CHECK_MAX_L2EVENT_PARTICIPANTS_PER_IP;
|
||||
public static Map<Integer, Integer> DUALBOX_CHECK_WHITELIST;
|
||||
public static boolean ALLOW_CHANGE_PASSWORD;
|
||||
public static boolean OLD_DROP_BEHAVIOR;
|
||||
public static boolean ALLOW_HUMAN;
|
||||
public static boolean ALLOW_ELF;
|
||||
public static boolean ALLOW_DARKELF;
|
||||
@@ -1893,14 +1890,6 @@ public final class Config
|
||||
PET_HP_REGEN_MULTIPLIER = NPC.getDouble("PetHpRegenMultiplier", 100) / 100;
|
||||
PET_MP_REGEN_MULTIPLIER = NPC.getDouble("PetMpRegenMultiplier", 100) / 100;
|
||||
|
||||
DROP_ADENA_MIN_LEVEL_DIFFERENCE = NPC.getInt("DropAdenaMinLevelDifference", 8);
|
||||
DROP_ADENA_MAX_LEVEL_DIFFERENCE = NPC.getInt("DropAdenaMaxLevelDifference", 15);
|
||||
DROP_ADENA_MIN_LEVEL_GAP_CHANCE = NPC.getDouble("DropAdenaMinLevelGapChance", 10);
|
||||
|
||||
DROP_ITEM_MIN_LEVEL_DIFFERENCE = NPC.getInt("DropItemMinLevelDifference", 5);
|
||||
DROP_ITEM_MAX_LEVEL_DIFFERENCE = NPC.getInt("DropItemMaxLevelDifference", 10);
|
||||
DROP_ITEM_MIN_LEVEL_GAP_CHANCE = NPC.getDouble("DropItemMinLevelGapChance", 10);
|
||||
|
||||
VITALITY_CONSUME_BY_MOB = NPC.getInt("VitalityConsumeByMob", 2250);
|
||||
VITALITY_CONSUME_BY_BOSS = NPC.getInt("VitalityConsumeByBoss", 1125);
|
||||
|
||||
@@ -1973,11 +1962,11 @@ public final class Config
|
||||
KARMA_RATE_DROP_EQUIP_WEAPON = RatesSettings.getInt("KarmaRateDropEquipWeapon", 10);
|
||||
|
||||
RATE_DEATH_DROP_AMOUNT_MULTIPLIER = RatesSettings.getFloat("DeathDropAmountMultiplier", 1);
|
||||
RATE_CORPSE_DROP_AMOUNT_MULTIPLIER = RatesSettings.getFloat("CorpseDropAmountMultiplier", 1);
|
||||
RATE_SPOIL_DROP_AMOUNT_MULTIPLIER = RatesSettings.getFloat("SpoilDropAmountMultiplier", 1);
|
||||
RATE_HERB_DROP_AMOUNT_MULTIPLIER = RatesSettings.getFloat("HerbDropAmountMultiplier", 1);
|
||||
RATE_RAID_DROP_AMOUNT_MULTIPLIER = RatesSettings.getFloat("RaidDropAmountMultiplier", 1);
|
||||
RATE_DEATH_DROP_CHANCE_MULTIPLIER = RatesSettings.getFloat("DeathDropChanceMultiplier", 1);
|
||||
RATE_CORPSE_DROP_CHANCE_MULTIPLIER = RatesSettings.getFloat("CorpseDropChanceMultiplier", 1);
|
||||
RATE_SPOIL_DROP_CHANCE_MULTIPLIER = RatesSettings.getFloat("SpoilDropChanceMultiplier", 1);
|
||||
RATE_HERB_DROP_CHANCE_MULTIPLIER = RatesSettings.getFloat("HerbDropChanceMultiplier", 1);
|
||||
RATE_RAID_DROP_CHANCE_MULTIPLIER = RatesSettings.getFloat("RaidDropChanceMultiplier", 1);
|
||||
|
||||
@@ -2037,6 +2026,13 @@ public final class Config
|
||||
}
|
||||
}
|
||||
|
||||
DROP_ADENA_MIN_LEVEL_DIFFERENCE = RatesSettings.getInt("DropAdenaMinLevelDifference", 8);
|
||||
DROP_ADENA_MAX_LEVEL_DIFFERENCE = RatesSettings.getInt("DropAdenaMaxLevelDifference", 15);
|
||||
DROP_ADENA_MIN_LEVEL_GAP_CHANCE = RatesSettings.getDouble("DropAdenaMinLevelGapChance", 10);
|
||||
DROP_ITEM_MIN_LEVEL_DIFFERENCE = RatesSettings.getInt("DropItemMinLevelDifference", 5);
|
||||
DROP_ITEM_MAX_LEVEL_DIFFERENCE = RatesSettings.getInt("DropItemMaxLevelDifference", 10);
|
||||
DROP_ITEM_MIN_LEVEL_GAP_CHANCE = RatesSettings.getDouble("DropItemMinLevelGapChance", 10);
|
||||
|
||||
// Load PvP config file (if exists)
|
||||
final PropertiesParser PVPSettings = new PropertiesParser(PVP_CONFIG_FILE);
|
||||
|
||||
@@ -2396,11 +2392,6 @@ public final class Config
|
||||
OFFLINE_DISCONNECT_FINISHED = OfflineTrade.getBoolean("OfflineDisconnectFinished", true);
|
||||
STORE_OFFLINE_TRADE_IN_REALTIME = OfflineTrade.getBoolean("StoreOfflineTradeInRealtime", true);
|
||||
|
||||
// Load OldDropBehavior config file (if exists)
|
||||
final PropertiesParser OldDropBehavior = new PropertiesParser(CUSTOM_OLD_DROP_BEHAVIOR_CONFIG_FILE);
|
||||
|
||||
OLD_DROP_BEHAVIOR = OldDropBehavior.getBoolean("OldDropBehavior", false);
|
||||
|
||||
// Load PasswordChange config file (if exists)
|
||||
final PropertiesParser PasswordChange = new PropertiesParser(CUSTOM_PASSWORD_CHANGE_CONFIG_FILE);
|
||||
|
||||
|
||||
@@ -39,16 +39,14 @@ import com.l2jmobius.commons.util.CommonUtil;
|
||||
import com.l2jmobius.commons.util.IGameXmlReader;
|
||||
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import com.l2jmobius.gameserver.enums.AISkillScope;
|
||||
import com.l2jmobius.gameserver.enums.DropType;
|
||||
import com.l2jmobius.gameserver.enums.MpRewardAffectType;
|
||||
import com.l2jmobius.gameserver.enums.MpRewardType;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
||||
import com.l2jmobius.gameserver.model.base.ClassId;
|
||||
import com.l2jmobius.gameserver.model.drops.DropListScope;
|
||||
import com.l2jmobius.gameserver.model.drops.GeneralDropItem;
|
||||
import com.l2jmobius.gameserver.model.drops.GroupedGeneralDropItem;
|
||||
import com.l2jmobius.gameserver.model.drops.IDropItem;
|
||||
import com.l2jmobius.gameserver.model.effects.L2EffectType;
|
||||
import com.l2jmobius.gameserver.model.holders.DropHolder;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
|
||||
/**
|
||||
@@ -104,7 +102,7 @@ public class NpcData implements IGameXmlReader
|
||||
Map<Integer, Skill> skills = null;
|
||||
Set<Integer> clans = null;
|
||||
Set<Integer> ignoreClanNpcIds = null;
|
||||
Map<DropListScope, List<IDropItem>> dropLists = null;
|
||||
List<DropHolder> dropLists = null;
|
||||
set.set("id", npcId);
|
||||
set.set("displayId", parseInteger(attrs, "displayId"));
|
||||
set.set("level", parseByte(attrs, "level"));
|
||||
@@ -426,26 +424,39 @@ public class NpcData implements IGameXmlReader
|
||||
{
|
||||
for (Node drop_lists_node = npc_node.getFirstChild(); drop_lists_node != null; drop_lists_node = drop_lists_node.getNextSibling())
|
||||
{
|
||||
DropListScope dropListScope = null;
|
||||
DropType dropType = null;
|
||||
|
||||
try
|
||||
{
|
||||
dropListScope = Enum.valueOf(DropListScope.class, drop_lists_node.getNodeName().toUpperCase());
|
||||
dropType = Enum.valueOf(DropType.class, drop_lists_node.getNodeName().toUpperCase());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
|
||||
if (dropListScope != null)
|
||||
if (dropType != null)
|
||||
{
|
||||
if (dropLists == null)
|
||||
{
|
||||
dropLists = new EnumMap<>(DropListScope.class);
|
||||
dropLists = new ArrayList<>();
|
||||
}
|
||||
|
||||
final List<IDropItem> dropList = new ArrayList<>();
|
||||
parseDropList(f, drop_lists_node, dropListScope, dropList);
|
||||
dropLists.put(dropListScope, Collections.unmodifiableList(dropList));
|
||||
for (Node drop_node = drop_lists_node.getFirstChild(); drop_node != null; drop_node = drop_node.getNextSibling())
|
||||
{
|
||||
final NamedNodeMap drop_attrs = drop_node.getAttributes();
|
||||
if ("item".equals(drop_node.getNodeName().toLowerCase()))
|
||||
{
|
||||
final DropHolder dropItem = new DropHolder(dropType, parseInteger(drop_attrs, "id"), parseLong(drop_attrs, "min"), parseLong(drop_attrs, "max"), parseDouble(drop_attrs, "chance"));
|
||||
if (ItemTable.getInstance().getTemplate(parseInteger(drop_attrs, "id")) == null)
|
||||
{
|
||||
LOGGER.warning("DropListItem: Could not find item with id " + parseInteger(drop_attrs, "id") + ".");
|
||||
}
|
||||
else
|
||||
{
|
||||
dropLists.add(dropItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -611,7 +622,26 @@ public class NpcData implements IGameXmlReader
|
||||
template.setClans(clans);
|
||||
template.setIgnoreClanNpcIds(ignoreClanNpcIds);
|
||||
|
||||
template.setDropLists(dropLists);
|
||||
if (dropLists != null)
|
||||
{
|
||||
for (DropHolder dropHolder : dropLists)
|
||||
{
|
||||
switch (dropHolder.getDropType())
|
||||
{
|
||||
case DROP:
|
||||
case LUCKY_DROP: // TODO: Luck is added to death drops.
|
||||
{
|
||||
template.addDrop(dropHolder);
|
||||
break;
|
||||
}
|
||||
case SPOIL:
|
||||
{
|
||||
template.addSpoil(dropHolder);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!template.getParameters().getMinionList("Privates").isEmpty())
|
||||
{
|
||||
@@ -626,69 +656,6 @@ public class NpcData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
|
||||
private void parseDropList(File f, Node drop_list_node, DropListScope dropListScope, List<IDropItem> drops)
|
||||
{
|
||||
for (Node drop_node = drop_list_node.getFirstChild(); drop_node != null; drop_node = drop_node.getNextSibling())
|
||||
{
|
||||
final NamedNodeMap attrs = drop_node.getAttributes();
|
||||
switch (drop_node.getNodeName().toLowerCase())
|
||||
{
|
||||
case "group":
|
||||
{
|
||||
final GroupedGeneralDropItem dropItem = dropListScope.newGroupedDropItem(parseDouble(attrs, "chance"));
|
||||
final List<IDropItem> groupedDropList = new ArrayList<>(2);
|
||||
for (Node group_node = drop_node.getFirstChild(); group_node != null; group_node = group_node.getNextSibling())
|
||||
{
|
||||
parseDropListItem(group_node, dropListScope, groupedDropList);
|
||||
}
|
||||
|
||||
final List<GeneralDropItem> items = new ArrayList<>(groupedDropList.size());
|
||||
for (IDropItem item : groupedDropList)
|
||||
{
|
||||
if (item instanceof GeneralDropItem)
|
||||
{
|
||||
items.add((GeneralDropItem) item);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("[" + f + "] grouped general drop item supports only general drop item.");
|
||||
}
|
||||
}
|
||||
dropItem.setItems(items);
|
||||
|
||||
drops.add(dropItem);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
parseDropListItem(drop_node, dropListScope, drops);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void parseDropListItem(Node drop_list_item, DropListScope dropListScope, List<IDropItem> drops)
|
||||
{
|
||||
final NamedNodeMap attrs = drop_list_item.getAttributes();
|
||||
switch (drop_list_item.getNodeName().toLowerCase())
|
||||
{
|
||||
case "item":
|
||||
{
|
||||
final IDropItem dropItem = dropListScope.newDropItem(parseInteger(attrs, "id"), parseLong(attrs, "min"), parseLong(attrs, "max"), parseDouble(attrs, "chance"));
|
||||
if (ItemTable.getInstance().getTemplate(parseInteger(attrs, "id")) == null)
|
||||
{
|
||||
LOGGER.warning("DropListItem: Could not find item with id " + parseInteger(attrs, "id") + ".");
|
||||
}
|
||||
else if (dropItem != null)
|
||||
{
|
||||
drops.add(dropItem);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets or creates a clan id if it doesnt exists.
|
||||
* @param clanName the clan name to get or create its id
|
||||
|
||||
@@ -1,36 +1,27 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.drops;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
|
||||
/**
|
||||
* @author NosBit
|
||||
*/
|
||||
public interface IDropItem
|
||||
{
|
||||
/**
|
||||
* Calculates drops of this drop item.
|
||||
* @param victim the victim
|
||||
* @param killer the killer
|
||||
* @return {@code null} or empty collection if there are no drops, a collection containing all items to drop otherwise
|
||||
*/
|
||||
Collection<ItemHolder> calculateDrops(L2Character victim, L2Character killer);
|
||||
}
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jmobius.gameserver.enums;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public enum DropType
|
||||
{
|
||||
DROP,
|
||||
SPOIL,
|
||||
LUCKY_DROP;
|
||||
}
|
||||
@@ -45,6 +45,7 @@ import com.l2jmobius.gameserver.datatables.EventDroplist;
|
||||
import com.l2jmobius.gameserver.datatables.EventDroplist.DateDrop;
|
||||
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.enums.DropType;
|
||||
import com.l2jmobius.gameserver.enums.InstanceType;
|
||||
import com.l2jmobius.gameserver.enums.Team;
|
||||
import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
|
||||
@@ -64,7 +65,6 @@ import com.l2jmobius.gameserver.model.actor.instance.L2ServitorInstance;
|
||||
import com.l2jmobius.gameserver.model.actor.status.AttackableStatus;
|
||||
import com.l2jmobius.gameserver.model.actor.tasks.attackable.CommandChannelTimer;
|
||||
import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
||||
import com.l2jmobius.gameserver.model.drops.DropListScope;
|
||||
import com.l2jmobius.gameserver.model.entity.Hero;
|
||||
import com.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||
import com.l2jmobius.gameserver.model.events.impl.character.npc.OnAttackableAggroRangeEnter;
|
||||
@@ -974,10 +974,10 @@ public class L2Attackable extends L2Npc
|
||||
|
||||
if (isSpoiled())
|
||||
{
|
||||
_sweepItems.set(npcTemplate.calculateDrops(DropListScope.CORPSE, this, player));
|
||||
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||
}
|
||||
|
||||
final Collection<ItemHolder> deathItems = npcTemplate.calculateDrops(DropListScope.DEATH, this, player);
|
||||
final Collection<ItemHolder> deathItems = npcTemplate.calculateDrops(DropType.DROP, this, player);
|
||||
if (deathItems != null)
|
||||
{
|
||||
for (ItemHolder drop : deathItems)
|
||||
|
||||
@@ -19,15 +19,17 @@ package com.l2jmobius.gameserver.model.actor.templates;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.NpcData;
|
||||
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import com.l2jmobius.gameserver.enums.AISkillScope;
|
||||
import com.l2jmobius.gameserver.enums.AIType;
|
||||
import com.l2jmobius.gameserver.enums.DropType;
|
||||
import com.l2jmobius.gameserver.enums.MpRewardAffectType;
|
||||
import com.l2jmobius.gameserver.enums.MpRewardType;
|
||||
import com.l2jmobius.gameserver.enums.Race;
|
||||
@@ -35,11 +37,13 @@ import com.l2jmobius.gameserver.enums.Sex;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
import com.l2jmobius.gameserver.model.base.ClassId;
|
||||
import com.l2jmobius.gameserver.model.drops.DropListScope;
|
||||
import com.l2jmobius.gameserver.model.drops.IDropItem;
|
||||
import com.l2jmobius.gameserver.model.holders.DropHolder;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.interfaces.IIdentifiable;
|
||||
import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import com.l2jmobius.gameserver.model.items.L2Item;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
/**
|
||||
* NPC template.
|
||||
@@ -96,7 +100,8 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
||||
private Map<AISkillScope, List<Skill>> _aiSkillLists;
|
||||
private Set<Integer> _clans;
|
||||
private Set<Integer> _ignoreClanNpcIds;
|
||||
private Map<DropListScope, List<IDropItem>> _dropLists;
|
||||
private List<DropHolder> _dropListDeath;
|
||||
private List<DropHolder> _dropListSpoil;
|
||||
private double _collisionRadiusGrown;
|
||||
private double _collisionHeightGrown;
|
||||
private int _mpRewardValue;
|
||||
@@ -556,49 +561,222 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
||||
_ignoreClanNpcIds = ignoreClanNpcIds != null ? Collections.unmodifiableSet(ignoreClanNpcIds) : null;
|
||||
}
|
||||
|
||||
public Map<DropListScope, List<IDropItem>> getDropLists()
|
||||
public void addDrop(DropHolder dropHolder)
|
||||
{
|
||||
return _dropLists;
|
||||
if (_dropListDeath == null)
|
||||
{
|
||||
_dropListDeath = new ArrayList<>();
|
||||
}
|
||||
_dropListDeath.add(dropHolder);
|
||||
}
|
||||
|
||||
public void setDropLists(Map<DropListScope, List<IDropItem>> dropLists)
|
||||
public void addSpoil(DropHolder dropHolder)
|
||||
{
|
||||
_dropLists = dropLists != null ? Collections.unmodifiableMap(dropLists) : null;
|
||||
if (_dropListSpoil == null)
|
||||
{
|
||||
_dropListSpoil = new ArrayList<>();
|
||||
}
|
||||
_dropListSpoil.add(dropHolder);
|
||||
}
|
||||
|
||||
public List<IDropItem> getDropList(DropListScope dropListScope)
|
||||
public List<DropHolder> getDropList(DropType dropType)
|
||||
{
|
||||
return _dropLists != null ? _dropLists.get(dropListScope) : null;
|
||||
switch (dropType)
|
||||
{
|
||||
case DROP:
|
||||
case LUCKY_DROP: // never happens
|
||||
{
|
||||
return _dropListDeath;
|
||||
}
|
||||
case SPOIL:
|
||||
{
|
||||
return _dropListSpoil;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Collection<ItemHolder> calculateDrops(DropListScope dropListScope, L2Character victim, L2Character killer)
|
||||
public Collection<ItemHolder> calculateDrops(DropType dropType, L2Character victim, L2Character killer)
|
||||
{
|
||||
final List<IDropItem> dropList = getDropList(dropListScope);
|
||||
final List<DropHolder> dropList = getDropList(dropType);
|
||||
if (dropList == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
final int levelDifference = victim.getLevel() - killer.getLevel();
|
||||
Collection<ItemHolder> calculatedDrops = null;
|
||||
for (IDropItem dropItem : dropList)
|
||||
for (DropHolder dropItem : dropList)
|
||||
{
|
||||
final Collection<ItemHolder> drops = dropItem.calculateDrops(victim, killer);
|
||||
if ((drops == null) || drops.isEmpty())
|
||||
// check level gap that may prevent drop this item
|
||||
final double levelGapChanceToDrop;
|
||||
if (dropItem.getItemId() == Inventory.ADENA_ID)
|
||||
{
|
||||
levelGapChanceToDrop = Util.map(levelDifference, -Config.DROP_ADENA_MAX_LEVEL_DIFFERENCE, -Config.DROP_ADENA_MIN_LEVEL_DIFFERENCE, Config.DROP_ADENA_MIN_LEVEL_GAP_CHANCE, 100.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
levelGapChanceToDrop = Util.map(levelDifference, -Config.DROP_ITEM_MAX_LEVEL_DIFFERENCE, -Config.DROP_ITEM_MIN_LEVEL_DIFFERENCE, Config.DROP_ITEM_MIN_LEVEL_GAP_CHANCE, 100.0);
|
||||
}
|
||||
if ((Rnd.nextDouble() * 100) > levelGapChanceToDrop)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (calculatedDrops == null)
|
||||
// calculate chances
|
||||
final ItemHolder drop = calculateDrop(dropItem, victim, killer);
|
||||
if (drop == null)
|
||||
{
|
||||
calculatedDrops = new LinkedList<>();
|
||||
continue;
|
||||
}
|
||||
|
||||
calculatedDrops.addAll(drops);
|
||||
// create list
|
||||
if (calculatedDrops == null)
|
||||
{
|
||||
calculatedDrops = new ArrayList<>();
|
||||
}
|
||||
|
||||
// finally
|
||||
calculatedDrops.add(drop);
|
||||
}
|
||||
|
||||
return calculatedDrops;
|
||||
}
|
||||
|
||||
/**
|
||||
* All item drop chance calculations are done by this method.
|
||||
* @param dropItem
|
||||
* @param victim
|
||||
* @param killer
|
||||
* @return ItemHolder
|
||||
*/
|
||||
private ItemHolder calculateDrop(DropHolder dropItem, L2Character victim, L2Character killer)
|
||||
{
|
||||
switch (dropItem.getDropType())
|
||||
{
|
||||
case DROP:
|
||||
case LUCKY_DROP:
|
||||
{
|
||||
final L2Item item = ItemTable.getInstance().getTemplate(dropItem.getItemId());
|
||||
|
||||
// chance
|
||||
double rateChance = 1;
|
||||
if (Config.RATE_DROP_CHANCE_BY_ID.get(dropItem.getItemId()) != null)
|
||||
{
|
||||
rateChance *= Config.RATE_DROP_CHANCE_BY_ID.get(dropItem.getItemId());
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
rateChance *= Config.RATE_HERB_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
else if (victim.isRaid())
|
||||
{
|
||||
rateChance *= Config.RATE_RAID_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
else
|
||||
{
|
||||
rateChance *= Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
|
||||
// premium chance
|
||||
if (Config.PREMIUM_SYSTEM_ENABLED && killer.getActingPlayer().hasPremiumStatus())
|
||||
{
|
||||
if (Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(dropItem.getItemId()) != null)
|
||||
{
|
||||
rateChance *= Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(dropItem.getItemId());
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
// TODO: Premium herb chance? :)
|
||||
}
|
||||
else if (victim.isRaid())
|
||||
{
|
||||
// TODO: Premium raid chance? :)
|
||||
}
|
||||
else
|
||||
{
|
||||
rateChance *= Config.PREMIUM_RATE_DROP_CHANCE;
|
||||
}
|
||||
}
|
||||
|
||||
// calculate if item will drop
|
||||
if ((Rnd.nextDouble() * 100) < (dropItem.getChance() * rateChance))
|
||||
{
|
||||
// amount is calculated after chance returned success
|
||||
double rateAmount = 1;
|
||||
if (Config.RATE_DROP_AMOUNT_BY_ID.get(dropItem.getItemId()) != null)
|
||||
{
|
||||
rateAmount *= Config.RATE_DROP_AMOUNT_BY_ID.get(dropItem.getItemId());
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
rateAmount *= Config.RATE_HERB_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
else if (victim.isRaid())
|
||||
{
|
||||
rateAmount *= Config.RATE_RAID_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
else
|
||||
{
|
||||
rateAmount *= Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
|
||||
// premium chance
|
||||
if (Config.PREMIUM_SYSTEM_ENABLED && killer.getActingPlayer().hasPremiumStatus())
|
||||
{
|
||||
if (Config.PREMIUM_RATE_DROP_AMOUNT_BY_ID.get(dropItem.getItemId()) != null)
|
||||
{
|
||||
rateAmount *= Config.PREMIUM_RATE_DROP_AMOUNT_BY_ID.get(dropItem.getItemId());
|
||||
}
|
||||
else if (item.hasExImmediateEffect())
|
||||
{
|
||||
// TODO: Premium herb amount? :)
|
||||
}
|
||||
else if (victim.isRaid())
|
||||
{
|
||||
// TODO: Premium raid amount? :)
|
||||
}
|
||||
else
|
||||
{
|
||||
rateAmount *= Config.PREMIUM_RATE_DROP_AMOUNT;
|
||||
}
|
||||
}
|
||||
|
||||
// finally
|
||||
return new ItemHolder(dropItem.getItemId(), (long) (Rnd.get(dropItem.getMin(), dropItem.getMax()) * rateAmount));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SPOIL:
|
||||
{
|
||||
// chance
|
||||
double rateChance = Config.RATE_SPOIL_DROP_CHANCE_MULTIPLIER;
|
||||
// premium chance
|
||||
if (Config.PREMIUM_SYSTEM_ENABLED && killer.getActingPlayer().hasPremiumStatus())
|
||||
{
|
||||
rateChance *= Config.PREMIUM_RATE_SPOIL_CHANCE;
|
||||
}
|
||||
|
||||
// calculate if item will be rewarded
|
||||
if ((Rnd.nextDouble() * 100) < (dropItem.getChance() * rateChance))
|
||||
{
|
||||
// amount is calculated after chance returned success
|
||||
double rateAmount = Config.RATE_SPOIL_DROP_AMOUNT_MULTIPLIER;
|
||||
// premium amount
|
||||
if (Config.PREMIUM_SYSTEM_ENABLED && killer.getActingPlayer().hasPremiumStatus())
|
||||
{
|
||||
rateAmount *= Config.PREMIUM_RATE_SPOIL_AMOUNT;
|
||||
}
|
||||
|
||||
// finally
|
||||
return new ItemHolder(dropItem.getItemId(), (long) (Rnd.get(dropItem.getMin(), dropItem.getMax()) * rateAmount));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public double getCollisionRadiusGrown()
|
||||
{
|
||||
return _collisionRadiusGrown;
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.drops;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
|
||||
/**
|
||||
* @author NosBit
|
||||
*/
|
||||
public class CorpseDropItem extends GeneralDropItem
|
||||
{
|
||||
/**
|
||||
* @param itemId the item id
|
||||
* @param min the min count
|
||||
* @param max the max count
|
||||
* @param chance the chance of this drop item
|
||||
*/
|
||||
public CorpseDropItem(int itemId, long min, long max, double chance)
|
||||
{
|
||||
super(itemId, min, max, chance);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see com.l2jmobius.gameserver.model.drops.GeneralDropItem#getGlobalAmountMultiplier()
|
||||
*/
|
||||
@Override
|
||||
protected double getGlobalAmountMultiplier(boolean isPremium)
|
||||
{
|
||||
return isPremium ? Config.PREMIUM_RATE_SPOIL_AMOUNT * Config.RATE_CORPSE_DROP_AMOUNT_MULTIPLIER : Config.RATE_CORPSE_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see com.l2jmobius.gameserver.model.drops.GeneralDropItem#getGlobalChanceMultiplier()
|
||||
*/
|
||||
@Override
|
||||
protected double getGlobalChanceMultiplier(boolean isPremium)
|
||||
{
|
||||
return isPremium ? Config.PREMIUM_RATE_SPOIL_CHANCE * Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER : Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.drops;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
|
||||
/**
|
||||
* @author NosBit
|
||||
*/
|
||||
public class DeathDropItem extends GeneralDropItem
|
||||
{
|
||||
/**
|
||||
* @param itemId the item id
|
||||
* @param min the min count
|
||||
* @param max the max count
|
||||
* @param chance the chance of this drop item
|
||||
*/
|
||||
public DeathDropItem(int itemId, long min, long max, double chance)
|
||||
{
|
||||
super(itemId, min, max, chance);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see com.l2jmobius.gameserver.model.drops.GeneralDropItem#getGlobalAmountMultiplier()
|
||||
*/
|
||||
@Override
|
||||
protected double getGlobalAmountMultiplier(boolean isPremium)
|
||||
{
|
||||
return isPremium ? Config.PREMIUM_RATE_DROP_AMOUNT * Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER : Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see com.l2jmobius.gameserver.model.drops.GeneralDropItem#getGlobalChanceMultiplier()
|
||||
*/
|
||||
@Override
|
||||
protected double getGlobalChanceMultiplier(boolean isPremium)
|
||||
{
|
||||
return isPremium ? Config.PREMIUM_RATE_DROP_CHANCE * Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER : Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.drops;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* @author NosBit
|
||||
*/
|
||||
public enum DropListScope
|
||||
{
|
||||
DEATH(DeathDropItem.class, GroupedDeathDropItem.class),
|
||||
CORPSE(CorpseDropItem.class, GroupedCorpseDropItem.class);
|
||||
|
||||
private static final Logger _log = Logger.getLogger(DropListScope.class.getName());
|
||||
|
||||
private final Class<? extends GeneralDropItem> _dropItemClass;
|
||||
private final Class<? extends GroupedGeneralDropItem> _groupedDropItemClass;
|
||||
|
||||
private DropListScope(Class<? extends GeneralDropItem> dropItemClass, Class<? extends GroupedGeneralDropItem> groupedDropItemClass)
|
||||
{
|
||||
_dropItemClass = dropItemClass;
|
||||
_groupedDropItemClass = groupedDropItemClass;
|
||||
}
|
||||
|
||||
public IDropItem newDropItem(int itemId, long min, long max, double chance)
|
||||
{
|
||||
final Constructor<? extends GeneralDropItem> constructor;
|
||||
try
|
||||
{
|
||||
constructor = _dropItemClass.getConstructor(int.class, long.class, long.class, double.class);
|
||||
}
|
||||
catch (NoSuchMethodException | SecurityException e)
|
||||
{
|
||||
_log.log(Level.SEVERE, "Constructor(int, long, long, double) not found for " + _dropItemClass.getSimpleName(), e);
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return constructor.newInstance(itemId, min, max, chance);
|
||||
}
|
||||
catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e)
|
||||
{
|
||||
_log.log(Level.SEVERE, "", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public GroupedGeneralDropItem newGroupedDropItem(double chance)
|
||||
{
|
||||
final Constructor<? extends GroupedGeneralDropItem> constructor;
|
||||
try
|
||||
{
|
||||
constructor = _groupedDropItemClass.getConstructor(double.class);
|
||||
}
|
||||
catch (NoSuchMethodException | SecurityException e)
|
||||
{
|
||||
_log.log(Level.SEVERE, "Constructor(double) not found for " + _groupedDropItemClass.getSimpleName(), e);
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return constructor.newInstance(chance);
|
||||
}
|
||||
catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e)
|
||||
{
|
||||
_log.log(Level.SEVERE, "", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,287 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.drops;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import com.l2jmobius.gameserver.model.items.L2Item;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
/**
|
||||
* @author NosBit
|
||||
*/
|
||||
public class GeneralDropItem implements IDropItem
|
||||
{
|
||||
private final int _itemId;
|
||||
private final long _min;
|
||||
private final long _max;
|
||||
private final double _chance;
|
||||
|
||||
/**
|
||||
* @param itemId the item id
|
||||
* @param min the min count
|
||||
* @param max the max count
|
||||
* @param chance the chance of this drop item
|
||||
*/
|
||||
public GeneralDropItem(int itemId, long min, long max, double chance)
|
||||
{
|
||||
_itemId = itemId;
|
||||
_min = min;
|
||||
_max = max;
|
||||
_chance = chance;
|
||||
}
|
||||
|
||||
protected double getGlobalChanceMultiplier(boolean isPremium)
|
||||
{
|
||||
return 1.;
|
||||
}
|
||||
|
||||
protected double getGlobalAmountMultiplier(boolean isPremium)
|
||||
{
|
||||
return 1.;
|
||||
}
|
||||
|
||||
private final long getMinMax(L2Character victim, L2Character killer, long val)
|
||||
{
|
||||
double multiplier = 1;
|
||||
|
||||
// individual drop amount
|
||||
Float individualDropAmountMultiplier = null;
|
||||
if (killer.getActingPlayer().hasPremiumStatus())
|
||||
{
|
||||
final Float normalMultiplier = Config.RATE_DROP_AMOUNT_BY_ID.get(getItemId());
|
||||
final Float premiumMultiplier = Config.PREMIUM_RATE_DROP_AMOUNT_BY_ID.get(getItemId());
|
||||
if ((normalMultiplier != null) && (premiumMultiplier != null))
|
||||
{
|
||||
individualDropAmountMultiplier = normalMultiplier * premiumMultiplier;
|
||||
}
|
||||
else if (normalMultiplier != null)
|
||||
{
|
||||
individualDropAmountMultiplier = normalMultiplier;
|
||||
}
|
||||
else if (premiumMultiplier != null)
|
||||
{
|
||||
individualDropAmountMultiplier = premiumMultiplier;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
individualDropAmountMultiplier = Config.RATE_DROP_AMOUNT_BY_ID.get(getItemId());
|
||||
}
|
||||
|
||||
if (individualDropAmountMultiplier != null)
|
||||
{
|
||||
// individual amount list multiplier
|
||||
multiplier *= individualDropAmountMultiplier;
|
||||
}
|
||||
else
|
||||
{
|
||||
final L2Item item = ItemTable.getInstance().getTemplate(getItemId());
|
||||
// global amount multiplier
|
||||
if ((item != null) && item.hasExImmediateEffect())
|
||||
{
|
||||
// global herb amount multiplier
|
||||
multiplier *= Config.RATE_HERB_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
else if (victim.isRaid())
|
||||
{
|
||||
// global raid amount multiplier
|
||||
multiplier *= Config.RATE_RAID_DROP_AMOUNT_MULTIPLIER;
|
||||
}
|
||||
else
|
||||
{
|
||||
// drop type specific amount multiplier
|
||||
multiplier *= getGlobalAmountMultiplier(killer.getActingPlayer().hasPremiumStatus());
|
||||
}
|
||||
}
|
||||
|
||||
// global champions amount multiplier
|
||||
if (victim.isChampion())
|
||||
{
|
||||
multiplier *= getItemId() != Inventory.ADENA_ID ? Config.CHAMPION_REWARDS_AMOUNT : Config.CHAMPION_ADENAS_REWARDS_AMOUNT;
|
||||
}
|
||||
|
||||
return (long) (val * multiplier);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the item id
|
||||
* @return the item id
|
||||
*/
|
||||
public int getItemId()
|
||||
{
|
||||
return _itemId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the min drop count
|
||||
* @return the min
|
||||
*/
|
||||
public long getMin()
|
||||
{
|
||||
return _min;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the min drop count
|
||||
* @param victim the victim
|
||||
* @param killer the killer
|
||||
* @return the min modified by any rates.
|
||||
*/
|
||||
public long getMin(L2Character victim, L2Character killer)
|
||||
{
|
||||
return getMinMax(victim, killer, getMin());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the max drop count
|
||||
* @return the max
|
||||
*/
|
||||
public long getMax()
|
||||
{
|
||||
return _max;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the max drop count
|
||||
* @param victim the victim
|
||||
* @param killer the killer
|
||||
* @return the max modified by any rates.
|
||||
*/
|
||||
public long getMax(L2Character victim, L2Character killer)
|
||||
{
|
||||
return getMinMax(victim, killer, getMax());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the chance of this drop item.
|
||||
* @return the chance
|
||||
*/
|
||||
public double getChance()
|
||||
{
|
||||
return _chance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the chance of this drop item.
|
||||
* @param victim the victim
|
||||
* @param killer the killer
|
||||
* @return the chance modified by any rates.
|
||||
*/
|
||||
public double getChance(L2Character victim, L2Character killer)
|
||||
{
|
||||
double multiplier = 1;
|
||||
|
||||
// individual drop chance
|
||||
Float individualDropChanceMultiplier = null;
|
||||
if (killer.getActingPlayer().hasPremiumStatus())
|
||||
{
|
||||
final Float normalMultiplier = Config.RATE_DROP_CHANCE_BY_ID.get(getItemId());
|
||||
final Float premiumMultiplier = Config.PREMIUM_RATE_DROP_CHANCE_BY_ID.get(getItemId());
|
||||
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(getItemId());
|
||||
}
|
||||
|
||||
if (individualDropChanceMultiplier != null)
|
||||
{
|
||||
multiplier *= individualDropChanceMultiplier;
|
||||
}
|
||||
else
|
||||
{
|
||||
final L2Item item = ItemTable.getInstance().getTemplate(getItemId());
|
||||
if ((item != null) && item.hasExImmediateEffect())
|
||||
{
|
||||
multiplier *= Config.RATE_HERB_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
else if (victim.isRaid())
|
||||
{
|
||||
// global raid chance multiplier
|
||||
multiplier *= Config.RATE_RAID_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
else
|
||||
{
|
||||
multiplier *= getGlobalChanceMultiplier(killer.getActingPlayer().hasPremiumStatus());
|
||||
}
|
||||
}
|
||||
|
||||
if (victim.isChampion())
|
||||
{
|
||||
multiplier *= getItemId() != Inventory.ADENA_ID ? Config.CHAMPION_REWARDS_CHANCE : Config.CHAMPION_ADENAS_REWARDS_CHANCE;
|
||||
}
|
||||
|
||||
return (getChance() * multiplier);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see com.l2jmobius.gameserver.model.drop.IDropItem#calculateDrops(com.l2jmobius.gameserver.model.actor.L2Character, com.l2jmobius.gameserver.model.actor.L2Character)
|
||||
*/
|
||||
@Override
|
||||
public Collection<ItemHolder> calculateDrops(L2Character victim, L2Character killer)
|
||||
{
|
||||
final int levelDifference = victim.getLevel() - killer.getLevel();
|
||||
final double levelGapChanceToDrop;
|
||||
if (getItemId() == Inventory.ADENA_ID)
|
||||
{
|
||||
levelGapChanceToDrop = Util.map(levelDifference, -Config.DROP_ADENA_MAX_LEVEL_DIFFERENCE, -Config.DROP_ADENA_MIN_LEVEL_DIFFERENCE, Config.DROP_ADENA_MIN_LEVEL_GAP_CHANCE, 100.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
levelGapChanceToDrop = Util.map(levelDifference, -Config.DROP_ITEM_MAX_LEVEL_DIFFERENCE, -Config.DROP_ITEM_MIN_LEVEL_DIFFERENCE, Config.DROP_ITEM_MIN_LEVEL_GAP_CHANCE, 100.0);
|
||||
}
|
||||
|
||||
// There is a chance of level gap that it wont drop this item
|
||||
if (levelGapChanceToDrop < (Rnd.nextDouble() * 100))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
final double chance = getChance(victim, killer);
|
||||
final boolean successes = chance > (Rnd.nextDouble() * 100);
|
||||
if (successes)
|
||||
{
|
||||
final Collection<ItemHolder> items = new ArrayList<>(1);
|
||||
final long baseDropCount = Rnd.get(getMin(victim, killer), getMax(victim, killer));
|
||||
final long finaldropCount = (long) (Config.OLD_DROP_BEHAVIOR ? (baseDropCount * Math.max(1, chance / 100)) + (chance > 100 ? (chance % 100) > (Rnd.nextDouble() * 100) ? baseDropCount : 0 : 0) : baseDropCount);
|
||||
items.add(new ItemHolder(getItemId(), finaldropCount));
|
||||
return items;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.drops;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
|
||||
/**
|
||||
* @author NosBit
|
||||
*/
|
||||
public class GroupedCorpseDropItem extends GroupedGeneralDropItem
|
||||
{
|
||||
/**
|
||||
* @param chance the chance of this drop item.
|
||||
*/
|
||||
public GroupedCorpseDropItem(double chance)
|
||||
{
|
||||
super(chance);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see com.l2jmobius.gameserver.model.drops.GroupedGeneralDropItem#getGlobalChanceMultiplier()
|
||||
*/
|
||||
@Override
|
||||
protected double getGlobalChanceMultiplier()
|
||||
{
|
||||
return Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.drops;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
|
||||
/**
|
||||
* @author NosBit
|
||||
*/
|
||||
public class GroupedDeathDropItem extends GroupedGeneralDropItem
|
||||
{
|
||||
/**
|
||||
* @param chance the chance of this drop item.
|
||||
*/
|
||||
public GroupedDeathDropItem(double chance)
|
||||
{
|
||||
super(chance);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see com.l2jmobius.gameserver.model.drops.GroupedGeneralDropItem#getGlobalChanceMultiplier()
|
||||
*/
|
||||
@Override
|
||||
protected double getGlobalChanceMultiplier()
|
||||
{
|
||||
return Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
}
|
||||
@@ -1,179 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.drops;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2RaidBossInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.L2Item;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
/**
|
||||
* @author NosBit
|
||||
*/
|
||||
public class GroupedGeneralDropItem implements IDropItem
|
||||
{
|
||||
private final double _chance;
|
||||
private List<GeneralDropItem> _items;
|
||||
|
||||
/**
|
||||
* @param chance the chance of this drop item.
|
||||
*/
|
||||
public GroupedGeneralDropItem(double chance)
|
||||
{
|
||||
_chance = chance;
|
||||
}
|
||||
|
||||
protected double getGlobalChanceMultiplier()
|
||||
{
|
||||
return 1.;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the chance of this drop item.
|
||||
* @return the chance
|
||||
*/
|
||||
public double getChance()
|
||||
{
|
||||
return _chance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the chance of this drop item.
|
||||
* @param victim the victim
|
||||
* @param killer the killer
|
||||
* @return the chance modified by any rates.
|
||||
*/
|
||||
public double getChance(L2Character victim, L2Character killer)
|
||||
{
|
||||
for (GeneralDropItem gdi : getItems())
|
||||
{
|
||||
final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
|
||||
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() * Config.RATE_HERB_DROP_CHANCE_MULTIPLIER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the items.
|
||||
* @return the items
|
||||
*/
|
||||
public List<GeneralDropItem> getItems()
|
||||
{
|
||||
return _items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets an item list to this drop item.
|
||||
* @param items the item list
|
||||
*/
|
||||
public void setItems(List<GeneralDropItem> items)
|
||||
{
|
||||
_items = Collections.unmodifiableList(items);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see com.l2jmobius.gameserver.model.drop.IDropItem#calculateDrops(com.l2jmobius.gameserver.model.actor.L2Character, com.l2jmobius.gameserver.model.actor.L2Character)
|
||||
*/
|
||||
@Override
|
||||
public Collection<ItemHolder> calculateDrops(L2Character victim, L2Character killer)
|
||||
{
|
||||
final int levelDifference = victim.getLevel() - killer.getLevel();
|
||||
double chanceModifier;
|
||||
if (victim instanceof L2RaidBossInstance)
|
||||
{
|
||||
chanceModifier = Math.max(0, Math.min(1, (levelDifference * 0.15) + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
chanceModifier = 1;
|
||||
if (Util.map(levelDifference, -Config.DROP_ITEM_MAX_LEVEL_DIFFERENCE, -Config.DROP_ITEM_MIN_LEVEL_DIFFERENCE, Config.DROP_ITEM_MIN_LEVEL_GAP_CHANCE, 100.0) < (Rnd.nextDouble() * 100))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
final double chance = getChance(victim, killer) * chanceModifier;
|
||||
final boolean successes = chance > (Rnd.nextDouble() * 100);
|
||||
|
||||
if (successes)
|
||||
{
|
||||
double totalChance = 0;
|
||||
final double random = (Rnd.nextDouble() * 100);
|
||||
for (GeneralDropItem item : getItems())
|
||||
{
|
||||
// Grouped item chance rates should not be modified.
|
||||
totalChance += item.getChance(victim, killer);
|
||||
if (totalChance > random)
|
||||
{
|
||||
final Collection<ItemHolder> items = new ArrayList<>(1);
|
||||
final long baseDropCount = Rnd.get(item.getMin(victim, killer), item.getMax(victim, killer));
|
||||
final long finaldropCount = (long) (Config.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));
|
||||
return items;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.holders;
|
||||
|
||||
import com.l2jmobius.gameserver.enums.DropType;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class DropHolder
|
||||
{
|
||||
private final DropType _dropType;
|
||||
private final int _itemId;
|
||||
private final long _min;
|
||||
private final long _max;
|
||||
private final double _chance;
|
||||
|
||||
public DropHolder(DropType dropType, int itemId, long min, long max, double chance)
|
||||
{
|
||||
_dropType = dropType;
|
||||
_itemId = itemId;
|
||||
_min = min;
|
||||
_max = max;
|
||||
_chance = chance;
|
||||
}
|
||||
|
||||
public DropType getDropType()
|
||||
{
|
||||
return _dropType;
|
||||
}
|
||||
|
||||
public int getItemId()
|
||||
{
|
||||
return _itemId;
|
||||
}
|
||||
|
||||
public long getMin()
|
||||
{
|
||||
return _min;
|
||||
}
|
||||
|
||||
public long getMax()
|
||||
{
|
||||
return _max;
|
||||
}
|
||||
|
||||
public double getChance()
|
||||
{
|
||||
return _chance;
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,7 @@ import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import com.l2jmobius.gameserver.instancemanager.EventShrineManager;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.announce.EventAnnouncement;
|
||||
import com.l2jmobius.gameserver.model.drops.GeneralDropItem;
|
||||
import com.l2jmobius.gameserver.model.holders.DropHolder;
|
||||
import com.l2jmobius.gameserver.script.DateRange;
|
||||
import com.l2jmobius.gameserver.util.Broadcast;
|
||||
|
||||
@@ -62,7 +62,7 @@ public class LongTimeEvent extends Quest
|
||||
protected final List<NpcSpawn> _spawnList = new ArrayList<>();
|
||||
|
||||
// Drop data for event
|
||||
protected final List<GeneralDropItem> _dropList = new ArrayList<>();
|
||||
protected final List<DropHolder> _dropList = new ArrayList<>();
|
||||
|
||||
protected class NpcSpawn
|
||||
{
|
||||
@@ -195,7 +195,7 @@ public class LongTimeEvent extends Quest
|
||||
continue;
|
||||
}
|
||||
|
||||
_dropList.add(new GeneralDropItem(itemId, minCount, maxCount, finalChance));
|
||||
_dropList.add(new DropHolder(null, itemId, minCount, maxCount, finalChance));
|
||||
}
|
||||
catch (NumberFormatException nfe)
|
||||
{
|
||||
@@ -272,7 +272,7 @@ public class LongTimeEvent extends Quest
|
||||
// Add drop
|
||||
if (_dropList != null)
|
||||
{
|
||||
for (GeneralDropItem drop : _dropList)
|
||||
for (DropHolder drop : _dropList)
|
||||
{
|
||||
EventDroplist.getInstance().addGlobalDrop(drop.getItemId(), drop.getMin(), drop.getMax(), (int) drop.getChance(), _dropPeriod);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user