Package org.moparscape.msc.gs.model

Examples of org.moparscape.msc.gs.model.Npc


    int damage = Formulae.calcRangeHit(owner.getCurStat(4),
        owner.getRangePoints(), affectedMob.getArmourPoints(), arrowID);

    if (affectedMob instanceof Npc) {
      Npc npc = (Npc) affectedMob;
      if (damage > 1 && npc.getID() == 477)
        damage = damage / 2;
    }
    if (!Formulae.looseArrow(damage)) {
      Item arrows = getArrows(arrowID);
      if (arrows == null) {
        world.registerItem(new Item(arrowID, affectedMob.getX(),
            affectedMob.getY(), 1, owner));
      } else {
        arrows.setAmount(arrows.getAmount() + 1);
      }
    }
    if (firstRun) {
      firstRun = false;
      if (affectedMob instanceof Player) {
        if (((Player) affectedMob).isSleeping()) {
          ((Player) affectedMob).getActionSender().sendWakeUp(false);
        }
        ((Player) affectedMob).getActionSender().sendMessage(
            owner.getUsername() + " is shooting at you!");
      }
    }
    if (affectedMob instanceof Npc) {
      Npc npc = (Npc) affectedMob;
      npc.getSyndicate().addDamage(owner, damage, Damage.RANGE_DAMAGE);
    }
    Projectile projectile = new Projectile(owner, affectedMob, 2);

    ArrayList<Player> playersToInform = new ArrayList<Player>();
    playersToInform.addAll(owner.getViewArea().getPlayersInView());
    playersToInform.addAll(affectedMob.getViewArea().getPlayersInView());
    for (Player p : playersToInform) {
      p.informOfProjectile(projectile);
    }

    if (GameEngine.getTime() - affectedMob.lastTimeShot > 500) {
      affectedMob.lastTimeShot = GameEngine.getTime();
      affectedMob.setLastDamage(damage);
      int newHp = affectedMob.getHits() - damage;
      affectedMob.setHits(newHp);

      for (Player p : playersToInform) {
        p.informOfModifiedHits(affectedMob);
      }
      if (affectedMob instanceof Player) {
        Player affectedPlayer = (Player) affectedMob;
        affectedPlayer.getActionSender().sendStat(3);
      }
      owner.getActionSender().sendSound("shoot");
      owner.setArrowFired();
      if (newHp <= 0) {
        affectedMob.killedBy(owner, false);
        owner.resetRange();
        if (owner instanceof Player) {
          if (affectedMob instanceof Npc) {
            Npc npc = (Npc) affectedMob;

            npc.getSyndicate().distributeExp(npc);
          }
        }
      } else {
        if (owner instanceof Player && affectedMob instanceof Npc) // We're
                                      // ranging
                                      // an
                                      // NPC,
                                      // so
                                      // make
                                      // it
                                      // chase
                                      // the
                                      // player.
        {
          final Npc npc = (Npc) affectedMob;
          final Player player = (Player) owner;

          if (npc.isBusy() || npc.getChasing() != null)
            return;

          npc.resetPath();
          npc.setChasing(player);

          // Radius is 0 to prevent wallhacking by NPCs. Easiest
          // method I
          // can come up with for now.
          Instance.getDelayedEventHandler().add(
              new WalkMobToMobEvent(affectedMob, owner, 0) {
                public void arrived() {
                  if (affectedMob.isBusy() || player.isBusy()) {
                    npc.setChasing(null);
                    this.stop();
                    return;
                  }

                  npc.resetPath();
                  player.setBusy(true);
                  player.resetPath();
                  player.resetAll();

                  player.setStatus(Action.FIGHTING_MOB);
                  player.getActionSender().sendSound(
                      "underattack");
                  player.getActionSender().sendMessage(
                      "You are under attack!");

                  npc.setLocation(player.getLocation(), true);
                  for (Player p : npc.getViewArea()
                      .getPlayersInView())
                    p.removeWatchedNpc(npc);

                  player.setBusy(true);
                  player.setSprite(9);
                  player.setOpponent(npc);
                  player.setCombatTimer();

                  npc.setBusy(true);
                  npc.setSprite(8);
                  npc.setOpponent(player);
                  npc.setCombatTimer();

                  npc.setChasing(null);

                  FightEvent fighting = new FightEvent(
                      player, npc, true);
                  fighting.setLastRun(0);
                  Instance.getDelayedEventHandler().add(
                      fighting);
                  this.stop();
                }

                public void failed() {
                  npc.setChasing(null);
                }
              });
          // target is still alive? is still around?
          if (!npc.isRemoved() || owner.withinRange(npc)) {
            return;
          }
          this.stop();
        }
      }
View Full Code Here


      attacker = affectedMob;
      opponent = owner;
    }

    if (attacker instanceof Npc) {
      Npc n = (Npc) attacker;
      if (attacker.getHits() <= 0) {
        n.resetCombat(CombatState.ERROR);
        owner.resetCombat(CombatState.ERROR);
        this.stop();
        return;
      }
    }
    if (opponent instanceof Npc) {
      Npc n = (Npc) opponent;
      if (opponent.getHits() <= 0) {
        n.resetCombat(CombatState.ERROR);
        owner.resetCombat(CombatState.ERROR);
        this.stop();
        return;
      }
    }
    if (opponent instanceof Player && attacker instanceof Player) {
      if (((Player) opponent).isSleeping()) {
        ((Player) opponent).getActionSender().sendWakeUp(false);
      }
    }

    /*
     * if(opponent.getHits() <= 0) { attacker.resetCombat(CombatState.WON);
     * opponent.resetCombat(CombatState.LOST); return; }
     */
    attacker.incHitsMade();
    if (attacker instanceof Npc && opponent.isPrayerActivated(12)) {
      return;
    }
    // int damage = (attacker instanceof Player && opponent instanceof
    // Player ? Formulae
    // .calcFightHit(attacker, opponent) : Formulae
    // .calcFightHitWithNPC(attacker, opponent));

    int damage = CombatFormulae.getNextHit(attacker, opponent);
    if (attacker instanceof Player && opponent instanceof Npc) {
      Npc npc = (Npc) opponent;

      int newDmg = damage;
      if (npc.getCurHits() - damage <= 0 && npc.getCurHits() > 0) {
        newDmg = npc.getCurHits();
      }
      npc.getSyndicate().addDamage(owner, newDmg, Damage.COMBAT_DAMAGE);
    }

    if (attacker instanceof Npc && opponent instanceof Player
        && attacker.getHitsMade() >= (attacked ? 4 : 3)) {
      Npc npc = (Npc) attacker;
      Player player = (Player) opponent;
      if (npc.getCurHits() <= npc.getDef().hits * 0.10
          && npc.getCurHits() > 0) {
        if (!npc.getLocation().inWilderness()
            && npc.getDef().attackable && !npc.getDef().aggressive) {
          boolean go = true;
          for (int i : Constants.GameServer.NPCS_THAT_DONT_RETREAT) {
            if (i == npc.getID()) {
              go = false;
              break;
            }
          }

          if (go) {
            player.getActionSender().sendSound("retreat");
            npc.unblock();
            npc.resetCombat(CombatState.RUNNING);
            player.resetCombat(CombatState.WAITING);
            npc.setRan(true);
            npc.setPath(new Path(attacker.getX(), attacker.getY(),
                DataConversions.random(npc.getLoc().minX(), npc
                    .getLoc().maxX()), DataConversions
                    .random(npc.getLoc().minY(), npc
                        .getLoc().maxY())));
            player.resetAll();
            player.getActionSender().sendMessage(
                "Your opponent is retreating");
            this.stop();
            return;
          }
        }
      }
    }

    opponent.setLastDamage(damage);
    int newHp = opponent.getHits() - damage;
    opponent.setHits(newHp);

    String combatSound = null;
    combatSound = damage > 0 ? "combat1b" : "combat1a";
    if (opponent instanceof Player) {
      if (attacker instanceof Npc) {
        Npc n = (Npc) attacker;
        if (n.hasArmor) {
          combatSound = damage > 0 ? "combat2b" : "combat2a";
        } else if (n.undead) {
          combatSound = damage > 0 ? "combat3b" : "combat3a";
        } else {
          combatSound = damage > 0 ? "combat1b" : "combat1a";
        }
      }
      Player opponentPlayer = ((Player) opponent);
      opponentPlayer.getActionSender().sendStat(3);
      opponentPlayer.getActionSender().sendSound(combatSound);
    }
    if (attacker instanceof Player) {
      if (opponent instanceof Npc) {
        Npc n = (Npc) opponent;
        if (n.hasArmor) {
          combatSound = damage > 0 ? "combat2b" : "combat2a";
        } else if (n.undead) {
          combatSound = damage > 0 ? "combat3b" : "combat3a";
        } else {
          combatSound = damage > 0 ? "combat1b" : "combat1a";
        }
      }
      Player attackerPlayer = (Player) attacker;
      attackerPlayer.getActionSender().sendSound(combatSound);
    }

    if (newHp <= 0) {

      Mob toLoot = attacker;

      // Logging.debug(opponent+" killed by "+attacker);

      if (attacker instanceof Player) {
        Player attackerPlayer = (Player) attacker;
        toLoot = attackerPlayer;
        if (opponent instanceof Player) {
          // Logging.debug(opponent+" killed by "+attacker);
          opponent.killedBy(attackerPlayer, false);
        }

        if (attacker instanceof Player && opponent instanceof Npc) {
          Npc npc = (Npc) opponent;
          npc.getSyndicate().distributeExp(npc);
        } else {
          int exp = DataConversions.roundUp(Formulae
              .combatExperience(opponent) / 4D);
          switch (attackerPlayer.getCombatStyle()) {
          case 0:
View Full Code Here

              return;
            }
            try {
              if (item.getID() == 59 && item.getX() == 106
                  && item.getY() == 1476) {
                Npc n = world.getNpc(37, 103, 107, 1476, 1479);

                if (n != null && !n.inCombat()) {
                  owner.informOfNpcMessage(new ChatMessage(n,
                      "Nobody steals from this gang!",
                      owner));
                  fight(owner, n);
                }
              } else if (item.getID() == 501
                  && item.getX() == 333 && item.getY() == 434) {
                Npc zam = world.getNpc(140, 328, 333, 433, 438,
                    true);
                if (zam != null && !zam.inCombat()) {
                  owner.informOfNpcMessage(new ChatMessage(
                      zam, "a curse be upon you", owner));
                  for (int i = 0; i < 3; i++) {
                    int stat = owner.getCurStat(i);
                    if (stat < 3)
View Full Code Here

    super.matchRunning = false;
  }

  private boolean inBounds() {
    if (owner instanceof Npc) {
      Npc npc = (Npc) owner;
      loc = npc.getLoc();

      if (affectedMob.getX() < (loc.minX() - 4)
          || affectedMob.getX() > (loc.maxX() + 4)
          || affectedMob.getY() < (loc.minY() - 4)
          || affectedMob.getY() > (loc.maxY() + 4)) {
View Full Code Here

    case 71: // Cast on npc
      if (player.isDueling()) {
        return;
      }
      if (spell.getSpellType() == 2) {
        Npc affectedNpc = world.getNpc(p.readShort());
        if (affectedNpc == null) { // This shouldn't happen
          player.resetPath();
          return;
        }

        if (affectedNpc.getID() == 35) {
          player.getActionSender()
              .sendMessage(
                  "Delrith can not be attacked without the Silverlight sword");
          return;
        }
View Full Code Here

    }
    if (GameEngine.getTime() - player.getLastNPCChat() < 1500)
      return;
    player.setLastNPCChat(GameEngine.getTime());
    player.resetAll();
    final Npc affectedNpc = world.getNpc(p.readShort());
    if (affectedNpc == null) {
      return;
    }
    world.addEntryToSnapshots(new Activity(player.getUsername(), player
        .getUsername()
        + " talked to NPC ("
        + affectedNpc.getID()
        + ") at: "
        + player.getX()
        + "/"
        + player.getY()
        + "|"
        + affectedNpc.getX() + "/" + affectedNpc.getY()));

    player.setFollowing(affectedNpc);
    player.setStatus(Action.TALKING_MOB);
    Instance.getDelayedEventHandler().add(
        new WalkToMobEvent(player, affectedNpc, 1) {
          public void arrived() {
            owner.resetFollowing();
            owner.resetPath();
            if (owner.isBusy() || owner.isRanging()
                || !owner.nextTo(affectedNpc)
                || owner.getStatus() != Action.TALKING_MOB) {
              return;
            }
            owner.resetAll();
            if (affectedNpc.isBusy()) {
              owner.getActionSender().sendMessage(
                  affectedNpc.getDef().getName()
                      + " is currently busy.");
              return;
            }
            affectedNpc.resetPath();
            if (Formulae.getDirection(owner, affectedNpc) != -1) {
              affectedNpc.setSprite(Formulae.getDirection(owner,
                  affectedNpc));
              owner.setSprite(Formulae.getDirection(affectedNpc,
                  owner));
            }
View Full Code Here

            case 5: // Weaken
            case 9: // Curse

              if (affectedMob instanceof Npc) {
                Npc np = (Npc) affectedMob;
                if (spellID == 1) {
                  if (np.confused) {
                    owner.getActionSender()
                        .sendMessage(
                            "Your oponent is already confused");
                    return;
                  }
                }
                if (spellID == 5) {
                  if (np.weakend) {
                    owner.getActionSender()
                        .sendMessage(
                            "Your oponent is already weakend");
                    return;
                  }
                }
                if (spellID == 9) {
                  if (np.cursed) {
                    owner.getActionSender()
                        .sendMessage(
                            "Your oponent is already cursed");
                    return;
                  }
                }
              } /*
               * else { player.getActionSender().sendMessage(
               * "Currently Unavaliable"); return; }
               */

              if (affectedMob instanceof Player
                  && !owner.isDueling()) {
                Player affectedPlayer = (Player) affectedMob;
                owner.setSkulledOn(affectedPlayer);
              }
              int stat = -1;
              if (spellID == 1)
                stat = 0;
              else if (spellID == 5)
                stat = 2;
              else if (spellID == 9)
                stat = 1;

              int statLv = -1;
              if (affectedMob instanceof Player) {
                Player affectedPlayer = (Player) affectedMob;
                statLv = affectedPlayer.getCurStat(stat);

              } else if (affectedMob instanceof Npc) {
                Npc n = (Npc) affectedMob;
                if (stat == 0)
                  statLv = n.getAttack();
                else if (stat == 1)
                  statLv = n.getDefense();
                else if (stat == 2)
                  statLv = n.getStrength();
              }
              if (statLv == -1 || stat == -1)
                return;

              if (affectedMob instanceof Player) {
                Player affectedPlayer = (Player) affectedMob;
                if (affectedPlayer.getCurStat(stat) < affectedPlayer
                    .getMaxStat(stat)
                    - (affectedPlayer.getMaxStat(stat) / 20)) {
                  owner.getActionSender().sendMessage(
                      "Your opponent is already stunned");
                  return;
                } else {
                  affectedPlayer.setCurStat(
                      stat,
                      affectedPlayer.getCurStat(stat)
                          - (affectedPlayer
                              .getMaxStat(stat) / 20));
                  affectedPlayer.getActionSender()
                      .sendStats();
                  affectedPlayer
                      .getActionSender()
                      .sendMessage(
                          owner.getUsername()
                              + " has stunned you");
                }

              } else if (affectedMob instanceof Npc) {
                Npc n = (Npc) affectedMob;
                if (spellID == 1)
                  n.confused = true;
                else if (spellID == 5)
                  n.weakend = true;
                else if (spellID == 9)
                  n.cursed = true;

              }
              if (!checkAndRemoveRunes(owner, spell)) {
                return;
              }

              Projectile projectilez = new Projectile(owner,
                  affectedMob, 1);
              ArrayList<Player> playersToInformm = new ArrayList<Player>();
              playersToInformm.addAll(owner.getViewArea()
                  .getPlayersInView());
              playersToInformm.addAll(affectedMob.getViewArea()
                  .getPlayersInView());
              for (Player p : playersToInformm) {
                p.informOfProjectile(projectilez);
                p.informOfModifiedHits(affectedMob);
              }

              finalizeSpell(owner, spell);

              owner.getActionSender().sendInventory();
              owner.getActionSender().sendStat(6);
              return;
            case 19: // Crumble undead

              if (affectedMob instanceof Player) {
                owner.getActionSender()
                    .sendMessage(
                        "You can not use this spell on a Player");
                return;
              }
              if (!checkAndRemoveRunes(owner, spell)) {
                return;
              }
              Npc n = (Npc) affectedMob;
              int damaga = Formulae.Rand(1, 5);
              boolean foundd = false;
              if (n.undead) {
                foundd = true;
                damaga = Formulae
                    .Rand(3,
                        Constants.GameServer.CRUMBLE_UNDEAD_MAX);
              }

              if (!foundd) {
                owner.getActionSender()
                    .sendMessage(
                        "You must use this spell on undead monsters only");
                return;
              }
              if (Formulae.Rand(0, 8) == 2)
                damaga = 0;

              Projectile projectilee = new Projectile(owner,
                  affectedMob, 1);
              affectedMob.setLastDamage(damaga);
              int newp = affectedMob.getHits() - damaga;
              affectedMob.setHits(newp);
              ArrayList<Player> playersToInforms = new ArrayList<Player>();
              playersToInforms.addAll(owner.getViewArea()
                  .getPlayersInView());
              playersToInforms.addAll(affectedMob.getViewArea()
                  .getPlayersInView());
              for (Player p : playersToInforms) {
                p.informOfProjectile(projectilee);
                p.informOfModifiedHits(affectedMob);
              }
              if (newp <= 0) {
                affectedMob.killedBy(owner, owner.isDueling());
                if (owner instanceof Player
                    && affectedMob instanceof Npc) {
                  ((Npc) affectedMob).getSyndicate()
                      .distributeExp((Npc) affectedMob);
                }
              }
              finalizeSpell(owner, spell);

              owner.getActionSender().sendInventory();
              owner.getActionSender().sendStat(6);
              return;
            case 42: // vulnerability
            case 45: // Enfeeble
            case 47: // Stun
              owner.getActionSender().sendMessage(
                  "@or1@This spell is not yet implemented.");
              break;
            case 25:
              if (owner.getLocation().inWilderness()) {
                owner.getActionSender().sendMessage(
                    "Can not use this spell in wilderness");
                return;
              }
              if (affectedMob instanceof Npc) {
                if (((Npc) affectedMob).getID() == 477) {
                  player.getActionSender()
                      .sendMessage(
                          "The dragon seems immune to this spell");
                  return;
                }
              }
              boolean flagispro = false;
              ListIterator<InvItem> iterator22 = owner
                  .getInventory().getItems().listIterator();
              while (iterator22.hasNext()) {
                InvItem cape = (InvItem) iterator22.next();
                if (cape.id == 1000 && cape.wielded) {
                  flagispro = flagispro || true;
                }
                // else {flag = false;}
              }
              if (flagispro) {
                if (!owner.isCharged()) {
                  owner.getActionSender().sendMessage(
                      "@red@You are not charged!");
                }

                if (!checkAndRemoveRunes(owner, spell)) {
                  return;
                }
                if (affectedMob instanceof Player
                    && !owner.isDueling()) {
                  Player affectedPlayer = (Player) affectedMob;
                  owner.setSkulledOn(affectedPlayer);
                }
                int damag = Formulae.calcSpellHit(20,
                    owner.getMagicPoints());
                if (affectedMob instanceof Player) {
                  Player affectedPlayer = (Player) affectedMob;
                  affectedPlayer
                      .getActionSender()
                      .sendMessage(
                          owner.getUsername()
                              + " is shooting at you!");
                }
                Projectile projectil = new Projectile(owner,
                    affectedMob, 1);
                // godSpellObject(affectedMob, 33);
                affectedMob.setLastDamage(damag);
                int newhp = affectedMob.getHits() - damag;
                affectedMob.setHits(newhp);
                ArrayList<Player> playersToInfor = new ArrayList<Player>();
                playersToInfor.addAll(owner.getViewArea()
                    .getPlayersInView());
                playersToInfor.addAll(affectedMob.getViewArea()
                    .getPlayersInView());
                for (Player p : playersToInfor) {
                  p.informOfProjectile(projectil);
                  p.informOfModifiedHits(affectedMob);
                }
                if (affectedMob instanceof Player) {
                  Player affectedPlayer = (Player) affectedMob;
                  affectedPlayer.getActionSender()
                      .sendStat(3);
                }
                if (newhp <= 0) {
                  affectedMob.killedBy(owner,
                      owner.isDueling());
                }
                owner.getActionSender().sendInventory();
                owner.getActionSender().sendStat(6);
                finalizeSpell(owner, spell);
                break;
              } else {
                owner.getActionSender()
                    .sendMessage(
                        "You need to be wearing the Iban Staff to cast this spell!");
                return;
              }
            case 33:
              if (owner.getLocation().inWilderness()) {
                owner.getActionSender().sendMessage(
                    "Can not use this spell in wilderness");
                return;
              }
              if (affectedMob instanceof Npc) {
                if (((Npc) affectedMob).getID() == 477) {
                  player.getActionSender()
                      .sendMessage(
                          "The dragon seems immune to this spell");
                  return;
                }
              }
              boolean flag = false;
              ListIterator<InvItem> iterator = owner
                  .getInventory().getItems().listIterator();
              while (iterator.hasNext()) {
                InvItem cape = iterator.next();
                if (cape.id == 1217 && cape.wielded) {
                  flag = true;
                }
                // else {flag = false;}
              }
              if (flag) {
                if (!owner.isCharged()) {
                  owner.getActionSender().sendMessage(
                      "@red@You are not charged!");
                }

                if (!checkAndRemoveRunes(owner, spell)) {
                  return;
                }
                if (affectedMob instanceof Player
                    && !owner.isDueling()) {
                  Player affectedPlayer = (Player) affectedMob;
                  owner.setSkulledOn(affectedPlayer);
                }
                int damag = Formulae.calcGodSpells(owner,
                    affectedMob);
                // int damag = Formulae.calcSpellHit(max,
                // owner.getMagicPoints());
                if (affectedMob instanceof Player) {
                  Player affectedPlayer = (Player) affectedMob;
                  affectedPlayer
                      .getActionSender()
                      .sendMessage(
                          owner.getUsername()
                              + " is shooting at you!");
                }
                Projectile projectil = new Projectile(owner,
                    affectedMob, 1);
                godSpellObject(affectedMob, 33);
                affectedMob.setLastDamage(damag);
                int newhp = affectedMob.getHits() - damag;
                affectedMob.setHits(newhp);
                ArrayList<Player> playersToInfor = new ArrayList<Player>();
                playersToInfor.addAll(owner.getViewArea()
                    .getPlayersInView());
                playersToInfor.addAll(affectedMob.getViewArea()
                    .getPlayersInView());
                for (Player p : playersToInfor) {
                  p.informOfProjectile(projectil);
                  p.informOfModifiedHits(affectedMob);
                }
                if (affectedMob instanceof Player) {
                  Player affectedPlayer = (Player) affectedMob;
                  affectedPlayer.getActionSender()
                      .sendStat(3);
                }
                if (newhp <= 0) {
                  affectedMob.killedBy(owner,
                      owner.isDueling());
                }
                owner.getActionSender().sendInventory();
                owner.getActionSender().sendStat(6);
                finalizeSpell(owner, spell);
                break;
              } else {
                owner.getActionSender()
                    .sendMessage(
                        "You need to be wearing the Staff of Guthix to cast this spell!");
                return;
              }
            case 34:
              if (affectedMob instanceof Npc) {
                if (((Npc) affectedMob).getID() == 477) {
                  player.getActionSender()
                      .sendMessage(
                          "The dragon seems immune to this spell");
                  return;
                }
              }
              if (owner.getLocation().inWilderness()) {
                owner.getActionSender().sendMessage(
                    "Can not use this spell in wilderness");
                return;
              }
              boolean bool = false;
              ListIterator<InvItem> iterat = owner.getInventory()
                  .getItems().listIterator();
              while (iterat.hasNext()) {
                InvItem cape = iterat.next();
                if (cape.id == 1218 && cape.wielded) {
                  bool = bool || true;
                }
                // else {flag = false;}
              }
              if (bool) {
                if (!owner.isCharged()) {
                  owner.getActionSender().sendMessage(
                      "@red@You are not charged!");
                }

                if (!checkAndRemoveRunes(owner, spell)) {
                  return;
                }
                if (affectedMob instanceof Player
                    && !owner.isDueling()) {
                  Player affectedPlayer = (Player) affectedMob;
                  owner.setSkulledOn(affectedPlayer);
                }
                // int damag = Rand(0, 25);
                int damag = Formulae.calcGodSpells(owner,
                    affectedMob);
                if (affectedMob instanceof Player) {
                  Player affectedPlayer = (Player) affectedMob;
                  affectedPlayer
                      .getActionSender()
                      .sendMessage(
                          owner.getUsername()
                              + " is shooting at you!");
                }
                Projectile projectil = new Projectile(owner,
                    affectedMob, 1);
                godSpellObject(affectedMob, 34);
                affectedMob.setLastDamage(damag);
                int newhp = affectedMob.getHits() - damag;
                affectedMob.setHits(newhp);
                ArrayList<Player> playersToInfor = new ArrayList<Player>();
                playersToInfor.addAll(owner.getViewArea()
                    .getPlayersInView());
                playersToInfor.addAll(affectedMob.getViewArea()
                    .getPlayersInView());
                for (Player p : playersToInfor) {
                  p.informOfProjectile(projectil);
                  p.informOfModifiedHits(affectedMob);
                }
                if (affectedMob instanceof Player) {
                  Player affectedPlayer = (Player) affectedMob;
                  affectedPlayer.getActionSender()
                      .sendStat(3);
                }
                if (newhp <= 0) {
                  affectedMob.killedBy(owner,
                      owner.isDueling());
                }
                owner.getActionSender().sendInventory();
                owner.getActionSender().sendStat(6);
                finalizeSpell(owner, spell);
                break;
              } else {
                owner.getActionSender()
                    .sendMessage(
                        "You need to be wearing the Staff of Saradomin to cast this spell!");
                return;
              }
            case 35:
              if (affectedMob instanceof Npc) {
                if (((Npc) affectedMob).getID() == 477) {
                  player.getActionSender()
                      .sendMessage(
                          "The dragon seems immune to this spell");
                  return;
                }
              }
              if (owner.getLocation().inWilderness()) {
                owner.getActionSender().sendMessage(
                    "Can not use this spell in wilderness");
                return;
              }
              boolean flag2 = false;
              ListIterator<InvItem> iterato = owner
                  .getInventory().getItems().listIterator();
              while (iterato.hasNext()) {
                InvItem cape = iterato.next();
                if (cape.id == 1216 && cape.wielded) {
                  flag2 = flag2 || true;
                }
                // else {flag = false;}
              }
              if (flag2) {
                if (!owner.isCharged()) {
                  owner.getActionSender().sendMessage(
                      "@red@You are not charged!");
                }

                if (!checkAndRemoveRunes(owner, spell)) {
                  return;
                }
                if (affectedMob instanceof Player
                    && !owner.isDueling()) {
                  Player affectedPlayer = (Player) affectedMob;
                  owner.setSkulledOn(affectedPlayer);
                }
                // int damag = Rand(0, 25);
                int damag = Formulae.calcGodSpells(owner,
                    affectedMob);
                if (affectedMob instanceof Player) {
                  Player affectedPlayer = (Player) affectedMob;
                  affectedPlayer
                      .getActionSender()
                      .sendMessage(
                          owner.getUsername()
                              + " is shooting at you!");
                }
                Projectile projectil = new Projectile(owner,
                    affectedMob, 1);
                godSpellObject(affectedMob, 35);
                affectedMob.setLastDamage(damag);
                int newhp = affectedMob.getHits() - damag;
                affectedMob.setHits(newhp);
                ArrayList<Player> playersToInfor = new ArrayList<Player>();
                playersToInfor.addAll(owner.getViewArea()
                    .getPlayersInView());
                playersToInfor.addAll(affectedMob.getViewArea()
                    .getPlayersInView());
                for (Player p : playersToInfor) {
                  p.informOfProjectile(projectil);
                  p.informOfModifiedHits(affectedMob);
                }
                if (affectedMob instanceof Player) {
                  Player affectedPlayer = (Player) affectedMob;
                  affectedPlayer.getActionSender()
                      .sendStat(3);
                }
                if (newhp <= 0) {
                  affectedMob.killedBy(owner,
                      owner.isDueling());
                }
                owner.getActionSender().sendInventory();
                owner.getActionSender().sendStat(6);
                finalizeSpell(owner, spell);
                break;
              } else {
                owner.getActionSender()
                    .sendMessage(
                        "You need to be wearing the Staff of Zaramorak to cast this spell");
                return;
              }

            default:
              if (spell.getReqLevel() == 62
                  || spell.getReqLevel() == 65
                  || spell.getReqLevel() == 70
                  || spell.getReqLevel() == 75) {
                if (!Config.members) {
                  player.getActionSender()
                      .sendMessage(
                          "Must be on a members server to use this");
                  return;
                }
                if (player.getLocation().inWilderness()
                    && Config.f2pWildy) {
                  player.getActionSender()
                      .sendMessage(
                          "You can not cast this Members spell in F2P Wilderness");
                  return;
                }
              }
              if (!checkAndRemoveRunes(owner, spell)) {
                return;
              }

              int max = -1;
              for (int i = 0; i < Constants.GameServer.SPELLS.length; i++) {
                if (spell.getReqLevel() == Constants.GameServer.SPELLS[i][0])
                  max = Constants.GameServer.SPELLS[i][1];
              }
              if (player.getMagicPoints() > 30)
                max += 1;
              int damage = Formulae.calcSpellHit(max,
                  owner.getMagicPoints());
              if (affectedMob instanceof Player) {
                Player affectedPlayer = (Player) affectedMob;
                affectedPlayer.getActionSender().sendMessage(
                    owner.getUsername()
                        + " is shooting at you!");
              }

              if (affectedMob instanceof Npc) {
                Npc npcc = (Npc) affectedMob;
                npcc.getSyndicate().addDamage(owner, damage,
                    Damage.MAGIC_DAMAGE);
              }
              Projectile projectile = new Projectile(owner,
                  affectedMob, 1);
              affectedMob.setLastDamage(damage);
              int newHp = affectedMob.getHits() - damage;
              affectedMob.setHits(newHp);

              ArrayList<Player> playersToInform = new ArrayList<Player>();
              playersToInform.addAll(owner.getViewArea()
                  .getPlayersInView());
              playersToInform.addAll(affectedMob.getViewArea()
                  .getPlayersInView());
              for (Player p : playersToInform) {
                p.informOfProjectile(projectile);
                p.informOfModifiedHits(affectedMob);
              }
              if (affectedMob instanceof Player) {
                Player affectedPlayer = (Player) affectedMob;
                affectedPlayer.getActionSender().sendStat(3);
              }
              if (newHp <= 0) {
                if (affectedMob instanceof Player)
                  affectedMob.killedBy(owner,
                      owner.isDueling());

                if (owner instanceof Player) {
                  Player toLoot = owner;
                  if (affectedMob instanceof Npc) {
                    Npc npc = (Npc) affectedMob;
                    npc.getSyndicate().distributeExp(npc);
                  }
                  if (!(affectedMob instanceof Player))
                    affectedMob.killedBy(toLoot,
                        owner.isDueling());
                }
              }
              finalizeSpell(owner, spell);
              if (newHp > 0) {
                if (affectedMob instanceof Npc) {
                  final Npc npc = (Npc) affectedMob;

                  if (npc.isBusy()
                      || npc.getChasing() != null)
                    return;

                  npc.resetPath();
                  npc.setChasing(player);

                  // Radius is 0 to prevent wallhacking by
                  // NPCs. Easiest method I can come up with
                  // for now.
                  Instance.getDelayedEventHandler().add(
                      new WalkMobToMobEvent(affectedMob,
                          owner, 0) {
                        public void arrived() {
                          if (affectedMob.isBusy()
                              || owner.isBusy()) {
                            npc.setChasing(null);
                            return;
                          }
                          if (affectedMob.inCombat()
                              || owner.inCombat()) {
                            npc.setChasing(null);
                            return;
                          }

                          npc.resetPath();
                          player.resetAll();
                          player.resetPath();
                          player.setBusy(true);
                          player.setStatus(Action.FIGHTING_MOB);
                          player.getActionSender()
                              .sendSound(
                                  "underattack");
                          player.getActionSender()
                              .sendMessage(
                                  "You are under attack!");

                          npc.setLocation(player
                              .getLocation(),
                              true);
                          for (Player p : npc
                              .getViewArea()
                              .getPlayersInView())
                            p.removeWatchedNpc(npc);

                          player.setSprite(9);
                          player.setOpponent(npc);
                          player.setCombatTimer();

                          npc.setBusy(true);
                          npc.setSprite(8);
                          npc.setOpponent(player);
                          npc.setCombatTimer();

                          npc.setChasing(null);
                          FightEvent fighting = new FightEvent(
                              player, npc, true);
                          fighting.setLastRun(0);
                          world.getDelayedEventHandler()
                              .add(fighting);
                        }

                        public void failed() {
                          npc.setChasing(null);
                        }
                      });
                }
              }
              break;
View Full Code Here

                    break;
                  }
                  if (owner.getY() > 523) {
                    if (owner.getCurStat(10) < 68) {
                      owner.setBusy(true);
                      Npc masterFisher = world.getNpc(
                          368, 582, 588, 524, 527);
                      if (masterFisher != null) {
                        owner.informOfNpcMessage(new ChatMessage(
                            masterFisher,
                            "Hello only the top fishers are allowed in here",
                            owner));
                      }
                      world.getDelayedEventHandler().add(
                          new ShortEvent(owner) {
                            public void action() {
                              owner.setBusy(false);
                              owner.getActionSender()
                                  .sendMessage(
                                      "You need a fishing level of 68 to enter");
                            }
                          });
                    } else {
                      doDoor();
                      owner.teleport(586, 523, false);
                    }
                  } else {
                    doDoor();
                    owner.teleport(586, 524, false);
                  }
                  break;
                case 55:

                  if (true) {
                    owner.getActionSender()
                        .sendMessage(
                            "Currently closed off at the moment!");
                    return;
                  }
                  // Hi jacking for champs etc guild doors.
                  /*
                   * if (object.getX() == 150 && object.getY()
                   * == 554) { // Champs if (owner.getY() >=
                   * 554) { doDoor(); owner.teleport(150, 553,
                   * false); return; }
                   *
                   * doDoor(); owner.teleport(150, 554,
                   * false); return; } if (object.getX() ==
                   * 372 && object.getY() == 441) { // Heroes
                   * if (owner.getY() <= 440) { doDoor();
                   * owner.teleport(372, 441, false); return;
                   * } if (owner.getSkillTotal() < 850) {
                   * owner.getActionSender() .sendMessage(
                   * "You need a skill total of 850 or more to enter"
                   * ); return; } doDoor();
                   * owner.teleport(372, 440, false); return;
                   * } // Legends guild gate is done in //
                   * ObjectAction
                   *
                   * if (object.getX() != 268 || object.getY()
                   * != 3381) { break; } if (owner.getY() <=
                   * 3380) { if (owner.getCurStat(14) < 60) {
                   * owner.setBusy(true); Npc dwarf =
                   * world.getNpc(191, 265, 270, 3379, 3380);
                   * if (dwarf != null) {
                   * owner.informOfNpcMessage(new ChatMessage(
                   * dwarf,
                   * "Hello only the top miners are allowed in here"
                   * , owner)); }
                   * world.getDelayedEventHandler().add( new
                   * ShortEvent(owner) { public void action()
                   * { owner.setBusy(false);
                   * owner.getActionSender() .sendMessage(
                   * "You need a mining level of 60 to enter"
                   * ); } }); } else { doDoor();
                   * owner.teleport(268, 3381, false); } }
                   * else { doDoor(); owner.teleport(268,
                   * 3380, false); } break;
                   */
                case 68: // Crafting Guild Door
                  if (object.getX() != 347
                      || object.getY() != 601) {
                    return;
                  }
                  if (owner.getY() <= 600) {
                    if (owner.getCurStat(12) < 40) {
                      owner.setBusy(true);
                      Npc master = world.getNpc(231, 341,
                          349, 599, 612);
                      if (master != null) {
                        owner.informOfNpcMessage(new ChatMessage(
                            master,
                            "Hello only the top crafters are allowed in here",
                            owner));
                      }
                      world.getDelayedEventHandler().add(
                          new ShortEvent(owner) {
                            public void action() {
                              owner.setBusy(false);
                              owner.getActionSender()
                                  .sendMessage(
                                      "You need a crafting level of 40 to enter");
                            }
                          });
                    } else if (!owner.getInventory()
                        .wielding(191)) {
                      Npc master = world.getNpc(231, 341,
                          349, 599, 612);
                      if (master != null) {
                        owner.informOfNpcMessage(new ChatMessage(
                            master,
                            "Where is your apron?",
                            owner));
                      }
                    } else {
                      doDoor();
                      owner.teleport(347, 601, false);
                    }
                  } else {
                    doDoor();
                    owner.teleport(347, 600, false);
                  }
                  break;
                case 43: // Cooking Guild Door
                  if (object.getX() != 179
                      || object.getY() != 488) {
                    break;
                  }
                  if (owner.getY() >= 488) {
                    if (owner.getCurStat(7) < 32) {
                      owner.setBusy(true);
                      Npc chef = world.getNpc(133, 176,
                          181, 480, 487);
                      if (chef != null) {
                        owner.informOfNpcMessage(new ChatMessage(
                            chef,
                            "Hello only the top cooks are allowed in here",
                            owner));
                      }
                      world.getDelayedEventHandler().add(
                          new ShortEvent(owner) {
                            public void action() {
                              owner.setBusy(false);
                              owner.getActionSender()
                                  .sendMessage(
                                      "You need a cooking level of 32 to enter");
                            }
                          });
                    } else if (!owner.getInventory()
                        .wielding(192)) {
                      Npc chef = world.getNpc(133, 176,
                          181, 480, 487);
                      if (chef != null) {
                        owner.informOfNpcMessage(new ChatMessage(
                            chef,
                            "Where is your chef's hat?",
                            owner));
                      }
                    } else {
                      doDoor();
                      owner.teleport(179, 487, false);
                    }
                  } else {
                    doDoor();
                    owner.teleport(179, 488, false);
                  }
                  break;

                case 146: // Magic Guild Door
                  if (object.getX() != 599
                      || object.getY() != 757) {
                    break;
                  }
                  if (owner.getX() <= 598) {
                    if (owner.getCurStat(6) < 66) {
                      owner.setBusy(true);
                      Npc wizard = world.getNpc(513, 596,
                          597, 755, 758);
                      if (wizard != null) {
                        owner.informOfNpcMessage(new ChatMessage(
                            wizard,
                            "Hello only the top wizards are allowed in here",
View Full Code Here

      sh = p.readShort();
    } catch (NullPointerException npe) {
      return;
    }

    final Npc affectedNpc = world.getNpc(sh);
    final InvItem item = player.getInventory().getSlot(p.readShort());
    if (affectedNpc == null || item == null) { // This shouldn't happen
      return;
    }
    world.addEntryToSnapshots(new Activity(player.getUsername(), player
        .getUsername()
        + " used item "
        + item.getDef().getName()
        + "("
        + item.id
        + ")"
        + " [CMD: "
        + item.getDef().getCommand()
        + "] ON A NPC "
        + affectedNpc.getDef().getName()
        + "("
        + affectedNpc.getID()
        + ")"
        + " at: "
        + player.getX()
        + "/"
        + player.getY()));

    player.setFollowing(affectedNpc);
    player.setStatus(Action.USING_INVITEM_ON_NPC);
    Instance.getDelayedEventHandler().add(
        new WalkToMobEvent(player, affectedNpc, 1) {
          public void arrived() {
            owner.resetPath();
            owner.resetFollowing();
            if (!owner.getInventory().contains(item.id)
                || owner.isBusy()
                || owner.isRanging()
                || !owner.nextTo(affectedNpc)
                || affectedNpc.isBusy()
                || owner.getStatus() != Action.USING_INVITEM_ON_NPC) {
              return;
            }
            owner.resetAll();
            switch (affectedNpc.getID()) {
            case 2: // Sheep
              if (!itemId(new int[] { 144 })) {
                owner.getActionSender().sendMessage(
                    "Nothing interesting happens.");
                return;
              }
              owner.setBusy(true);
              affectedNpc.blockedBy(owner);
              affectedNpc.resetPath();
              showBubble();
              owner.getActionSender().sendMessage(
                  "You attempt to shear the sheep");
              Instance.getDelayedEventHandler().add(
                  new ShortEvent(owner) {
                    public void action() {
                      if (DataConversions.random(0, 4) != 0) {
                        owner.getActionSender()
                            .sendMessage(
                                "You get some wool");
                        owner.getInventory().add(145,
                            1, false);
                        owner.getActionSender()
                            .sendInventory();
                      } else {
                        owner.getActionSender()
                            .sendMessage(
                                "The sheep manages to get away from you!");
                      }
                      owner.setBusy(false);
                      affectedNpc.unblock();
                    }
                  });
              break;
            case 217:// Cow
            case 6:
              if (item.id != 21) {
                owner.getActionSender().sendMessage(
                    "Nothing interesting happens.");
                return;
              }
              owner.setBusy(true);
              affectedNpc.blockedBy(owner);
              affectedNpc.resetPath();
              Bubble bubble = new Bubble(owner, 21);
              for (Player p : owner.getViewArea()
                  .getPlayersInView()) {
                p.informOfBubble(bubble);
              }
              owner.getActionSender().sendMessage(
                  "You try to milk the cow.");
              Instance.getDelayedEventHandler().add(
                  new ShortEvent(owner) {
                    public void action() {
                      if (DataConversions.random(0, 4) != 0) {
                        if (!owner.getInventory()
                            .remove(item.id,
                                item.amount,
                                false))
                          return;
                        owner.getActionSender()
                            .sendMessage(
                                "You get some milk");
                        owner.getInventory().add(22, 1,
                            false);
                        owner.getActionSender()
                            .sendInventory();
                      } else {
                        owner.getActionSender()
                            .sendMessage(
                                "The cow runs away before you could get any milk");
                      }
                      owner.setBusy(false);
                      affectedNpc.unblock();
                    }
                  });
              break;
            case 160:// Thrander
              int newID;
              switch (item.id) {
              case 308: // Bronze top
                newID = 117;
                break;
              case 312: // Iron top
                newID = 8;
                break;
              case 309: // Steel top
                newID = 118;
                break;
              case 313: // Black top
                newID = 196;
                break;
              case 310: // Mithril top
                newID = 119;
                break;
              case 311: // Adamantite top
                newID = 120;
                break;
              case 407: // Rune top
                newID = 401;
                break;
              case 117: // Bronze body
                newID = 308;
                break;
              case 8: // Iron body
                newID = 312;
                break;
              case 118: // Steel body
                newID = 309;
                break;
              case 196: // Black body
                newID = 313;
                break;
              case 119: // Mithril body
                newID = 310;
                break;
              case 120: // Adamantite body
                newID = 311;
                break;
              case 401: // Rune body
                newID = 407;
                break;
              case 214: // Bronze skirt
                newID = 206;
                break;
              case 215: // Iron skirt
                newID = 9;
                break;
              case 225: // Steel skirt
                newID = 121;
                break;
              case 434: // Black skirt
                newID = 248;
                break;
              case 226: // Mithril skirt
                newID = 122;
                break;
              case 227: // Adamantite skirt
                newID = 123;
                break;
              case 406: // Rune skirt
                newID = 402;
                break;
              case 206: // Bronze legs
                newID = 214;
                break;
              case 9: // Iron legs
                newID = 215;
                break;
              case 121: // Steel legs
                newID = 225;
                break;
              case 248: // Black legs
                newID = 434;
                break;
              case 122: // Mithril legs
                newID = 226;
                break;
              case 123: // Adamantite legs
                newID = 227;
                break;
              case 402: // Rune legs
                newID = 406;
                break;
              default:
                owner.getActionSender().sendMessage(
                    "Nothing interesting happens.");
                return;
              }
              final InvItem newPlate = new InvItem(newID, 1);
              owner.getActionSender().sendMessage(
                  "Thrander hammers the armour");
              Instance.getDelayedEventHandler().add(
                  new ShortEvent(owner) {
                    public void action() {
                      if (owner.getInventory()
                          .remove(item.id,
                              item.amount, false)) {
                        owner.getInventory().add(
                            newPlate.id,
                            newPlate.amount, false);
                        owner.getActionSender()
                            .sendInventory();
                      }
                      affectedNpc.unblock();
                    }
                  });
              affectedNpc.blockedBy(owner);
              break;
            default:
              owner.getActionSender().sendMessage(
                  "Nothing interesting happens.");
              break;
View Full Code Here

    final Player player = (Player) session.getAttachment();
    if (player.isBusy()) {
      return;
    }
    final Mob affectedMob = world.getNpc(serverIndex);
    final Npc affectedNpc = (Npc) affectedMob;
    if (affectedNpc == null || affectedMob == null || player == null)
      return;
    if (!World.isMembers()) {
      player.getActionSender().sendMessage(
          "This feature is only avaliable on a members server");
      return;
    }

    world.addEntryToSnapshots(new Activity(player.getUsername(), player
        .getUsername()
        + " thieved a ("
        + affectedNpc.getDef().name
        + ")"));
    new org.moparscape.msc.gs.skill.thieving.Npc(player, affectedNpc)
        .pickpocket();

  }
View Full Code Here

TOP

Related Classes of org.moparscape.msc.gs.model.Npc

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.