New mechanic: Jail + fixed mob book cover issues

Added new mechanic: jail. Fixed missing card info reference about
dropper mobs on the sql, reflecting into erros on the monster book.
This commit is contained in:
ronancpl
2017-05-20 19:58:24 -03:00
parent cb49edc3cd
commit 7fcdc07b5b
14 changed files with 494 additions and 261 deletions
+5
View File
@@ -230,3 +230,8 @@ Corre
18 - 19 Maio 2017, 18 - 19 Maio 2017,
Implementação das mecânicas do Horntail (spawn e kill). Implementação das mecânicas do Horntail (spawn e kill).
Correção de bugs em casos onde valores de EXP ganhos excedem o limite máximo de um inteiro de 32bits. Correção de bugs em casos onde valores de EXP ganhos excedem o limite máximo de um inteiro de 32bits.
20 Maio 2017,
Adição: mecânica de cadeia para GMs.
Em conjunto com vcoc, adicionaram-se comandos: !clearslot, !hide/unhide, !jail, !itemvac e !healmap.
Correção de bug em tabela SQL que continha informação imcompleta para com alguns registros de cards e respectivos mobs.
+4 -16
View File
@@ -3,24 +3,12 @@
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/> <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2"> <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group> <group>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/inventory/MaplePet.java</file> <file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/sql/tools/test_mobcarddrop.sql</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/partyquest/MonsterCarnival.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/command/Commands.java</file> <file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/command/Commands.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/world0/2013002.js</file> <file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/AbstractPlayerInteraction.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/constants/ServerConstants.java</file> <file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/event/EventInstanceManager.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/life/MapleMonster.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/tools/MaplePacketCreator.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/OrbisPQ.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/MapleServerHandler.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/LudiPQ.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/handlers/ScrollHandler.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/handlers/ItemRewardHandler.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/handlers/GeneralChatHandler.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/MapleInventoryManipulator.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/MapleCharacter.java</file> <file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/MapleCharacter.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapleMap.java</file> <file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/event/EventManager.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/handlers/PetLootHandler.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/handlers/ItemPickupHandler.java</file>
</group> </group>
</open-files> </open-files>
</project-private> </project-private>
+9
View File
@@ -0,0 +1,9 @@
/**
* @author: Ronan
* @event: Jail - visit to jail :3
*/
function enter(pi) {
pi.warp(300000012,0);
return(true);
}
+21
View File
@@ -0,0 +1,21 @@
/**
* @author: Ronan
* @event: Jail
*/
function enter(pi) {
var jailedTime = pi.getJailTimeLeft();
if(jailedTime <= 0) {
pi.warp(300000010,0);
return(true);
}
else {
var seconds = Math.floor(jailedTime / 1000) % 60 ;
var minutes = (Math.floor(jailedTime / (1000*60)) % 60);
var hours = (Math.floor(jailedTime / (1000*60*60)) % 24);
pi.playerMessage(5, "You have been caught in bad behaviour by the Maple POLICE. You've got to stay here for " + hours + " hours " + minutes + " minutes " + seconds + " seconds yet.");
return(false);
}
}
+1
View File
@@ -175,6 +175,7 @@ CREATE TABLE IF NOT EXISTS `characters` (
`dataString` varchar(64) NOT NULL DEFAULT '', `dataString` varchar(64) NOT NULL DEFAULT '',
`lastLogoutTime` timestamp NOT NULL DEFAULT '2015-01-01 05:00:00', `lastLogoutTime` timestamp NOT NULL DEFAULT '2015-01-01 05:00:00',
`pendantExp` tinyint(1) NOT NULL DEFAULT '0', `pendantExp` tinyint(1) NOT NULL DEFAULT '0',
`jailexpire` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `accountid` (`accountid`), KEY `accountid` (`accountid`),
KEY `party` (`party`), KEY `party` (`party`),
+19 -6
View File
@@ -19015,11 +19015,14 @@
(9500319, 1422011, 1, 1, 0, 4000), (9500319, 1422011, 1, 1, 0, 4000),
(9500319, 1432046, 1, 1, 0, 4000), (9500319, 1432046, 1, 1, 0, 4000),
(9500319, 1332030, 1, 1, 0, 4000), (9500319, 1332030, 1, 1, 0, 4000),
(9300188, 2388052, 1, 1, 0, 24000), (9300188, 2388052, 1, 1, 0, 8000),
(9300196, 2388008, 1, 1, 0, 24000), (9300196, 2388008, 1, 1, 0, 8000),
(9300204, 2388015, 1, 1, 0, 24000), (9300204, 2388015, 1, 1, 0, 8000),
(9300207, 2388052, 1, 1, 0, 24000), (9300201, 2388039, 1, 1, 0, 8000),
(9300209, 2388052, 1, 1, 0, 24000); (9300206, 2388032, 1, 1, 0, 8000),
(9300207, 2388054, 1, 1, 0, 8000),
(9300209, 2388053, 1, 1, 0, 8000),
(9300215, 2388046, 1, 1, 0, 8000);
# (dropperid, itemid, minqty, maxqty, questid, chance) # (dropperid, itemid, minqty, maxqty, questid, chance)
@@ -19204,4 +19207,14 @@
(9102006, 4001099, 3, -1), (9102006, 4001099, 3, -1),
(9102007, 4001100, 3, -1); (9102007, 4001100, 3, -1);
#global data already updated # updates info for all cards on monster book
DROP TABLE `monstercarddata`;
CREATE TABLE IF NOT EXISTS `monstercarddata` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cardid` int(11) NOT NULL DEFAULT '0',
`mobid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
INSERT INTO `monstercarddata` (`cardid`, `mobid`) (SELECT itemid, min(dropperid) FROM drop_data where itemid>=2380000 and itemid<2390000 group by itemid);
+24 -3
View File
@@ -200,7 +200,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
private int expRate = 1, mesoRate = 1, dropRate = 1; private int expRate = 1, mesoRate = 1, dropRate = 1;
private int omokwins, omokties, omoklosses, matchcardwins, matchcardties, matchcardlosses; private int omokwins, omokties, omoklosses, matchcardwins, matchcardties, matchcardlosses;
private int married; private int married;
private long dojoFinish, lastfametime, lastUsedCashItem, lastHealed, lastMesoDrop = -1; private long dojoFinish, lastfametime, lastUsedCashItem, lastHealed, lastMesoDrop = -1, jailExpiration = -1;
private transient int localmaxhp, localmaxmp, localstr, localdex, localluk, localint_, magic, watk; private transient int localmaxhp, localmaxmp, localstr, localdex, localluk, localint_, magic, watk;
private boolean hidden, canDoor = true, Berserk, hasMerchant, whiteChat = false; private boolean hidden, canDoor = true, Berserk, hasMerchant, whiteChat = false;
private int linkedLevel = 0; private int linkedLevel = 0;
@@ -3183,6 +3183,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
ret.face = rs.getInt("face"); ret.face = rs.getInt("face");
ret.accountid = rs.getInt("accountid"); ret.accountid = rs.getInt("accountid");
ret.mapid = rs.getInt("map"); ret.mapid = rs.getInt("map");
ret.jailExpiration = rs.getLong("jailexpire");
ret.initialSpawnPoint = rs.getInt("spawnpoint"); ret.initialSpawnPoint = rs.getInt("spawnpoint");
ret.world = rs.getByte("world"); ret.world = rs.getByte("world");
ret.rank = rs.getInt("rank"); ret.rank = rs.getInt("rank");
@@ -4154,7 +4155,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED); con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
con.setAutoCommit(false); con.setAutoCommit(false);
PreparedStatement ps; PreparedStatement ps;
ps = con.prepareStatement("UPDATE characters SET level = ?, fame = ?, str = ?, dex = ?, luk = ?, `int` = ?, exp = ?, gachaexp = ?, hp = ?, mp = ?, maxhp = ?, maxmp = ?, sp = ?, ap = ?, gm = ?, skincolor = ?, gender = ?, job = ?, hair = ?, face = ?, map = ?, meso = ?, hpMpUsed = ?, spawnpoint = ?, party = ?, buddyCapacity = ?, messengerid = ?, messengerposition = ?, mountlevel = ?, mountexp = ?, mounttiredness= ?, equipslots = ?, useslots = ?, setupslots = ?, etcslots = ?, monsterbookcover = ?, vanquisherStage = ?, dojoPoints = ?, lastDojoStage = ?, finishedDojoTutorial = ?, vanquisherKills = ?, matchcardwins = ?, matchcardlosses = ?, matchcardties = ?, omokwins = ?, omoklosses = ?, omokties = ?, dataString = ?, fquest = ? WHERE id = ?", Statement.RETURN_GENERATED_KEYS); ps = con.prepareStatement("UPDATE characters SET level = ?, fame = ?, str = ?, dex = ?, luk = ?, `int` = ?, exp = ?, gachaexp = ?, hp = ?, mp = ?, maxhp = ?, maxmp = ?, sp = ?, ap = ?, gm = ?, skincolor = ?, gender = ?, job = ?, hair = ?, face = ?, map = ?, meso = ?, hpMpUsed = ?, spawnpoint = ?, party = ?, buddyCapacity = ?, messengerid = ?, messengerposition = ?, mountlevel = ?, mountexp = ?, mounttiredness= ?, equipslots = ?, useslots = ?, setupslots = ?, etcslots = ?, monsterbookcover = ?, vanquisherStage = ?, dojoPoints = ?, lastDojoStage = ?, finishedDojoTutorial = ?, vanquisherKills = ?, matchcardwins = ?, matchcardlosses = ?, matchcardties = ?, omokwins = ?, omoklosses = ?, omokties = ?, dataString = ?, fquest = ?, jailexpire = ? WHERE id = ?", Statement.RETURN_GENERATED_KEYS);
if (gmLevel < 1 && level > 199) { if (gmLevel < 1 && level > 199) {
ps.setInt(1, isCygnus() ? 120 : 200); ps.setInt(1, isCygnus() ? 120 : 200);
} else { } else {
@@ -4248,7 +4249,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
ps.setInt(47, omokties); ps.setInt(47, omokties);
ps.setString(48, dataString); ps.setString(48, dataString);
ps.setInt(49, quest_fame); ps.setInt(49, quest_fame);
ps.setInt(50, id); ps.setLong(50, jailExpiration);
ps.setInt(51, id);
int updateRows = ps.executeUpdate(); int updateRows = ps.executeUpdate();
if (updateRows < 1) { if (updateRows < 1) {
@@ -5692,4 +5694,23 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
} }
return sp; return sp;
} }
public long getJailExpirationTimeLeft() {
return jailExpiration - System.currentTimeMillis();
}
private void setFutureJailExpiration(long time) {
jailExpiration = System.currentTimeMillis() + time;
}
public void addJailExpirationTime(long time) {
long timeLeft = getJailExpirationTimeLeft();
if(timeLeft <= 0) setFutureJailExpiration(time);
else setFutureJailExpiration(timeLeft + time);
}
public void removeJailExpirationTime() {
jailExpiration = 0;
}
} }
+220 -61
View File
@@ -336,7 +336,7 @@ public class Commands {
player.message("@debugpos: Displays the coordinates on the map the player is currently located."); player.message("@debugpos: Displays the coordinates on the map the player is currently located.");
player.message("@debugmap: Displays info about the current map the player is located."); player.message("@debugmap: Displays info about the current map the player is located.");
player.message("@debugevent: Displays the name of the event in which the player is currently registered."); player.message("@debugevent: Displays the name of the event in which the player is currently registered.");
player.message("@debugreactors: Displays current info for all reactors on the map the the player is currently located."); player.message("@debugreactors: Displays current info for all reactors on the map the player is currently located.");
} }
break; break;
case "time": case "time":
@@ -554,8 +554,6 @@ public class Commands {
break; break;
*/ */
case "joinevent": case "joinevent":
case "event":
case "join":
if(!FieldLimit.CHANGECHANNEL.check(player.getMap().getFieldLimit())) { if(!FieldLimit.CHANGECHANNEL.check(player.getMap().getFieldLimit())) {
MapleEvent event = c.getChannelServer().getEvent(); MapleEvent event = c.getChannelServer().getEvent();
if(event != null) { if(event != null) {
@@ -583,7 +581,6 @@ public class Commands {
} }
break; break;
case "leaveevent": case "leaveevent":
case "leave":
int returnMap = player.getSavedLocation("EVENT"); int returnMap = player.getSavedLocation("EVENT");
if(returnMap != -1) { if(returnMap != -1) {
if(player.getOla() != null) { if(player.getOla() != null) {
@@ -685,7 +682,27 @@ public class Commands {
MapleCharacter player = c.getPlayer(); MapleCharacter player = c.getPlayer();
Channel cserv = c.getChannelServer(); Channel cserv = c.getChannelServer();
Server srv = Server.getInstance(); Server srv = Server.getInstance();
if (sub[0].equals("ap")) {
if (sub[0].equals("sp")) {
if (sub.length < 2){
player.yellowMessage("Syntax: !sp [<playername>] <newsp>");
return true;
}
if (sub.length == 2) {
player.setRemainingSp(Integer.parseInt(sub[1]));
player.updateSingleStat(MapleStat.AVAILABLESP, player.getRemainingSp());
} else {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
victim.setRemainingSp(Integer.parseInt(sub[2]));
victim.updateSingleStat(MapleStat.AVAILABLESP, player.getRemainingSp());
}
} else if (sub[0].equals("ap")) {
if (sub.length < 2){
player.yellowMessage("Syntax: !ap [<playername>] <newap>");
return true;
}
if (sub.length < 3) { if (sub.length < 3) {
player.setRemainingAp(Integer.parseInt(sub[1])); player.setRemainingAp(Integer.parseInt(sub[1]));
player.updateSingleStat(MapleStat.AVAILABLEAP, player.getRemainingAp()); player.updateSingleStat(MapleStat.AVAILABLEAP, player.getRemainingAp());
@@ -702,7 +719,7 @@ public class Commands {
} else if (sub[0].equals("spawn")) { } else if (sub[0].equals("spawn")) {
if (sub.length < 2) { if (sub.length < 2) {
player.yellowMessage("Syntax: !spawn <mobid>"); player.yellowMessage("Syntax: !spawn <mobid>");
return false; return true;
} }
MapleMonster monster = MapleLifeFactory.getMonster(Integer.parseInt(sub[1])); MapleMonster monster = MapleLifeFactory.getMonster(Integer.parseInt(sub[1]));
@@ -756,7 +773,7 @@ public class Commands {
} else if (sub[0].equals("go")) { } else if (sub[0].equals("go")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !go <mapid>"); player.yellowMessage("Syntax: !go <mapid>");
return false; return true;
} }
if (gotomaps.containsKey(sub[1])) { if (gotomaps.containsKey(sub[1])) {
@@ -806,14 +823,14 @@ public class Commands {
} else if (sub[0].equals("warp")) { } else if (sub[0].equals("warp")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !warp <mapid>"); player.yellowMessage("Syntax: !warp <mapid>");
return false; return true;
} }
try { try {
MapleMap target = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(sub[1])); MapleMap target = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(sub[1]));
if (target == null) { if (target == null) {
player.yellowMessage("Map ID " + sub[1] + " is invalid."); player.yellowMessage("Map ID " + sub[1] + " is invalid.");
return false; return true;
} }
if (player.getEventInstance() != null) { if (player.getEventInstance() != null) {
player.getEventInstance().removePlayer(player); player.getEventInstance().removePlayer(player);
@@ -822,7 +839,7 @@ public class Commands {
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
player.yellowMessage("Map ID " + sub[1] + " is invalid."); player.yellowMessage("Map ID " + sub[1] + " is invalid.");
return false; return true;
} }
} else if (sub[0].equals("reloadmap")) { } else if (sub[0].equals("reloadmap")) {
MapleMap oldMap = c.getPlayer().getMap(); MapleMap oldMap = c.getPlayer().getMap();
@@ -838,7 +855,7 @@ public class Commands {
for (String s : songs){ for (String s : songs){
player.yellowMessage(s); player.yellowMessage(s);
} }
return false; return true;
} }
String song = joinStringFrom(sub, 1); String song = joinStringFrom(sub, 1);
for (String s : songs){ for (String s : songs){
@@ -855,12 +872,12 @@ public class Commands {
} else if (sub[0].equals("monitor")) { } else if (sub[0].equals("monitor")) {
if (sub.length < 1){ if (sub.length < 1){
player.yellowMessage("Syntax: !monitor <ign>"); player.yellowMessage("Syntax: !monitor <ign>");
return false; return true;
} }
MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]); MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim == null){ if (victim == null){
player.yellowMessage("Player not found!"); player.yellowMessage("Player not found!");
return false; return true;
} }
boolean monitored = MapleLogger.monitored.contains(victim.getName()); boolean monitored = MapleLogger.monitored.contains(victim.getName());
if (monitored){ if (monitored){
@@ -878,12 +895,12 @@ public class Commands {
} else if (sub[0].equals("ignore")) { } else if (sub[0].equals("ignore")) {
if (sub.length < 1){ if (sub.length < 1){
player.yellowMessage("Syntax: !ignore <ign>"); player.yellowMessage("Syntax: !ignore <ign>");
return false; return true;
} }
MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]); MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim == null){ if (victim == null){
player.yellowMessage("Player not found!"); player.yellowMessage("Player not found!");
return false; return true;
} }
boolean monitored = MapleLogger.ignored.contains(victim.getName()); boolean monitored = MapleLogger.ignored.contains(victim.getName());
if (monitored){ if (monitored){
@@ -907,7 +924,7 @@ public class Commands {
} else if (sub[0].equals("dc")) { } else if (sub[0].equals("dc")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !dc <playername>"); player.yellowMessage("Syntax: !dc <playername>");
return false; return true;
} }
MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]); MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
@@ -934,7 +951,7 @@ public class Commands {
} else if (sub[0].equals("exprate")) { } else if (sub[0].equals("exprate")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !exprate <newrate>"); player.yellowMessage("Syntax: !exprate <newrate>");
return false; return true;
} }
c.getWorldServer().setExpRate(Integer.parseInt(sub[1])); c.getWorldServer().setExpRate(Integer.parseInt(sub[1]));
} else if (sub[0].equals("chat")) { } else if (sub[0].equals("chat")) {
@@ -943,7 +960,7 @@ public class Commands {
} else if (sub[0].equals("warpto")) { } else if (sub[0].equals("warpto")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !warpto <mapid>"); player.yellowMessage("Syntax: !warpto <mapid>");
return false; return true;
} }
MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]); MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
@@ -981,7 +998,7 @@ public class Commands {
} else if (sub[0].equals("warphere")) { } else if (sub[0].equals("warphere")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !warphere <playername>"); player.yellowMessage("Syntax: !warphere <playername>");
return false; return true;
} }
MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]); MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
@@ -1018,7 +1035,7 @@ public class Commands {
} else if (sub[0].equals("fame")) { } else if (sub[0].equals("fame")) {
if (sub.length < 3){ if (sub.length < 3){
player.yellowMessage("Syntax: !fame <playername> <gainfame>"); player.yellowMessage("Syntax: !fame <playername> <gainfame>");
return false; return true;
} }
MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]); MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
@@ -1027,7 +1044,7 @@ public class Commands {
} else if (sub[0].equals("giftnx")) { } else if (sub[0].equals("giftnx")) {
if (sub.length < 3){ if (sub.length < 3){
player.yellowMessage("Syntax: !giftnx <playername> <gainnx>"); player.yellowMessage("Syntax: !giftnx <playername> <gainnx>");
return false; return true;
} }
cserv.getPlayerStorage().getCharacterByName(sub[1]).getCashShop().gainCash(1, Integer.parseInt(sub[2])); cserv.getPlayerStorage().getCharacterByName(sub[1]).getCashShop().gainCash(1, Integer.parseInt(sub[2]));
player.message("Done"); player.message("Done");
@@ -1038,13 +1055,13 @@ public class Commands {
} else if (sub[0].equals("vp")) { } else if (sub[0].equals("vp")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !vp <gainvotepoint>"); player.yellowMessage("Syntax: !vp <gainvotepoint>");
return false; return true;
} }
c.addVotePoints(Integer.parseInt(sub[1])); c.addVotePoints(Integer.parseInt(sub[1]));
} else if (sub[0].equals("id")) { } else if (sub[0].equals("id")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !id <id>"); player.yellowMessage("Syntax: !id <id>");
return false; return true;
} }
try { try {
try (BufferedReader dis = new BufferedReader(new InputStreamReader(new URL("http://www.mapletip.com/search_java.php?search_value=" + sub[1] + "&check=true").openConnection().getInputStream()))) { try (BufferedReader dis = new BufferedReader(new InputStreamReader(new URL("http://www.mapletip.com/search_java.php?search_value=" + sub[1] + "&check=true").openConnection().getInputStream()))) {
@@ -1059,7 +1076,7 @@ public class Commands {
} else if (sub[0].equals("item") || sub[0].equals("drop")) { } else if (sub[0].equals("item") || sub[0].equals("drop")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !item <itemid> <quantity>"); player.yellowMessage("Syntax: !item <itemid> <quantity>");
return false; return true;
} }
int itemId = Integer.parseInt(sub[1]); int itemId = Integer.parseInt(sub[1]);
@@ -1110,7 +1127,7 @@ public class Commands {
} else if (sub[0].equals("kill")) { } else if (sub[0].equals("kill")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !kill <playername>"); player.yellowMessage("Syntax: !kill <playername>");
return false; return true;
} }
MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]); MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
@@ -1119,7 +1136,7 @@ public class Commands {
} else if (sub[0].equals("seed")) { } else if (sub[0].equals("seed")) {
if (player.getMapId() != 910010000) { if (player.getMapId() != 910010000) {
player.yellowMessage("This command can only be used in HPQ."); player.yellowMessage("This command can only be used in HPQ.");
return false; return true;
} }
Point pos[] = {new Point(7, -207), new Point(179, -447), new Point(-3, -687), new Point(-357, -687), new Point(-538, -447), new Point(-359, -207)}; Point pos[] = {new Point(7, -207), new Point(179, -447), new Point(-3, -687), new Point(-357, -687), new Point(-538, -447), new Point(-359, -207)};
int seed[] = {4001097, 4001096, 4001095, 4001100, 4001099, 4001098}; int seed[] = {4001097, 4001096, 4001095, 4001100, 4001099, 4001098};
@@ -1154,7 +1171,7 @@ public class Commands {
} else if (sub[0].equals("level")) { } else if (sub[0].equals("level")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !level <newlevel>"); player.yellowMessage("Syntax: !level <newlevel>");
return false; return true;
} }
player.setLevel(Integer.parseInt(sub[1]) - 1); player.setLevel(Integer.parseInt(sub[1]) - 1);
@@ -1163,7 +1180,7 @@ public class Commands {
} else if (sub[0].equals("levelpro")) { } else if (sub[0].equals("levelpro")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !levelpro <newlevel>"); player.yellowMessage("Syntax: !levelpro <newlevel>");
return false; return true;
} }
while (player.getLevel() < Math.min(255, Integer.parseInt(sub[1]))) { while (player.getLevel() < Math.min(255, Integer.parseInt(sub[1]))) {
@@ -1206,7 +1223,7 @@ public class Commands {
} else if (sub[0].equals("openportal")) { } else if (sub[0].equals("openportal")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !openportal <portalid>"); player.yellowMessage("Syntax: !openportal <portalid>");
return false; return true;
} }
player.getMap().getPortal(sub[1]).setPortalState(true); player.getMap().getPortal(sub[1]).setPortalState(true);
} else if (sub[0].equals("pe")) { } else if (sub[0].equals("pe")) {
@@ -1220,7 +1237,7 @@ public class Commands {
} catch (IOException ex) { } catch (IOException ex) {
ex.printStackTrace(); ex.printStackTrace();
player.yellowMessage("Failed to load pe.txt"); player.yellowMessage("Failed to load pe.txt");
return false; return true;
} }
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.write(HexTool.getByteArrayFromHexString(packet)); mplew.write(HexTool.getByteArrayFromHexString(packet));
@@ -1229,25 +1246,20 @@ public class Commands {
final MaplePacketHandler packetHandler = PacketProcessor.getProcessor(0, c.getChannel()).getHandler(packetId); final MaplePacketHandler packetHandler = PacketProcessor.getProcessor(0, c.getChannel()).getHandler(packetId);
if (packetHandler != null && packetHandler.validateState(c)) { if (packetHandler != null && packetHandler.validateState(c)) {
try { try {
player.yellowMessage("Recieving: " + packet); player.yellowMessage("Receiving: " + packet);
packetHandler.handlePacket(slea, c); packetHandler.handlePacket(slea, c);
} catch (final Throwable t) { } catch (final Throwable t) {
FilePrinter.printError(FilePrinter.PACKET_HANDLER + packetHandler.getClass().getName() + ".txt", t, "Error for " + (c.getPlayer() == null ? "" : "player ; " + c.getPlayer() + " on map ; " + c.getPlayer().getMapId() + " - ") + "account ; " + c.getAccountName() + "\r\n" + slea.toString()); FilePrinter.printError(FilePrinter.PACKET_HANDLER + packetHandler.getClass().getName() + ".txt", t, "Error for " + (c.getPlayer() == null ? "" : "player ; " + c.getPlayer() + " on map ; " + c.getPlayer().getMapId() + " - ") + "account ; " + c.getAccountName() + "\r\n" + slea.toString());
return false; return true;
} }
} }
} else if (sub[0].equals("closeportal")) { } else if (sub[0].equals("closeportal")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !closeportal <portalid>"); player.yellowMessage("Syntax: !closeportal <portalid>");
return false; return true;
} }
player.getMap().getPortal(sub[1]).setPortalState(false); player.getMap().getPortal(sub[1]).setPortalState(false);
} else if (sub[0].equals("startevent")) { } else if (sub[0].equals("startevent")) {
for (MapleCharacter chr : player.getMap().getCharacters()) {
player.getMap().startEvent(chr);
}
c.getChannelServer().setEvent(null);
} else if (sub[0].equals("scheduleevent")) {
int players = 50; int players = 50;
if(sub.length > 1) if(sub.length > 1)
players = Integer.parseInt(sub[1]); players = Integer.parseInt(sub[1]);
@@ -1278,7 +1290,7 @@ public class Commands {
} else if (sub[0].equalsIgnoreCase("search")) { } else if (sub[0].equalsIgnoreCase("search")) {
if (sub.length < 3){ if (sub.length < 3){
player.yellowMessage("Syntax: !search <type> <name>"); player.yellowMessage("Syntax: !search <type> <name>");
return false; return true;
} }
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
@@ -1347,7 +1359,7 @@ public class Commands {
} else if (sub[0].equals("unban")) { } else if (sub[0].equals("unban")) {
if (sub.length < 2){ if (sub.length < 2){
player.yellowMessage("Syntax: !unban <playername>"); player.yellowMessage("Syntax: !unban <playername>");
return false; return true;
} }
try { try {
@@ -1371,7 +1383,7 @@ public class Commands {
} else if (sub[0].equals("ban")) { } else if (sub[0].equals("ban")) {
if (sub.length < 3) { if (sub.length < 3) {
player.yellowMessage("Syntax: !ban <IGN> <Reason> (Please be descriptive)"); player.yellowMessage("Syntax: !ban <IGN> <Reason> (Please be descriptive)");
return false; return true;
} }
String ign = sub[1]; String ign = sub[1];
String reason = joinStringFrom(sub, 2); String reason = joinStringFrom(sub, 2);
@@ -1416,6 +1428,159 @@ public class Commands {
} else { } else {
c.announce(MaplePacketCreator.getGMEffect(6, (byte) 1)); c.announce(MaplePacketCreator.getGMEffect(6, (byte) 1));
} }
} else if (sub[0].equals("jail")) {
if (sub.length < 2) {
player.yellowMessage("Syntax: !jail <playername> [<minutes>]");
return true;
}
int minutesJailed = 5;
if(sub.length >= 3) {
minutesJailed = Integer.valueOf(sub[2]);
if(minutesJailed <= 0) {
player.yellowMessage("Syntax: !jail <playername> [<minutes>]");
return true;
}
}
MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
victim.addJailExpirationTime(minutesJailed * 60 * 1000);
int mapid = 300000012;
if(victim.getMapId() != mapid) { // those gone to jail won't be changing map anyway
MapleMap target = cserv.getMapFactory().getMap(mapid);
MaplePortal targetPortal = target.getPortal(0);
victim.changeMap(target, targetPortal);
player.dropMessage(victim.getName() + " was jailed for " + minutesJailed + " minutes.");
}
else {
player.dropMessage(victim.getName() + "'s time in jail has been extended for " + minutesJailed + " minutes.");
}
} else {
player.dropMessage(sub[1] + " not found on this channel! Make sure your target is logged on and on the same channel as yours.");
}
} else if (sub[0].equals("unjail")) {
if (sub.length < 2) {
player.yellowMessage("Syntax: !unjail <playername>");
return true;
}
MapleCharacter victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
if(victim.getJailExpirationTimeLeft() <= 0) {
player.dropMessage("This player is already free.");
return true;
}
victim.removeJailExpirationTime();
victim.dropMessage("By lack of concrete proof you are now unjailed. Enjoy freedom!");
player.dropMessage(victim.getName() + " was unjailed.");
} else {
player.dropMessage(sub[1] + " not found on this channel! Make sure your target is logged on and on the same channel as yours.");
}
} else if (sub[0].equals("clearslot")) {
if (sub.length < 2) {
player.yellowMessage("Syntax: !clearslot <all, equip, use, setup, etc or cash.>");
return true;
}
String type = sub[1];
if (type.equals("all")) {
for (int i = 0; i < 101; i++) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((byte) i);
if (tempItem == null)
continue;
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.EQUIP, (byte) i, tempItem.getQuantity(), false, true);
}
for (int i = 0; i < 101; i++) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.USE).getItem((byte) i);
if (tempItem == null)
continue;
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (byte) i, tempItem.getQuantity(), false, true);
}
for (int i = 0; i < 101; i++) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.ETC).getItem((byte) i);
if (tempItem == null)
continue;
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.ETC, (byte) i, tempItem.getQuantity(), false, true);
}
for (int i = 0; i < 101; i++) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.SETUP).getItem((byte) i);
if (tempItem == null)
continue;
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.SETUP, (byte) i, tempItem.getQuantity(), false, true);
}
for (int i = 0; i < 101; i++) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.CASH).getItem((byte) i);
if (tempItem == null)
continue;
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, (byte) i, tempItem.getQuantity(), false, true);
}
player.yellowMessage("All Slots Cleared.");
}
else if (type.equals("equip")) {
for (int i = 0; i < 101; i++) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((byte) i);
if (tempItem == null)
continue;
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.EQUIP, (byte) i, tempItem.getQuantity(), false, true);
}
player.yellowMessage("Equipment Slot Cleared.");
}
else if (type.equals("use")) {
for (int i = 0; i < 101; i++) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.USE).getItem((byte) i);
if (tempItem == null)
continue;
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, (byte) i, tempItem.getQuantity(), false, true);
}
player.yellowMessage("Use Slot Cleared.");
}
else if (type.equals("setup")) {
for (int i = 0; i < 101; i++) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.SETUP).getItem((byte) i);
if (tempItem == null)
continue;
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.SETUP, (byte) i, tempItem.getQuantity(), false, true);
}
player.yellowMessage("Set-Up Slot Cleared.");
}
else if (type.equals("etc")) {
for (int i = 0; i < 101; i++) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.ETC).getItem((byte) i);
if (tempItem == null)
continue;
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.ETC, (byte) i, tempItem.getQuantity(), false, true);
}
player.yellowMessage("ETC Slot Cleared.");
}
else if (type.equals("cash")) {
for (int i = 0; i < 101; i++) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.CASH).getItem((byte) i);
if (tempItem == null)
continue;
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, (byte) i, tempItem.getQuantity(), false, true);
}
player.yellowMessage("Cash Slot Cleared.");
}
else player.yellowMessage("Slot" + type + " does not exist!");
} else if (sub[0].equals("hide")) {
SkillFactory.getSkill(9101004).getEffect(SkillFactory.getSkill(9101004).getMaxLevel()).applyTo(player);
} else if (sub[0].equals("unhide")) {
SkillFactory.getSkill(9101004).getEffect(SkillFactory.getSkill(9101004).getMaxLevel()).applyTo(player);
} else if (sub[0].equals("healmap")) {
for (MapleCharacter mch : player.getMap().getCharacters()) {
if (mch != null) {
mch.setHp(mch.getMaxHp());
mch.updateSingleStat(MapleStat.HP, mch.getMaxHp());
mch.setMp(mch.getMaxMp());
mch.updateSingleStat(MapleStat.MP, mch.getMaxMp());
}
}
} else if (sub[0].equalsIgnoreCase("night")) { } else if (sub[0].equalsIgnoreCase("night")) {
player.getMap().broadcastNightEffect(); player.getMap().broadcastNightEffect();
player.yellowMessage("Done."); player.yellowMessage("Done.");
@@ -1446,22 +1611,6 @@ public class Commands {
player.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8820001), player.getPosition()); player.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8820001), player.getPosition());
break; break;
case "sp": //Changed to support giving sp /a
if (sub.length < 2){
player.yellowMessage("Syntax: !sp <newsp>");
return;
}
if (sub.length == 2) {
player.setRemainingSp(Integer.parseInt(sub[1]));
player.updateSingleStat(MapleStat.AVAILABLESP, player.getRemainingSp());
} else {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
victim.setRemainingSp(Integer.parseInt(sub[2]));
victim.updateSingleStat(MapleStat.AVAILABLESP, player.getRemainingSp());
}
break;
case "packet": case "packet":
player.getMap().broadcastMessage(MaplePacketCreator.customPacket(joinStringFrom(sub, 1))); player.getMap().broadcastMessage(MaplePacketCreator.customPacket(joinStringFrom(sub, 1)));
break; break;
@@ -1617,18 +1766,28 @@ public class Commands {
player.equipChanged(); player.equipChanged();
} }
break; break;
case "itemvac": case "itemvac":
List<MapleMapObject> items = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM)); List<MapleMapObject> items = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM));
for (MapleMapObject item : items) { for (MapleMapObject item : items) {
MapleMapItem mapitem = (MapleMapItem) item; MapleMapItem mapItem = (MapleMapItem) item;
if (!MapleInventoryManipulator.addFromDrop(c, mapitem.getItem(), true)) { if (mapItem.getMeso() > 0) {
player.gainMeso(mapItem.getMeso(), true);
} else if (mapItem.getItem().getItemId() >= 5000000 && mapItem.getItem().getItemId() <= 5000100) {
int petId = MaplePet.createPet(mapItem.getItem().getItemId());
if (petId == -1) {
continue; continue;
} }
mapitem.setPickedUp(true); MapleInventoryManipulator.addById(c, mapItem.getItem().getItemId(), mapItem.getItem().getQuantity(), null, petId);
player.getMap().broadcastMessage(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 2, player.getId()), mapitem.getPosition()); } else {
MapleInventoryManipulator.addFromDrop(c, mapItem.getItem(), true);
}
mapItem.setPickedUp(true);
player.getMap().removeMapObject(item); player.getMap().removeMapObject(item);
player.getMap().broadcastMessage(MaplePacketCreator.removeItemFromMap(mapItem.getObjectId(), 2, player.getId()), mapItem.getPosition());
} }
break; break;
case "clearquestcache": case "clearquestcache":
MapleQuest.clearCache(); MapleQuest.clearCache();
player.dropMessage(5, "Quest Cache Cleared."); player.dropMessage(5, "Quest Cache Cleared.");
@@ -829,4 +829,8 @@ public class AbstractPlayerInteraction {
} }
return null; return null;
} }
public long getJailTimeLeft() {
return getPlayer().getJailExpirationTimeLeft();
}
} }
+6 -4
View File
@@ -95,11 +95,13 @@ public class EventManager {
private List<Integer> getLobbyRange() { private List<Integer> getLobbyRange() {
try { try {
return convertToIntegerArray((List<Double>)iv.invokeFunction("setLobbyRange", (Object) null)); return convertToIntegerArray((List<Double>)iv.invokeFunction("setLobbyRange", (Object) null));
} catch (ScriptException | NoSuchMethodException ex) { } catch (ScriptException | NoSuchMethodException ex) { // they didn't define a lobby range
ex.printStackTrace(); List<Integer> defaultList = new ArrayList<>();
} defaultList.add(0);
defaultList.add(maxLobbys);
return new ArrayList<>(); return defaultList;
}
} }
public void schedule(String methodName, long delay) { public void schedule(String methodName, long delay) {
+3
View File
@@ -0,0 +1,3 @@
guild npc
PQs
scrolls for weather resistance
+1 -1
View File
@@ -1032,7 +1032,7 @@
<int name="y" value="238"/> <int name="y" value="238"/>
<int name="tm" value="999999999"/> <int name="tm" value="999999999"/>
<string name="tn" value=""/> <string name="tn" value=""/>
<string name="script" value="cellar"/> <string name="script" value="jail_in"/>
</imgdir> </imgdir>
</imgdir> </imgdir>
</imgdir> </imgdir>
+159 -152
View File
@@ -1,261 +1,280 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<imgdir name="300000012.img"> <imgdir name="300000012.img">
<imgdir name="info"> <imgdir name="info">
<int name="version" value="10"/>
<int name="cloud" value="0"/>
<int name="town" value="1"/>
<int name="swim" value="0"/>
<int name="returnMap" value="300000010"/>
<int name="forcedReturn" value="300000010"/>
<float name="mobRate" value="1.0"/>
<string name="bgm" value="Bgm15/ElinForest"/> <string name="bgm" value="Bgm15/ElinForest"/>
<string name="mapMark" value="EilnForest"/> <int name="cloud" value="0"/>
<int name="swim" value="0"/>
<int name="forcedReturn" value="999999999"/>
<int name="hideMinimap" value="0"/> <int name="hideMinimap" value="0"/>
<int name="fieldLimit" value="8958"/> <string name="mapMark" value="EilnForest"/>
<int name="VRTop" value="-357"/> <float name="mobRate" value="1.0"/>
<int name="returnMap" value="300000010"/>
<int name="town" value="1"/>
<int name="version" value="10"/>
<int name="fieldLimit" value="140024"/>
<int name="VRLeft" value="-359"/> <int name="VRLeft" value="-359"/>
<int name="VRBottom" value="239"/>
<int name="VRRight" value="439"/> <int name="VRRight" value="439"/>
</imgdir> <int name="VRTop" value="-357"/>
<imgdir name="back"> <int name="VRBottom" value="239"/>
<imgdir name="0">
<string name="bS" value="ancientForest"/>
<int name="front" value="0"/>
<int name="ani" value="0"/>
<int name="no" value="0"/>
<int name="f" value="0"/>
<int name="x" value="0"/>
<int name="y" value="0"/>
<int name="rx" value="0"/>
<int name="ry" value="0"/>
<int name="type" value="3"/>
<int name="cx" value="0"/>
<int name="cy" value="0"/>
<int name="a" value="255"/>
</imgdir>
</imgdir>
<imgdir name="life">
</imgdir>
<imgdir name="reactor">
</imgdir> </imgdir>
<imgdir name="0"> <imgdir name="0">
<imgdir name="info"> <imgdir name="info">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
<imgdir name="obj"> <imgdir name="obj">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
</imgdir> </imgdir>
<imgdir name="1"> <imgdir name="1">
<imgdir name="info"> <imgdir name="info">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
<imgdir name="obj"> <imgdir name="obj">
<imgdir name="0"> <imgdir name="0">
<int name="x" value="241"/>
<int name="y" value="91"/>
<int name="z" value="9"/>
<int name="zM" value="0"/>
<string name="oS" value="insideEL"/> <string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/> <string name="l0" value="undergroundroom"/>
<string name="l1" value="wall"/> <string name="l1" value="wall"/>
<string name="l2" value="0"/> <string name="l2" value="0"/>
<int name="r" value="0"/>
<int name="f" value="0"/>
</imgdir>
<imgdir name="1">
<int name="x" value="241"/> <int name="x" value="241"/>
<int name="y" value="91"/> <int name="y" value="91"/>
<int name="z" value="9"/> <int name="z" value="9"/>
<int name="f" value="0"/> <int name="zM" value="1"/>
<int name="zM" value="0"/>
<int name="r" value="0"/>
</imgdir>
<imgdir name="1">
<string name="oS" value="insideEL"/> <string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/> <string name="l0" value="undergroundroom"/>
<string name="l1" value="wall"/> <string name="l1" value="wall"/>
<string name="l2" value="1"/> <string name="l2" value="1"/>
<int name="x" value="241"/>
<int name="y" value="91"/>
<int name="z" value="9"/>
<int name="f" value="0"/>
<int name="zM" value="1"/>
<int name="r" value="0"/> <int name="r" value="0"/>
<int name="f" value="0"/>
</imgdir> </imgdir>
<imgdir name="2"> <imgdir name="2">
<int name="x" value="-159"/>
<int name="y" value="-209"/>
<int name="z" value="9"/>
<int name="zM" value="0"/>
<string name="oS" value="insideEL"/> <string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/> <string name="l0" value="undergroundroom"/>
<string name="l1" value="wall"/> <string name="l1" value="wall"/>
<string name="l2" value="2"/> <string name="l2" value="2"/>
<int name="x" value="-159"/>
<int name="y" value="-209"/>
<int name="z" value="9"/>
<int name="f" value="0"/>
<int name="zM" value="0"/>
<int name="r" value="0"/> <int name="r" value="0"/>
<int name="f" value="0"/>
</imgdir> </imgdir>
<imgdir name="3"> <imgdir name="3">
<int name="x" value="241"/>
<int name="y" value="-209"/>
<int name="z" value="9"/>
<int name="zM" value="0"/>
<string name="oS" value="insideEL"/> <string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/> <string name="l0" value="undergroundroom"/>
<string name="l1" value="wall"/> <string name="l1" value="wall"/>
<string name="l2" value="3"/> <string name="l2" value="3"/>
<int name="x" value="241"/>
<int name="y" value="-209"/>
<int name="z" value="9"/>
<int name="f" value="0"/>
<int name="zM" value="0"/>
<int name="r" value="0"/> <int name="r" value="0"/>
<int name="f" value="0"/>
</imgdir> </imgdir>
<imgdir name="4"> <imgdir name="4">
<int name="x" value="64"/>
<int name="y" value="-62"/>
<int name="z" value="10"/>
<int name="zM" value="0"/>
<string name="oS" value="insideEL"/> <string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/> <string name="l0" value="undergroundroom"/>
<string name="l1" value="wall"/> <string name="l1" value="wall"/>
<string name="l2" value="4"/> <string name="l2" value="4"/>
<int name="x" value="64"/>
<int name="y" value="-62"/>
<int name="z" value="10"/>
<int name="f" value="0"/>
<int name="zM" value="0"/>
<int name="r" value="0"/> <int name="r" value="0"/>
<int name="f" value="0"/>
</imgdir> </imgdir>
<imgdir name="5"> <imgdir name="5">
<int name="x" value="36"/>
<int name="y" value="98"/>
<int name="z" value="11"/>
<int name="zM" value="0"/>
<string name="oS" value="insideEL"/> <string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/> <string name="l0" value="undergroundroom"/>
<string name="l1" value="wall"/> <string name="l1" value="wall"/>
<string name="l2" value="5"/> <string name="l2" value="5"/>
<int name="x" value="36"/>
<int name="y" value="98"/>
<int name="z" value="11"/>
<int name="f" value="0"/>
<int name="zM" value="0"/>
<int name="r" value="0"/> <int name="r" value="0"/>
<int name="f" value="0"/>
</imgdir> </imgdir>
<imgdir name="6"> <imgdir name="6">
<int name="x" value="-301"/>
<int name="y" value="102"/>
<int name="z" value="10"/>
<int name="zM" value="0"/>
<string name="oS" value="insideEL"/> <string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/> <string name="l0" value="undergroundroom"/>
<string name="l1" value="acc"/> <string name="l1" value="acc"/>
<string name="l2" value="0"/> <string name="l2" value="0"/>
<int name="x" value="-301"/>
<int name="y" value="102"/>
<int name="z" value="10"/>
<int name="f" value="0"/>
<int name="zM" value="0"/>
<int name="r" value="0"/> <int name="r" value="0"/>
<int name="f" value="0"/>
</imgdir> </imgdir>
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
</imgdir> </imgdir>
<imgdir name="2"> <imgdir name="2">
<imgdir name="info"> <imgdir name="info">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
<imgdir name="obj"> <imgdir name="obj">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
</imgdir> </imgdir>
<imgdir name="3"> <imgdir name="3">
<imgdir name="info"> <imgdir name="info">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
<imgdir name="obj"> <imgdir name="obj">
<imgdir name="0"> <imgdir name="0">
<string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/>
<string name="l2" value="0"/>
<int name="x" value="-227"/> <int name="x" value="-227"/>
<int name="y" value="-276"/> <int name="y" value="-276"/>
<int name="z" value="9"/> <int name="z" value="9"/>
<int name="f" value="0"/>
<int name="zM" value="0"/> <int name="zM" value="0"/>
<int name="r" value="0"/>
</imgdir>
<imgdir name="1">
<string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/>
<string name="l2" value="1"/>
<int name="x" value="-324"/>
<int name="y" value="-40"/>
<int name="z" value="9"/>
<int name="f" value="0"/>
<int name="zM" value="0"/>
<int name="r" value="0"/>
</imgdir>
<imgdir name="2">
<string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/>
<string name="l2" value="2"/>
<int name="x" value="27"/>
<int name="y" value="100"/>
<int name="z" value="9"/>
<int name="f" value="0"/>
<int name="zM" value="0"/>
<int name="r" value="0"/>
</imgdir>
<imgdir name="3">
<string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/>
<string name="l2" value="2"/>
<int name="x" value="55"/>
<int name="y" value="99"/>
<int name="z" value="9"/>
<int name="f" value="1"/>
<int name="zM" value="0"/>
<int name="r" value="0"/>
</imgdir>
<imgdir name="4">
<string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/>
<string name="l2" value="1"/>
<int name="x" value="406"/>
<int name="y" value="-41"/>
<int name="z" value="9"/>
<int name="f" value="1"/>
<int name="zM" value="0"/>
<int name="r" value="0"/>
</imgdir>
<imgdir name="5">
<string name="oS" value="insideEL"/> <string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/> <string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/> <string name="l1" value="frame"/>
<string name="l2" value="0"/> <string name="l2" value="0"/>
<int name="r" value="0"/>
<int name="f" value="0"/>
</imgdir>
<imgdir name="1">
<int name="x" value="-324"/>
<int name="y" value="-40"/>
<int name="z" value="9"/>
<int name="zM" value="0"/>
<string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/>
<string name="l2" value="1"/>
<int name="r" value="0"/>
<int name="f" value="0"/>
</imgdir>
<imgdir name="2">
<int name="x" value="27"/>
<int name="y" value="100"/>
<int name="z" value="9"/>
<int name="zM" value="0"/>
<string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/>
<string name="l2" value="2"/>
<int name="r" value="0"/>
<int name="f" value="0"/>
</imgdir>
<imgdir name="3">
<int name="x" value="55"/>
<int name="y" value="99"/>
<int name="z" value="9"/>
<int name="zM" value="0"/>
<string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/>
<string name="l2" value="2"/>
<int name="r" value="0"/>
<int name="f" value="1"/>
</imgdir>
<imgdir name="4">
<int name="x" value="406"/>
<int name="y" value="-41"/>
<int name="z" value="9"/>
<int name="zM" value="0"/>
<string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/>
<string name="l2" value="1"/>
<int name="r" value="0"/>
<int name="f" value="1"/>
</imgdir>
<imgdir name="5">
<int name="x" value="309"/> <int name="x" value="309"/>
<int name="y" value="-276"/> <int name="y" value="-276"/>
<int name="z" value="9"/> <int name="z" value="9"/>
<int name="f" value="1"/>
<int name="zM" value="0"/> <int name="zM" value="0"/>
<string name="oS" value="insideEL"/>
<string name="l0" value="undergroundroom"/>
<string name="l1" value="frame"/>
<string name="l2" value="0"/>
<int name="r" value="0"/> <int name="r" value="0"/>
<int name="f" value="1"/>
</imgdir> </imgdir>
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
</imgdir> </imgdir>
<imgdir name="4"> <imgdir name="4">
<imgdir name="info"> <imgdir name="info">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
<imgdir name="obj"> <imgdir name="obj">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
</imgdir> </imgdir>
<imgdir name="5"> <imgdir name="5">
<imgdir name="info"> <imgdir name="info">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
<imgdir name="obj"> <imgdir name="obj">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
</imgdir> </imgdir>
<imgdir name="6"> <imgdir name="6">
<imgdir name="info"> <imgdir name="info">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
<imgdir name="obj"> <imgdir name="obj">
</imgdir> </imgdir>
<imgdir name="tile">
</imgdir>
</imgdir> </imgdir>
<imgdir name="7"> <imgdir name="7">
<imgdir name="info"> <imgdir name="info">
</imgdir> </imgdir>
<imgdir name="obj">
</imgdir>
<imgdir name="tile"> <imgdir name="tile">
</imgdir> </imgdir>
<imgdir name="obj"> </imgdir>
<imgdir name="ladderRope">
</imgdir>
<imgdir name="portal">
<imgdir name="0">
<int name="x" value="194"/>
<int name="y" value="19"/>
<int name="pt" value="0"/>
<int name="tm" value="999999999"/>
<string name="tn" value=""/>
<string name="pn" value="sp"/>
</imgdir>
<imgdir name="1">
<int name="x" value="-306"/>
<int name="y" value="97"/>
<int name="pt" value="8"/>
<int name="tm" value="999999999"/>
<string name="tn" value=""/>
<string name="pn" value="portal"/>
<string name="script" value="jail_out"/>
</imgdir>
</imgdir>
<imgdir name="reactor">
</imgdir>
<imgdir name="back">
<imgdir name="0">
<int name="x" value="0"/>
<int name="y" value="0"/>
<int name="rx" value="0"/>
<int name="ry" value="0"/>
<int name="cx" value="0"/>
<int name="cy" value="0"/>
<int name="a" value="255"/>
<int name="type" value="3"/>
<int name="front" value="0"/>
<int name="f" value="0"/>
<string name="bS" value="ancientForest"/>
<int name="ani" value="0"/>
<int name="no" value="0"/>
</imgdir> </imgdir>
</imgdir> </imgdir>
<imgdir name="foothold"> <imgdir name="foothold">
@@ -269,8 +288,6 @@
<int name="prev" value="0"/> <int name="prev" value="0"/>
<int name="next" value="2"/> <int name="next" value="2"/>
</imgdir> </imgdir>
</imgdir>
<imgdir name="1">
<imgdir name="2"> <imgdir name="2">
<int name="x1" value="49"/> <int name="x1" value="49"/>
<int name="y1" value="98"/> <int name="y1" value="98"/>
@@ -282,16 +299,6 @@
</imgdir> </imgdir>
</imgdir> </imgdir>
</imgdir> </imgdir>
<imgdir name="ladderRope"> <imgdir name="life">
</imgdir>
<imgdir name="portal">
<imgdir name="0">
<string name="pn" value="sp"/>
<int name="pt" value="0"/>
<int name="x" value="194"/>
<int name="y" value="19"/>
<int name="tm" value="999999999"/>
<string name="tn" value=""/>
</imgdir>
</imgdir> </imgdir>
</imgdir> </imgdir>