use of client.inventory.Item in project HeavenMS by ronancpl.
the class AbstractPlayerInteraction method canHoldAll.
private boolean canHoldAll(List<Integer> itemids, List<Integer> quantity, boolean isInteger) {
int size = Math.min(itemids.size(), quantity.size());
List<Pair<Item, MapleInventoryType>> addedItems = new LinkedList<>();
for (int i = 0; i < size; i++) {
Item it = new Item(itemids.get(i), (short) 0, quantity.get(i).shortValue());
addedItems.add(new Pair<>(it, ItemConstants.getInventoryType(itemids.get(i))));
}
return MapleInventory.checkSpots(c.getPlayer(), addedItems);
}
use of client.inventory.Item in project HeavenMS by ronancpl.
the class AbstractPlayerInteraction method evolvePet.
public Item evolvePet(byte slot, int afterId) {
MaplePet evolved = null;
MaplePet target;
// refreshes expiration date: 90 days
long period = 90 * 24 * 60 * 60 * 1000;
target = getPlayer().getPet(slot);
if (target == null) {
getPlayer().message("Pet could not be evolved...");
return (null);
}
Item tmp = gainItem(afterId, (short) 1, false, true, period, target);
getPlayer().unequipPet(target, true, false);
/*
evolved = MaplePet.loadFromDb(tmp.getItemId(), tmp.getPosition(), tmp.getPetId());
evolved = tmp.getPet();
if(evolved == null) {
getPlayer().message("Pet structure non-existent for " + tmp.getItemId() + "...");
return(null);
}
else if(tmp.getPetId() == -1) {
getPlayer().message("Pet id -1");
return(null);
}
getPlayer().addPet(evolved);
getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.showPet(c.getPlayer(), evolved, false, false), true);
c.announce(MaplePacketCreator.petStatUpdate(c.getPlayer()));
c.announce(MaplePacketCreator.enableActions());
chr.getClient().getWorldServer().registerPetHunger(chr, chr.getPetIndex(evolved));
*/
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, target.getPosition(), (short) 1, false);
return evolved;
}
use of client.inventory.Item in project HeavenMS by ronancpl.
the class AbstractPlayerInteraction method removeEquipFromSlot.
public void removeEquipFromSlot(short slot) {
Item tempItem = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem(slot);
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.EQUIPPED, slot, tempItem.getQuantity(), false, false);
}
use of client.inventory.Item in project HeavenMS by ronancpl.
the class Commands method executeHeavenMsCommandLv2.
public static boolean executeHeavenMsCommandLv2(Channel cserv, Server srv, MapleClient c, String[] sub) {
// JrGM
MapleCharacter player = c.getPlayer();
MapleCharacter victim;
Skill skill;
switch(sub[0]) {
case "hide":
SkillFactory.getSkill(9101004).getEffect(SkillFactory.getSkill(9101004).getMaxLevel()).applyTo(player);
break;
case "unhide":
SkillFactory.getSkill(9101004).getEffect(SkillFactory.getSkill(9101004).getMaxLevel()).applyTo(player);
break;
case "sp":
if (sub.length < 2) {
player.yellowMessage("Syntax: !sp [<playername>] <newsp>");
break;
}
if (sub.length == 2) {
int newSp = Integer.parseInt(sub[1]);
if (newSp < 0)
newSp = 0;
else if (newSp > ServerConstants.MAX_AP)
newSp = ServerConstants.MAX_AP;
player.setRemainingSp(newSp);
player.updateSingleStat(MapleStat.AVAILABLESP, player.getRemainingSp());
} else {
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
int newSp = Integer.parseInt(sub[2]);
if (newSp < 0)
newSp = 0;
else if (newSp > ServerConstants.MAX_AP)
newSp = ServerConstants.MAX_AP;
victim.setRemainingSp(newSp);
victim.updateSingleStat(MapleStat.AVAILABLESP, player.getRemainingSp());
player.dropMessage(5, "SP given.");
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
}
break;
case "ap":
if (sub.length < 2) {
player.yellowMessage("Syntax: !ap [<playername>] <newap>");
break;
}
if (sub.length < 3) {
int newAp = Integer.parseInt(sub[1]);
if (newAp < 0)
newAp = 0;
else if (newAp > ServerConstants.MAX_AP)
newAp = ServerConstants.MAX_AP;
player.setRemainingAp(newAp);
player.updateSingleStat(MapleStat.AVAILABLEAP, player.getRemainingAp());
} else {
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
int newAp = Integer.parseInt(sub[2]);
if (newAp < 0)
newAp = 0;
else if (newAp > ServerConstants.MAX_AP)
newAp = ServerConstants.MAX_AP;
victim.setRemainingAp(newAp);
victim.updateSingleStat(MapleStat.AVAILABLEAP, victim.getRemainingAp());
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
}
break;
case "empowerme":
final int[] array = { 2311003, 2301004, 1301007, 4101004, 2001002, 1101007, 1005, 2301003, 5121009, 1111002, 4111001, 4111002, 4211003, 4211005, 1321000, 2321004, 3121002 };
for (int i : array) {
SkillFactory.getSkill(i).getEffect(SkillFactory.getSkill(i).getMaxLevel()).applyTo(player);
}
break;
case "buffmap":
SkillFactory.getSkill(9101001).getEffect(SkillFactory.getSkill(9101001).getMaxLevel()).applyTo(player, true);
SkillFactory.getSkill(9101002).getEffect(SkillFactory.getSkill(9101002).getMaxLevel()).applyTo(player, true);
SkillFactory.getSkill(9101003).getEffect(SkillFactory.getSkill(9101003).getMaxLevel()).applyTo(player, true);
SkillFactory.getSkill(9101008).getEffect(SkillFactory.getSkill(9101008).getMaxLevel()).applyTo(player, true);
SkillFactory.getSkill(1005).getEffect(SkillFactory.getSkill(1005).getMaxLevel()).applyTo(player, true);
break;
case "buff":
if (sub.length < 2) {
player.yellowMessage("Syntax: !buff <buffid>");
break;
}
int skillid = Integer.parseInt(sub[1]);
skill = SkillFactory.getSkill(skillid);
if (skill != null)
skill.getEffect(skill.getMaxLevel()).applyTo(player);
break;
case "bomb":
if (sub.length > 1) {
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
victim.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300166), victim.getPosition());
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, player.getName() + " used !bomb on " + victim.getName()));
} else {
player.message("Player '" + sub[1] + "' could not be found on this world.");
}
} else {
player.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300166), player.getPosition());
}
break;
case "dc":
if (sub.length < 2) {
player.yellowMessage("Syntax: !dc <playername>");
break;
}
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim == null) {
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim == null) {
victim = player.getMap().getCharacterByName(sub[1]);
if (victim != null) {
try {
// sometimes bugged because the map = null
victim.getClient().disconnect(true, false);
player.getMap().removePlayer(victim);
} catch (Exception e) {
e.printStackTrace();
}
} else {
break;
}
}
}
if (player.gmLevel() < victim.gmLevel()) {
victim = player;
}
victim.getClient().disconnect(false, false);
break;
case "cleardrops":
player.getMap().clearDrops(player);
player.dropMessage(5, "Cleared dropped items");
break;
case "clearslot":
if (sub.length < 2) {
player.yellowMessage("Syntax: !clearslot <all, equip, use, setup, etc or cash.>");
break;
}
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!");
break;
case "warp":
if (sub.length < 2) {
player.yellowMessage("Syntax: !warp <mapid>");
break;
}
try {
MapleMap target = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(sub[1]));
if (target == null) {
player.yellowMessage("Map ID " + sub[1] + " is invalid.");
break;
}
if (player.getEventInstance() != null) {
player.getEventInstance().leftParty(player);
}
player.changeMap(target, target.getRandomPlayerSpawnpoint());
} catch (Exception ex) {
player.yellowMessage("Map ID " + sub[1] + " is invalid.");
break;
}
break;
case "warpto":
if (sub.length < 3) {
player.yellowMessage("Syntax: !warpto <playername> <mapid>");
break;
}
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if (victim == null) {
// If victim isn't on current channel or isnt a character try and find him by loop all channels on current world.
for (Channel ch : srv.getChannelsFromWorld(c.getWorld())) {
victim = ch.getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
// We found the person, no need to continue the loop.
break;
}
}
}
if (victim != null) {
// Remove warper from current event instance.
if (player.getEventInstance() != null) {
player.getEventInstance().unregisterPlayer(player);
}
// Attempt to join the victims warp instance.
if (victim.getEventInstance() != null) {
if (victim.getClient().getChannel() == player.getClient().getChannel()) {
// just in case.. you never know...
// victim.getEventInstance().registerPlayer(player);
player.changeMap(victim.getEventInstance().getMapInstance(victim.getMapId()), victim.getMap().findClosestPortal(victim.getPosition()));
} else {
player.dropMessage(6, "Please change to channel " + victim.getClient().getChannel());
}
} else {
// If victim isn't in an event instance, just warp them.
player.changeMap(victim.getMapId(), victim.getMap().findClosestPortal(victim.getPosition()));
}
if (player.getClient().getChannel() != victim.getClient().getChannel()) {
// And then change channel if needed.
player.dropMessage("Changing channel, please wait a moment.");
player.getClient().changeChannel(victim.getClient().getChannel());
}
} else {
player.dropMessage(6, "Unknown player.");
}
break;
case "warphere":
case "summon":
if (sub.length < 2) {
player.yellowMessage("Syntax: !warphere <playername>");
break;
}
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if (victim == null) {
// If victim isn't on current channel, loop all channels on current world.
for (Channel ch : srv.getChannelsFromWorld(c.getWorld())) {
victim = ch.getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
// We found the person, no need to continue the loop.
break;
}
}
}
if (victim != null) {
boolean changingEvent = true;
if (victim.getEventInstance() != null) {
if (player.getEventInstance() != null && victim.getEventInstance().getLeaderId() == player.getEventInstance().getLeaderId()) {
changingEvent = false;
} else {
victim.getEventInstance().unregisterPlayer(victim);
}
}
// Attempt to join the warpers instance.
if (player.getEventInstance() != null && changingEvent) {
if (player.getClient().getChannel() == victim.getClient().getChannel()) {
// just in case.. you never know...
player.getEventInstance().registerPlayer(victim);
victim.changeMap(player.getEventInstance().getMapInstance(player.getMapId()), player.getMap().findClosestPortal(player.getPosition()));
} else {
player.dropMessage("Target isn't on your channel, not able to warp into event instance.");
}
} else {
// If victim isn't in an event instance or is in the same event instance as the one the caller is, just warp them.
victim.changeMap(player.getMapId(), player.getMap().findClosestPortal(player.getPosition()));
}
if (player.getClient().getChannel() != victim.getClient().getChannel()) {
// And then change channel if needed.
victim.dropMessage("Changing channel, please wait a moment.");
victim.getClient().changeChannel(player.getClient().getChannel());
}
} else {
player.dropMessage(6, "Unknown player.");
}
break;
case "reach":
if (sub.length < 2) {
player.yellowMessage("Syntax: !reach <playername>");
break;
}
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null && victim.isLoggedin()) {
if (player.getClient().getChannel() != victim.getClient().getChannel()) {
player.dropMessage(5, "Player '" + victim.getName() + "' is at channel " + victim.getClient().getChannel() + ".");
} else {
MapleMap map = victim.getMap();
player.changeMap(map, map.findClosestPortal(victim.getPosition()));
}
} else {
player.dropMessage(6, "Unknown player.");
}
break;
case "gmshop":
MapleShopFactory.getInstance().getShop(1337).sendShop(c);
break;
case "heal":
player.setHpMp(30000);
break;
case "item":
case "drop":
if (sub.length < 2) {
player.yellowMessage("Syntax: !item <itemid> <quantity>");
break;
}
int itemId = Integer.parseInt(sub[1]);
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
if (ii.getName(itemId) == null) {
player.yellowMessage("Item id '" + sub[1] + "' does not exist.");
break;
}
short quantity = 1;
if (sub.length >= 3)
quantity = Short.parseShort(sub[2]);
if (ServerConstants.BLOCK_GENERATE_CASH_ITEM && ii.isCash(itemId)) {
player.yellowMessage("You cannot create a cash item with this command.");
break;
}
if (ItemConstants.isPet(itemId)) {
if (sub.length >= 3) {
// thanks to istreety & TacoBell
quantity = 1;
long days = Math.max(1, Integer.parseInt(sub[2]));
long expiration = System.currentTimeMillis() + (days * 24 * 60 * 60 * 1000);
int petid = MaplePet.createPet(itemId);
if (sub[0].equals("item")) {
MapleInventoryManipulator.addById(c, itemId, quantity, player.getName(), petid, expiration);
} else {
Item toDrop = new Item(itemId, (short) 0, quantity, petid);
toDrop.setExpiration(expiration);
toDrop.setOwner("");
if (player.gmLevel() < 3) {
byte b = toDrop.getFlag();
b |= ItemConstants.ACCOUNT_SHARING;
b |= ItemConstants.UNTRADEABLE;
toDrop.setFlag(b);
}
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), toDrop, c.getPlayer().getPosition(), true, true);
}
break;
} else {
player.yellowMessage("Pet Syntax: !item <itemid> <expiration>");
break;
}
}
if (sub[0].equals("item")) {
byte flag = 0;
if (player.gmLevel() < 3) {
flag |= ItemConstants.ACCOUNT_SHARING;
flag |= ItemConstants.UNTRADEABLE;
}
MapleInventoryManipulator.addById(c, itemId, quantity, player.getName(), -1, flag, -1);
} else {
Item toDrop;
if (ItemConstants.getInventoryType(itemId) == MapleInventoryType.EQUIP) {
toDrop = ii.getEquipById(itemId);
} else {
toDrop = new Item(itemId, (short) 0, quantity);
}
toDrop.setOwner(player.getName());
if (player.gmLevel() < 3) {
byte b = toDrop.getFlag();
b |= ItemConstants.ACCOUNT_SHARING;
b |= ItemConstants.UNTRADEABLE;
toDrop.setFlag(b);
}
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), toDrop, c.getPlayer().getPosition(), true, true);
}
break;
case "level":
if (sub.length < 2) {
player.yellowMessage("Syntax: !level <newlevel>");
break;
}
player.loseExp(player.getExp(), false, false);
player.setLevel(Math.min(Integer.parseInt(sub[1]), player.getMaxClassLevel()) - 1);
player.resetPlayerRates();
if (ServerConstants.USE_ADD_RATES_BY_LEVEL == true)
player.setPlayerRates();
player.setWorldRates();
player.levelUp(false);
break;
case "levelpro":
if (sub.length < 2) {
player.yellowMessage("Syntax: !levelpro <newlevel>");
break;
}
while (player.getLevel() < Math.min(player.getMaxClassLevel(), Integer.parseInt(sub[1]))) {
player.levelUp(false);
}
break;
case "setstat":
if (sub.length < 2) {
player.yellowMessage("Syntax: !setstat <newstat>");
break;
}
int x;
try {
x = Integer.parseInt(sub[1]);
if (x > Short.MAX_VALUE)
x = Short.MAX_VALUE;
else if (x < 0)
x = 0;
player.setStr(x);
player.setDex(x);
player.setInt(x);
player.setLuk(x);
player.updateSingleStat(MapleStat.STR, x);
player.updateSingleStat(MapleStat.DEX, x);
player.updateSingleStat(MapleStat.INT, x);
player.updateSingleStat(MapleStat.LUK, x);
} catch (NumberFormatException nfe) {
}
break;
case "maxstat":
final String[] s = { "setstat", String.valueOf(Short.MAX_VALUE) };
executeHeavenMsCommandLv2(cserv, srv, c, s);
player.loseExp(player.getExp(), false, false);
player.setLevel(255);
player.resetPlayerRates();
if (ServerConstants.USE_ADD_RATES_BY_LEVEL == true)
player.setPlayerRates();
player.setWorldRates();
player.setFame(13337);
player.setMaxHp(30000);
player.setMaxMp(30000);
player.updateSingleStat(MapleStat.LEVEL, 255);
player.updateSingleStat(MapleStat.FAME, 13337);
player.updateSingleStat(MapleStat.MAXHP, 30000);
player.updateSingleStat(MapleStat.MAXMP, 30000);
player.yellowMessage("Stats maxed out.");
break;
case "maxskill":
for (MapleData skill_ : MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/" + "String.wz")).getData("Skill.img").getChildren()) {
try {
skill = SkillFactory.getSkill(Integer.parseInt(skill_.getName()));
player.changeSkillLevel(skill, (byte) skill.getMaxLevel(), skill.getMaxLevel(), -1);
} catch (NumberFormatException nfe) {
nfe.printStackTrace();
break;
} catch (NullPointerException npe) {
continue;
}
}
if (player.getJob().isA(MapleJob.ARAN1) || player.getJob().isA(MapleJob.LEGEND)) {
skill = SkillFactory.getSkill(5001005);
player.changeSkillLevel(skill, (byte) -1, -1, -1);
} else {
skill = SkillFactory.getSkill(21001001);
player.changeSkillLevel(skill, (byte) -1, -1, -1);
}
player.yellowMessage("Skills maxed out.");
break;
case "mesos":
if (sub.length >= 2) {
player.gainMeso(Integer.parseInt(sub[1]), true);
}
break;
case "search":
if (sub.length < 3) {
player.yellowMessage("Syntax: !search <type> <name>");
break;
}
StringBuilder sb = new StringBuilder();
String search = joinStringFrom(sub, 2);
// for the lulz
long start = System.currentTimeMillis();
MapleData data = null;
MapleDataProvider dataProvider = MapleDataProviderFactory.getDataProvider(new File("wz/String.wz"));
if (!sub[1].equalsIgnoreCase("ITEM")) {
if (sub[1].equalsIgnoreCase("NPC")) {
data = dataProvider.getData("Npc.img");
} else if (sub[1].equalsIgnoreCase("MOB") || sub[1].equalsIgnoreCase("MONSTER")) {
data = dataProvider.getData("Mob.img");
} else if (sub[1].equalsIgnoreCase("SKILL")) {
data = dataProvider.getData("Skill.img");
/*} else if (sub[1].equalsIgnoreCase("MAP")) {
TODO
*/
} else {
sb.append("#bInvalid search.\r\nSyntax: '!search [type] [name]', where [type] is NPC, ITEM, MOB, or SKILL.");
}
if (data != null) {
String name;
for (MapleData searchData : data.getChildren()) {
name = MapleDataTool.getString(searchData.getChildByPath("name"), "NO-NAME");
if (name.toLowerCase().contains(search.toLowerCase())) {
sb.append("#b").append(Integer.parseInt(searchData.getName())).append("#k - #r").append(name).append("\r\n");
}
}
}
} else {
for (Pair<Integer, String> itemPair : MapleItemInformationProvider.getInstance().getAllItems()) {
if (sb.length() < 32654) {
// ohlol
if (itemPair.getRight().toLowerCase().contains(search.toLowerCase())) {
// #v").append(id).append("# #k-
sb.append("#b").append(itemPair.getLeft()).append("#k - #r").append(itemPair.getRight()).append("\r\n");
}
} else {
sb.append("#bCouldn't load all items, there are too many results.\r\n");
break;
}
}
}
if (sb.length() == 0) {
sb.append("#bNo ").append(sub[1].toLowerCase()).append("s found.\r\n");
}
// because I can, and it's free
sb.append("\r\n#kLoaded within ").append((double) (System.currentTimeMillis() - start) / 1000).append(" seconds.");
c.announce(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, sb.toString(), "00 00", (byte) 0));
break;
case "jail":
if (sub.length < 2) {
player.yellowMessage("Syntax: !jail <playername> [<minutes>]");
break;
}
int minutesJailed = 5;
if (sub.length >= 3) {
minutesJailed = Integer.valueOf(sub[2]);
if (minutesJailed <= 0) {
player.yellowMessage("Syntax: !jail <playername> [<minutes>]");
break;
}
}
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.message(victim.getName() + " was jailed for " + minutesJailed + " minutes.");
} else {
player.message(victim.getName() + "'s time in jail has been extended for " + minutesJailed + " minutes.");
}
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
break;
case "unjail":
if (sub.length < 2) {
player.yellowMessage("Syntax: !unjail <playername>");
break;
}
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
if (victim.getJailExpirationTimeLeft() <= 0) {
player.message("This player is already free.");
break;
}
victim.removeJailExpirationTime();
victim.message("By lack of concrete proof you are now unjailed. Enjoy freedom!");
player.message(victim.getName() + " was unjailed.");
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
break;
case "job":
if (sub.length == 2) {
int jobid = Integer.parseInt(sub[1]);
if (jobid < 0 || jobid >= 2200) {
player.message("Jobid " + jobid + " is not available.");
break;
}
player.changeJob(MapleJob.getById(jobid));
player.equipChanged();
} else if (sub.length == 3) {
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
int jobid = Integer.parseInt(sub[2]);
if (jobid < 0 || jobid >= 2200) {
player.message("Jobid " + jobid + " is not available.");
break;
}
victim.changeJob(MapleJob.getById(jobid));
player.equipChanged();
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
} else {
player.message("Syntax: !job <job id> <opt: IGN of another person>");
}
break;
case "unbug":
c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.enableActions());
break;
default:
return false;
}
return true;
}
use of client.inventory.Item in project HeavenMS by ronancpl.
the class Commands method executeHeavenMsCommandLv3.
public static boolean executeHeavenMsCommandLv3(Channel cserv, Server srv, MapleClient c, String[] sub) {
// GM
MapleCharacter player = c.getPlayer();
MapleCharacter victim;
switch(sub[0]) {
case "fly":
if (sub.length < 2) {
player.yellowMessage("Syntax: !fly <on/off>");
break;
}
Integer accid = c.getAccID();
String sendStr = "";
if (sub[1].equalsIgnoreCase("on")) {
sendStr += "Enabled Fly feature (F1). With fly active, you cannot attack.";
if (!srv.canFly(accid))
sendStr += " Re-login to take effect.";
srv.changeFly(c.getAccID(), true);
} else {
sendStr += "Disabled Fly feature. You can now attack.";
if (srv.canFly(accid))
sendStr += " Re-login to take effect.";
srv.changeFly(c.getAccID(), false);
}
player.dropMessage(6, sendStr);
break;
case "spawn":
if (sub.length < 2) {
player.yellowMessage("Syntax: !spawn <mobid>");
break;
}
MapleMonster monster = MapleLifeFactory.getMonster(Integer.parseInt(sub[1]));
if (monster == null) {
break;
}
if (sub.length > 2) {
for (int i = 0; i < Integer.parseInt(sub[2]); i++) {
player.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(Integer.parseInt(sub[1])), player.getPosition());
}
} else {
player.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(Integer.parseInt(sub[1])), player.getPosition());
}
break;
case "mutemap":
if (player.getMap().isMuted()) {
player.getMap().setMuted(false);
player.dropMessage(5, "The map you are in has been un-muted.");
} else {
player.getMap().setMuted(true);
player.dropMessage(5, "The map you are in has been muted.");
}
break;
case "checkdmg":
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
int maxBase = victim.calculateMaxBaseDamage(victim.getTotalWatk());
Integer watkBuff = victim.getBuffedValue(MapleBuffStat.WATK);
Integer matkBuff = victim.getBuffedValue(MapleBuffStat.MATK);
Integer blessing = victim.getSkillLevel(10000000 * player.getJobType() + 12);
if (watkBuff == null)
watkBuff = 0;
if (matkBuff == null)
matkBuff = 0;
player.dropMessage(5, "Cur Str: " + victim.getTotalStr() + " Cur Dex: " + victim.getTotalDex() + " Cur Int: " + victim.getTotalInt() + " Cur Luk: " + victim.getTotalLuk());
player.dropMessage(5, "Cur WATK: " + victim.getTotalWatk() + " Cur MATK: " + victim.getTotalMagic());
player.dropMessage(5, "Cur WATK Buff: " + watkBuff + " Cur MATK Buff: " + matkBuff + " Cur Blessing Level: " + blessing);
player.dropMessage(5, victim.getName() + "'s maximum base damage (before skills) is " + maxBase);
} else {
player.message("Player '" + sub[1] + "' could not be found on this world.");
}
break;
case "inmap":
String st = "";
for (MapleCharacter chr : player.getMap().getCharacters()) {
st += chr.getName() + " ";
}
player.message(st);
break;
case "reloadevents":
for (Channel ch : Server.getInstance().getAllChannels()) {
ch.reloadEventScriptManager();
}
player.dropMessage(5, "Reloaded Events");
break;
case "reloaddrops":
MapleMonsterInformationProvider.getInstance().clearDrops();
player.dropMessage(5, "Reloaded Drops");
break;
case "reloadportals":
PortalScriptManager.getInstance().reloadPortalScripts();
player.dropMessage(5, "Reloaded Portals");
break;
case "reloadmap":
MapleMap oldMap = c.getPlayer().getMap();
MapleMap newMap = c.getChannelServer().getMapFactory().resetMap(player.getMapId());
int callerid = c.getPlayer().getId();
for (MapleCharacter chr : oldMap.getCharacters()) {
chr.changeMap(newMap);
if (chr.getId() != callerid)
chr.dropMessage("You have been relocated due to map reloading. Sorry for the inconvenience.");
}
newMap.respawn();
break;
case "hpmp":
victim = player;
int statUpdate = 1;
if (sub.length >= 3) {
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
statUpdate = Integer.valueOf(sub[2]);
} else if (sub.length == 2) {
statUpdate = Integer.valueOf(sub[1]);
} else {
player.yellowMessage("Syntax: !sethpmp [<playername>] <value>");
}
if (victim != null) {
victim.setHp(statUpdate);
victim.setMp(statUpdate);
victim.updateSingleStat(MapleStat.HP, statUpdate);
victim.updateSingleStat(MapleStat.MP, statUpdate);
victim.checkBerserk(victim.isHidden());
} else {
player.message("Player '" + sub[1] + "' could not be found on this world.");
}
break;
case "music":
if (sub.length < 2) {
player.yellowMessage("Syntax: !music <song>");
for (String s : songs) {
player.yellowMessage(s);
}
break;
}
String song = joinStringFrom(sub, 1);
for (String s : songs) {
if (s.equals(song)) {
player.getMap().broadcastMessage(MaplePacketCreator.musicChange(s));
player.yellowMessage("Now playing song " + song + ".");
break;
}
}
player.yellowMessage("Song not found, please enter a song below.");
for (String s : songs) {
player.yellowMessage(s);
}
break;
case "monitor":
if (sub.length < 1) {
player.yellowMessage("Syntax: !monitor <ign>");
break;
}
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim == null) {
player.message("Player '" + sub[1] + "' could not be found on this world.");
break;
}
boolean monitored = MapleLogger.monitored.contains(victim.getName());
if (monitored) {
MapleLogger.monitored.remove(victim.getName());
} else {
MapleLogger.monitored.add(victim.getName());
}
player.yellowMessage(victim.getName() + " is " + (!monitored ? "now being monitored." : "no longer being monitored."));
String message = player.getName() + (!monitored ? " has started monitoring " : " has stopped monitoring ") + victim.getName() + ".";
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, message));
break;
case "monitors":
for (String ign : MapleLogger.monitored) {
player.yellowMessage(ign + " is being monitored.");
}
break;
case "ignore":
if (sub.length < 1) {
player.yellowMessage("Syntax: !ignore <ign>");
break;
}
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim == null) {
player.message("Player '" + sub[1] + "' could not be found on this world.");
break;
}
boolean monitored_ = MapleLogger.ignored.contains(victim.getName());
if (monitored_) {
MapleLogger.ignored.remove(victim.getName());
} else {
MapleLogger.ignored.add(victim.getName());
}
player.yellowMessage(victim.getName() + " is " + (!monitored_ ? "now being ignored." : "no longer being ignored."));
String message_ = player.getName() + (!monitored_ ? " has started ignoring " : " has stopped ignoring ") + victim.getName() + ".";
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, message_));
break;
case "ignored":
for (String ign : MapleLogger.ignored) {
player.yellowMessage(ign + " is being ignored.");
}
break;
case "pos":
float xpos = player.getPosition().x;
float ypos = player.getPosition().y;
float fh = player.getMap().getFootholds().findBelow(player.getPosition()).getId();
player.dropMessage(6, "Position: (" + xpos + ", " + ypos + ")");
player.dropMessage(6, "Foothold ID: " + fh);
break;
case "togglecoupon":
if (sub.length < 2) {
player.yellowMessage("Syntax: !togglecoupon <itemid>");
break;
}
Server.getInstance().toggleCoupon(Integer.parseInt(sub[1]));
break;
case "chat":
player.toggleWhiteChat();
player.message("Your chat is now " + (player.getWhiteChat() ? " white" : "normal") + ".");
break;
case "fame":
if (sub.length < 3) {
player.yellowMessage("Syntax: !fame <playername> <gainfame>");
break;
}
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
victim.setFame(Integer.parseInt(sub[2]));
victim.updateSingleStat(MapleStat.FAME, victim.getFame());
player.message("FAME given.");
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
break;
case "givenx":
if (sub.length < 2) {
player.yellowMessage("Syntax: !givenx [<playername>] <gainnx>");
break;
}
String recv;
int value;
if (sub.length > 2) {
recv = sub[1];
value = Integer.parseInt(sub[2]);
} else {
recv = c.getPlayer().getName();
value = Integer.parseInt(sub[1]);
}
victim = cserv.getPlayerStorage().getCharacterByName(recv);
if (victim != null) {
victim.getCashShop().gainCash(1, value);
player.message("NX given.");
} else {
player.message("Player '" + recv + "' could not be found on this channel.");
}
break;
case "givevp":
if (sub.length < 3) {
player.yellowMessage("Syntax: !givevp <playername> <gainvotepoint>");
break;
}
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
victim.getClient().addVotePoints(Integer.parseInt(sub[2]));
player.message("VP given.");
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
break;
case "givems":
if (sub.length < 2) {
player.yellowMessage("Syntax: !givems [<playername>] <gainmeso>");
break;
}
String recv_;
int value_;
if (sub.length > 2) {
recv_ = sub[1];
value_ = Integer.parseInt(sub[2]);
} else {
recv_ = c.getPlayer().getName();
value_ = Integer.parseInt(sub[1]);
}
victim = cserv.getPlayerStorage().getCharacterByName(recv_);
if (victim != null) {
victim.gainMeso(value_, true);
player.message("MESO given.");
} else {
player.message("Player '" + recv_ + "' could not be found on this channel.");
}
break;
case "id":
if (sub.length < 2) {
player.yellowMessage("Syntax: !id <id>");
break;
}
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()))) {
String s;
while ((s = dis.readLine()) != null) {
player.dropMessage(s);
}
}
} catch (Exception e) {
e.printStackTrace();
}
break;
case "expeds":
for (Channel ch : Server.getInstance().getChannelsFromWorld(c.getWorld())) {
if (ch.getExpeditions().size() == 0) {
player.yellowMessage("No Expeditions in Channel " + ch.getId());
continue;
}
player.yellowMessage("Expeditions in Channel " + ch.getId());
int id = 0;
for (MapleExpedition exped : ch.getExpeditions()) {
id++;
player.yellowMessage("> Expedition " + id);
player.yellowMessage(">> Type: " + exped.getType().toString());
player.yellowMessage(">> Status: " + (exped.isRegistering() ? "REGISTERING" : "UNDERWAY"));
player.yellowMessage(">> Size: " + exped.getMembers().size());
player.yellowMessage(">> Leader: " + exped.getLeader().getName());
int memId = 2;
for (MapleCharacter member : exped.getMembers()) {
if (exped.isLeader(member)) {
continue;
}
player.yellowMessage(">>> Member " + memId + ": " + member.getName());
memId++;
}
}
}
break;
case "kill":
if (sub.length < 2) {
player.yellowMessage("Syntax: !kill <playername>");
break;
}
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
victim.setHpMp(0);
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, player.getName() + " used !kill on " + victim.getName()));
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
break;
case "seed":
if (player.getMapId() != 910010000) {
player.yellowMessage("This command can only be used in HPQ.");
break;
}
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 };
for (int i = 0; i < pos.length; i++) {
Item item = new Item(seed[i], (byte) 0, (short) 1);
player.getMap().spawnItemDrop(player, player, item, pos[i], false, true);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
break;
case "energy":
System.out.println(c.getPlayer().getDojoEnergy());
break;
case "maxenergy":
c.getPlayer().setDojoEnergy(10000);
c.announce(MaplePacketCreator.getEnergy("energy", 10000));
break;
case "killall":
MapleMap map = player.getMap();
List<MapleMapObject> monsters = map.getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
int count = 0;
for (MapleMapObject monstermo : monsters) {
monster = (MapleMonster) monstermo;
if (!monster.getStats().isFriendly() && !(monster.getId() >= 8810010 && monster.getId() <= 8810018)) {
map.damageMonster(player, monster, Integer.MAX_VALUE);
count++;
}
}
player.dropMessage(5, "Killed " + count + " monsters.");
break;
case "notice":
Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[Notice] " + joinStringFrom(sub, 1)));
break;
case "rip":
Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + joinStringFrom(sub, 1)));
break;
case "openportal":
if (sub.length < 2) {
player.yellowMessage("Syntax: !openportal <portalid>");
break;
}
player.getMap().getPortal(sub[1]).setPortalState(true);
break;
case "closeportal":
if (sub.length < 2) {
player.yellowMessage("Syntax: !closeportal <portalid>");
break;
}
player.getMap().getPortal(sub[1]).setPortalState(false);
break;
case "pe":
String packet = "";
try {
InputStreamReader is = new FileReader("pe.txt");
Properties packetProps = new Properties();
packetProps.load(is);
is.close();
packet = packetProps.getProperty("pe");
} catch (IOException ex) {
ex.printStackTrace();
player.yellowMessage("Failed to load pe.txt");
break;
}
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.write(HexTool.getByteArrayFromHexString(packet));
SeekableLittleEndianAccessor slea = new GenericSeekableLittleEndianAccessor(new ByteArrayByteStream(mplew.getPacket()));
short packetId = slea.readShort();
final MaplePacketHandler packetHandler = PacketProcessor.getProcessor(0, c.getChannel()).getHandler(packetId);
if (packetHandler != null && packetHandler.validateState(c)) {
try {
player.yellowMessage("Receiving: " + packet);
packetHandler.handlePacket(slea, c);
} 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());
break;
}
}
break;
case "startevent":
int players = 50;
if (sub.length > 1)
players = Integer.parseInt(sub[1]);
c.getChannelServer().setEvent(new MapleEvent(player.getMapId(), players));
player.dropMessage(5, "The event has been set on " + player.getMap().getMapName() + " and will allow " + players + " players to join.");
break;
case "endevent":
c.getChannelServer().setEvent(null);
player.dropMessage(5, "You have ended the event. No more players may join.");
break;
case "online2":
int total = 0;
for (Channel ch : srv.getChannelsFromWorld(player.getWorld())) {
int size = ch.getPlayerStorage().getAllCharacters().size();
total += size;
String s = "(Channel " + ch.getId() + " Online: " + size + ") : ";
if (ch.getPlayerStorage().getAllCharacters().size() < 50) {
for (MapleCharacter chr : ch.getPlayerStorage().getAllCharacters()) {
s += MapleCharacter.makeMapleReadable(chr.getName()) + ", ";
}
player.dropMessage(6, s.substring(0, s.length() - 2));
}
}
// player.dropMessage(6, "There are a total of " + total + " players online.");
player.showHint("Players online: #e#r" + total + "#k#n.", 300);
break;
case "warpsnowball":
List<MapleCharacter> chars = new ArrayList<>(player.getMap().getCharacters());
for (MapleCharacter chr : chars) {
chr.changeMap(109060000, chr.getTeam());
}
break;
case "ban":
if (sub.length < 3) {
player.yellowMessage("Syntax: !ban <IGN> <Reason> (Please be descriptive)");
break;
}
String ign = sub[1];
String reason = joinStringFrom(sub, 2);
MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(ign);
if (target != null) {
String readableTargetName = MapleCharacter.makeMapleReadable(target.getName());
String ip = target.getClient().getSession().getRemoteAddress().toString().split(":")[0];
// Ban ip
PreparedStatement ps = null;
try {
Connection con = DatabaseConnection.getConnection();
if (ip.matches("/[0-9]{1,3}\\..*")) {
ps = con.prepareStatement("INSERT INTO ipbans VALUES (DEFAULT, ?, ?)");
ps.setString(1, ip);
ps.setString(2, String.valueOf(target.getClient().getAccID()));
ps.executeUpdate();
ps.close();
}
con.close();
} catch (SQLException ex) {
ex.printStackTrace();
c.getPlayer().message("Error occured while banning IP address");
c.getPlayer().message(target.getName() + "'s IP was not banned: " + ip);
}
target.getClient().banMacs();
reason = c.getPlayer().getName() + " banned " + readableTargetName + " for " + reason + " (IP: " + ip + ") " + "(MAC: " + c.getMacs() + ")";
target.ban(reason);
target.yellowMessage("You have been banned by #b" + c.getPlayer().getName() + " #k.");
target.yellowMessage("Reason: " + reason);
c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0));
final MapleCharacter rip = target;
TimerManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
rip.getClient().disconnect(false, false);
}
}, // 5 Seconds
5000);
Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned."));
} else if (MapleCharacter.ban(ign, reason, false)) {
c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0));
Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned."));
} else {
c.announce(MaplePacketCreator.getGMEffect(6, (byte) 1));
}
break;
case "unban":
if (sub.length < 2) {
player.yellowMessage("Syntax: !unban <playername>");
break;
}
try {
Connection con = DatabaseConnection.getConnection();
int aid = MapleCharacter.getAccountIdByName(sub[1]);
PreparedStatement p = con.prepareStatement("UPDATE accounts SET banned = -1 WHERE id = " + aid);
p.executeUpdate();
p = con.prepareStatement("DELETE FROM ipbans WHERE aid = " + aid);
p.executeUpdate();
p = con.prepareStatement("DELETE FROM macbans WHERE aid = " + aid);
p.executeUpdate();
con.close();
} catch (Exception e) {
e.printStackTrace();
player.message("Failed to unban " + sub[1]);
return true;
}
player.message("Unbanned " + sub[1]);
break;
case "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());
}
}
break;
case "healperson":
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
victim.setHp(victim.getMaxHp());
victim.updateSingleStat(MapleStat.HP, victim.getMaxHp());
victim.setMp(victim.getMaxMp());
victim.updateSingleStat(MapleStat.MP, victim.getMaxMp());
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
break;
case "hurt":
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
victim.setHp(1);
victim.updateSingleStat(MapleStat.HP, 1);
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
break;
case "killmap":
for (MapleCharacter mch : player.getMap().getCharacters()) {
mch.setHp(0);
mch.updateSingleStat(MapleStat.HP, 0);
}
break;
case "night":
player.getMap().broadcastNightEffect();
player.yellowMessage("Done.");
break;
case "npc":
if (sub.length < 2) {
player.yellowMessage("Syntax: !npc <npcid>");
break;
}
MapleNPC npc = MapleLifeFactory.getNPC(Integer.parseInt(sub[1]));
if (npc != null) {
npc.setPosition(player.getPosition());
npc.setCy(player.getPosition().y);
npc.setRx0(player.getPosition().x + 50);
npc.setRx1(player.getPosition().x - 50);
npc.setFh(player.getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId());
player.getMap().addMapObject(npc);
player.getMap().broadcastMessage(MaplePacketCreator.spawnNPC(npc));
}
break;
case "face":
if (sub.length < 2) {
player.yellowMessage("Syntax: !face [<playername>] <faceid>");
break;
}
try {
if (sub.length == 2) {
int itemId = Integer.parseInt(sub[1]);
if (!(itemId >= 20000 && itemId < 22000) || MapleItemInformationProvider.getInstance().getName(itemId) == null) {
player.yellowMessage("Face id '" + sub[1] + "' does not exist.");
break;
}
player.setFace(itemId);
player.updateSingleStat(MapleStat.FACE, itemId);
player.equipChanged();
} else {
int itemId = Integer.parseInt(sub[2]);
if (!(itemId >= 20000 && itemId < 22000) || MapleItemInformationProvider.getInstance().getName(itemId) == null) {
player.yellowMessage("Face id '" + sub[2] + "' does not exist.");
break;
}
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim == null) {
victim.setFace(itemId);
victim.updateSingleStat(MapleStat.FACE, itemId);
victim.equipChanged();
} else {
player.yellowMessage("Player '" + sub[1] + "' has not been found on this channel.");
}
}
} catch (Exception e) {
}
break;
case "hair":
if (sub.length < 2) {
player.yellowMessage("Syntax: !hair [<playername>] <hairid>");
break;
}
try {
if (sub.length == 2) {
int itemId = Integer.parseInt(sub[1]);
if (!(itemId >= 30000 && itemId < 35000) || MapleItemInformationProvider.getInstance().getName(itemId) == null) {
player.yellowMessage("Hair id '" + sub[1] + "' does not exist.");
break;
}
player.setHair(itemId);
player.updateSingleStat(MapleStat.HAIR, itemId);
player.equipChanged();
} else {
int itemId = Integer.parseInt(sub[2]);
if (!(itemId >= 30000 && itemId < 35000) || MapleItemInformationProvider.getInstance().getName(itemId) == null) {
player.yellowMessage("Hair id '" + sub[2] + "' does not exist.");
break;
}
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
if (victim != null) {
victim.setHair(itemId);
victim.updateSingleStat(MapleStat.HAIR, itemId);
victim.equipChanged();
} else {
player.yellowMessage("Player '" + sub[1] + "' has not been found on this channel.");
}
}
} catch (Exception e) {
}
break;
default:
return false;
}
return true;
}
Aggregations