View difference between Paste ID: edcEza2Y and y3B7Cvfk
SHOW: | | - or go back to the newest paste.
1
### Eclipse Workspace Patch 1.0
2
#P aCis_datapack
3
Index: sql/character_timed_items.sql
4
===================================================================
5
--- sql/character_timed_items.sql	(revision 0)
6
+++ sql/character_timed_items.sql	(working copy)
7
@@ -0,0 +1,5 @@
8
+CREATE TABLE `character_timed_items` (
9
+ `charId` int(11) NOT NULL,
10
+ `itemId` int(11) NOT NULL,
11
+ `time` decimal(20,0) NOT NULL DEFAULT '0'
12
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
13
\ No newline at end of file
14
#P aCis_gameserver
15
Index: java/net/sf/l2j/gameserver/model/itemcontainer/PcInventory.java
16
===================================================================
17
--- java/net/sf/l2j/gameserver/model/itemcontainer/PcInventory.java	(revision 1)
18
+++ java/net/sf/l2j/gameserver/model/itemcontainer/PcInventory.java	(working copy)
19
@@ -4,6 +4,8 @@
20
 import java.util.List;
21
 import java.util.stream.Collectors;
22
 
23
+import net.sf.l2j.Config;
24
+import net.sf.l2j.gameserver.data.sql.TimedItemTable;
25
 import net.sf.l2j.gameserver.model.WorldObject;
26
 import net.sf.l2j.gameserver.model.actor.instance.Player;
27
 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
28
@@ -393,6 +395,9 @@
29
 		else if (item.getItemId() == ANCIENT_ADENA_ID && !item.equals(_ancientAdena))
30
 			_ancientAdena = item;
31
 		
32
+		if (Config.LIST_TIMED_ITEMS.contains(item.getItemId()))
33
+			TimedItemTable.getInstance().setTimed(item);
34
+		
35
 		return item;
36
 	}
37
 	
38
@@ -416,6 +421,9 @@
39
 			_adena = item;
40
 		else if (item.getItemId() == ANCIENT_ADENA_ID && !item.equals(_ancientAdena))
41
 			_ancientAdena = item;
42
+
43
+		if (Config.LIST_TIMED_ITEMS.contains(item.getItemId()))
44
+			TimedItemTable.getInstance().setTimed(item);
45
 		
46
 		if (actor != null)
47
 		{
48
@@ -452,6 +460,9 @@
49
 		
50
 		if (_ancientAdena != null && (_ancientAdena.getCount() <= 0 || _ancientAdena.getOwnerId() != getOwnerId()))
51
 			_ancientAdena = null;
52
+
53
+		if (item != null && Config.LIST_TIMED_ITEMS.contains(item.getItemId()))
54
+			TimedItemTable.getInstance().setTimed(item);
55
 		
56
 		return item;
57
 	}
58
@@ -488,6 +499,9 @@
59
 		
60
 		if (_ancientAdena != null && _ancientAdena.getCount() <= 0)
61
 			_ancientAdena = null;
62
+
63
+		if (item != null && Config.LIST_TIMED_ITEMS.contains(item.getItemId()))
64
+			TimedItemTable.getInstance().destroy(item);
65
 		
66
 		return item;
67
 	}
68
Index: java/net/sf/l2j/Config.java
69
===================================================================
70
--- java/net/sf/l2j/Config.java	(revision 1)
71
+++ java/net/sf/l2j/Config.java	(working copy)
72
@@ -360,7 +385,41 @@
73
 	public static boolean DEEPBLUE_DROP_RULES;
74
 	public static boolean ALT_GAME_DELEVEL;
75
 	public static int DEATH_PENALTY_CHANCE;
76
+	public static String TIMED_ITEMS;
77
+	public static ArrayList<Object> LIST_TIMED_ITEMS = new ArrayList<>();
78
+	public static int TIMED_ITEM_TIME;
79
80
@@ -1037,7 +1197,66 @@
81
 		DEEPBLUE_DROP_RULES = players.getProperty("UseDeepBlueDropRules", true);
82
 		ALT_GAME_DELEVEL = players.getProperty("Delevel", true);
83
 		DEATH_PENALTY_CHANCE = players.getProperty("DeathPenaltyChance", 20);
