allanalcantara Posted August 4, 2014 Posted August 4, 2014 core ### Eclipse Workspace Patch 1.0 #P L2JOfficial Index: lin2srv/java/net/sf/l2j/gameserver/model/L2World.java =================================================================== --- lin2srv/java/net/sf/l2j/gameserver/model/L2World.java (revision 1451) +++ lin2srv/java/net/sf/l2j/gameserver/model/L2World.java (working copy) @@ -187,6 +187,16 @@ return time; } + public L2PcInstance findPlayer(int objectId) + { + L2Object obj = _allObjects.get(objectId); + + if (obj instanceof L2PcInstance) + return (L2PcInstance) obj; + + return null; + } + /** * Added by Tempy - 08 Aug 05 * Allows easy retrevial of all visible objects in world. Index: lin2srv/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- lin2srv/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 1451) +++ lin2srv/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -423,6 +423,8 @@ private boolean _isIn7sDungeon = false; + private boolean _isInKrateisCube = false; + public int _bookmarkslot = 0; // The Teleport Bookmark Slot public FastList<TeleportBookmark> tpbookmark = new FastList<TeleportBookmark>(); @@ -11472,7 +11474,20 @@ _inAirShipPosition = pt; } + public void setIsInKrateisCube(boolean choice) + { + _isInKrateisCube = choice; + } + /** + * @return + */ + public boolean getIsInKrateisCube() + { + return _isInKrateisCube; + } + + /** * Manage the delete task of a L2PcInstance (Leave Party, Unsummon pet, Save its inventory in the database, Remove it from the world...).<BR><BR> * * <B><U> Actions</U> :</B><BR><BR> Index: lin2srv/java/net/sf/l2j/gameserver/model/actor/instance/L2KrateisCubeManagerInstance.java =================================================================== --- lin2srv/java/net/sf/l2j/gameserver/model/actor/instance/L2KrateisCubeManagerInstance.java (revision 0) +++ lin2srv/java/net/sf/l2j/gameserver/model/actor/instance/L2KrateisCubeManagerInstance.java (revision 0) @@ -0,0 +1,120 @@ +/* + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package net.sf.l2j.gameserver.model.actor.instance; + +import net.sf.l2j.gameserver.instancemanager.KrateisCubeManager; +import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate; +import net.sf.l2j.gameserver.network.SystemMessageId; +import net.sf.l2j.gameserver.network.serverpackets.SystemMessage; + +/** + * @author Psycho(killer1888) + */ +public class L2KrateisCubeManagerInstance extends L2NpcInstance +{ + + public L2KrateisCubeManagerInstance(int objectId, L2NpcTemplate template) + { + super(objectId, template); + } + + @Override + public void onBypassFeedback(L2PcInstance player, String command) + { + if (command.startsWith("Register")) + { + if (player.getInventoryLimit() * 0.8 <= player.getInventory().getSize()) + { + player.sendPacket(SystemMessageId.INVENTORY_LESS_THAN_80_PERCENT); + showChatWindow(player, "data/html/krateisCube/32503-9.htm"); + return; + } + + boolean canParticipate = true; + int cmdChoice = Integer.parseInt(command.substring(9, 10).trim()); + switch (cmdChoice) + { + case 1: + if (player.getLevel() < 70 || player.getLevel() > 75) + { + showChatWindow(player, "data/html/krateisCube/32503-7.htm"); + return; + } + break; + case 2: + if (player.getLevel() < 76 || player.getLevel() > 79) + { + showChatWindow(player, "data/html/krateisCube/32503-7.htm"); + return; + } + break; + case 3: + if (player.getLevel() < 80) + { + showChatWindow(player, "data/html/krateisCube/32503-7.htm"); + return; + } + break; + } + + if (KrateisCubeManager.getInstance().isTimeToRegister()) + { + if (KrateisCubeManager.getInstance().registerPlayer(player)) + { + showChatWindow(player, "data/html/krateisCube/32503-4.htm"); + return; + } + else + { + showChatWindow(player, "data/html/krateisCube/32503-5.htm"); + return; + } + } + else + { + showChatWindow(player, "data/html/krateisCube/32503-8.htm"); + return; + } + + } + else if (command.startsWith("Cancel")) + { + KrateisCubeManager.getInstance().removePlayer(player); + showChatWindow(player, "data/html/krateisCube/32503-6.htm"); + return; + } + else if (command.startsWith("TeleportIn")) + { + KrateisCubeManager.getInstance().teleportPlayerIn(player); + return; + } + else + super.onBypassFeedback(player,command); + } + + @Override + public String getHtmlPath(int npcId, int val) + { + String pom = ""; + + if (val == 0) + pom = "" + npcId; + else + pom = npcId + "-" + val; + + return "data/html/krateisCube/" + pom + ".htm"; + } +} Index: lin2srv/java/net/sf/l2j/gameserver/GameServer.java =================================================================== --- lin2srv/java/net/sf/l2j/gameserver/GameServer.java (revision 1451) +++ lin2srv/java/net/sf/l2j/gameserver/GameServer.java (working copy) @@ -91,6 +91,7 @@ import net.sf.l2j.gameserver.instancemanager.GrandBossManager; import net.sf.l2j.gameserver.instancemanager.InstanceManager; import net.sf.l2j.gameserver.instancemanager.ItemsOnGroundManager; +import net.sf.l2j.gameserver.instancemanager.KrateisCubeManager; import net.sf.l2j.gameserver.instancemanager.MercTicketManager; import net.sf.l2j.gameserver.instancemanager.PetitionManager; import net.sf.l2j.gameserver.instancemanager.QuestManager; @@ -356,6 +357,9 @@ if (Config.AUTODESTROY_ITEM_AFTER > 0 || Config.HERB_AUTO_DESTROY_TIME > 0) ItemsAutoDestroy.getInstance(); + _log.info("Krateis Cube loaded"); + KrateisCubeManager.getInstance().init(); + MonsterRace.getInstance(); SevenSigns.getInstance().spawnSevenSignsNPC(); Index: lin2srv/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java =================================================================== --- lin2srv/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java (revision 1451) +++ lin2srv/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java (working copy) @@ -35,6 +35,7 @@ import net.sf.l2j.gameserver.instancemanager.FortManager; import net.sf.l2j.gameserver.instancemanager.FortSiegeManager; import net.sf.l2j.gameserver.instancemanager.InstanceManager; +import net.sf.l2j.gameserver.instancemanager.KrateisCubeManager; import net.sf.l2j.gameserver.instancemanager.PetitionManager; import net.sf.l2j.gameserver.instancemanager.QuestManager; import net.sf.l2j.gameserver.instancemanager.SiegeManager; @@ -190,6 +191,9 @@ GmListTable.getInstance().addGm(activeChar, true); } + if (KrateisCubeManager.getInstance().isRegistered(activeChar)) + activeChar.setIsInKrateisCube(true); + activeChar.setPvpColor(); // Set dead status if applies Index: lin2srv/java/net/sf/l2j/gameserver/instancemanager/KrateisCubeManager.java =================================================================== --- lin2srv/java/net/sf/l2j/gameserver/instancemanager/KrateisCubeManager.java (revision 0) +++ lin2srv/java/net/sf/l2j/gameserver/instancemanager/KrateisCubeManager.java (revision 0) @@ -0,0 +1,726 @@ +/* + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.sf.l2j.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.Calendar; +//import java.util.Map.Entry; +import java.util.concurrent.ScheduledFuture; +import java.util.Date; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javolution.util.FastList; +import javolution.util.FastMap; + +import net.sf.l2j.Config; +import net.sf.l2j.L2DatabaseFactory; +import net.sf.l2j.gameserver.ThreadPoolManager; +import net.sf.l2j.gameserver.datatables.DoorTable; +import net.sf.l2j.gameserver.datatables.NpcTable; +import net.sf.l2j.gameserver.datatables.SpawnTable; +import net.sf.l2j.gameserver.model.L2Spawn; +import net.sf.l2j.gameserver.model.L2World; +import net.sf.l2j.gameserver.model.actor.L2Character; +import net.sf.l2j.gameserver.model.actor.L2Npc; +import net.sf.l2j.gameserver.model.actor.L2Summon; +import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance; +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; +import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate; +import net.sf.l2j.util.Rnd; +//import net.sf.l2j.util.L2FastSet; +import net.sf.l2j.util.ValueSortMap; + +/** + * @author Psycho(killer1888) + */ + +public class KrateisCubeManager +{ + protected static final Logger _log = Logger.getLogger(KrateisCubeManager.class.getName()); + private static boolean _started = false; + private static boolean _canRegister = true; + private static int _rotation = 0; + private static int _level = 0; + protected ScheduledFuture<?> _rotateRoomTask = null; + private static L2Npc _manager; + private static int _playersToReward = 0; + private static int _playerTotalKill = 0; + private static double _playerTotalCoin = 0; + private static int _matchDuration = 20; + private static int _waitingTime = 3; + + private final FastList<L2Npc> _watchers = new FastList<L2Npc>(); + private final FastList<L2Npc> _mobs = new FastList<L2Npc>(); + private static FastList<Integer> _players = new FastList<Integer>(); + private static FastList<Integer> _tempPlayers = new FastList<Integer>(); + private static Map<Integer, Integer> _killList = new FastMap<Integer, Integer>(); + + private static int _redWatcher = 18601; + private static int _blueWatcher = 18602; + private static int _fantasyCoin = 13067; + + private static int[] _doorlistA = {17150014,17150013,17150019,17150024,17150039,17150044,17150059,17150064,17150079,17150084,17150093,17150094,17150087,17150088,17150082,17150077,17150062,17150057,17150008,17150007,17150018,17150023,17150038,17150043,17150058,17150063,17150078,17150083,17150030,17150029,17150028,17150027,17150036,17150041,17150056,17150061}; + private static int[] _doorlistB = {17150020,17150025,17150034,17150033,17150032,17150031,17150012,17150011,17150010,17150009,17150017,17150022,17150016,17150021,17150037,17150042,17150054,17150053,17150052,17150051,17150050,17150049,17150048,17150047,17150085,17150080,17150074,17150073,17150072,17150071,17150070,17150069,17150068,17150067,17150076,17150081,17150092,17150091,17150090,17150089}; + + private static int[] _level70Mobs = {18587,18580,18581,18584,18591,18589,18583}; + private static int[] _level76Mobs = {18590,18591,18589,18585,18586,18583,18592,18582}; + private static int[] _level80Mobs = {18595,18597,18596,18598,18593,18600,18594,18599}; + + private static final String GET_PLAYED_MATCH = "SELECT played_matchs, total_kills, total_coins FROM krateis_cube WHERE charId=?"; + private static final String SAVE_PLAYED_MATCH = "INSERT INTO krateis_cube (charId,played_matchs,total_kills,total_coins) VALUES (?,?,?,?)"; + private static final String UPDATE_PLAYED_MATCH = "UPDATE krateis_cube SET played_matchs = ?, total_kills = ?, total_coins = ? WHERE charId = ?"; + + private static int[][][] _spawnLocs = { + {{-77663, -85716, -8365},{-77701, -85948, -8365},{-77940, -86090, -8365},{-78142, -85934, -8365},{-78180, -85659, -8365}}, + {{-79653, -85689, -8365},{-79698, -86017, -8365},{-80003, -86025, -8365},{-80102, -85880, -8365},{-80061, -85603, -8365}}, + {{-81556, -85765, -8365},{-81794, -85528, -8365},{-82111, -85645, -8365},{-82044, -85928, -8364},{-81966, -86116, -8365}}, + {{-83750, -85882, -8365},{-84079, -86021, -8365},{-84123, -85663, -8365},{-83841, -85748, -8364},{-83951, -86120, -8365}}, + {{-85785, -85943, -8364},{-86088, -85626, -8365},{-85698, -85678, -8365},{-86154, -85879, -8365},{-85934, -85961, -8365}}, + {{-85935, -84131, -8365},{-86058, -83921, -8365},{-85841, -83684, -8364},{-86082, -83557, -8365},{-85680, -83816, -8365}}, + {{-84128, -83747, -8365},{-83877, -83597, -8365},{-83609, -83946, -8365},{-83911, -83955, -8364},{-83817, -83888, -8364}}, + {{-82039, -83971, -8365},{-81815, -83972, -8365},{-81774, -83742, -8364},{-81996, -83733, -8364},{-82124, -83589, -8365}}, + {{-80098, -83862, -8365},{-79973, -84058, -8365},{-79660, -83848, -8365},{-79915, -83570, -8365},{-79803, -83832, -8364}}, + {{-78023, -84066, -8365},{-77869, -83891, -8364},{-77674, -83757, -8365},{-77861, -83540, -8365},{-78107, -83660, -8365}}, + {{-77876, -82141, -8365},{-77674, -81822, -8365},{-77885, -81607, -8365},{-78078, -81779, -8365},{-78071, -81874, -8365}}, + {{-79740, -81636, -8365},{-80094, -81713, -8365},{-80068, -82004, -8365},{-79677, -81987, -8365},{-79891, -81734, -8364}}, + {{-81703, -81748, -8365},{-81857, -81661, -8364},{-82058, -81863, -8365},{-81816, -82011, -8365},{-81600, -81809, -8365}}, + {{-83669, -82007, -8365},{-83815, -81965, -8365},{-84121, -81805, -8365},{-83962, -81626, -8365},{-83735, -81625, -8365}}, + {{-85708, -81838, -8365},{-86062, -82009, -8365},{-86129, -81814, -8365},{-85957, -81634, -8365},{-85929, -81460, -8365}}, + {{-86160, -79933, -8365},{-85766, -80061, -8365},{-85723, -79691, -8365},{-85922, -79623, -8365},{-85941, -79879, -8364}}, + {{-84082, -79638, -8365},{-83923, -80082, -8365},{-83687, -79778, -8365},{-83863, -79619, -8365},{-83725, -79942, -8365}}, + {{-81963, -80020, -8365},{-81731, -79707, -8365},{-81957, -79589, -8365},{-82151, -79788, -8365},{-81837, -79868, -8364}}, + {{-80093, -80020, -8365},{-80160, -79716, -8365},{-79727, -79699, -8365},{-79790, -80049, -8365},{-79942, -79594, -8365}}, + {{-78113, -79658, -8365},{-77967, -80022, -8365},{-77692, -79779, -8365},{-77728, -79603, -8365},{-78078, -79857, -8365}}, + {{-77648, -77923, -8365},{-77714, -77742, -8365},{-78109, -77640, -8365},{-78114, -77904, -8365},{-77850, -77816, -8364}}, + {{-79651, -77492, -8365},{-79989, -77613, -8365},{-80134, -77981, -8365},{-79759, -78011, -8365},{-79644, -77779, -8365}}, + {{-81672, -77966, -8365},{-81867, -77536, -8365},{-82129, -77926, -8365},{-82057, -78064, -8365},{-82114, -77608, -8365}}, + {{-83938, -77574, -8365},{-84129, -77924, -8365},{-83909, -78111, -8365},{-83652, -78006, -8365},{-83855, -77756, -8364}}, + {{-85660, -78078, -8365},{-85842, -77649, -8365},{-85989, -77556, -8365},{-86075, -77783, -8365},{-86074, -78132, -8365}}}; + + private static int[][] _teleports = { + {-77906, -85809, -8362}, + {-79903, -85807, -8364}, + {-81904, -85807, -8364}, + {-83901, -85806, -8364}, + {-85903, -85807, -8364}, + {-77904, -83808, -8364}, + {-79904, -83807, -8364}, + {-81905, -83810, -8364}, + {-83903, -83807, -8364}, + {-85899, -83807, -8364}, + {-77903, -81808, -8364}, + {-79906, -81807, -8364}, + {-81901, -81808, -8364}, + {-83905, -81805, -8364}, + {-85907, -81809, -8364}, + {-77904, -79807, -8364}, + {-79905, -79807, -8364}, + {-81908, -79808, -8364}, + {-83907, -79806, -8364}, + {-85912, -79806, -8364}, + {-77905, -77808, -8364}, + {-79902, -77805, -8364}, + {-81904, -77808, -8364}, + {-83904, -77808, -8364}, + {-85904, -77807, -8364}}; + + public static final KrateisCubeManager getInstance() + { + return SingletonHolder._instance; + } + + public void init() + { + Calendar cal = Calendar.getInstance(); + + if (cal.get(Calendar.MINUTE) >= 57) + { + cal.add(Calendar.HOUR, 1); + cal.set(Calendar.MINUTE, 27); + } + else if (cal.get(Calendar.MINUTE) >= 0 && cal.get(Calendar.MINUTE) <= 26) + cal.set(Calendar.MINUTE, 27); + else + cal.set(Calendar.MINUTE, 57); + + cal.set(Calendar.SECOND, 0); + + ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new checkRegistered(), cal.getTimeInMillis() - System.currentTimeMillis(), 30*60*1000); + + Date date = new Date(cal.getTimeInMillis()); + _log.info("Krateis Cube initialized, next match: " + date); + } + + protected class checkRegistered implements Runnable + { + public void run() + { + if (!_started) + { + if (_tempPlayers.isEmpty()) + { + _log.info("Krateis Cube: Match canceled due to lack of participant, next round in 30 minutes."); + return; + } + else + { + _log.info("Krateis Cube: Match started."); + _canRegister = false; + teleportToWaitRoom(); + } + } + } + } + + protected class startKrateisCube implements Runnable + { + public void run() + { + _canRegister = true; + + closeAllDoors(); + + L2PcInstance player; + int i = 0; + for (int objectId : _players) + { + player = L2World.getInstance().findPlayer(objectId); + if (player != null) + { + doTeleport(player, _teleports[i][0], _teleports[i][1], _teleports[i][2]); + i++; + } + } + + L2Spawn spawnDat; + spawnDat = spawnNpc(32504, -86804, -81974, -8361, 34826, 60, 0); + _manager = spawnDat.doSpawn(); + + _rotateRoomTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new rotateRooms(), 10000, 50000); + ThreadPoolManager.getInstance().scheduleGeneral(new spawnMobs(), 10000); + ThreadPoolManager.getInstance().scheduleGeneral(new finishCube(), _matchDuration*60*1000); + } + } + + protected class finishCube implements Runnable + { + public void run() + { + L2PcInstance player; + + _log.info("Krateis Cube match ended."); + + if (_rotateRoomTask != null) + _rotateRoomTask.cancel(true); + + closeAllDoors(); + globalDespawn(); + rewardPlayers(); + + for (int objectId : _players) + { + player = L2World.getInstance().findPlayer(objectId); + if (player != null) + { + doTeleport(player, -70381, -70937, -1428); + player.setIsInKrateisCube(false); + } + } + + _killList.clear(); + _players.clear(); + _started = false; + } + } + + protected class spawnMobs implements Runnable + { + public void run() + { + int npcId; + int _instanceId = 0; + L2Spawn spawnDat; + + for (int i = 0; i <= 24; i++) + { + for (int j = 0; j <= 4; j++) + { + npcId = _level76Mobs[Rnd.get(_level76Mobs.length)]; + spawnDat = spawnNpc(npcId, _spawnLocs[i][j][0], _spawnLocs[i][j][1], _spawnLocs[i][j][2], 0, 60, _instanceId); + _mobs.add(spawnDat.doSpawn()); + } + + } + } + } + + protected class rotateRooms implements Runnable + { + public void run() + { + L2Spawn spawnDat; + int instanceId = 0; + int watcherA; + int watcherB; + + watcherA = (_rotation == 0) ? _blueWatcher : _redWatcher; + watcherB = (_rotation == 0) ? _redWatcher : _blueWatcher; + + spawnDat = spawnNpc(watcherA, -77906, -85809, -8362, 34826, 60, instanceId); //1 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -79903, -85807, -8364, 32652, 60, instanceId); //2 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -81904, -85807, -8364, 32839, 60, instanceId); //3 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -83901, -85806, -8364, 33336, 60, instanceId); //4 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -85903, -85807, -8364, 32571, 60, instanceId); //5 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -77904, -83808, -8364, 32933, 60, instanceId); //6 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -79904, -83807, -8364, 33055, 60, instanceId); //7 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -81905, -83810, -8364, 32767, 60, instanceId); //8 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -83903, -83807, -8364, 32676, 60, instanceId); //9 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -85899, -83807, -8364, 33005, 60, instanceId); //10 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -77903, -81808, -8364, 32664, 60, instanceId); //11 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -79906, -81807, -8364, 32647, 60, instanceId); //12 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -81901, -81808, -8364, 33724, 60, instanceId); //13 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -83905, -81805, -8364, 32926, 60, instanceId); //14 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -85907, -81809, -8364, 34248, 60, instanceId); //15 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -77904, -79807, -8364, 32905, 60, instanceId); //16 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -79905, -79807, -8364, 32767, 60, instanceId); //17 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -81908, -79808, -8364, 32767, 60, instanceId); //18 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -83907, -79806, -8364, 32767, 60, instanceId); //19 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -85912, -79806, -8364, 29025, 60, instanceId); //20 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -77905, -77808, -8364, 32767, 60, instanceId); //21 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -79902, -77805, -8364, 32767, 60, instanceId); //22 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherB, -81904, -77808, -8364, 32478, 60, instanceId); //23 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -83904, -77808, -8364, 32698, 60, instanceId); //24 + _watchers.add(spawnDat.doSpawn()); + spawnDat = spawnNpc(watcherA, -85904, -77807, -8364, 32612, 60, instanceId); //25 + _watchers.add(spawnDat.doSpawn()); + + openDoors(); + + _rotation = (_rotation == 0) ? 1 : 0; + } + } + + protected class CloseDoors implements Runnable + { + public void run() + { + closeAllDoors(); + + for (L2Npc npc : _watchers) + { + npc.getSpawn().stopRespawn(); + npc.deleteMe(); + } + _watchers.clear(); + } + } + + public boolean teleportToWaitRoom() + { + if (_tempPlayers.size() >= 1) + { + L2PcInstance player; + for (int objectId : _tempPlayers) + { + _players.add(objectId); + + player = L2World.getInstance().findPlayer(objectId); + if (player != null) + { + doTeleport(player, -87028, -81780, -8365); + player.setIsInKrateisCube(true); + } + } + + _tempPlayers.clear(); + _started = true; + ThreadPoolManager.getInstance().scheduleGeneral(new startKrateisCube(), _waitingTime*60*1000); + return true; + } + else + return false; + } + + @SuppressWarnings("unchecked") + private void rewardPlayers() + { + int kills = 0; + int i = 0; + double amount = 0; + L2PcInstance player; + + _playersToReward = getNumberPlayerToReward(); + _killList = ValueSortMap.sortMapByValue(_killList, false); + + for (int objectId : _killList.keySet()) + { + player = L2World.getInstance().findPlayer(objectId); + if (player != null) + { + kills = _killList.get(objectId); + + if (kills >= 10) + { + amount = getRewardAmount(player, i); + int coinAmount = (int)amount; + player.addItem("Krateis Cube Reward", _fantasyCoin, coinAmount, player, true); + player.getInventory().updateDatabase(); + i++; + } + } + } + _playersToReward = 0; + _playerTotalKill = 0; + _playerTotalCoin = 0; + } + + private double getRewardAmount(L2PcInstance player, int place) + { + int playedMatchs = getPlayedMatchs(player); + int n = Math.round(_playersToReward / 10); + double reward; + + if (playedMatchs == 0) + { + savePlayedMatchs(player); + } + + playedMatchs++; + + switch (place) + { + case 0: + reward = Math.floor(20 + (n * 2) + (playedMatchs / 4)); + if (reward > 50) + reward = 50; + break; + case 1: + reward = Math.floor(8 + (n * 2) + (playedMatchs / 4)); + if (reward > 20) + reward = 20; + break; + default: + reward = Math.floor(1 + n + (playedMatchs / 6)); + if (reward > 5) + reward = 5; + break; + } + + updatePlayedMatchs(player, playedMatchs, reward); + + return reward; + } + + public void updatePlayedMatchs(L2PcInstance player, int playedMatchs, double amount) + { + Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement(UPDATE_PLAYED_MATCH); + + statement.setInt(1, playedMatchs); + statement.setInt(2, _playerTotalKill + _killList.get(player.getObjectId())); + statement.setDouble(3, _playerTotalCoin + amount); + statement.setInt(4, player.getObjectId()); + statement.execute(); + statement.close(); + } + catch (Exception e) + { + _log.log(Level.SEVERE, "Could not update character played Krateis Cube matchs: ", e); + } + finally + { + try { con.close(); } catch (Exception e) {} + } + } + + private void savePlayedMatchs(L2PcInstance player) + { + Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement(SAVE_PLAYED_MATCH); + + statement.setInt(1, player.getObjectId()); + statement.setInt(2, 0); + statement.setInt(3, _killList.get(player.getObjectId())); + statement.setDouble(4, 0); + statement.execute(); + statement.close(); + } + catch (Exception e) + { + _log.log(Level.SEVERE, "Could not store character krateis cube played matchs: ", e); + } + finally + { + try { con.close(); } catch (Exception e) {} + } + } + + private int getPlayedMatchs(L2PcInstance player) + { + Connection con = null; + int playedMatchs = 0; + + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement(GET_PLAYED_MATCH); + + statement.setInt(1, player.getObjectId()); + + ResultSet rset = statement.executeQuery(); + while (rset.next()) + { + playedMatchs = rset.getInt("played_matchs"); + _playerTotalKill = rset.getInt("total_kills"); + _playerTotalCoin = rset.getDouble("total_coins"); + } + rset.close(); + statement.close(); + } + catch (Exception e) + { + _log.log(Level.SEVERE, "Could not get player total Krateis Cube played matchs: ", e); + } + finally + { + try { con.close(); } catch (Exception e) {} + } + return playedMatchs; + } + + private int getNumberPlayerToReward() + { + int number = 0; + int kills = 0; + + for (int objectId : _killList.keySet()) + { + kills = _killList.get(objectId); + + if (kills >= 10) + number++; + } + return number; + } + + private void globalDespawn() + { + for (L2Npc npc : _mobs) + { + npc.getSpawn().stopRespawn(); + npc.deleteMe(); + } + _mobs.clear(); + + for (L2Npc npc : _watchers) + { + npc.getSpawn().stopRespawn(); + npc.deleteMe(); + } + + _manager.getSpawn().stopRespawn(); + _manager.deleteMe(); + + _manager = null; + _watchers.clear(); + } + + private void openDoors() + { + int[] doorToOpen = (_rotation == 1) ? _doorlistB : _doorlistA; + + closeAllDoors(); + + for (int doorId : doorToOpen) + DoorTable.getInstance().getDoor(doorId).openMe(); + + ThreadPoolManager.getInstance().scheduleGeneral(new CloseDoors(), 25000); + } + + private void closeAllDoors() + { + int doorId = 17150001; + + while (doorId <= 17150103) + { + DoorTable.getInstance().getDoor(doorId).closeMe(); + doorId += 1; + } + } + + // Teleports player and his summon to given coords + private void doTeleport(L2PcInstance player, int x, int y, int z) + { + if (player.isOnline() == 0) + return; + + player.teleToLocation(x, y, z, false); + + L2Summon pet = player.getPet(); + if (pet != null) + pet.teleToLocation(x, y, z, false); + } + + private L2Spawn spawnNpc(int npcId, int x, int y, int z, int heading, int respawnTime, int instanceId) + { + L2NpcTemplate npcTemplate; + npcTemplate = NpcTable.getInstance().getTemplate(npcId); + L2Spawn spawnDat = null; + + try + { + spawnDat = new L2Spawn(npcTemplate); + spawnDat.setAmount(1); + spawnDat.setLocx(x); + spawnDat.setLocy(y); + spawnDat.setLocz(z); + spawnDat.setHeading(heading); + spawnDat.setRespawnDelay(respawnTime); + spawnDat.setInstanceId(instanceId); + SpawnTable.getInstance().addNewSpawn(spawnDat, false); + spawnDat.init(); + spawnDat.startRespawn(); + if (respawnTime == 0) + spawnDat.stopRespawn(); + } + catch (Exception e) + { + e.printStackTrace(); + } + return spawnDat; + } + + public boolean registerPlayer(L2PcInstance player) + { + int objectId = player.getObjectId(); + + if (_tempPlayers.contains(objectId) || _tempPlayers.size() >= 25) + return false; + + _tempPlayers.add(objectId); + return true; + } + + public boolean removePlayer(L2PcInstance player) + { + int objectId = player.getObjectId(); + + if (!_tempPlayers.contains(objectId)) + return false; + + _tempPlayers.remove(objectId); + return true; + } + + // Add one kill to this player + public void addKill(L2PcInstance player) + { + addKills(player, 1); + } + + // Add value kills to this player + public boolean addKills(L2PcInstance player, int value) + { + int objectId = player.getObjectId(); + int kills = 0; + + if (_players.contains(objectId)) + { + if (_killList.containsKey(objectId)) + kills = _killList.get(objectId); + + kills += value; + _killList.put(objectId, kills); + return true; + } + return false; + } + + public int getKills(L2PcInstance player) + { + int objectId = player.getObjectId(); + int kills = 0; + + if (_players.contains(objectId)) + { + if (_killList.containsKey(objectId)) + kills = _killList.get(objectId); + } + + return kills; + } + + public boolean isTimeToRegister() + { + return _canRegister; + } + + // This one is used to control if the player is registered in Krateis Cube on enterWorld + public boolean isRegistered(L2PcInstance player) + { + int objectId = player.getObjectId(); + + if (_players.contains(objectId)) + return true; + return false; + } + + // Used to teleport players in the cube from the waiting room after a death + public void teleportPlayerIn(L2PcInstance player) + { + int i = Rnd.get(_teleports.length); + doTeleport(player, _teleports[i][0], _teleports[i][1], _teleports[i][2]); + } + + @SuppressWarnings("synthetic-access") + private static class SingletonHolder + { + protected static final KrateisCubeManager _instance = new KrateisCubeManager(); + } +} \ No newline at end of file dp ### Eclipse Workspace Patch 1.0 #P L2JOfficial Index: data/tools/full_install.sql =================================================================== --- data/tools/full_install.sql (revision 1451) +++ data/tools/full_install.sql (working copy) @@ -71,6 +71,7 @@ DROP TABLE IF EXISTS items; DROP TABLE IF EXISTS itemsonground; DROP TABLE IF EXISTS kamaloka; +DROP TABLE IF EXISTS krateis_cube; DROP TABLE IF EXISTS locations; DROP TABLE IF EXISTS lvlupgain; DROP TABLE IF EXISTS mapregion; Index: data/sql/npc.sql =================================================================== --- data/sql/npc.sql (revision 1451) +++ data/sql/npc.sql (working copy) @@ -9580,6 +9580,10 @@ UPDATE `npc` SET `type`='L2Teleporter' WHERE (`id`='32534') LIMIT 1; UPDATE `npc` SET `type`='L2Teleporter' WHERE (`id`='32539') LIMIT 1; +-- Krateis Cube Update +UPDATE `npc` SET `type` = 'L2KrateisCubeManager' WHERE `id` = '32503' LIMIT 1; +UPDATE `npc` SET `type` = 'L2KrateisCubeManager' WHERE `id` = '32504' LIMIT 1; + -- Alegria Creation Day Celebration Helper UPDATE `npc` SET `collision_radius`='5', `collision_height`='21' WHERE `id`='32600'; Index: data/data/scripts.cfg =================================================================== --- data/data/scripts.cfg (revision 1451) +++ data/data/scripts.cfg (working copy) @@ -623,6 +623,12 @@ #instances/Hellbound/Town.py #teleports/1107_enter_hellbound_island/__init__.py + +# Krateis Cube +handlers/admincommandhandlers/AdminKrateisCube.java +ai/group_template/KrateisCubeMobs.py + + # Handlers # handlers/admincommandhandlers: Index: data/data/scripts/handlers/admincommandhandlers/AdminKrateisCube.java =================================================================== --- data/data/scripts/handlers/admincommandhandlers/AdminKrateisCube.java (revision 0) +++ data/data/scripts/handlers/admincommandhandlers/AdminKrateisCube.java (revision 0) @@ -0,0 +1,134 @@ +/* + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see <http://www.gnu.org/licenses/>. + */ +package handlers.admincommandhandlers; + +import java.util.StringTokenizer; + +import net.sf.l2j.gameserver.handler.model.AAdminCommandHandler; +import net.sf.l2j.gameserver.instancemanager.KrateisCubeManager; +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; + +/** + * @author Psycho(killer1888) + */ + +public class AdminKrateisCube extends AAdminCommandHandler +{ + private static int _kills = 0; + + private static final String[] ADMIN_COMMANDS = + { + "admin_start_krateis_cube", + "admin_stop_krateis_cube", + "admin_register_krateis_cube", + "admin_unregister_krateis_cube", + "admin_add_krateis_cube_kills", + "admin_remove_krateis_cube_kills", + "admin_get_krateis_cube_kills" + }; + + public boolean useAdminCommand(String command, L2PcInstance activeChar) + { + StringTokenizer st = new StringTokenizer(command, " "); + String cmd = st.nextToken(); + + if (cmd.equals("admin_start_krateis_cube")) + { + if (!KrateisCubeManager.getInstance().teleportToWaitRoom()) + activeChar.sendMessage("Not enough registered to start Krateis Cube."); + return true; + } + /*else if (cmd.equals("stop_krateis_cube")) + { + new finishCube(); + return true; + }*/ + + if (activeChar.getTarget() instanceof L2PcInstance) + { + L2PcInstance target; + target = (L2PcInstance) activeChar.getTarget(); + + if (cmd.equals("admin_register_krateis_cube")) + { + if (!KrateisCubeManager.getInstance().registerPlayer(target)) + activeChar.sendMessage("This player is already registered."); + else + { + if (target == activeChar) + activeChar.sendMessage("You have successfully registered for the next Krateis Cube match."); + else + target.sendMessage("An admin registered you for the next Krateis Cube match."); + } + } + else if (cmd.equals("admin_unregister_krateis_cube")) + { + if (!KrateisCubeManager.getInstance().removePlayer(target)) + activeChar.sendMessage("This player is not registered."); + else + { + target.sendMessage("An admin removed you from Krateis Cube playerlist."); + } + } + else if (cmd.equals("admin_add_krateis_cube_kills")) + { + try + { + _kills = Integer.parseInt(st.nextToken()); + } + catch (Exception e) + { + activeChar.sendMessage("Please specify the kills amount you want to add."); + } + + if (KrateisCubeManager.getInstance().addKills(target, _kills)) + { + target.sendMessage("An admin added " + _kills + " kills to your Krateis Cube kills."); + activeChar.sendMessage("Added " + _kills + " kills to the player."); + } + else + { + activeChar.sendMessage("This player does not exist in Krateis Cube playerlist."); + } + } + else if (cmd.equals("admin_get_krateis_cube_kills")) + { + if (!KrateisCubeManager.getInstance().isRegistered(target)) + activeChar.sendMessage("This player is not registered."); + else + { + _kills = KrateisCubeManager.getInstance().getKills(target); + activeChar.sendMessage("Player Krateis Cube kills: " + _kills + "."); + } + } + return true; + } + else + { + activeChar.sendMessage("Target must be a player!"); + return false; + } + } + + public String[] getAdminCommandList() + { + return ADMIN_COMMANDS; + } + + public static void main(String[] args) + { + new AdminKrateisCube(); + } +} Index: data/tools/database_installer.sh =================================================================== --- data/tools/database_installer.sh (revision 1451) +++ data/tools/database_installer.sh (working copy) @@ -334,6 +334,7 @@ $MYG < ../sql/items.sql &> /dev/null $MYG < ../sql/itemsonground.sql &> /dev/null $MYG < ../sql/kamaloka.sql &> /dev/null +$MYG < ../sql/krateis_cube.sql &> /dev/null $MYG < ../sql/locations.sql &> /dev/null $MYG < ../sql/lvlupgain.sql &> /dev/null $MYG < ../sql/mapregion.sql &> /dev/null Index: data/sql/krateis_cube.sql =================================================================== --- data/sql/krateis_cube.sql (revision 0) +++ data/sql/krateis_cube.sql (revision 0) @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS `krateis_cube` ( + `charId` int(10) NOT NULL, + `played_matchs` int(10) NOT NULL, + `total_kills` int(10) NOT NULL, + `total_coins` double(10,0) NOT NULL DEFAULT '0', + PRIMARY KEY (`charId`) +) DEFAULT CHARSET=utf8; \ No newline at end of file Index: data/data/scripts/ai/group_template/KrateisCubeMobs.py =================================================================== --- data/data/scripts/ai/group_template/KrateisCubeMobs.py (revision 0) +++ data/data/scripts/ai/group_template/KrateisCubeMobs.py (revision 0) @@ -0,0 +1,20 @@ +# By Psycho(killer1888) +import sys +from net.sf.l2j.gameserver.instancemanager import KrateisCubeManager +from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest + +class KrateisCubeMobs (JQuest) : + + def __init__(self,id,name,descr): + JQuest.__init__(self,id,name,descr) + + def onKill(self,npc,player,isPet): + KrateisCubeManager.getInstance().addKill(player) + return + +QUEST = KrateisCubeMobs(-1,"KrateisCubeMobs","ai") + +i = 18579 +while i <= 18602: + QUEST.addKillId(i) + i += 1 \ No newline at end of file Index: data/tools/database_installer.bat =================================================================== --- data/tools/database_installer.bat (revision 1451) +++ data/tools/database_installer.bat (working copy) @@ -582,6 +582,7 @@ items.sql itemsonground.sql kamaloka.sql +krateis_cube.sql locations.sql lvlupgain.sql mapregion.sql Index: data/data/html/krateisCube/32504.htm =================================================================== --- data/data/html/krateisCube/32504.htm (revision 0) +++ data/data/html/krateisCube/32504.htm (revision 0) @@ -0,0 +1,3 @@ +<html><body>Kratei's Cube Match Manager:<br> +<a action="bypass -h npc_%objectId%_TeleportIn">Teleport me inside again!</a> +</body></html> \ No newline at end of file Index: data/data/instances/krateisCube.xml =================================================================== --- data/data/instances/krateisCube.xml (revision 0) +++ data/data/instances/krateisCube.xml (revision 0) @@ -0,0 +1,220 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Psycho --> +<!-- Cube limit x+:-77304 x-:-86503 y+:-77208 y-:-86407 Room are 1199 square sided and have 2000 offset --> +<list> + <zone id="1" name="Kratei's Cube Room 1" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4468,2" removeExit="4468"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-77304" y="-86407"/> + <point x="-78503" y="-85208"/> + </shape> + </zone> + <zone id="2" name="Kratei's Cube Room 2" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4644,2" removeExit="4644"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-79304" y="-86407"/> + <point x="-80503" y="-85208"/> + </shape> + </zone> + <zone id="3" name="Kratei's Cube Room 3" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4145,3" removeExit="4145"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-81304" y="-86407"/> + <point x="-82503" y="-85208"/> + </shape> + </zone> + <zone id="4" name="Kratei's Cube Room 4" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4648,2" removeExit="4648"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-83304" y="-86407"/> + <point x="-84503" y="-85208"/> + </shape> + </zone> + <zone id="5" name="Kratei's Cube Room 5" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4646,2" removeExit="4646"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-85304" y="-86407"/> + <point x="-86503" y="-85208"/> + </shape> + </zone> + <zone id="6" name="Kratei's Cube Room 6" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4150,6" removeExit="4150"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-77304" y="-84407"/> + <point x="-78503" y="-83208"/> + </shape> + </zone> + <zone id="7" name="Kratei's Cube Room 7" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4648,2" removeExit="4648"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-79304" y="-84407"/> + <point x="-80503" y="-83208"/> + </shape> + </zone> + <zone id="8" name="Kratei's Cube Room 8" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4148,5" removeExit="4148"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-81304" y="-84407"/> + <point x="-82503" y="-83208"/> + </shape> + </zone> + <zone id="9" name="Kratei's Cube Room 9" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4150,6" removeExit="4150"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-83304" y="-84407"/> + <point x="-84503" y="-83208"/> + </shape> + </zone> + <zone id="10" name="Kratei's Cube Room 10" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4148,5" removeExit="4148"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-85304" y="-84407"/> + <point x="-86503" y="-83208"/> + </shape> + </zone> + <zone id="11" name="Kratei's Cube Room 11" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4145,3" removeExit="4145"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-77304" y="-82407"/> + <point x="-78503" y="-81208"/> + </shape> + </zone> + <zone id="12" name="Kratei's Cube Room 12" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4646,2" removeExit="4646"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-79304" y="-82407"/> + <point x="-80503" y="-81208"/> + </shape> + </zone> + <zone id="13" name="Kratei's Cube Room 13" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4149,5" removeExit="4149"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-81304" y="-82407"/> + <point x="-82503" y="-81208"/> + </shape> + </zone> + <zone id="14" name="Kratei's Cube Room 14" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4646,2" removeExit="4646"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-83304" y="-82407"/> + <point x="-84503" y="-81208"/> + </shape> + </zone> + <zone id="15" name="Kratei's Cube Room 15" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4625,5" removeExit="4625"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-85304" y="-82407"/> + <point x="-86503" y="-81208"/> + </shape> + </zone> + <zone id="16" name="Kratei's Cube Room 16" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4149,5" removeExit="4149"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-77304" y="-80407"/> + <point x="-78503" y="-79208"/> + </shape> + </zone> + <zone id="17" name="Kratei's Cube Room 17" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4468,2" removeExit="4468"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-79304" y="-80407"/> + <point x="-80503" y="-79208"/> + </shape> + </zone> + <zone id="18" name="Kratei's Cube Room 18" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4625,5" removeExit="4625"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-81304" y="-80407"/> + <point x="-82503" y="-79208"/> + </shape> + </zone> + <zone id="19" name="Kratei's Cube Room 19" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4644,2" removeExit="4644"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-83304" y="-80407"/> + <point x="-84503" y="-79208"/> + </shape> + </zone> + <zone id="20" name="Kratei's Cube Room 20" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4150,6" removeExit="4150"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-85304" y="-80407"/> + <point x="-86503" y="-79208"/> + </shape> + </zone> + <zone id="21" name="Kratei's Cube Room 21" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4698,6" removeExit="4698"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-77304" y="-78407"/> + <point x="-78503" y="-77208"/> + </shape> + </zone> + <zone id="22" name="Kratei's Cube Room 22" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4646,2" removeExit="4646"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-79304" y="-78407"/> + <point x="-80503" y="-77208"/> + </shape> + </zone> + <zone id="23" name="Kratei's Cube Room 23" type="Danger"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4148,5" removeExit="4148"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-81304" y="-78407"/> + <point x="-82503" y="-77208"/> + </shape> + </zone> + <zone id="24" name="Kratei's Cube Room 24" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4468,2" removeExit="4468"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-83304" y="-78407"/> + <point x="-84503" y="-77208"/> + </shape> + </zone> + <zone id="25" name="Kratei's Cube Room 25" type="Regeneration"> + <settings exitOnDeath="true" buffRepeat="true" affected="playable"/> + <skill applyEnter="4648,2" removeExit="4648"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-85304" y="-78407"/> + <point x="-86503" y="-77208"/> + </shape> + </zone> + <zone id="26" name="Kratei's Cube PvP Zone" type="Arena"> + <settings pvp="Arena"/> + <restart_owner x="-87028" y="-81780" z="-8361"/> + <shape type="Rect" zMin="-8400" zMax="-8000"> + <point x="-77200" y="-86600"/> + <point x="-86600" y="-77100"/> + </shape> + </zone> + <zone id="27" name="Kratei's Cube Waiting Zone"> + <settings pvp="Peace"/> + <shape type="Rect" zMin="-8500" zMax="-8000"> + <point x="-86611" y="-81287"/> + <point x="-87456" y="-82320"/> + </shape> + </zone> +</list> \ No newline at end of file credits: Psycho
Boorinio Posted August 4, 2014 Posted August 4, 2014 + public L2PcInstance findPlayer(int objectId) + { + L2Object obj = _allObjects.get(objectId); + + if (obj instanceof L2PcInstance) + return (L2PcInstance) obj; + + return null; + } + oh my god why????
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now