diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java index 4f7ad4bed..f11ee4c82 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java @@ -20,7 +20,7 @@ public final class AndorsTrailApplication extends Application { public static final boolean DEVELOPMENT_VALIDATEDATA = true; public static final boolean DEVELOPMENT_DEBUGMESSAGES = true; public static final boolean DEVELOPMENT_INCOMPATIBLE_SAVEGAMES = DEVELOPMENT_DEBUGRESOURCES || true; - public static final int CURRENT_VERSION = DEVELOPMENT_INCOMPATIBLE_SAVEGAMES ? 999 : 30; + public static final int CURRENT_VERSION = DEVELOPMENT_INCOMPATIBLE_SAVEGAMES ? 999 : 31; public static final String CURRENT_VERSION_DISPLAY = "0.7.0dev"; public final WorldContext world = new WorldContext(); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java index f9d9b34f7..a6dd4d403 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java @@ -213,6 +213,7 @@ public final class ConversationActivity extends Activity implements OnKeyListene intent.setData(Uri.parse("content://com.gpl.rpg.AndorsTrail/shop")); Dialogs.addMonsterIdentifiers(intent, npc); startActivityForResult(intent, MainActivity.INTENTREQUEST_SHOP); + ConversationActivity.this.finish(); return; } else if (phraseID.equalsIgnoreCase(ConversationCollection.PHRASE_ATTACK)) { ConversationActivity.this.setResult(ACTIVITYRESULT_ATTACK); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/DebugInterface.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/DebugInterface.java index 03ff00baa..b3734576d 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/DebugInterface.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/DebugInterface.java @@ -11,6 +11,7 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.context.ViewContext; import com.gpl.rpg.AndorsTrail.context.WorldContext; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; @SuppressWarnings("unused") public final class DebugInterface { @@ -114,6 +115,16 @@ public final class DebugInterface { mainActivity.showToast("DEBUG: given 10000 exp", Toast.LENGTH_SHORT); } })*/ + ,new DebugButton("reset", new OnClickListener() { + @Override + public void onClick(View arg0) { + for(PredefinedMap map : world.maps.predefinedMaps) { + map.lastVisitTime = 1; + map.resetIfNotRecentlyVisited(); + } + mainActivity.showToast("DEBUG: maps respawned", Toast.LENGTH_SHORT); + } + }) ,new DebugButton("hp", new OnClickListener() { @Override public void onClick(View arg0) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java index 59b84154f..03f9a8546 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java @@ -21,7 +21,6 @@ import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.actor.Player; import com.gpl.rpg.AndorsTrail.model.item.ItemContainer; import com.gpl.rpg.AndorsTrail.model.item.ItemType; -import com.gpl.rpg.AndorsTrail.model.item.Loot; import com.gpl.rpg.AndorsTrail.resource.tiles.TileCollection; import com.gpl.rpg.AndorsTrail.view.ShopItemContainerAdapter; import com.gpl.rpg.AndorsTrail.view.ShopItemContainerAdapter.OnContainerItemClickedListener; @@ -70,9 +69,7 @@ public final class ShopActivity extends TabActivity implements OnContainerItemCl shoplist_buy = (ListView) h.findViewById(R.id.shop_buy_list); shoplist_sell = (ListView) h.findViewById(R.id.shop_sell_list); - Loot merchantLoot = new Loot(); - npc.dropList.createRandomLoot(merchantLoot, player); - container_buy = merchantLoot.items; + container_buy = npc.getShopItems(player); HashSet iconIDs = world.tileManager.getTileIDsFor(container_buy); iconIDs.addAll(world.tileManager.getTileIDsFor(player.inventory)); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java index c4e73ea70..e35c2340b 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java @@ -8,6 +8,7 @@ import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.controller.Constants; import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection; import com.gpl.rpg.AndorsTrail.model.item.DropList; +import com.gpl.rpg.AndorsTrail.model.item.ItemContainer; import com.gpl.rpg.AndorsTrail.model.item.Loot; import com.gpl.rpg.AndorsTrail.util.Coord; import com.gpl.rpg.AndorsTrail.util.CoordRect; @@ -25,6 +26,7 @@ public final class Monster extends Actor { public final int exp; public final DropList dropList; public final String faction; + private ItemContainer shopItems = null; public final int monsterClass; public Monster(MonsterType monsterType, Coord position) { @@ -47,6 +49,16 @@ public final class Monster extends Actor { if (this.dropList == null) return; this.dropList.createRandomLoot(container, player); } + public ItemContainer getShopItems(Player player) { + if (shopItems != null) return shopItems; + Loot loot = new Loot(); + shopItems = loot.items; + this.dropList.createRandomLoot(loot, player); + return shopItems; + } + public void resetShopItems() { + this.shopItems = null; + } public boolean isAgressive() { return phraseID == null || forceAggressive; @@ -78,6 +90,11 @@ public final class Monster extends Actor { this.forceAggressive = src.readBoolean(); this.faction = monsterType.faction; this.monsterClass = monsterType.monsterClass; + if (fileversion >= 31) { + if (src.readBoolean()) { + this.shopItems = new ItemContainer(src, world, fileversion); + } + } } private static Monster readFromParcel_pre_v0610(DataInputStream src, int fileversion, MonsterType monsterType) throws IOException { @@ -95,5 +112,11 @@ public final class Monster extends Actor { dest.writeUTF(monsterTypeID); super.writeToParcel(dest, flags); dest.writeBoolean(forceAggressive); + if (shopItems != null) { + dest.writeBoolean(true); + shopItems.writeToParcel(dest, flags); + } else { + dest.writeBoolean(false); + } } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/MonsterSpawnArea.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/MonsterSpawnArea.java index 668a9bdd1..741188962 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/MonsterSpawnArea.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/MonsterSpawnArea.java @@ -83,6 +83,12 @@ public final class MonsterSpawnArea { monsters.clear(); quantity.current = 0; } + + public void resetShops() { + for (Monster m : monsters) { + m.resetShopItems(); + } + } // ====== PARCELABLE =================================================================== diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java index 0b70cef99..5a1a5bc16 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java @@ -232,7 +232,8 @@ public final class PredefinedMap { // We reset all non-unique spawn areas. This keeps the savegame file smaller, thus reducing load and save times. Also keeps the running memory usage slightly lower. for(MonsterSpawnArea a : spawnAreas) { - if (!a.isUnique) a.reset(); + if (a.isUnique) a.resetShops(); + else a.reset(); } splatters.clear(); lastVisitTime = VISIT_RESET;