@Override public boolean onReviveEvent(Player player) { PlayerReviveService.revive(player, 25, 25, false, 0); player.getGameStats().updateStatsAndSpeedVisually(); PacketSendUtility.sendPacket(player, STR_REBIRTH_MASSAGE_ME); TeleportService2.teleportTo( player, mapId, instanceId, 749.6575f, 558.4166f, 572.97394f, (byte) 90); return true; }
/** {@inheritDoc} dc */ @Override protected void writeImpl(AionConnection con, ByteBuffer buf) { PlayerGameStats playerGameStats = player.getGameStats(); playerGameStats.setItemIdArrayLenght(nbloot); for (int i = 0; i < nbloot; i++) { playerGameStats.setItemIdArray(finaloot[i][0], i); playerGameStats.setItemCountArray(finaloot[i][1], i); } writeD(buf, targetObjectId); writeH(buf, nbloot); for (int i = 0; i < nbloot; i++) { writeD(buf, finaloot[i][0]); writeD(buf, finaloot[i][1]); writeH(buf, 0); writeC(buf, 0); } writeH(buf, 0); }
/** * Loads item stones from DB for each item in a list if item is ARMOR or WEAPON * * @param itemList */ public void loadItemStones(Player player) { List<Item> itemList = new ArrayList<Item>(); itemList.addAll(player.getStorage(StorageType.CUBE.getId()).getStorageItems()); itemList.addAll(player.getStorage(StorageType.REGULAR_WAREHOUSE.getId()).getStorageItems()); itemList.addAll(player.getStorage(StorageType.ACCOUNT_WAREHOUSE.getId()).getStorageItems()); itemList.addAll(player.getEquipment().getEquippedItems()); for (Item item : itemList) { if (item.getItemTemplate().isArmor() || item.getItemTemplate().isWeapon()) { item.setItemStones(DAOManager.getDAO(ItemStoneListDAO.class).load(item.getObjectId())); // if item equipped - apply stats of item stone if (item.isEquipped() && item.getEquipmentSlot() != ItemSlot.MAIN_OFF_HAND.getSlotIdMask() && item.getEquipmentSlot() != ItemSlot.SUB_OFF_HAND.getSlotIdMask()) { for (ItemStone itemStone : item.getItemStones()) { ItemEquipmentListener.addStoneStats(itemStone, player.getGameStats()); } } } } }
/** * Returns the player with given objId (if such player exists) * * @param playerObjId * @param account * @return Player */ public static Player getPlayer(int playerObjId, Account account) { Player player = playerCache.get(playerObjId); if (player != null) return player; /** Player common data and appearance should be already loaded in account */ PlayerAccountData playerAccountData = account.getPlayerAccountData(playerObjId); PlayerCommonData pcd = playerAccountData.getPlayerCommonData(); PlayerAppearance appearance = playerAccountData.getAppereance(); player = new Player(new PlayerController(), pcd, appearance); LegionMember legionMember = LegionService.getInstance().getLegionMember(player.getObjectId()); if (legionMember != null) player.setLegionMember(legionMember); if (GroupService.getInstance().isGroupMember(playerObjId)) GroupService.getInstance().setGroup(player); if (AllianceService.getInstance().isAllianceMember(playerObjId)) AllianceService.getInstance().setAlliance(player); MacroList macroses = DAOManager.getDAO(PlayerMacrossesDAO.class).restoreMacrosses(playerObjId); player.setMacroList(macroses); player.setSkillList(DAOManager.getDAO(PlayerSkillListDAO.class).loadSkillList(playerObjId)); player.setKnownlist(new KnownList(player)); player.setFriendList(DAOManager.getDAO(FriendListDAO.class).load(player)); player.setBlockList(DAOManager.getDAO(BlockListDAO.class).load(player)); player.setTitleList(DAOManager.getDAO(PlayerTitleListDAO.class).loadTitleList(playerObjId)); DAOManager.getDAO(PlayerSettingsDAO.class).loadSettings(player); DAOManager.getDAO(AbyssRankDAO.class).loadAbyssRank(player); PlayerStatsData playerStatsData = DataManager.PLAYER_STATS_DATA; player.setPlayerStatsTemplate(playerStatsData.getTemplate(player)); player.setGameStats(new PlayerGameStats(playerStatsData, player)); Equipment equipment = DAOManager.getDAO(InventoryDAO.class).loadEquipment(player); ItemService.loadItemStones(equipment.getEquippedItemsWithoutStigma()); equipment.setOwner(player); player.setEquipment(equipment); player.setLifeStats(new PlayerLifeStats(player)); player.setEffectController(new PlayerEffectController(player)); player.setFlyController(new FlyController(player)); player.setReviveController(new ReviveController(player)); player.setQuestStateList(DAOManager.getDAO(PlayerQuestListDAO.class).load(player)); player.setRecipeList(DAOManager.getDAO(PlayerRecipesDAO.class).load(player.getObjectId())); /** Account warehouse should be already loaded in account */ Storage accWarehouse = account.getAccountWarehouse(); player.setStorage(accWarehouse, StorageType.ACCOUNT_WAREHOUSE); Storage inventory = DAOManager.getDAO(InventoryDAO.class) .loadStorage(player, player.getObjectId(), StorageType.CUBE); ItemService.loadItemStones(inventory.getStorageItems()); player.setStorage(inventory, StorageType.CUBE); Storage warehouse = DAOManager.getDAO(InventoryDAO.class) .loadStorage(player, player.getObjectId(), StorageType.REGULAR_WAREHOUSE); ItemService.loadItemStones(warehouse.getStorageItems()); player.setStorage(warehouse, StorageType.REGULAR_WAREHOUSE); /** Apply equipment stats (items and manastones were loaded in account) */ player.getEquipment().onLoadApplyEquipmentStats(); DAOManager.getDAO(PlayerPunishmentsDAO.class).loadPlayerPunishments(player); ItemService.restoreKinah(player); // update passive stats after effect controller, stats and equipment are initialized player.getController().updatePassiveStats(); // load saved effects DAOManager.getDAO(PlayerEffectsDAO.class).loadPlayerEffects(player); // load item cooldowns DAOManager.getDAO(ItemCooldownsDAO.class).loadItemCooldowns(player); if (player.getCommonData().getTitleId() > 0) { TitleChangeListener.onTitleChange( player.getGameStats(), player.getCommonData().getTitleId(), true); } player.getGameStats().recomputeStats(); DAOManager.getDAO(PlayerLifeStatsDAO.class).loadPlayerLifeStat(player); // analyze current instance InstanceService.onPlayerLogin(player); if (CacheConfig.CACHE_PLAYERS) playerCache.put(playerObjId, player); return player; }
@Override public boolean onReviveEvent(Player player) { PlayerReviveService.revive(player, 100, 100, false, 0); player.getGameStats().updateStatsAndSpeedVisually(); return true; }
@Override public void insertPlayerGameStat(final Player player) { Connection con = null; try { con = DatabaseFactory.getConnection(); PreparedStatement stmt = con.prepareStatement(INSERT_QUERY); stmt.setInt(1, player.getObjectId()); stmt.setInt(2, player.getGameStats().getPDef().getCurrent()); stmt.setInt(3, player.getGameStats().getBlock().getCurrent()); stmt.setInt(4, player.getGameStats().getParry().getCurrent()); stmt.setInt(5, player.getGameStats().getMCritical().getCurrent()); stmt.setInt(6, player.getGameStats().getWill().getCurrent()); stmt.setInt(7, player.getGameStats().getAccuracy().getCurrent()); stmt.setInt(8, player.getGameStats().getPower().getCurrent()); stmt.setInt(9, player.getGameStats().getMainHandMAccuracy().getCurrent()); stmt.setInt(10, player.getGameStats().getAttackSpeed().getCurrent()); stmt.setInt(11, player.getGameStats().getMResist().getCurrent()); stmt.setInt(12, player.getGameStats().getMainHandMAttack().getCurrent()); stmt.setInt(13, player.getGameStats().getMainHandPCritical().getCurrent()); stmt.setInt(14, player.getGameStats().getAttackRange().getCurrent()); stmt.setInt(15, player.getGameStats().getMDef().getCurrent()); stmt.setInt(16, player.getGameStats().getAgility().getCurrent()); stmt.setInt(17, player.getGameStats().getKnowledge().getCurrent()); stmt.setInt(18, player.getGameStats().getWill().getCurrent()); stmt.setInt(19, player.getGameStats().getMBoost().getCurrent()); stmt.setInt(20, player.getGameStats().getMBResist().getCurrent()); stmt.setInt(21, player.getGameStats().getPCR().getCurrent()); stmt.setInt(22, player.getGameStats().getMCR().getCurrent()); stmt.execute(); stmt.close(); } catch (Exception e) { log.error( "Could not store PlayerGameStat data for player " + player.getObjectId() + " from DB: " + e.getMessage(), e); } finally { DatabaseFactory.close(con); } }
private boolean checkAnimationTime() { if (!(effector instanceof Player) || skillMethod != SkillMethod.CAST) // TODO item skills? return true; Player player = (Player) effector; // if player is without weapon, dont check animation time if (player.getEquipment().getMainHandWeaponType() == null) return true; /** exceptions for certain skills -herb and mana treatment -traps */ // dont check herb , mana treatment and concentration enhancement switch (this.getSkillId()) { case 1803: // bandage heal case 1804: // herb treatment case 1805: case 1825: case 1827: case 2672: case 1823: // mana treatment case 1824: case 1826: case 1828: case 2673: case 1078: // concentration enhancement case 1125: case 1468: case 11580: return true; } if (this.getSkillTemplate().getSubType() == SkillSubType.SUMMONTRAP) return true; Motion motion = this.getSkillTemplate().getMotion(); if (motion == null || motion.getName() == null) { log.warn("missing motion for skillId: " + this.getSkillId()); return true; } if (motion.getInstantSkill() && hitTime != 0) { log.warn( "Instant and hitTime not 0! modified client_skills? player objectid: " + player.getObjectId()); return false; } else if (!motion.getInstantSkill() && hitTime == 0) { log.warn("modified client_skills! player objectid: " + player.getObjectId()); return false; } MotionTime motionTime = DataManager.MOTION_DATA.getMotionTime(motion.getName()); if (motionTime == null) { log.warn( "missing motiontime for motionName: " + motion.getName() + " skillId: " + this.getSkillId()); return true; } WeaponTypeWrapper weapons = new WeaponTypeWrapper( player.getEquipment().getMainHandWeaponType(), player.getEquipment().getOffHandWeaponType()); float serverTime = motionTime.getTimeForWeapon(player.getRace(), player.getGender(), weapons); int clientTime = hitTime; if (serverTime == 0) { log.warn( "missing weapon time for motionName: " + motion.getName() + " weapons: " + weapons.toString() + " skillId: " + this.getSkillId()); return true; } // adjust client time with ammotime long ammoTime = 0; double distance = MathUtil.getDistance(effector, firstTarget); if (getSkillTemplate().getAmmoSpeed() != 0) ammoTime = Math.round(distance / getSkillTemplate().getAmmoSpeed() * 1000); // checked with client clientTime -= ammoTime; // adjust servertime with motion play speed if (motion.getSpeed() != 100) { serverTime /= 100f; serverTime *= (float) motion.getSpeed(); } Stat2 attackSpeed = player.getGameStats().getAttackSpeed(); // adjust serverTime with attackSpeed if (attackSpeed.getBase() != attackSpeed.getCurrent()) serverTime *= ((float) attackSpeed.getCurrent() / (float) attackSpeed.getBase()); // tolerance if (duration == 0) serverTime *= 0.9f; else serverTime *= 0.5f; int finalTime = Math.round(serverTime); if (motion.getInstantSkill() && hitTime == 0) { this.serverTime = (int) ammoTime; } else { if (clientTime < finalTime) { // check for no animation Hacks if (SecurityConfig.NO_ANIMATION) { float clientTme = clientTime; float serverTme = serverTime; float checkTme = clientTme / serverTme; // check if values are too low if (clientTime < 0 || checkTme < SecurityConfig.NO_ANIMATION_VALUE) { if (SecurityConfig.NO_ANIMATION_KICK) { player.getClientConnection().close(new SM_QUIT_RESPONSE(), false); AuditLogger.info( player, "Modified client_skills:" + this.getSkillId() + " (clientTime<finalTime:" + clientTime + "/" + finalTime + ") Kicking Player: " + player.getName()); } else { AuditLogger.info( player, "Modified client_skills:" + this.getSkillId() + " (clientTime<finalTime:" + clientTime + "/" + finalTime + ")"); } return false; } } log.warn( "Possible modified client_skills:" + this.getSkillId() + " (clientTime<finalTime:" + clientTime + "/" + finalTime + ") player Name: " + player.getName()); } this.serverTime = hitTime; } player.setNextSkillUse(System.currentTimeMillis() + duration + finalTime); return true; }
@Override public void executeCommand(Player admin, String[] params) { if (admin.getAccessLevel() < AdminConfig.COMMAND_POWERUP) { PacketSendUtility.sendMessage(admin, "You dont have enough rights to execute this command"); return; } int index = 2; int i = 0; Player player = null; if (params.length != 0) { if ("help".startsWith(params[i])) { PacketSendUtility.sendMessage(admin, "0 to return to normal state"); PacketSendUtility.sendMessage(admin, "//powerup <Multiplier = 2>"); PacketSendUtility.sendMessage( admin, "Syntax: //powerup [playerName] [Multiplier = 2]\n" + " This command multiplies your actual power to the number given.\n" + " Using 0 as the Multiplier resets the power to normal.\n" + " Notice: You can ommit parameters between [], especially playerName.\n" + " Target: Named player, then targeted player, only then self.\n" + " Default Value: Multiplier is 2."); return; } player = World.getInstance().findPlayer(Util.convertName(params[i])); if (player == null) { VisibleObject target = admin.getTarget(); if (target instanceof Player) player = (Player) target; else player = admin; } else i++; try { index = Integer.parseInt(params[i]); } catch (NumberFormatException ex) { PacketSendUtility.sendMessage(admin, "Wrong input use //powerup help"); return; } catch (Exception ex2) { PacketSendUtility.sendMessage(admin, "Occurs an error."); return; } } if (index == 0) { player.getGameStats().recomputeStats(); player.getLifeStats().increaseHp(TYPE.HP, admin.getLifeStats().getMaxHp() + 1); player.getLifeStats().increaseMp(TYPE.MP, admin.getLifeStats().getMaxMp() + 1); PacketSendUtility.sendPacket(player, new SM_STATS_INFO(admin)); if (player == admin) PacketSendUtility.sendMessage(player, "You are now normal again."); else { PacketSendUtility.sendMessage( admin, "Player " + player.getName() + " is now normal again."); PacketSendUtility.sendMessage( player, "Admin " + admin.getName() + " made you normal again."); } return; } player.getGameStats().setStat(StatEnum.MAXMP, admin.getLifeStats().getMaxHp() * index); player.getGameStats().setStat(StatEnum.MAXHP, admin.getLifeStats().getMaxMp() * index); player .getGameStats() .setStat(StatEnum.BLOCK, admin.getGameStats().getStatBonus(StatEnum.BLOCK) * index); player .getGameStats() .setStat(StatEnum.EVASION, admin.getGameStats().getStatBonus(StatEnum.EVASION) * index); player .getGameStats() .setStat(StatEnum.HEALTH, admin.getGameStats().getStatBonus(StatEnum.HEALTH) * index); player .getGameStats() .setStat(StatEnum.ACCURACY, admin.getGameStats().getStatBonus(StatEnum.ACCURACY) * index); player .getGameStats() .setStat(StatEnum.PARRY, admin.getGameStats().getStatBonus(StatEnum.PARRY) * index); player .getGameStats() .setStat( StatEnum.MAIN_HAND_ACCURACY, admin.getGameStats().getStatBonus(StatEnum.MAIN_HAND_ACCURACY) * index); player .getGameStats() .setStat( StatEnum.MAIN_HAND_CRITICAL, admin.getGameStats().getStatBonus(StatEnum.MAIN_HAND_CRITICAL) * index); player .getGameStats() .setStat( StatEnum.MAIN_HAND_POWER, admin.getGameStats().getStatBonus(StatEnum.MAIN_HAND_POWER) * index); player .getGameStats() .setStat( StatEnum.MAIN_HAND_ATTACK_SPEED, admin.getGameStats().getStatBonus(StatEnum.MAIN_HAND_POWER) * index); player .getGameStats() .setStat( StatEnum.OFF_HAND_ACCURACY, admin.getGameStats().getStatBonus(StatEnum.OFF_HAND_ACCURACY) * index); player .getGameStats() .setStat( StatEnum.OFF_HAND_CRITICAL, admin.getGameStats().getStatBonus(StatEnum.OFF_HAND_CRITICAL) * index); player .getGameStats() .setStat( StatEnum.OFF_HAND_POWER, admin.getGameStats().getStatBonus(StatEnum.OFF_HAND_POWER) * index); player .getGameStats() .setStat( StatEnum.OFF_HAND_ATTACK_SPEED, admin.getGameStats().getStatBonus(StatEnum.OFF_HAND_ATTACK_SPEED) * index); player .getGameStats() .setStat( StatEnum.MAGICAL_ATTACK, admin.getGameStats().getStatBonus(StatEnum.MAGICAL_ATTACK) * index); player .getGameStats() .setStat( StatEnum.MAGICAL_ACCURACY, admin.getGameStats().getStatBonus(StatEnum.MAGICAL_ACCURACY) * index); player .getGameStats() .setStat( StatEnum.MAGICAL_CRITICAL, admin.getGameStats().getStatBonus(StatEnum.MAGICAL_CRITICAL) * index); player .getGameStats() .setStat( StatEnum.MAGICAL_RESIST, admin.getGameStats().getStatBonus(StatEnum.MAGICAL_RESIST) * index); player .getGameStats() .setStat( StatEnum.BOOST_MAGICAL_SKILL, admin.getGameStats().getStatBonus(StatEnum.BOOST_MAGICAL_SKILL) * index * 15); player .getGameStats() .setStat(StatEnum.REGEN_MP, admin.getGameStats().getStatBonus(StatEnum.REGEN_MP) * index); player .getGameStats() .setStat(StatEnum.REGEN_HP, admin.getGameStats().getStatBonus(StatEnum.REGEN_HP) * index); player.getLifeStats().increaseHp(TYPE.HP, admin.getLifeStats().getMaxHp() + 1); player.getLifeStats().increaseMp(TYPE.MP, admin.getLifeStats().getMaxMp() + 1); PacketSendUtility.sendPacket(player, new SM_STATS_INFO(admin)); if (player == admin) PacketSendUtility.sendMessage( player, "You are now " + index + " times more powerfull than before."); else { PacketSendUtility.sendMessage( admin, "Player " + player.getName() + " is now " + index + " times more powerfull than before."); PacketSendUtility.sendMessage( player, "Admin " + admin.getName() + " made you " + index + " times more powerfull than before."); } }