SHOW:
|
|
- or go back to the newest paste.
1 | ### Eclipse Workspace Patch 1.0 | |
2 | #P aCis_gameserver | |
3 | Index: java/net/sf/l2j/gameserver/model/actor/instance/Gatekeeper.java | |
4 | =================================================================== | |
5 | --- java/net/sf/l2j/gameserver/model/actor/instance/Gatekeeper.java (revision 6) | |
6 | +++ java/net/sf/l2j/gameserver/model/actor/instance/Gatekeeper.java (working copy) | |
7 | @@ -12,6 +12,7 @@ | |
8 | import net.sf.l2j.gameserver.network.SystemMessageId; | |
9 | import net.sf.l2j.gameserver.network.serverpackets.ActionFailed; | |
10 | import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; | |
11 | +import net.sf.l2j.gameserver.taskmanager.RandomZoneTaskManager; | |
12 | ||
13 | /** | |
14 | * An instance type extending {@link Folk}, used for teleporters.<br> | |
15 | @@ -135,6 +136,8 @@ | |
16 | } | |
17 | showChatWindow(player, val); | |
18 | } | |
19 | + else if (command.startsWith("pvp")) | |
20 | + player.teleportTo(RandomZoneTaskManager.getInstance().getCurrentZone().getLoc(), 25); | |
21 | else | |
22 | super.onBypassFeedback(player, command); | |
23 | } | |
24 | Index: java/net/sf/l2j/gameserver/taskmanager/RandomZoneTaskManager.java | |
25 | =================================================================== | |
26 | --- java/net/sf/l2j/gameserver/taskmanager/RandomZoneTaskManager.java (revision 0) | |
27 | +++ java/net/sf/l2j/gameserver/taskmanager/RandomZoneTaskManager.java (working copy) | |
28 | @@ -0,0 +1,94 @@ | |
29 | +package net.sf.l2j.gameserver.taskmanager; | |
30 | + | |
31 | +import net.sf.l2j.commons.concurrent.ThreadPool; | |
32 | +import net.sf.l2j.commons.random.Rnd; | |
33 | + | |
34 | +import net.sf.l2j.gameserver.data.manager.ZoneManager; | |
35 | +import net.sf.l2j.gameserver.model.World; | |
36 | +import net.sf.l2j.gameserver.model.zone.ZoneId; | |
37 | +import net.sf.l2j.gameserver.model.zone.type.RandomZone; | |
38 | +import net.sf.l2j.gameserver.util.Broadcast; | |
39 | + | |
40 | +/** | |
41 | + * @author StinkyMadness | |
42 | + */ | |
43 | +public final class RandomZoneTaskManager implements Runnable | |
44 | +{ | |
45 | + private int _id; | |
46 | + private int _timer; | |
47 | + | |
48 | + public RandomZoneTaskManager() | |
49 | + { | |
50 | + if (getTotalZones() > 1) | |
51 | + ThreadPool.scheduleAtFixedRate(this, 1000, 1000); | |
52 | + } | |
53 | + | |
54 | + @Override | |
55 | + public void run() | |
56 | + { | |
57 | + if (_timer > 0) | |
58 | + _timer--; | |
59 | + else | |
60 | + selectNextZone(); | |
61 | + | |
62 | + switch (_timer) | |
63 | + { | |
64 | + case 0: | |
65 | + Broadcast.announceToOnlinePlayers("PvP zone will has been changed.", true); | |
66 | + Broadcast.announceToOnlinePlayers("Current zone : " + getCurrentZone().getName(), true); | |
67 | + World.getInstance().getPlayers().stream().filter(x -> x.isInsideZone(ZoneId.RANDOM)).forEach(x -> x.teleportTo(getCurrentZone().getLoc(), 50)); | |
68 | + break; | |
69 | + case 5: | |
70 | + case 15: | |
71 | + case 30: | |
72 | + Broadcast.announceToOnlinePlayers("PvP zone will change in " + _timer + " second(s).", true); | |
73 | + break; | |
74 | + case 60: | |
75 | + case 300: | |
76 | + case 600: | |
77 | + case 900: | |
78 | + case 1800: | |
79 | + Broadcast.announceToOnlinePlayers("PvP zone will change in " + _timer / 60 + " minute(s).", true); | |
80 | + break; | |
81 | + case 3600: | |
82 | + case 7200: | |
83 | + Broadcast.announceToOnlinePlayers("PvP zone will change in " + (_timer / 60) / 60 + " hour(s).", true); | |
84 | + break; | |
85 | + } | |
86 | + } | |
87 | + | |
88 | + public int getZoneId() | |
89 | + { | |
90 | + return _id; | |
91 | + } | |
92 | + | |
93 | + public void selectNextZone() | |
94 | + { | |
95 | + int nextZoneId = Rnd.get(1, getTotalZones()); | |
96 | + while (getZoneId() == nextZoneId) | |
97 | + nextZoneId = Rnd.get(1, getTotalZones()); | |
98 | + _id = nextZoneId; | |
99 | + | |
100 | + _timer = getCurrentZone().getTime(); | |
101 | + } | |
102 | + | |
103 | + public final RandomZone getCurrentZone() | |
104 | + { | |
105 | + return ZoneManager.getInstance().getAllZones(RandomZone.class).stream().filter(t -> t.getId() == getZoneId()).findFirst().orElse(null); | |
106 | + } | |
107 | + | |
108 | + public static final int getTotalZones() | |
109 | + { | |
110 | + return ZoneManager.getInstance().getAllZones(RandomZone.class).size(); | |
111 | + } | |
112 | + | |
113 | + public static final RandomZoneTaskManager getInstance() | |
114 | + { | |
115 | + return SingletonHolder.INSTANCE; | |
116 | + } | |
117 | + | |
118 | + private static class SingletonHolder | |
119 | + { | |
120 | + protected static final RandomZoneTaskManager INSTANCE = new RandomZoneTaskManager(); | |
121 | + } | |
122 | +} | |
123 | \ No newline at end of file | |
124 | Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestRestartPoint.java | |
125 | =================================================================== | |
126 | --- java/net/sf/l2j/gameserver/network/clientpackets/RequestRestartPoint.java (revision 6) | |
127 | +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestRestartPoint.java (working copy) | |
128 | @@ -14,6 +14,8 @@ | |
129 | import net.sf.l2j.gameserver.model.entity.Siege.SiegeSide; | |
130 | import net.sf.l2j.gameserver.model.location.Location; | |
131 | import net.sf.l2j.gameserver.model.pledge.Clan; | |
132 | +import net.sf.l2j.gameserver.model.zone.ZoneId; | |
133 | +import net.sf.l2j.gameserver.taskmanager.RandomZoneTaskManager; | |
134 | ||
135 | public final class RequestRestartPoint extends L2GameClientPacket | |
136 | { | |
137 | @@ -120,7 +122,10 @@ | |
138 | if (!player.isGM() && !player.isFestivalParticipant()) | |
139 | return; | |
140 | ||
141 | - loc = player.getPosition(); | |
142 | + if (!player.isGM() && player.isInsideZone(ZoneId.RANDOM)) | |
143 | + loc = RandomZoneTaskManager.getInstance().getCurrentZone().getLoc(); | |
144 | + else | |
145 | + loc = player.getPosition(); | |
146 | } | |
147 | // To jail. | |
148 | else if (_requestType == 27) | |
149 | Index: java/net/sf/l2j/gameserver/GameServer.java | |
150 | =================================================================== | |
151 | --- java/net/sf/l2j/gameserver/GameServer.java (revision 6) | |
152 | +++ java/net/sf/l2j/gameserver/GameServer.java (working copy) | |
153 | @@ -97,6 +97,7 @@ | |
154 | import net.sf.l2j.gameserver.taskmanager.MovementTaskManager; | |
155 | import net.sf.l2j.gameserver.taskmanager.PvpFlagTaskManager; | |
156 | import net.sf.l2j.gameserver.taskmanager.RandomAnimationTaskManager; | |
157 | +import net.sf.l2j.gameserver.taskmanager.RandomZoneTaskManager; | |
158 | import net.sf.l2j.gameserver.taskmanager.ShadowItemTaskManager; | |
159 | import net.sf.l2j.gameserver.taskmanager.WaterTaskManager; | |
160 | import net.sf.l2j.gameserver.xmlfactory.XMLDocumentFactory; | |
161 | @@ -216,6 +217,7 @@ | |
162 | RandomAnimationTaskManager.getInstance(); | |
163 | ShadowItemTaskManager.getInstance(); | |
164 | WaterTaskManager.getInstance(); | |
165 | + RandomZoneTaskManager.getInstance(); | |
166 | ||
167 | StringUtil.printSection("Seven Signs"); | |
168 | SevenSigns.getInstance().spawnSevenSignsNPC(); | |
169 | Index: java/net/sf/l2j/gameserver/model/zone/type/RandomZone.java | |
170 | =================================================================== | |
171 | --- java/net/sf/l2j/gameserver/model/zone/type/RandomZone.java (revision 0) | |
172 | +++ java/net/sf/l2j/gameserver/model/zone/type/RandomZone.java (working copy) | |
173 | @@ -0,0 +1,78 @@ | |
174 | +package net.sf.l2j.gameserver.model.zone.type; | |
175 | + | |
176 | +import java.util.ArrayList; | |
177 | +import java.util.List; | |
178 | + | |
179 | +import net.sf.l2j.commons.random.Rnd; | |
180 | + | |
181 | +import net.sf.l2j.gameserver.model.actor.Creature; | |
182 | +import net.sf.l2j.gameserver.model.location.Location; | |
183 | +import net.sf.l2j.gameserver.model.zone.SpawnZoneType; | |
184 | +import net.sf.l2j.gameserver.model.zone.ZoneId; | |
185 | + | |
186 | +/** | |
187 | + * @author StinkyMadness | |
188 | + */ | |
189 | +public class RandomZone extends SpawnZoneType | |
190 | +{ | |
191 | + private int _id; | |
192 | + private String _name; | |
193 | + private int _time; | |
194 | + private List<Location> _locations = new ArrayList<>(); | |
195 | + | |
196 | + public RandomZone(int id) | |
197 | + { | |
198 | + super(id); | |
199 | + } | |
200 | + | |
201 | + @Override | |
202 | + public void setParameter(String name, String value) | |
203 | + { | |
204 | + if (name.equals("id")) | |
205 | + _id = Integer.parseInt(value); | |
206 | + else if (name.equals("name")) | |
207 | + _name = value; | |
208 | + else if (name.equals("time")) | |
209 | + _time = Integer.parseInt(value); | |
210 | + else if (name.equals("locs")) | |
211 | + { | |
212 | + for (String locs : value.split(";")) | |
213 | + _locations.add(new Location(Integer.valueOf(locs.split(",")[0]), Integer.valueOf(locs.split(",")[1]), Integer.valueOf(locs.split(",")[2]))); | |
214 | + } | |
215 | + else | |
216 | + super.setParameter(name, value); | |
217 | + } | |
218 | + | |
219 | + @Override | |
220 | + protected void onEnter(Creature character) | |
221 | + { | |
222 | + character.setInsideZone(ZoneId.RANDOM, true); | |
223 | + } | |
224 | + | |
225 | + @Override | |
226 | + protected void onExit(Creature character) | |
227 | + { | |
228 | + character.setInsideZone(ZoneId.RANDOM, false); | |
229 | + } | |
230 | + | |
231 | + @Override | |
232 | + public int getId() | |
233 | + { | |
234 | + return _id; | |
235 | + } | |
236 | + | |
237 | + public String getName() | |
238 | + { | |
239 | + return _name; | |
240 | + } | |
241 | + | |
242 | + public int getTime() | |
243 | + { | |
244 | + return _time; | |
245 | + } | |
246 | + | |
247 | + public Location getLoc() | |
248 | + { | |
249 | + return _locations.get(Rnd.get(0, _locations.size() - 1)); | |
250 | + } | |
251 | +} | |
252 | \ No newline at end of file | |
253 | Index: java/net/sf/l2j/gameserver/model/zone/ZoneId.java | |
254 | =================================================================== | |
255 | --- java/net/sf/l2j/gameserver/model/zone/ZoneId.java (revision 6) | |
256 | +++ java/net/sf/l2j/gameserver/model/zone/ZoneId.java (working copy) | |
257 | @@ -21,7 +21,8 @@ | |
258 | CAST_ON_ARTIFACT(16), | |
259 | NO_RESTART(17), | |
260 | SCRIPT(18), | |
261 | - BOSS(19); | |
262 | + BOSS(19), | |
263 | + RANDOM(20); | |
264 | ||
265 | private final int _id; | |
266 | ||
267 | Index: java/net/sf/l2j/gameserver/network/serverpackets/Die.java | |
268 | =================================================================== | |
269 | --- java/net/sf/l2j/gameserver/network/serverpackets/Die.java (revision 6) | |
270 | +++ java/net/sf/l2j/gameserver/network/serverpackets/Die.java (working copy) | |
271 | @@ -7,6 +7,7 @@ | |
272 | import net.sf.l2j.gameserver.model.entity.Siege; | |
273 | import net.sf.l2j.gameserver.model.entity.Siege.SiegeSide; | |
274 | import net.sf.l2j.gameserver.model.pledge.Clan; | |
275 | +import net.sf.l2j.gameserver.model.zone.ZoneId; | |
276 | ||
277 | public class Die extends L2GameServerPacket | |
278 | { | |
279 | @@ -27,7 +28,7 @@ | |
280 | if (cha instanceof Player) | |
281 | { | |
282 | Player player = (Player) cha; | |
283 | - _allowFixedRes = player.getAccessLevel().allowFixedRes(); | |
284 | + _allowFixedRes = player.getAccessLevel().allowFixedRes() || player.isInsideZone(ZoneId.RANDOM); | |
285 | _clan = player.getClan(); | |
286 | ||
287 | } | |
288 | #P aCis_datapack | |
289 | Index: data/xml/zones/RandomZone.xml | |
290 | =================================================================== | |
291 | --- data/xml/zones/RandomZone.xml (revision 0) | |
292 | +++ data/xml/zones/RandomZone.xml (working copy) | |
293 | @@ -0,0 +1,21 @@ | |
294 | +<?xml version="1.0" encoding="UTF-8"?> | |
295 | +<list> | |
296 | + <!-- Random Zones --> | |
297 | + <zone shape="Cuboid" minZ="-3752" maxZ="-352"><!-- gludin_pvp --> | |
298 | + <stat name="id" val="1" /> | |
299 | + <stat name="name" val="Gludin Arena" /> | |
300 | + <stat name="time" val="30" /><!-- time in seconds --> | |
301 | + <stat name="locs" val="-88339,141802,-3649;-87894,142231,-3649" /> | |
302 | + <node x="-88411" y="141732" /> | |
303 | + <node x="-87429" y="142708" /> | |
304 | + </zone> | |
305 | + <zone shape="Cuboid" minZ="-3850" maxZ="-350"><!-- giran_pvp_battle --> | |
306 | + <stat name="id" val="2" /> | |
307 | + <stat name="name" val="Giran Arena" /> | |
308 | + <stat name="time" val="30" /><!-- time in seconds --> | |
309 | + <stat name="locs" val="73306,142440,-3775;72646,142403,-3775" /> | |
310 | + <node x="72493" y="142263" /> | |
311 | + <node x="73493" y="143261" /> | |
312 | + <spawn x="73890" y="142656" z="-3778" /> | |
313 | + </zone> | |
314 | +</list> | |
315 | \ No newline at end of file |