Jump to content
  • 0

[Help]Drop on Mobs


Question

Recommended Posts

  • 0
Posted

just coded, didnt tested it

CORE:

Index: java/com/l2jserver/gameserver/datatables/HerbDropTable.java
===================================================================
--- java/com/l2jserver/gameserver/datatables/HerbDropTable.java	(revision 4838)
+++ java/com/l2jserver/gameserver/datatables/HerbDropTable.java	(working copy)
@@ -60,7 +60,7 @@
		{
			con = L2DatabaseFactory.getInstance().getConnection();
			PreparedStatement statement = con.prepareStatement("SELECT "
-					+ L2DatabaseFactory.getInstance().safetyString(new String[] { "groupId", "itemId", "min", "max", "category", "chance" })
+					+ L2DatabaseFactory.getInstance().safetyString(new String[] { "groupId", "itemId", "min", "max", "category", "chance", "enchant", "enchantChance" })
					+ " FROM herb_droplist_groups ORDER BY groupId, chance DESC");
			ResultSet dropData = statement.executeQuery();
			L2DropData dropDat = null;
@@ -83,6 +83,8 @@
				dropDat.setMinDrop(dropData.getInt("min"));
				dropDat.setMaxDrop(dropData.getInt("max"));
				dropDat.setChance(dropData.getInt("chance"));
+				dropDat.setEnchant(dropData.getInt("enchant"));
+				dropDat.setEnchantChance(dropData.getInt("enchantChance"));

				int categoryType = dropData.getInt("category");

Index: java/com/l2jserver/gameserver/datatables/NpcTable.java
===================================================================
--- java/com/l2jserver/gameserver/datatables/NpcTable.java	(revision 4838)
+++ java/com/l2jserver/gameserver/datatables/NpcTable.java	(working copy)
@@ -204,7 +204,7 @@
			try
			{
				statement = con.prepareStatement("SELECT "
-						+ L2DatabaseFactory.getInstance().safetyString(new String[] { "mobId", "itemId", "min", "max", "category", "chance" })
+						+ L2DatabaseFactory.getInstance().safetyString(new String[] { "mobId", "itemId", "min", "max", "category", "chance", "enchant", "enchantChance" })
						+ " FROM droplist ORDER BY mobId, chance DESC");
				ResultSet dropData = statement.executeQuery();
				L2DropData dropDat = null;
@@ -225,6 +225,8 @@
					dropDat.setMinDrop(dropData.getInt("min"));
					dropDat.setMaxDrop(dropData.getInt("max"));
					dropDat.setChance(dropData.getInt("chance"));
+					dropDat.setEnchant(dropData.getInt("enchant"));
+					dropDat.setEnchantChance(dropData.getInt("enchantChance"));

					int category = dropData.getInt("category");

Index: java/com/l2jserver/gameserver/model/actor/L2Attackable.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/L2Attackable.java	(revision 4838)
+++ java/com/l2jserver/gameserver/model/actor/L2Attackable.java	(working copy)
@@ -236,15 +236,28 @@

		protected int _count;

+		private int _enchant = -1;
+		private int _chance = 0;
+		
		public RewardItem(int itemId, int count)
		{
			_itemId = itemId;
			_count = count;
		}

+		public RewardItem(int itemId, int count, int enchant, int chance)
+		{
+			this(itemId, count);
+			_enchant = enchant;
+			_chance = chance;
+		}
+		
		public int getItemId() { return _itemId;}

		public int getCount() { return _count;}
+		
+		public int getEnchant() { return _enchant; }
+		public int getEnchantChance() { return _chance; }
	}

	private FastMap<L2Character, AggroInfo> _aggroList = new FastMap<L2Character, AggroInfo>().shared();
@@ -1268,7 +1281,7 @@
				itemCount *= Config.L2JMOD_CHAMPION_ADENAS_REWARDS;

		if (itemCount > 0)
-			return new RewardItem(drop.getItemId(), itemCount);
+			return new RewardItem(drop.getItemId(), itemCount, drop.getEnchant(), drop.getEnchantChance());
		else if (itemCount == 0 && Config.DEBUG)
			_log.fine("Roll produced no drops.");

@@ -1409,7 +1422,7 @@
				itemCount = 1;

			if (itemCount > 0)
-				return new RewardItem(drop.getItemId(), itemCount);
+				return new RewardItem(drop.getItemId(), itemCount, drop.getEnchant(), drop.getEnchantChance());
			else if (itemCount == 0 && Config.DEBUG)
				_log.fine("Roll produced no drops.");
		}