84
+		TIMED_ITEMS = players.getProperty("ListOfTimedItems");
85
+		TIMED_ITEM_TIME = Integer.parseInt(players.getProperty("TimedItemTime", "2"));
86
+		LIST_TIMED_ITEMS = new ArrayList<>();
87
+		for (String id : TIMED_ITEMS.trim().split(","))
88
+			LIST_TIMED_ITEMS.add(Integer.parseInt(id.trim()));
89
90
Index: java/net/sf/l2j/gameserver/taskmanager/ItemsTaskManager.java
91
===================================================================
92
--- java/net/sf/l2j/gameserver/taskmanager/ItemsTaskManager.java	(revision 0)
93
+++ java/net/sf/l2j/gameserver/taskmanager/ItemsTaskManager.java	(working copy)
94
@@ -0,0 +1,105 @@
95
+package net.sf.l2j.gameserver.taskmanager;
96
+
97
+import java.util.concurrent.Future;
98
+
99
+import net.sf.l2j.commons.concurrent.ThreadPool;
100
+
101
+/**
102
+ * @author Williams
103
+ *
104
+ */
105
+public abstract class ItemsTaskManager
106
+{
107
+	private final boolean _returnIfAlreadyRunning;
108
+	
109
+	private Future<?> _future;
110
+	private boolean _isRunning;
111
+	private Thread _currentThread;
112
+	
113
+	protected ItemsTaskManager(boolean returnIfAlreadyRunning)
114
+	{
115
+		_returnIfAlreadyRunning = returnIfAlreadyRunning;
116
+	}
117
+	
118
+	protected ItemsTaskManager()
119
+	{
120
+		this(false);
121
+	}
122
+	
123
+	public synchronized boolean isScheduled()
124
+	{
125
+		return _future != null;
126
+	}
127
+	
128
+	public synchronized final void cancel()
129
+	{
130
+		if (_future != null)
131
+		{
132
+			_future.cancel(false);
133
+			_future = null;
134
+		}
135
+	}
136
+	
137
+	public synchronized final void schedule(long delay)
138
+	{
139
+		cancel();
140
+		_future = ThreadPool.schedule(_runnable, delay);
141
+	}
142
+	
143
+	public synchronized final void scheduleAtFixedRate(long delay, long period)
144
+	{
145
+		cancel();
146
+		_future = ThreadPool.scheduleAtFixedRate(_runnable, delay, period);
147
+	}
148
+	
149
+	private final Runnable _runnable = new Runnable()
150
+	{
151
+		@Override
152
+		public void run()
153
+		{
154
+			if (tryLock())
155
+			{
156
+				try
157
+				{
158
+					onElapsed();
159
+				}
160
+				finally
161
+				{
162
+					unlock();
163
+				}
164
+			}
165
+		}
166
+	};
167
+	
168
+	protected abstract void onElapsed();
169
+	
170
+	public synchronized boolean tryLock()
171
+	{
172
+		if (_returnIfAlreadyRunning)
173
+			return !_isRunning;
174
+		
175
+		_currentThread = Thread.currentThread();
176
+		
177
+		try
178
+		{
179
+			notifyAll();
180
+			
181
+			if (_currentThread != Thread.currentThread())
182
+				return false;
183
+			
184
+			if (!_isRunning)
185
+				return true;
186
+			
187
+			wait();
188
+		}
189
+		catch (InterruptedException e)
190
+		{
191
+		}
192
+		return false;
193
+	}
194
+	
195
+	public synchronized void unlock()
196
+	{
197
+		_isRunning = false;
198
+	}
199
+}
200
\ No newline at end of file
201
Index: config/players.properties
202
===================================================================
203
--- config/players.properties	(revision 1)
204
+++ config/players.properties	(working copy)
205
@@ -42,7 +42,128 @@
206
 # Death Penalty chance if killed by mob (in %), 20 by default
207
 DeathPenaltyChance = 20
208
 
209
+# Timed Item ID use , for separate (57,3441,5588...)
210
+ListOfTimedItems = 6369
211
+# Time for item disappear in Hour's
212
+TimedItemTime = 1
213
\ No newline at end of file