/** Tests for successful placement of an offer. */
  @Test
  public void testSuccessfullOfferPlacement() {
    final SpeakerNPC npc = getNPC("Harold");
    final Engine en = npc.getEngine();
    player.addXP(1700);

    Item item = SingletonRepository.getEntityManager().getItem("axe");
    StackableItem playersMoney =
        (StackableItem) SingletonRepository.getEntityManager().getItem("money");
    Integer price = Integer.valueOf(1500);
    playersMoney.setQuantity(price);
    player.equipToInventoryOnly(item);
    player.equipToInventoryOnly(playersMoney);

    assertTrue(en.step(player, "hello"));
    assertEquals("Welcome to Semos trading center. How can I #help you?", getReply(npc));

    assertTrue(en.step(player, "sell axe 150000"));
    assertEquals(
        "Do you want to sell an axe for 150000 money? It would cost you 1500 money.",
        getReply(npc));

    assertTrue(en.step(player, "yes"));
    assertEquals(
        "I added your offer to the trading center and took the fee of 1500.", getReply(npc));

    assertTrue(en.step(player, "bye"));
    assertEquals(
        "Visit me again to see available offers, make a new offer or fetch your earnings!",
        getReply(npc));
  }
  /** Tests for executeNonameSeed. */
  @Test
  public void testExecuteNonameSeed() {
    final Seed seed = (Seed) SingletonRepository.getEntityManager().getItem("seed");
    final Player player = PlayerTestHelper.createPlayer("bob");
    assertNotNull(player);
    final StendhalRPZone zone = new StendhalRPZone("zone");
    SingletonRepository.getRPWorld().addRPZone(zone);
    zone.add(player);

    assertNotNull(seed);
    zone.add(seed);
    seed.setPosition(1, 0);

    assertTrue(seed.onUsed(player));

    final Entity entity = player.getZone().getEntityAt(1, 0);
    assertNotNull(entity);
    if (entity instanceof FlowerGrower) {
      final FlowerGrower flg = (FlowerGrower) entity;
      flg.setToFullGrowth();
      flg.onUsed(player);
      assertNull(player.getZone().getEntityAt(1, 0));
      assertTrue(player.isEquipped("lilia"));
    } else {
      fail("seed produced non flowergrower");
    }
  }
  /** Tests for getHistory. */
  @Test
  public void testgetHistory() {
    final Player player = PlayerTestHelper.createPlayer("bob");
    assertTrue(bfh.getHistory(player).isEmpty());
    player.setQuest("beer_hayunn", "");
    final List<String> history = new LinkedList<String>();
    history.add("I have talked to Hayunn.");
    assertEquals(history, bfh.getHistory(player));

    player.setQuest("beer_hayunn", "rejected");
    history.add("I do not want to make Hayunn drunk.");
    assertEquals(history, bfh.getHistory(player));

    player.setQuest("beer_hayunn", "start");
    history.remove("I do not want to make Hayunn drunk.");
    history.add("I promised to buy him a beer from Margaret in Semos Tavern.");
    assertEquals(history, bfh.getHistory(player));

    player.equipToInventoryOnly(SingletonRepository.getEntityManager().getItem("beer"));
    history.add("I have a bottle of beer.");
    assertEquals(history, bfh.getHistory(player));
    player.setQuest("beer_hayunn", "done");
    history.add("I gave the beer to Hayunn. He paid me 20 gold coins and I got some experience.");
    assertEquals(history, bfh.getHistory(player));
  }
 private double adjustFactorBasedOnMinLevel(String item) {
   if (itemToRepair == null) {
     itemToRepair = SingletonRepository.getEntityManager().getItem(item);
   }
   // reset again
   itemToRepair = null;
   // TODO adjust similar to min level adjustment
   return REPAIR_PRICE_FACTOR;
 }
  /** Test selling a container item. */
  @Test
  public void testSellContainer() {
    final SpeakerNPC npc = getNPC("Harold");
    final Engine en = npc.getEngine();
    player.addXP(1700);

    Item item = SingletonRepository.getEntityManager().getItem("keyring");
    StackableItem playersMoney =
        (StackableItem) SingletonRepository.getEntityManager().getItem("money");
    Integer price = Integer.valueOf(1500);
    playersMoney.setQuantity(price);
    player.equipToInventoryOnly(item);
    player.equipToInventoryOnly(playersMoney);

    Item key = SingletonRepository.getEntityManager().getItem("dungeon silver key");
    item.getSlot("content").add(key);

    assertTrue(en.step(player, "hello"));
    assertEquals("Welcome to Semos trading center. How can I #help you?", getReply(npc));

    // Try first selling it when it's not empty
    assertTrue(en.step(player, "sell keyring 150000"));
    assertEquals("Please empty your keyring first.", getReply(npc));
    assertTrue(player.isEquipped("keyring"));
    assertTrue(player.isEquipped("dungeon silver key"));

    // Then after emptying it
    item.getSlot("content").clear();
    assertTrue(en.step(player, "sell keyring 150000"));
    assertEquals(
        "Do you want to sell a keyring for 150000 money? It would cost you 1500 money.",
        getReply(npc));

    assertTrue(en.step(player, "yes"));
    assertEquals(
        "I added your offer to the trading center and took the fee of 1500.", getReply(npc));
    assertFalse(player.isEquipped("keyring"));
    assertFalse(player.isEquipped("dungeon silver key"));

    assertTrue(en.step(player, "bye"));
    assertEquals(
        "Visit me again to see available offers, make a new offer or fetch your earnings!",
        getReply(npc));
  }
  /** Tests for executeSeedInBag. */
  @Test
  public void testExecuteSeedInBag() {
    final Seed seed = (Seed) SingletonRepository.getEntityManager().getItem("seed");
    final Player player = PlayerTestHelper.createPlayer("bob");
    assertNotNull(player);
    final StendhalRPZone zone = new StendhalRPZone("zone");
    SingletonRepository.getRPWorld().addRPZone(zone);
    zone.add(player);

    assertNotNull(seed);
    player.equip("bag", seed);

    assertFalse(seed.onUsed(player));
  }