@@ -1568,7 +1581,7 @@
			}

			if (itemCount > 0)
-				return new RewardItem(drop.getItemId(), itemCount);
+				return new RewardItem(drop.getItemId(), itemCount, drop.getEnchant(), drop.getEnchantChance());
			else if (itemCount == 0 && Config.DEBUG)
				_log.fine("Roll produced no drops.");
		}
@@ -1796,6 +1809,15 @@
			{
				// Init the dropped L2ItemInstance and add it in the world as a visible object at the position where mob was last
				ditem = ItemTable.getInstance().createItem("Loot", item.getItemId(), item.getCount(), lastAttacker, this);
+				if(item.getEnchant() > 0)
+				{
+					if(ditem.isWeapon() || ditem.isArmor())
+					{
+						double chance = Rnd.get(1, 100);
+						if(chance <= item.getEnchantChance())
+							ditem.setEnchantLevel(item.getEnchant());
+					}
+				}
				ditem.dropMe(this, newX, newY, newZ);

				// Add drop to auto destroy item task
Index: java/com/l2jserver/gameserver/model/L2DropData.java
===================================================================
--- java/com/l2jserver/gameserver/model/L2DropData.java	(revision 4838)
+++ java/com/l2jserver/gameserver/model/L2DropData.java	(working copy)
@@ -32,6 +32,8 @@
	private int _minDrop;
	private int _maxDrop;
	private int _chance;
+	private int _dropEnchant = -1;
+	private int _enchantChance = 0;
	private String _questID = null;
	private String[] _stateID = null;

@@ -53,6 +55,16 @@
		_itemId = itemId;
	}

