protected void dispose(boolean warpout) { int chnl = p1.getLeader().getChannel(); ChannelServer cs = ChannelServer.getInstance(chnl); MapleMap out = cs.getMapFactory().getMap(980000000); for (MaplePartyCharacter mpc : leader1.getParty().getMembers()) { MapleCharacter mc; mc = cs.getPlayerStorage().getCharacterByName(mpc.getName()); if (mc != null) { mc.setCpqRanking(getRankByCP(this.redTotalCP)); mc.resetCP(); if (warpout) { mc.changeMap(out, out.getPortal(0)); } } } for (MaplePartyCharacter mpc : leader2.getParty().getMembers()) { MapleCharacter mc; mc = cs.getPlayerStorage().getCharacterByName(mpc.getName()); if (mc != null) { mc.setCpqRanking(getRankByCP(this.blueTotalCP)); mc.resetCP(); if (warpout) { mc.changeMap(out, out.getPortal(0)); } } } timer.cancel(false); effectTimer.cancel(false); redTotalCP = 0; blueTotalCP = 0; leader1.getParty().setEnemy(null); leader2.getParty().setEnemy(null); }
public void finish(int winningTeam) { int chnl = leader1.getClient().getChannel(); int chnl1 = leader2.getClient().getChannel(); if (chnl != chnl1) throw new RuntimeException("CPQ leaders are on different channels.."); ChannelServer cs = ChannelServer.getInstance(chnl); if (winningTeam == 0) { for (MaplePartyCharacter mpc : leader1.getParty().getMembers()) { MapleCharacter mc; mc = cs.getPlayerStorage().getCharacterByName(mpc.getName()); if (mc != null) { mc.setCpqRanking(getRankByCP(this.redTotalCP)); mc.changeMap( cs.getMapFactory().getMap(map.getId() + 2), cs.getMapFactory().getMap(map.getId() + 2).getPortal(0)); mc.setTeam(-1); } } for (MaplePartyCharacter mpc : leader2.getParty().getMembers()) { MapleCharacter mc; mc = cs.getPlayerStorage().getCharacterByName(mpc.getName()); if (mc != null) { mc.setCpqRanking(getRankByCP(this.blueTotalCP)); mc.changeMap( cs.getMapFactory().getMap(map.getId() + 3), cs.getMapFactory().getMap(map.getId() + 3).getPortal(0)); mc.setTeam(-1); } } } else if (winningTeam == 1) { for (MaplePartyCharacter mpc : leader2.getParty().getMembers()) { MapleCharacter mc; mc = cs.getPlayerStorage().getCharacterByName(mpc.getName()); if (mc != null) { mc.changeMap( cs.getMapFactory().getMap(map.getId() + 2), cs.getMapFactory().getMap(map.getId() + 2).getPortal(0)); mc.setTeam(-1); } } for (MaplePartyCharacter mpc : leader1.getParty().getMembers()) { MapleCharacter mc; mc = cs.getPlayerStorage().getCharacterByName(mpc.getName()); if (mc != null) { mc.changeMap( cs.getMapFactory().getMap(map.getId() + 3), cs.getMapFactory().getMap(map.getId() + 3).getPortal(0)); mc.setTeam(-1); } } } dispose(); }
public static void doPvP( MapleCharacter player, MapleMap map, AbstractDealDamageHandler.AttackInfo attack) { DamageBalancer(attack); getDirection(attack); for (MapleCharacter attackedPlayers : player .getMap() .getNearestPvpChar( player.getPosition(), maxDis, maxHeight, player.getMap().getCharacters())) { if (attackedPlayers.isAlive() && (player.getParty() == null || player.getParty() != attackedPlayers.getParty()) && attackedPlayers.pvp == true) { monsterBomb(player, attackedPlayers, map, attack); } } }
private static boolean checkRush(MapleCharacter c) { for (MaplePartyCharacter mpc : c.getParty().getMembers()) { if (mpc.getJobId() % 100 != 2 || !mpc.getJob().isA(MapleJob.WARRIOR)) { return false; } } return true; }
public void complete() { int cp1 = this.redTotalCP; int cp2 = this.blueTotalCP; if (cp1 == cp2) { return; } boolean redWin = cp1 > cp2; int chnl = leader1.getClient().getChannel(); int chnl1 = leader2.getClient().getChannel(); if (chnl != chnl1) throw new RuntimeException("CPQ leaders are on different channels.."); ChannelServer cs = ChannelServer.getInstance(chnl); map.killAllMonsters(false); for (MaplePartyCharacter mpc : leader1.getParty().getMembers()) { MapleCharacter mc; mc = cs.getPlayerStorage().getCharacterByName(mpc.getName()); if (mc != null) { if (redWin) { mc.getClient().getSession().write(MaplePacketCreator.showEffect("quest/carnival/win")); mc.getClient().getSession().write(MaplePacketCreator.playSound("MobCarnival/Win")); } else { mc.getClient().getSession().write(MaplePacketCreator.showEffect("quest/carnival/lose")); mc.getClient().getSession().write(MaplePacketCreator.playSound("MobCarnival/Lose")); } } } for (MaplePartyCharacter mpc : leader2.getParty().getMembers()) { MapleCharacter mc; mc = cs.getPlayerStorage().getCharacterByName(mpc.getName()); if (mc != null) { if (!redWin) { mc.getClient().getSession().write(MaplePacketCreator.showEffect("quest/carnival/win")); mc.getClient().getSession().write(MaplePacketCreator.playSound("MobCarnival/Win")); } else { mc.getClient().getSession().write(MaplePacketCreator.showEffect("quest/carnival/lose")); mc.getClient().getSession().write(MaplePacketCreator.playSound("MobCarnival/Lose")); } } } }
public static boolean handlePortal(String name, MapleCharacter c) { if (name.equals(FourthJobQuests.RUSH.getValue())) { if (!(c.getParty().getLeader().getId() == c.getId()) && !checkRush(c)) { c.dropMessage("You step into the portal, but it swiftly kicks you out."); c.getClient().announce(MaplePacketCreator.enableActions()); } if (!(c.getParty().getLeader().getId() == c.getId()) && checkRush(c)) { c.dropMessage("You're not the party leader."); c.getClient().announce(MaplePacketCreator.enableActions()); return true; } if (!checkRush(c)) { c.dropMessage("Someone in your party is not a 4th Job warrior."); c.getClient().announce(MaplePacketCreator.enableActions()); return true; } c.getClient() .getChannelServer() .getEventSM() .getEventManager("4jrush") .startInstance(c.getParty(), c.getMap()); return true; } else if (name.equals(FourthJobQuests.BERSERK.getValue())) { if (!c.haveItem(4031475)) { c.dropMessage("The portal to the Forgotten Shrine is locked"); c.getClient().announce(MaplePacketCreator.enableActions()); return true; } c.getClient() .getChannelServer() .getEventSM() .getEventManager("4jberserk") .startInstance(c.getParty(), c.getMap()); return true; } return false; }
public MapleMapItem( int meso, Point position, MapleMapObject dropper, MapleCharacter owner, byte type, boolean playerDrop) { setPosition(position); this.item = null; this.dropper = dropper; this.character_ownerid = owner.getParty() == null ? owner.getId() : owner.getPartyId(); this.meso = meso; this.type = type; this.playerDrop = playerDrop; }
public void playerDisconnected(int charid) { if (leader1.getId() == charid || leader2.getId() == charid) { earlyFinish(); int team = -1; for (MaplePartyCharacter mpc : leader1.getParty().getMembers()) { if (mpc.getId() == charid) { team = 0; } } for (MaplePartyCharacter mpc : leader2.getParty().getMembers()) { if (mpc.getId() == charid) { team = 1; } } if (team == -1) team = 1; String teamS = "undefined"; switch (team) { case 0: teamS = "Red"; break; case 1: teamS = "Blue"; break; } map.broadcastMessage( MaplePacketCreator.serverNotice( 5, "Maple " + teamS + " has quitted the Monster Carnival.")); return; } else { map.broadcastMessage( MaplePacketCreator.serverNotice( 5, ChannelServer.getInstance(1).getMarket().getCharacterName(charid) + " has quitted the Monster Carnival.")); } }
public MapleMapItem( Item item, Point position, MapleMapObject dropper, MapleCharacter owner, byte type, boolean playerDrop, int questid) { setPosition(position); this.item = item; this.dropper = dropper; this.character_ownerid = owner.getParty() == null ? owner.getId() : owner.getPartyId(); this.meso = 0; this.type = type; this.playerDrop = playerDrop; this.questid = questid; }
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { int min = slea.readInt(); int max = slea.readInt(); slea.readInt(); // members int jobs = slea.readInt(); MapleCharacter chr = c.getPlayer(); MapleMap map = chr.getMap(); Collection<MapleMapObject> mapobjs = map.getAllPlayer(); for (MapleMapObject mapobj : mapobjs) { if (chr.getParty().getMembers().size() > 5) { break; } if (mapobj instanceof MapleCharacter) { MapleCharacter tchar = (MapleCharacter) mapobj; int charlvl = tchar.getLevel(); if (charlvl >= min && charlvl <= max && isValidJob(tchar.getJob(), jobs)) { if (c.getPlayer().getParty() == null) { // WorldChannelInterface wci = // c.getChannelServer().getWorldInterface(); MapleParty party = c.getPlayer().getParty(); party = c.getPlayer().getParty(); // .getParty(partyid); if (party != null) { if (party.getMembers().size() < 6) { // MaplePartyCharacter partyplayer = tchar.getMPC(); // wci.updateParty(party.getId(), // PartyOperation.JOIN, partyplayer); c.getPlayer().receivePartyMemberHP(); c.getPlayer().updatePartyMemberHP(); } else { c.announce(MaplePacketCreator.partyStatusMessage(17)); } } } } } } }
@Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { int cid = slea.readInt(); MapleCharacter player = null; try { player = MapleCharacter.loadCharFromDB(cid, c, true); c.setPlayer(player); } catch (SQLException e) { } c.setAccID(player.getAccountID()); int state = c.getLoginState(); boolean allowLogin = true; ChannelServer cserv = c.getChannelServer(); synchronized (this) { try { WorldChannelInterface worldInterface = cserv.getWorldInterface(); if (state == MapleClient.LOGIN_SERVER_TRANSITION) { for (String charName : c.loadCharacterNames(c.getWorld())) { if (worldInterface.isConnected(charName)) { int chanNum = c.getChannelServer().getWorldInterface().getLocation(charName).channel; System.err.print( charName + " on channel " + chanNum + " has been unstuck, for bug-testing purposes."); MapleCharacter player_to_dc = ChannelServer.getInstance(chanNum) .getPlayerStorage() .getCharacterByName(charName); if (player_to_dc.getEventInstance() != null) player_to_dc.getEventInstance().removePlayer(player_to_dc); player_to_dc.getMap().removePlayer(player_to_dc); ChannelServer.getInstance(chanNum).removePlayer(player_to_dc); player_to_dc.getClient().disconnect(); player_to_dc.getClient().getSession().close(); c.disconnect(); allowLogin = false; break; } } } } catch (RemoteException e) { cserv.reconnectWorld(); allowLogin = false; } catch (Exception e) { System.out.println("Error unsticking char:"); e.printStackTrace(); } if (state != MapleClient.LOGIN_SERVER_TRANSITION || !allowLogin) { c.setPlayer(null); c.getSession().close(true); return; } c.updateLoginState(MapleClient.LOGIN_LOGGEDIN); } cserv.addPlayer(player); try { List<PlayerBuffValueHolder> buffs = cserv.getWorldInterface().getBuffsFromStorage(cid); if (buffs != null) { c.getPlayer().silentGiveBuffs(buffs); } } catch (RemoteException e) { cserv.reconnectWorld(); } Connection con = DatabaseConnection.getConnection(); try { PreparedStatement ps = con.prepareStatement("SELECT SkillID,StartTime,length FROM cooldowns WHERE charid = ?"); ps.setInt(1, c.getPlayer().getId()); ResultSet rs = ps.executeQuery(); while (rs.next()) { final long length = rs.getLong("length"), startTime = rs.getLong("StartTime"); if (length + startTime > System.currentTimeMillis()) { c.getPlayer().giveCoolDowns(rs.getInt("SkillID"), startTime, length); } } rs.close(); ps.close(); ps = con.prepareStatement("DELETE FROM cooldowns WHERE charid = ?"); ps.setInt(1, c.getPlayer().getId()); ps.executeUpdate(); ps.close(); ps = con.prepareStatement( "SELECT Mesos FROM dueypackages WHERE RecieverId = ? and Checked = 1"); ps.setInt(1, c.getPlayer().getId()); rs = ps.executeQuery(); if (rs.next()) { try { PreparedStatement pss = DatabaseConnection.getConnection() .prepareStatement("UPDATE dueypackages SET Checked = 0 where RecieverId = ?"); pss.setInt(1, c.getPlayer().getId()); pss.executeUpdate(); pss.close(); } catch (SQLException e) { } c.getSession().write(MaplePacketCreator.sendDueyMSG((byte) 0x1B)); } rs.close(); ps.close(); rs = null; ps = null; } catch (SQLException e) { e.printStackTrace(); } c.getSession().write(MaplePacketCreator.getCharInfo(player)); c.getPlayer().InitiateSaveEvent(); if (player.isGM()) { SkillFactory.getSkill(GM.HIDE).getEffect(1).applyTo(player); } player.sendKeymap(); player.sendMacros(); player.getMap().addPlayer(player); try { int buddyIds[] = player.getBuddylist().getBuddyIds(); cserv .getWorldInterface() .loggedOn(player.getName(), player.getId(), c.getChannel(), buddyIds); for (CharacterIdChannelPair onlineBuddy : cserv.getWorldInterface().multiBuddyFind(player.getId(), buddyIds)) { BuddylistEntry ble = player.getBuddylist().get(onlineBuddy.getCharacterId()); ble.setChannel(onlineBuddy.getChannel()); player.getBuddylist().put(ble); } c.getSession().write(MaplePacketCreator.updateBuddylist(player.getBuddylist().getBuddies())); } catch (RemoteException e) { cserv.reconnectWorld(); } /* c.getSession().write(MaplePacketCreator.loadFamily(player)); if (player.getFamilyId() > 0) { c.getSession().write(MaplePacketCreator.getFamilyInfo(player)); }*/ if (player.getGuildId() > 0) { try { MapleGuild playerGuild = cserv.getWorldInterface().getGuild(player.getGuildId(), player.getMGC()); if (playerGuild == null) { player.deleteGuild(player.getGuildId()); player.resetMGC(); player.setGuildId(0); } else { cserv.getWorldInterface().setGuildMemberOnline(player.getMGC(), true, c.getChannel()); c.getSession().write(MaplePacketCreator.showGuildInfo(player)); int allianceId = player.getGuild().getAllianceId(); if (allianceId > 0) { MapleAlliance newAlliance = cserv.getWorldInterface().getAlliance(allianceId); if (newAlliance == null) { newAlliance = MapleAlliance.loadAlliance(allianceId); if (newAlliance != null) { cserv.getWorldInterface().addAlliance(allianceId, newAlliance); } else { player.getGuild().setAllianceId(0); } } if (newAlliance != null) { c.getSession().write(MaplePacketCreator.getAllianceInfo(newAlliance)); c.getSession().write(MaplePacketCreator.getGuildAlliances(newAlliance, c)); cserv .getWorldInterface() .allianceMessage( allianceId, MaplePacketCreator.allianceMemberOnline(player, true), player.getId(), -1); } } } } catch (RemoteException e) { cserv.reconnectWorld(); } } try { // c.getPlayer().showNote(); if (player.getParty() != null) { cserv .getWorldInterface() .updateParty( player.getParty().getId(), PartyOperation.LOG_ONOFF, new MaplePartyCharacter(player)); } player.updatePartyMemberHP(); } catch (RemoteException e) { cserv.reconnectWorld(); } for (MapleQuestStatus status : player.getStartedQuests()) { if (status.hasMobKills()) { c.getSession().write(MaplePacketCreator.updateQuestMobKills(status)); } } CharacterNameAndId pendingBuddyRequest = player.getBuddylist().pollPendingRequest(); if (pendingBuddyRequest != null) { player .getBuddylist() .put( new BuddylistEntry( pendingBuddyRequest.getName(), "그룹 미지정", pendingBuddyRequest.getId(), -1, false)); c.getSession() .write( MaplePacketCreator.requestBuddylistAdd( pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName(), 0, 0)); // todo: make actual levels / jobids appear } c.getSession().write(MaplePacketCreator.updateBuddylist(player.getBuddylist().getBuddies())); // c.getSession().write(MaplePacketCreator.updateGender(player)); player.checkMessenger(); // c.getSession().write(MaplePacketCreator.enableReport()); /* if (!player.isGM() && !player.hasWatchedCygnusIntro() && player.getLevel() > 19 && !player.isCygnus() && player.getCygnusLinkId() == 0) { player.startCygnusIntro(); player.setWatchedCygnusIntro(true); }*/ // unneeded in 83+ as cygnus is created at char select ISkill bof = SkillFactory.getSkill( 10000000 * player.getJobType() + 12); // todo: find opcode and re-enable player.changeSkillLevel(bof, player.getLinkedLevel() / 10, bof.getMaxLevel()); player.checkBerserk(); player.expirationTask(); player.setRates(false); }
/** * 角色快照数据 * * @param chr */ public CharacterTransfer(MapleCharacter chr) { this.characterid = chr.getId(); this.accountid = chr.getAccountID(); this.accountname = chr.getClient().getAccountName(); this.channel = (byte) chr.getClient().getChannel(); this.ACash = chr.getCSPoints(1); this.MaplePoints = chr.getCSPoints(2); this.vpoints = chr.getVPoints(); this.name = chr.getName(); this.fame = chr.getFame(); this.love = chr.getLove(); this.gender = chr.getClient().getGender(); this.level = chr.getLevel(); this.str = chr.getStat().getStr(); this.dex = chr.getStat().getDex(); this.int_ = chr.getStat().getInt(); this.luk = chr.getStat().getLuk(); this.hp = chr.getStat().getHp(); this.mp = chr.getStat().getMp(); this.maxhp = chr.getStat().getMaxHp(); this.maxmp = chr.getStat().getMaxMp(); this.exp = chr.getExp(); this.hpApUsed = chr.getHpApUsed(); this.remainingAp = chr.getRemainingAp(); this.remainingSp = chr.getRemainingSp(); this.meso = chr.getMeso(); this.pvpExp = chr.getTotalBattleExp(); this.pvpPoints = chr.getBattlePoints(); this.skinColor = chr.getSkinColor(); this.job = chr.getJob(); this.hair = chr.getHair(); this.face = chr.getFace(); this.mapid = chr.getMapId(); this.initialSpawnPoint = chr.getInitialSpawnpoint(); this.marriageId = chr.getMarriageId(); this.world = chr.getWorld(); this.guildid = chr.getGuildId(); this.guildrank = chr.getGuildRank(); this.guildContribution = chr.getGuildContribution(); this.alliancerank = chr.getAllianceRank(); this.gmLevel = (byte) chr.getGMLevel(); this.points = chr.getPoints(); this.fairyExp = chr.getFairyExp(); this.petStore = chr.getPetStores(); this.subcategory = chr.getSubcategory(); this.imps = chr.getImps(); this.fatigue = chr.getFatigue(); this.currentrep = chr.getCurrentRep(); this.totalrep = chr.getTotalRep(); this.totalWins = chr.getTotalWins(); this.totalLosses = chr.getTotalLosses(); this.gachexp = chr.getGachExp(); this.boxed = chr.getBoxed(); this.familiars = chr.getFamiliars(); this.tempIP = chr.getClient().getTempIP(); this.decorate = chr.getDecorate(); this.dollars = chr.getDollars(); this.shareLots = chr.getShareLots(); this.apstorage = chr.getAPS(); this.cardStack = chr.getCardStack(); this.morphCount = chr.getMorphCount(); this.powerCount = chr.getPowerCount(); this.playerPoints = chr.getPlayerPoints(); this.playerEnergy = chr.getPlayerEnergy(); this.runningDark = chr.getDarkType(); this.runningDarkSlot = chr.getDarkTotal(); this.runningLight = chr.getLightType(); this.runningLightSlot = chr.getLightTotal(); boolean uneq = false; MaplePet pet = chr.getSpawnPet(); if (this.petStore == 0) { this.petStore = -1; } if (pet != null) { uneq = true; this.petStore = (byte) Math.max(this.petStore, pet.getInventoryPosition()); } if (uneq) { chr.unequipAllSpawnPets(); } if (chr.getSidekick() != null) { this.sidekick = chr.getSidekick().getId(); } else { this.sidekick = 0; } for (BuddylistEntry qs : chr.getBuddylist().getBuddies()) { this.buddies.put( new CharacterNameAndId(qs.getCharacterId(), qs.getName(), qs.getGroup()), qs.isVisible()); } this.buddysize = chr.getBuddyCapacity(); this.partyid = (chr.getParty() == null ? -1 : chr.getParty().getId()); if (chr.getMessenger() != null) { this.messengerid = chr.getMessenger().getId(); } else { this.messengerid = 0; } this.finishedAchievements = chr.getFinishedAchievements(); this.KeyValue = chr.getKeyValue_Map(); this.InfoQuest = chr.getInfoQuest_Map(); for (Map.Entry qs : chr.getQuest_Map().entrySet()) { this.Quest.put(((MapleQuest) qs.getKey()).getId(), qs.getValue()); } this.inventorys = chr.getInventorys(); for (Entry<Skill, SkillEntry> qs : chr.getSkills().entrySet()) { this.Skills.put(((Skill) qs.getKey()).getId(), qs.getValue()); } this.BlessOfFairy = chr.getBlessOfFairyOrigin(); this.BlessOfEmpress = chr.getBlessOfEmpressOrigin(); this.chalkboard = chr.getChalkboard(); this.keymap = chr.getKeyLayout().Layout(); this.quickslot = chr.getQuickSlot().Layout(); this.savedlocation = chr.getSavedLocations(); this.wishlist = chr.getWishlist(); this.regrocks = chr.getRegRocks(); this.famedcharacters = chr.getFamedCharacters(); this.lastfametime = chr.getLastFameTime(); this.storage = chr.getStorage(); this.cs = chr.getCashInventory(); MapleMount mount = chr.getMount(); this.mount_itemid = mount.getItemId(); this.mount_Fatigue = mount.getFatigue(); this.mount_level = mount.getLevel(); this.mount_exp = mount.getExp(); this.battlers = chr.getBattlers(); this.lastLoveTime = chr.getLastLoveTime(); this.loveCharacters = chr.getLoveCharacters(); this.TranferTime = System.currentTimeMillis(); }