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