Пример #1
0
  @Override
  public void processPacket(Client c, int packetType, int packetSize) {
    c.playerIndex = 0;
    c.npcIndex = 0;
    switch (packetType) {

        /** Attack player */
      case ATTACK_PLAYER:
        c.playerIndex = c.getInStream().readSignedWordBigEndian();
        if (PlayerHandler.players[c.playerIndex] == null) {
          break;
        }

        if (c.respawnTimer > 0) {
          break;
        }

        if (c.autocastId > 0) {
          c.autocasting = true;
        }

        if (!c.autocasting && c.spellId > 0) {
          c.spellId = 0;
        }
        c.mageFollow = false;
        c.spellId = 0;
        c.usingMagic = false;
        boolean usingBow = false;
        boolean usingOtherRangeWeapons = false;
        boolean usingArrows = false;
        boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185;
        for (int bowId : c.BOWS) {
          if (c.playerEquipment[c.playerWeapon] == bowId) {
            usingBow = true;
            for (int arrowId : c.ARROWS) {
              if (c.playerEquipment[c.playerArrows] == arrowId) {
                usingArrows = true;
              }
            }
          }
        }
        for (int otherRangeId : c.OTHER_RANGE_WEAPONS) {
          if (c.playerEquipment[c.playerWeapon] == otherRangeId) {
            usingOtherRangeWeapons = true;
          }
        }
        if (c.duelStatus == 5) {
          if (c.duelCount > 0) {
            c.sendMessage("The duel hasn't started yet!");
            c.playerIndex = 0;
            return;
          }
          if (c.duelRule[9]) {
            boolean canUseWeapon = false;
            for (int funWeapon : Config.FUN_WEAPONS) {
              if (c.playerEquipment[c.playerWeapon] == funWeapon) {
                canUseWeapon = true;
              }
            }
            if (!canUseWeapon) {
              c.sendMessage("You can only use fun weapons in this duel!");
              return;
            }
          }

          if (c.duelRule[2] && (usingBow || usingOtherRangeWeapons)) {
            c.sendMessage("Range has been disabled in this duel!");
            return;
          }
          if (c.duelRule[3] && !usingBow && !usingOtherRangeWeapons) {
            c.sendMessage("Melee has been disabled in this duel!");
            return;
          }
        }

        if ((usingBow || c.autocasting)
            && c.goodDistance(
                c.getX(),
                c.getY(),
                PlayerHandler.players[c.playerIndex].getX(),
                PlayerHandler.players[c.playerIndex].getY(),
                6)) {
          c.usingBow = true;
          c.stopMovement();
        }

        if (usingOtherRangeWeapons
            && c.goodDistance(
                c.getX(),
                c.getY(),
                PlayerHandler.players[c.playerIndex].getX(),
                PlayerHandler.players[c.playerIndex].getY(),
                3)) {
          c.usingRangeWeapon = true;
          c.stopMovement();
        }
        if (!usingBow) {
          c.usingBow = false;
        }
        if (!usingOtherRangeWeapons) {
          c.usingRangeWeapon = false;
        }

        if (!usingCross
            && !usingArrows
            && usingBow
            && c.playerEquipment[c.playerWeapon] < 4212
            && c.playerEquipment[c.playerWeapon] > 4223) {
          c.sendMessage("You have run out of arrows!");
          return;
        }
        if (c.getCombat().correctBowAndArrows() < c.playerEquipment[c.playerArrows]
            && Config.CORRECT_ARROWS
            && usingBow
            && !c.getCombat().usingCrystalBow()
            && c.playerEquipment[c.playerWeapon] != 9185) {
          c.sendMessage(
              "You can't use "
                  + c.getItems().getItemName(c.playerEquipment[c.playerArrows]).toLowerCase()
                  + "s with a "
                  + c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()
                  + ".");
          c.stopMovement();
          c.getCombat().resetPlayerAttack();
          return;
        }

        if (c.getCombat().checkReqs()) {
          c.followId = c.playerIndex;
          if (!c.usingMagic && !usingBow && !usingOtherRangeWeapons) {
            c.followDistance = 1;
            c.getPA().followPlayer();
          }
          if (c.attackTimer <= 0) {
            // c.sendMessage("Tried to attack...");
            // c.getCombat().attackPlayer(c.playerIndex);
            // c.attackTimer++;
          }
        }
        break;

        /** Attack player with magic */
      case MAGE_PLAYER:
        if (!c.mageAllowed) {
          c.mageAllowed = true;
          break;
        }
        // c.usingSpecial = false;
        // c.getItems().updateSpecialBar();

        c.playerIndex = c.getInStream().readSignedWordA();
        int castingSpellId = c.getInStream().readSignedWordBigEndian();
        c.usingMagic = false;
        if (PlayerHandler.players[c.playerIndex] == null) {
          break;
        }

        if (c.respawnTimer > 0) {
          break;
        }

        for (int i = 0; i < c.MAGIC_SPELLS.length; i++) {
          if (castingSpellId == c.MAGIC_SPELLS[i][0]) {
            c.spellId = i;
            c.usingMagic = true;
            break;
          }
        }

        if (c.autocasting) {
          c.autocasting = false;
        }

        if (!c.getCombat().checkReqs()) {
          break;
        }
        if (c.duelStatus == 5) {
          if (c.duelCount > 0) {
            c.sendMessage("The duel hasn't started yet!");
            c.playerIndex = 0;
            return;
          }
          if (c.duelRule[4]) {
            c.sendMessage("Magic has been disabled in this duel!");
            return;
          }
        }

        for (int r = 0; r < c.REDUCE_SPELLS.length; r++) { // reducing
          // spells,
          // confuse
          // etc
          if (PlayerHandler.players[c.playerIndex].REDUCE_SPELLS[r]
              == c.MAGIC_SPELLS[c.spellId][0]) {
            if (System.currentTimeMillis()
                    - PlayerHandler.players[c.playerIndex].reduceSpellDelay[r]
                < PlayerHandler.players[c.playerIndex].REDUCE_SPELL_TIME[r]) {
              c.sendMessage("That player is currently immune to this spell.");
              c.usingMagic = false;
              c.stopMovement();
              c.getCombat().resetPlayerAttack();
            }
            break;
          }
        }

        if (System.currentTimeMillis() - PlayerHandler.players[c.playerIndex].teleBlockDelay
                < PlayerHandler.players[c.playerIndex].teleBlockLength
            && c.MAGIC_SPELLS[c.spellId][0] == 12445) {
          c.sendMessage("That player is already affected by this spell.");
          c.usingMagic = false;
          c.stopMovement();
          c.getCombat().resetPlayerAttack();
        }

        /*
         * if(!c.getCombat().checkMagicReqs(c.spellId)) {
         * c.stopMovement(); c.getCombat().resetPlayerAttack(); break; }
         */

        if (c.usingMagic) {
          if (c.goodDistance(
              c.getX(),
              c.getY(),
              PlayerHandler.players[c.playerIndex].getX(),
              PlayerHandler.players[c.playerIndex].getY(),
              7)) {
            c.stopMovement();
          }
          if (c.getCombat().checkReqs()) {
            c.followId = c.playerIndex;
            c.mageFollow = true;
            if (c.attackTimer <= 0) {
              // c.getCombat().attackPlayer(c.playerIndex);
              // c.attackTimer++;
            }
          }
        }
        break;
    }
  }