Exemple #7
0
 @Override
 protected boolean useMe(final Player player) {
   this.removeOne();
   String itemName;
   itemName = ITEMS[Rand.rand(ITEMS.length)];
   final Item item = SingletonRepository.getEntityManager().getItem(itemName);
   if ("easter egg".equals(itemName)) {
     item.setBoundTo(player.getName());
   }
   player.sendPrivateText("Congratulations, you've got " + Grammar.a_noun(itemName) + "!");
   player.equipOrPutOnGround(item);
   player.notifyWorldAboutChanges();
   return true;
 }
 private void equipPlayer(Player player) {
   StackableItem money = (StackableItem) SingletonRepository.getEntityManager().getItem("money");
   money.setQuantity(5000);
   player.equipToInventoryOnly(money);
   StackableItem potions =
       (StackableItem) SingletonRepository.getEntityManager().getItem("greater potion");
   potions.setQuantity(5000);
   player.equipToInventoryOnly(potions);
   if (!player.isEquipped("chaos dagger")) {
     Item first = (Item) player.getSlot("rhand").getFirst();
     player.drop(first);
     Item dagger = SingletonRepository.getEntityManager().getItem("chaos dagger");
     player.equip("rhand", dagger);
   }
   if (!player.isEquipped("chaos shield")) {
     Item first = (Item) player.getSlot("lhand").getFirst();
     player.drop(first);
     Item shield = SingletonRepository.getEntityManager().getItem("chaos shield");
     player.equip("lhand", shield);
   }
   if (!player.isEquipped("black helmet")) {
     Item first = (Item) player.getSlot("head").getFirst();
     player.drop(first);
     Item helmet = SingletonRepository.getEntityManager().getItem("black helmet");
     player.equip("head", helmet);
   }
   if (!player.isEquipped("elvish legs")) {
     Item first = (Item) player.getSlot("legs").getFirst();
     player.drop(first);
     Item legs = SingletonRepository.getEntityManager().getItem("elvish legs");
     player.equip("legs", legs);
   }
   if (!player.isEquipped("killer boots")) {
     Item first = (Item) player.getSlot("feet").getFirst();
     player.drop(first);
     Item boots = SingletonRepository.getEntityManager().getItem("killer boots");
     player.equip("feet", boots);
   }
   if (!player.isEquipped("green dragon cloak")) {
     Item first = (Item) player.getSlot("cloak").getFirst();
     player.drop(first);
     Item cloak = SingletonRepository.getEntityManager().getItem("green dragon cloak");
     player.equip("cloak", cloak);
   }
 }
  /** Tests for execute. */
  @Test
  public void testExecute() {
    final Seed seed = (Seed) SingletonRepository.getEntityManager().getItem("seed");
    final Player player = PlayerTestHelper.createPlayer("bob");
    assertNotNull(player);
    final StendhalRPZone zone = new StendhalRPZone("zone");
    SingletonRepository.getRPWorld().addRPZone(zone);
    zone.add(player);

    assertNotNull(seed);
    zone.add(seed);
    seed.setPosition(1, 0);

    assertTrue(seed.onUsed(player));

    assertNotNull(player.getZone().getEntityAt(1, 0));
    assertTrue(player.getZone().getEntityAt(1, 0) instanceof FlowerGrower);
  }
  /** Tests for isValidContained. */
  @Test
  public void testIsValidContained() {
    MockStendlRPWorld.get();
    final Player bob = PlayerTestHelper.createPlayer("bob");
    final StendhalRPZone zone = new StendhalRPZone("dropzone");
    final Item dropitem = SingletonRepository.getEntityManager().getItem("money");
    assertNotNull(dropitem);
    zone.add(bob);
    assertTrue(bob.equipToInventoryOnly(dropitem));
    assertNotNull(dropitem.getID().getObjectID());
    final RPAction action = new RPAction();
    action.put(EquipActionConsts.BASE_ITEM, dropitem.getID().getObjectID());

    action.put(EquipActionConsts.BASE_OBJECT, bob.getID().getObjectID());
    action.put(EquipActionConsts.BASE_SLOT, "bag");
    MockStendlRPWorld.get().addRPZone(zone);
    assertNotNull(bob.getZone());

    final SourceObject so = SourceObject.createSourceObject(action, bob);
    assertTrue("Unreachable slot", so.isValid());
  }
  public static void main(final String[] args) throws Exception {
    new RPClassGenerator().createRPClasses();
    final CreatureGroupsXMLLoader loader = new CreatureGroupsXMLLoader("/data/conf/creatures.xml");
    final List<DefaultCreature> creatures = loader.load();

    Collections.sort(
        creatures,
        new Comparator<DefaultCreature>() {
          @Override
          public int compare(final DefaultCreature o1, final DefaultCreature o2) {
            return o1.getLevel() - o2.getLevel();
          }
        });

    final int[] atkLevels = new int[HIGHEST_LEVEL + 1];
    final int[] defLevels = new int[HIGHEST_LEVEL + 1];

    for (int level = 0; level < atkLevels.length; level++) {
      // help newbies a bit, so don't start at real stats, but a bit lower
      atkLevels[level] = (int) Math.round(Math.log(level + 4) * 9 - 10);
      defLevels[level] = (int) Math.round(Math.log(level + 4) * 20 + level - 26);
    }

    final EntityManager em = SingletonRepository.getEntityManager();

    final Item shield = em.getItem("wooden shield");
    final Item armor = em.getItem("dress");
    final Item helmet = em.getItem("leather helmet");
    final Item legs = em.getItem("leather legs");
    final Item boots = em.getItem("leather boots");

    player = (Player) new PlayerTransformer().transform(new RPObject());
    player.equip("lhand", shield);
    player.equip("rhand", em.getItem("club"));
    player.equip("armor", armor);
    player.equip("head", helmet);
    player.equip("legs", legs);
    player.equip("feet", boots);

    // Setup the list of creatures to balance
    Collection<DefaultCreature> creaturesToBalance;
    if (args.length > 0) {
      Collection<String> names = Arrays.asList(args);
      creaturesToBalance = new ArrayList<DefaultCreature>();

      for (DefaultCreature creature : creatures) {
        if (names.contains(creature.getCreatureName())) {
          creaturesToBalance.add(creature);
        }
      }
    } else {
      // default to all of them
      creaturesToBalance = creatures;
    }

    for (final DefaultCreature creature : creaturesToBalance) {
      final int level = creature.getLevel();

      if (creature.getLevel() > HIGHEST_LEVEL) {
        continue;
      }

      final Creature target = creature.getCreature();
      final Optimizer optimizer = new Optimizer(target);

      player.setLevel(level);
      player.setBaseHP(100 + 10 * level);
      player.setAtk(atkLevels[level]);
      player.setDef(defLevels[level]);

      equip(player, level);

      System.out.println("Player(" + level + ") vs " + creature.getCreatureName());

      durationThreshold = DEFAULT_DURATION_THRESHOLD;

      boolean balanced = false;
      int tries = 0;
      while (!balanced) {
        final Pair<Integer, Integer> results = combat(player, target, ROUNDS);
        final int meanTurns = results.first();
        final int meanLeftHP = results.second();

        final int proposedXPValue = (int) ((2 * creature.getLevel() + 1) * (meanTurns / 2.0));
        creature.setLevel(creature.getLevel(), proposedXPValue);

        System.out.println(
            "Target ATK: "
                + target.getAtk()
                + "/DEF: "
                + target.getDef()
                + "/HP: "
                + target.getBaseHP()
                + "\t Turns: "
                + meanTurns
                + "\tLeft HP:"
                + meanLeftHP);

        if (isCorrectResult(level, meanTurns, meanLeftHP / (double) player.getBaseHP())) {
          balanced = true;
        } else {
          optimizer.step(meanLeftHP, meanTurns);

          System.out.println(
              "New ATK: "
                  + target.getAtk()
                  + "/DEF: "
                  + target.getDef()
                  + "/HP: "
                  + target.getBaseHP());
        }

        // relax convergence criteria for pathological cases
        tries++;
        if (tries % 200 == 0) {
          durationThreshold *= 1.1;
          System.out.println(target.getName() + ": changed threshold to " + durationThreshold);
        }
      }

      boolean changed = false;

      if (creature.getAtk() != target.getAtk()) {
        changed = true;
      }

      if (creature.getDef() != target.getDef()) {
        changed = true;
      }

      if (creature.getHP() != target.getBaseHP()) {
        changed = true;
      }

      System.out.print("BALANCED: ");
      final StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.append(creature.getCreatureName());
      stringBuilder.append("(");
      stringBuilder.append(creature.getLevel());
      stringBuilder.append(")\t");
      if (changed) {
        stringBuilder.append("*\t");
      } else {
        stringBuilder.append(" \t");
      }
      stringBuilder.append("ATK: ");
      stringBuilder.append(target.getAtk());
      stringBuilder.append("\t\tDEF: ");
      stringBuilder.append(target.getDef());
      stringBuilder.append("\t\tHP: ");
      stringBuilder.append(target.getBaseHP());
      System.out.println(stringBuilder.toString());
    }
  }