/** 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)); }
@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()); } }