/** * @param range * @param obj1 * @param obj2 * @param includeZAxis * @return {@code true} if the two objects are within specified range between each other, {@code * false} otherwise */ public static boolean checkIfInRange( int range, L2Object obj1, L2Object obj2, boolean includeZAxis) { if ((obj1 == null) || (obj2 == null)) { return false; } if (obj1.getInstanceId() != obj2.getInstanceId()) { return false; } if (range == -1) { return true; // not limited } int rad = 0; if (obj1 instanceof L2Character) { rad += ((L2Character) obj1).getTemplate().getCollisionRadius(); } if (obj2 instanceof L2Character) { rad += ((L2Character) obj2).getTemplate().getCollisionRadius(); } double dx = obj1.getX() - obj2.getX(); double dy = obj1.getY() - obj2.getY(); double d = (dx * dx) + (dy * dy); if (includeZAxis) { double dz = obj1.getZ() - obj2.getZ(); d += (dz * dz); } return d <= ((range * range) + (2 * range * rad) + (rad * rad)); }
/** * Checks if the given object is inside the zone. * * @param object * @return */ public boolean isInsideZone(L2Object object) { return isInsideZone(object.getX(), object.getY(), object.getZ(), object.getInstanceId()); }
@Override protected void runImpl() { L2PcInstance player = getActiveChar(); if (player == null) { return; } if (!player.getAccessLevel().allowTransaction()) { player.sendMessage("Transactions are disabled for your current Access Level."); sendPacket(ActionFailed.STATIC_PACKET); return; } BuffInfo info = player.getEffectList().getBuffInfoByAbnormalType(AbnormalType.BOT_PENALTY); if (info != null) { for (AbstractEffect effect : info.getEffects()) { if (!effect.checkCondition(BotReportTable.TRADE_ACTION_BLOCK_ID)) { player.sendPacket(SystemMessageId.YOU_HAVE_BEEN_REPORTED_SO_ACTIONS_NOT_ALLOWED); player.sendPacket(ActionFailed.STATIC_PACKET); return; } } } final L2Object target = L2World.getInstance().findObject(_objectId); // If there is no target, target is far away or // they are in different instances (except multiverse) // trade request is ignored and there is no system message. if ((target == null) || !player.getKnownList().knowsObject(target) || ((target.getInstanceId() != player.getInstanceId()) && (player.getInstanceId() != -1))) { return; } // If target and acting player are the same, trade request is ignored // and the following system message is sent to acting player. if (target.getObjectId() == player.getObjectId()) { player.sendPacket(SystemMessageId.TARGET_IS_INCORRECT); return; } if (!target.isPlayer()) { player.sendPacket(SystemMessageId.INCORRECT_TARGET); return; } final L2PcInstance partner = target.getActingPlayer(); if (partner.isInOlympiadMode() || player.isInOlympiadMode()) { player.sendMessage( "A user currently participating in the Olympiad cannot accept or request a trade."); return; } info = partner.getEffectList().getBuffInfoByAbnormalType(AbnormalType.BOT_PENALTY); if (info != null) { for (AbstractEffect effect : info.getEffects()) { if (!effect.checkCondition(BotReportTable.TRADE_ACTION_BLOCK_ID)) { final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_REPORTED_AND_IS_BEING_INVESTIGATED); sm.addCharName(partner); player.sendPacket(sm); player.sendPacket(ActionFailed.STATIC_PACKET); return; } } } // L2J Customs: Karma punishment if (!Config.ALT_GAME_KARMA_PLAYER_CAN_TRADE && (player.getKarma() > 0)) { player.sendMessage("You cannot trade while you are in a chaotic state."); return; } if (!Config.ALT_GAME_KARMA_PLAYER_CAN_TRADE && (partner.getKarma() > 0)) { player.sendMessage("You cannot request a trade while your target is in a chaotic state."); return; } if (Config.JAIL_DISABLE_TRANSACTION && (player.isJailed() || partner.isJailed())) { player.sendMessage("You cannot trade while you are in in Jail."); return; } if ((player.getPrivateStoreType() != PrivateStoreType.NONE) || (partner.getPrivateStoreType() != PrivateStoreType.NONE)) { player.sendPacket(SystemMessageId.CANNOT_TRADE_DISCARD_DROP_ITEM_WHILE_IN_SHOPMODE); return; } if (player.isProcessingTransaction()) { if (Config.DEBUG) { _log.fine("Already trading with someone else."); } player.sendPacket(SystemMessageId.ALREADY_TRADING); return; } SystemMessage sm; if (partner.isProcessingRequest() || partner.isProcessingTransaction()) { if (Config.DEBUG) { _log.info("Transaction already in progress."); } sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_BUSY_TRY_LATER); sm.addString(partner.getName()); player.sendPacket(sm); return; } if (partner.getTradeRefusal()) { player.sendMessage("That person is in trade refusal mode."); return; } if (BlockList.isBlocked(partner, player)) { sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_ADDED_YOU_TO_IGNORE_LIST); sm.addCharName(partner); player.sendPacket(sm); return; } if (player.calculateDistance(partner, true, false) > 150) { player.sendPacket(SystemMessageId.TARGET_TOO_FAR); return; } player.onTransactionRequest(partner); partner.sendPacket(new SendTradeRequest(player.getObjectId())); sm = SystemMessage.getSystemMessage(SystemMessageId.REQUEST_C1_FOR_TRADE); sm.addString(partner.getName()); player.sendPacket(sm); }