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 |