View difference between Paste ID: nVB1cYmu and tn7vYaF7
SHOW: | | - or go back to the newest paste.
1
Index: java/net/sf/l2j/Config.java
2
===================================================================
3
--- java/net/sf/l2j/Config.java	(revision 84)
4
+++ java/net/sf/l2j/Config.java	(working copy)
5
@@ -1281,6 +1281,10 @@
6
7
+	public static boolean GLOBAL_DROP;
8
+	public static Map<Integer, List<Integer>> DROP_LIST = new HashMap<>();
9
10
11
12
13
+	GLOBAL_DROP = server.getProperty("DropSystem", false);
14
+	String[] temp = server.getProperty("DropList", "").split(";");
15
+	for (String s : temp)
16
+	{
17
+		List<Integer> list = new ArrayList<>();
18
+		String[] t = s.split(",");
19
+		list.add(Integer.parseInt(t[1]));
20
+		list.add(Integer.parseInt(t[2]));
21
+		list.add(Integer.parseInt(t[3]));
22
+		DROP_LIST.put(Integer.parseInt(t[0]), list);
23
+	}
24
25
26
Index: gameserver/config/server.properties
27
===================================================================
28
--- gameserver/config/server.properties	(revision 84)
29
+++ gameserver/config/server.properties	(working copy)
30
@@ -1281,6 +1281,10 @@
31
32
+# =================================================================
33
+#                   Global Drop
34
+# =================================================================
35
36
37
+	# Specified drop items.
38
+	DropSystem = True
39
+	# itemId,chance,min,max;itemId2,chance2,min2,max2;...
40
+	DropList = 3470,10,1,2
41
42
43
44
Index: net.sf.l2j.gameserver.model.actor.instance/Monster.java
45
===================================================================
46
--- net.sf.l2j.gameserver.model.actor.instance/Monster.java	(revision 84)
47
+++ net.sf.l2j.gameserver.model.actor.instance/Monster.java	(working copy)
48
@@ -1281,6 +1281,10 @@
49
		
50
	public void doItemDrop(NpcTemplate npcTemplate, Creature mainDamageDealer)
51
	{
52
		if (mainDamageDealer == null)
53
			return;
54
		
55
		// Don't drop anything if the last attacker or owner isn't Player
56
		final Player player = mainDamageDealer.getActingPlayer();
57
		if (player == null)
58
			return;
59
		
60
		// level modifier in %'s (will be subtracted from drop chance)
61
		final int levelModifier = calculateLevelModifierForDrop(player);
62
		
63
		CursedWeaponManager.getInstance().checkDrop(this, player);
64
		
65
		// now throw all categorized drops and handle spoil.
66
		for (DropCategory cat : npcTemplate.getDropData())
67
		{
68
			IntIntHolder item = null;
69
			if (cat.isSweep())
70
			{
71
				if (getSpoilState().isSpoiled())
72
				{
73
					for (DropData drop : cat.getAllDrops())
74
					{
75
						item = calculateRewardItem(drop, levelModifier, true, player);
76
						if (item == null)
77
							continue;
78
						
79
						getSpoilState().getSweepItems().add(item);
80
					}
81
				}
82
			}
83
			else
84
			{
85
				if (getSeedState().isSeeded())
86
				{
87
					DropData drop = cat.dropSeedAllowedDropsOnly();
88
					if (drop == null)
89
						continue;
90
					
91
					item = calculateRewardItem(drop, levelModifier, false, player);
92
				}
93
				else
94
					item = calculateCategorizedRewardItem(cat, levelModifier, player);
95
				
96
				if (item != null)
97
				{
98
					// Check if the autoLoot mode is active
99
					if ((isRaidBoss() && Config.AUTO_LOOT_RAID) || (!isRaidBoss() && Config.AUTO_LOOT))
100
						player.doAutoLoot(this, item);
101
					else
102
						dropItem(player, item);
103
					
104
					// Broadcast message if RaidBoss was defeated
105
					if (isRaidBoss())
106
						broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_DIED_DROPPED_S3_S2).addCharName(this).addItemName(item.getId()).addNumber(item.getValue()));
107
				}
108
			}
109
		}
110
111
+		if (Config.GLOBAL_DROP)
112
+		{		
113
+			for (Entry<Integer, List<Integer>> entry : Config.DROP_LIST.entrySet())
114
+			{
115
+				int rewardItem = Rnd.get(entry.getValue().get(1), entry.getValue().get(2));
116
+				int dropChance = entry.getValue().get(0);
117
+				
118
+				
119
+				// Apply level modifier, if any/wanted.
120
+				if (Config.DEEPBLUE_DROP_RULES)
121
+				{
122
+					int deepBlueDrop = (levelModifier > 0) ? 3 : 1;
123
+					
124
+					// Check if we should apply our maths so deep blue mobs will not drop that easy.
125
+					dropChance = ((entry.getValue().get(0) - ((entry.getValue().get(0) * levelModifier) / 100)) / deepBlueDrop);
126
+				}
127
+				
128
+				if (Rnd.get(100) < dropChance)
129
+				{
130
+					final IntIntHolder item = new IntIntHolder(entry.getKey(), rewardItem);
131
+					if (Config.AUTO_LOOT)
132
+						player.addItem("dropCustom", item.getId(), item.getValue(), this, true);
133
+					else
134
+						dropItem(player, item);
135
+				}
136
+			}
137
+		}
138
		
139
		// Apply special item drop for champions.
140
		if (isChampion() && Config.CHAMPION_REWARD > 0)
141
		{
142
			int dropChance = Config.CHAMPION_REWARD;
143
			
144
			// Apply level modifier, if any/wanted.
145
			if (Config.DEEPBLUE_DROP_RULES)
146
			{
147
				int deepBlueDrop = (levelModifier > 0) ? 3 : 1;
148
				
149
				// Check if we should apply our maths so deep blue mobs will not drop that easy.
150
				dropChance = ((Config.CHAMPION_REWARD - ((Config.CHAMPION_REWARD * levelModifier) / 100)) / deepBlueDrop);
151
			}
152
			
153
			if (Rnd.get(100) < dropChance)
154
			{
155
				final IntIntHolder item = new IntIntHolder(Config.CHAMPION_REWARD_ID, Math.max(1, Rnd.get(1, Config.CHAMPION_REWARD_QTY)));
156
				if (Config.AUTO_LOOT)
157
					player.addItem("ChampionLoot", item.getId(), item.getValue(), this, true);
158
				else
159
					dropItem(player, item);
160
			}
161
		}
162
		
163
		// Herbs.
164
		if (getTemplate().getDropHerbGroup() > 0)
165
		{
166
			for (DropCategory cat : HerbDropData.getInstance().getHerbDroplist(getTemplate().getDropHerbGroup()))
167
			{
168
				final IntIntHolder item = calculateCategorizedHerbItem(cat, levelModifier);
169
				if (item != null)
170
				{
171
					if (Config.AUTO_LOOT_HERBS)
172
						player.addItem("Loot", item.getId(), 1, this, true);
173
					else
174
					{
175
						// If multiple similar herbs drop, split them and make a unique drop per item.
176
						final int count = item.getValue();
177
						if (count > 1)
178
						{
179
							item.setValue(1);
180
							for (int i = 0; i < count; i++)
181
								dropItem(player, item);
182
						}
183
						else
184
							dropItem(player, item);
185
					}
186
				}
187
			}
188
		}
189
	}