/** * 箭矢炮盘 * * @param owner * @param side * @param pos */ public MapleArrowsTurret(MapleCharacter owner, byte side, Point pos) { this.map = owner.getMap(); this.ownerid = owner.getId(); this.ownerLevel = owner.getLevel(); this.skillId = 3121013; this.skillLevel = owner.getSkillLevel(skillId); this.side = side; setPosition(pos); }
public MapleSummon(MapleCharacter owner, int skill, Point pos, SummonMovementType movementType) { super(); this.owner = owner; this.skill = skill; this.skillLevel = owner.getSkillLevel(SkillFactory.getSkill(skill)); if (skillLevel == 0) { throw new RuntimeException("Trying to create a summon for a char without the skill"); } this.movementType = movementType; setPosition(pos); }
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (!c.getPlayer().isAlive()) { c.announce(MaplePacketCreator.enableActions()); return; } slea.readInt(); byte slot = (byte) slea.readShort(); int itemId = slea.readInt(); MapleCharacter player = c.getPlayer(); IItem toUse = c.getPlayer().getInventory(MapleInventoryType.USE).getItem(slot); if (toUse != null && toUse.getQuantity() == 1) { if (toUse.getItemId() != itemId) { return; } Map<String, Integer> skilldata = MapleItemInformationProvider.getInstance() .getSkillStats(toUse.getItemId(), c.getPlayer().getJob().getId()); boolean canuse = false; boolean success = false; int skill = 0; int maxlevel = 0; if (skilldata == null) { return; } if (skilldata.get("skillid") == 0) { canuse = false; } else if (player.getMasterLevel(SkillFactory.getSkill(skilldata.get("skillid"))) >= skilldata.get("reqSkillLevel") || skilldata.get("reqSkillLevel") == 0) { canuse = true; if (Randomizer.nextInt(101) < skilldata.get("success") && skilldata.get("success") != 0) { success = true; ISkill skill2 = SkillFactory.getSkill(skilldata.get("skillid")); player.changeSkillLevel( skill2, player.getSkillLevel(skill2), Math.max(skilldata.get("masterLevel"), player.getMasterLevel(skill2)), -1); } else { success = false; player.message( "The skill book lights up, but the skill winds up as if nothing happened."); } MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, slot, (short) 1, false); } else { canuse = false; } player .getClient() .announce(MaplePacketCreator.skillBookSuccess(player, skill, maxlevel, canuse, success)); } }
@Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { final MapleCharacter chr = c.getPlayer(); if ((slea.available() > 8L) && (chr != null)) { slea.skip(4); int numChanges = slea.readInt(); for (int i = 0; i < numChanges; i++) { int key = slea.readInt(); byte type = slea.readByte(); int action = slea.readInt(); if ((type == 1) && (action >= 1000)) { Skill skil = SkillFactory.getSkill(action); if ((skil != null) && (((!skil.isFourthJob()) && (!skil.isBeginnerSkill()) && (skil.isInvisible()) && (chr.getSkillLevel(skil) <= 0)) || (GameConstants.isLinkedAttackSkill(action)) || (action % 10000 < 1000))) { continue; } } chr.changeKeybinding(key, type, action); } } else if (chr != null) { int type = slea.readInt(); int data = slea.readInt(); switch (type) { case 1: if (data <= 0) { chr.getQuestRemove(MapleQuest.getInstance(GameConstants.HP_ITEM)); } else { chr.getQuestNAdd(MapleQuest.getInstance(GameConstants.HP_ITEM)) .setCustomData(String.valueOf(data)); } break; case 2: if (data <= 0) { chr.getQuestRemove(MapleQuest.getInstance(GameConstants.MP_ITEM)); } else { chr.getQuestNAdd(MapleQuest.getInstance(GameConstants.MP_ITEM)) .setCustomData(String.valueOf(data)); } break; } } }