/**
   * Places a domestic animal in the world. If it matches it's owner's zone, then try to keep it's
   * position.
   *
   * @param animal The domestic animal.
   * @param player The owner.
   * @return <code>true</code> if placed.
   */
  protected static boolean placeAnimalIntoWorld(final DomesticAnimal animal, final Player player) {
    final StendhalRPZone playerZone = player.getZone();

    /*
     * Only add directly if required attributes are present
     */
    if (animal.has("zoneid") && animal.has("x") && animal.has("y")) {
      final StendhalRPZone zone = SingletonRepository.getRPWorld().getZone(animal.get("zoneid"));

      /*
       * Player could have been forced to change zones
       */
      if (zone == playerZone) {
        if (StendhalRPAction.placeat(zone, animal, animal.getX(), animal.getY())) {
          return true;
        }
      }
    }

    return StendhalRPAction.placeat(playerZone, animal, player.getX(), player.getY());
  }
  /**
   * Places the player (and his/her sheep if there is one) into the world on login.
   *
   * @param object RPObject representing the player
   * @param player Player-object
   */
  public static void placePlayerIntoWorldOnLogin(final RPObject object, final Player player) {
    StendhalRPZone zone = null;

    String zoneName = System.getProperty("stendhal.forcezone");
    if (zoneName != null) {
      zone = SingletonRepository.getRPWorld().getZone(zoneName);
      zone.placeObjectAtEntryPoint(player);
      return;
    }

    try {
      if (object.has("zoneid") && object.has("x") && object.has("y")) {
        if (Version.checkCompatibility(object.get("release"), Debug.VERSION)) {
          zone = SingletonRepository.getRPWorld().getZone(object.get("zoneid"));
        } else {
          if (player.getLevel() >= 2) {
            TutorialNotifier.newrelease(player);
          }
        }
        player.put("release", Debug.VERSION);
      }
    } catch (final RuntimeException e) {
      // If placing the player at its last position
      // fails, we reset to default zone
      logger.warn("Cannot place player at its last position. Using default", e);
    }

    if (zone != null) {
      /*
       * Put the player in their zone (use placeat() for collision rules)
       */
      if (!StendhalRPAction.placeat(zone, player, player.getX(), player.getY())) {
        logger.warn("Cannot place player at their last position: " + player.getName());
        zone = null;
      }
    }

    if (zone == null) {
      /*
       * Fallback to default zone
       */
      final String defaultZoneName = getDefaultZoneForPlayer(player);
      zone = SingletonRepository.getRPWorld().getZone(defaultZoneName);

      if (zone == null) {
        logger.error("Unable to locate default zone [" + defaultZoneName + "]");
        return;
      }

      zone.placeObjectAtEntryPoint(player);
    }
  }
Ejemplo n.º 3
0
 /**
  * function for emulating killing of creature by player.
  *
  * @param name - creature's name
  */
 private void killSpider(String name) {
   final Creature creature = new Creature();
   creature.put("class", "");
   creature.put("subclass", "");
   creature.setName(name);
   creature.setHP(1);
   creature.setAtkXP(1);
   creature.setDefXP(1);
   creature.setSounds(new LinkedList<String>());
   final Creature spider = new Creature(creature);
   spider.registerObjectsForNotification(observer);
   player.teleport(basement, 5, 5, null, player);
   StendhalRPAction.placeat(basement, spider, 51, 50);
   spider.onDead(player, true);
 }