+	public void setEnchant(final int enchant)
+	{
+		_dropEnchant = enchant;
+	}
+	
+	public void setEnchantChance(final int chance)
+	{
+		_enchantChance = chance;
+	}
+	
	/**
	 * Returns the minimum quantity of items dropped
	 * @return int
@@ -80,6 +92,16 @@
		return _chance;
	}

+	public int getEnchant()
+	{
+		return _dropEnchant;
+	}
+	
+	public int getEnchantChance()
+	{
+		return _enchantChance;
+	}
+	
	/**
	 * Sets the value for minimal quantity of dropped items
	 * @param mindrop : int designating the quantity
Index: java/com/l2jserver/gameserver/script/faenor/FaenorInterface.java
===================================================================
--- java/com/l2jserver/gameserver/script/faenor/FaenorInterface.java	(revision 4838)
+++ java/com/l2jserver/gameserver/script/faenor/FaenorInterface.java	(working copy)
@@ -72,6 +72,26 @@
		addDrop(npc, drop, false);
	}

+	public void addQuestDrop(int npcID, int itemID, int min, int max, int chance, String questID, String[] states,
+			int enchant, int enchantChance)
+	{
+		L2NpcTemplate npc = npcTable.getTemplate(npcID);
+		if (npc == null)
+		{
+			throw new NullPointerException();
+		}
+		L2DropData drop = new L2DropData();
+		drop.setItemId(itemID);
+		drop.setMinDrop(min);
+		drop.setMaxDrop(max);
+		drop.setEnchant(enchant);
+		drop.setEnchantChance(enchantChance);
+		drop.setChance(chance);
+		drop.setQuestID(questID);
+		drop.addStates(states);
+		addDrop(npc, drop, false);
+	}
+	
	/**
	 *
	 * Adds a new Drop to an NPC
@@ -96,6 +116,28 @@
		addDrop(npc, drop, sweep);
	}

+	public void addDrop(int npcID, int itemID, int min, int max, boolean sweep, int chance,
+			int enchant, int enchantChance) throws NullPointerException
+	{
+		L2NpcTemplate npc = npcTable.getTemplate(npcID);
+		if (npc == null)
+		{
+			if (Config.DEBUG)
+				_log.warning("Npc doesnt Exist");
+			throw new NullPointerException();
+		}
+		L2DropData drop = new L2DropData();
+		drop.setItemId(itemID);
+		drop.setMinDrop(min);
+		drop.setMaxDrop(max);
+		drop.setChance(chance);
+		drop.setEnchant(enchant);
+		drop.setEnchantChance(enchantChance);
+		
+		addDrop(npc, drop, sweep);
+	}
+
+	
	/**
	 * Adds a new drop to an NPC.  If the drop is sweep, it adds it to the NPC's Sweep category
	 * If the drop is non-sweep, it creates a new category for this drop.

 

DP:

Index: data/scripts/handlers/admincommandhandlers/AdminEditNpc.java
===================================================================
--- data/scripts/handlers/admincommandhandlers/AdminEditNpc.java	(revision 8275)
+++ data/scripts/handlers/admincommandhandlers/AdminEditNpc.java	(working copy)
@@ -1333,7 +1333,7 @@
			con = L2DatabaseFactory.getInstance().getConnection();
			L2DropData dropData = null;

-			PreparedStatement statement = con.prepareStatement("SELECT `mobId`, `itemId`, `min`, `max`, `category`, `chance` FROM `droplist` WHERE `mobId`=?");
+			PreparedStatement statement = con.prepareStatement("SELECT `mobId`, `itemId`, `min`, `max`, `category`, `chance`, `enchant`, `enchantChance` FROM `droplist` WHERE `mobId`=?");
			statement.setInt(1, npcId);
			ResultSet dropDataList = statement.executeQuery();

@@ -1345,6 +1345,8 @@
				dropData.setMinDrop(dropDataList.getInt("min"));
				dropData.setMaxDrop(dropDataList.getInt("max"));
				dropData.setChance(dropDataList.getInt("chance"));
+				dropData.setEnchant(dropDataList.getInt("enchant"));
+				dropData.setEnchantChance(dropDataList.getInt("enchantChance"));

				int category = dropDataList.getInt("category");
				npcData.addDropData(dropData, category);

 

Also, you will need to execute this in your database:

ALTER TABLE `droplist` ADD `enchant` int(5) DEFAULT -1;
ALTER TABLE `droplist` ADD `enchantChance` int(3) DEFAULT 0;

  • 0
Posted

i will test...and the enchantChance option is for?

 

edit

 

java/com/l2jserver/gameserver/datatables/HerbDropTable.java

 

cant found HerbDropTable.java in my datatables folder...

  • 0
Posted

example +3 Dynasty Earing 20% chance etc...

 

i though you want to add a chance to be dropped enchanted or not. anyway, if you want the item to be always dropped enchanted, just put 100 as enchantChance

  • 0
Posted

ah now i get it if i put 100% to drop the item and 20% enchant chance have only 20% to come enchanted...;p nice too i will use it ;D

 

edit

 

i added all code exept HerbDropTable part...i cant found it...

  • 0
Posted

Hmm i'm not sure, but like l2phx, you need to make the id of the weapon + the enchant you want and put it in the field drop.

 

it's just an idea!!

i dont get what you mean...

  • 0
Posted

In l2phx, there was a bug. Was to take the id of a weapon, to add 20 to the id and send the packet to the server. And the server gave the weapon +20

 

Maybe here is the same principle

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...