Jump to content

Recommended Posts

Posted

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

 

 

Posted

 

+ public L2PcInstance findPlayer(int objectId)
+ {
+ L2Object obj = _allObjects.get(objectId);
+ 
+ if (obj instanceof L2PcInstance)
+ return (L2PcInstance) obj;
+ 
+ return null;
+ }

+

 

oh my god why????

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Posts

    • never met a programmer that doesnt know english xD and as he said his knowledge and skills are beyond our imagination xD
    • nice work, welcome back to world of lineage development @melron 😄
    • He's likely baiting you to download his source full of backdoors indeed
    • Yeah inside router i had to enable udnp services 
    • Hello cheaters, As a team of avid developers and enthusiasts of Lineage 2, we are excited to present the L2 Control Hub, a groundbreaking plugin designed by myself and my collaborator, StinkyMadness. This innovative tool equips server administrators with powerful automation capabilities directly within the game's community board. L2 Control Hub simplifies the creation and management of automations, enabling you to customize your server operations without the need to modify the source code.   Key Features of L2 Control Hub: Robust Automation Triggers: Select from a plethora of triggers currently available, with continuous additions in the works to enhance your control options. Dynamic Conditions and Actions: Tailor your server operations with an extensive range of conditions and actions, ensuring flexible and precise control over game events and player interactions. Customizable Variables: Easily integrate server-specific variables from your database to further personalize and streamline your automations. Utilize these variables across various automation scenarios to cater to your specific server requirements. JavaScript Integration: Execute custom JavaScript codes that interact seamlessly with Java classes, bringing advanced functionalities to your server's ecosystem.   Explore L2 Control Hub in Action: We've prepared a series of video tutorials to demonstrate the capabilities of L2 Control Hub: Control Hub - Create a Simple Flow with 1 Condition and 1 Action: Get started with basic automations. Control Hub - Multiple Conditions with Multiple Actions: Explore more complex automations for detailed server management. Control Hub - Using Variables: Discover how to implement and use custom variables for tailored automations. Control Hub - Using JavaScript: Experience the power of custom scripts in enhancing your server functionality.   L2 Control Hub is currently about 70% complete, and we are actively developing and refining features. We invite you to join our ➡️ Discord community ⬅️ to engage with the development process, provide feedback, and be the first to test new features. Additionally, any updates or changes to the plugin are seamlessly delivered to all customers directly from our web server, ensuring your system is always up-to-date without the need for manual downloads.   Your game, your rules, automated. Join us in redefining server management in Lineage 2 and elevate your gaming community with unmatched automation capabilities. For more details, contact us directly to get started with L2 Control Hub.   Currently, the plugin is developed using aCis sources. We will continue with these sources until we finalize all the necessary details before proceeding to integrate with the more prominent sources available.       The L2 Control Hub is designed to extend beyond mere functional additions to your server. We are in the process of implementing a suite of advanced mechanisms, such as a vote manager capable of interfacing with any Lineage 2 voting site without requiring configuration, live statistics to provide admins with real-time insights, and an event engine that can generate any desired event within seconds. All these features will be seamlessly integrated into the module, enhancing your server management experience significantly.     Please note that L2 Control Hub will be a premium tool, reflecting the extensive features and benefits it offers. While we are finalizing the pricing structure, rest assured that we aim to deliver great value for your investment. We will announce the cost details soon on our platforms to ensure everyone is well-informed and can plan accordingly. Join us to take your server management to the next level with L2 Control Hub.     
  • Topics

×
×
  • Create New...