From: oskar.wiksten@gmail.com Date: Sat, 8 Oct 2011 09:56:19 +0000 (+0000) Subject: Updated unbalanced droplists for Izthiels. X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=e65768c81625c393be1a88d9e050211e44a69872;p=users%2Fmchehab%2Fandors-trail.git Updated unbalanced droplists for Izthiels. Added additional selftests for unbalanced monster drops. git-svn-id: https://andors-trail.googlecode.com/svn/trunk@170 08aca716-68be-ccc6-4d58-36f5abd142ac --- diff --git a/AndorsTrail/res/values/content_droplist.xml b/AndorsTrail/res/values/content_droplist.xml index 65cd666..3fc8fa8 100644 --- a/AndorsTrail/res/values/content_droplist.xml +++ b/AndorsTrail/res/values/content_droplist.xml @@ -164,6 +164,7 @@ {gem4|1|1|10|} {health|1|1|10|} {bone|1|1|10|} + {gloves_life|1|1|1/1000|} }|}; {cave_serpent|{ {gold|3|10|70|} @@ -601,8 +602,8 @@ {fieldcritter_3|{{gold|3|17|70|}{gland|1|1|30|}{ring1|1|1|5|}{ring2|1|1|5|}}|}; {rivertroll|{{gold|0|70|70|}{bone|3|5|50|}{meat|3|5|30|}{club_fine_wooden|1|1|100|}}|}; -{izthiel|{{gold|3|15|70|}{izthiel_claw|1|1|30|}{ring_jinxed1|1|1|5|}{ring2|1|1|5|}}|}; -{izthiel_4|{{gold|3|40|70|}{izthiel_claw|1|1|30|}{ring_jinxed1|1|1|20|}{ring2|1|1|20|}}|}; +{izthiel|{{gold|3|15|70|}{izthiel_claw|1|1|30|}{ring_jinxed1|1|1|1|}{ring2|1|1|5|}}|}; +{izthiel_4|{{gold|3|40|70|}{izthiel_claw|1|1|30|}{ring_jinxed1|1|1|1|}{ring2|1|1|20|}{shadowfang|1|1|1/1000|}}|}; {frog|{{gold|0|3|70|}}|}; {frog_3|{{gold|0|3|70|}{gland|1|1|30|}}|}; {iqhan_lesser|{{gold|1|5|70|}{iqhan_pendant|1|1|1|}{shirt_torn|1|1|5|}{dagger0|1|1|5|}}|}; diff --git a/AndorsTrail/res/values/content_itemlist.xml b/AndorsTrail/res/values/content_itemlist.xml index 89c97ce..b189383 100644 --- a/AndorsTrail/res/values/content_itemlist.xml +++ b/AndorsTrail/res/values/content_itemlist.xml @@ -320,6 +320,8 @@ {chaosreaper|items_weapons:49|Chaosreaper|0|3|1|339|1||||4|-30|||0|2||||0||||||1||||||{{chaotic_grip|5|3|50|}}|||||||}; {izthiel_claw|items_misc:47|Izthiel claw|21||1|1||||||||||||||1|1|6|||||||||||||||||}; {iqhan_pendant|items_necklaces_1:2|Iqhan pendant|6||1|10|1|||||6|||||||||||||||||||||||||||}; +{shadowfang|items_weapons_3:41|Shadowfang|0|3|1|512|1|-20|||4|40|||2|5||||0||||||1|||||{{fatigue_minor|1|3|20|}}||||||||}; +{gloves_life|items_armours_2:1|Gloves of life force|4|3|1|390|1|9||||5|||||3||||||||||||||||||||||}; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterType.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterType.java index 5c9b206..65f4287 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterType.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterType.java @@ -11,6 +11,7 @@ public final class MonsterType extends ActorTraits { public final int exp; public final DropList dropList; public final String phraseID; + public boolean isRespawnable = true; public MonsterType( String id, diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterTypeCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterTypeCollection.java index 3f6e551..a8178d9 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterTypeCollection.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterTypeCollection.java @@ -8,6 +8,7 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.conversation.ConversationCollection; import com.gpl.rpg.AndorsTrail.model.item.DropList; +import com.gpl.rpg.AndorsTrail.model.item.DropList.DropItem; import com.gpl.rpg.AndorsTrail.model.map.MapCollection; import com.gpl.rpg.AndorsTrail.resource.parsers.MonsterTypeParser; import com.gpl.rpg.AndorsTrail.util.L; @@ -48,11 +49,25 @@ public final class MonsterTypeCollection { public void verifyData(WorldContext world) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { for (MonsterType t : monsterTypesById.values()) { - if (t.phraseID != null && t.phraseID.length() > 0) { + if (t.phraseID != null) { if (!world.conversations.isValidPhraseID(t.phraseID)) { L.log("WARNING: Cannot find phrase \"" + t.phraseID + "\" for MonsterType \"" + t.id + "\"."); } } + + if (t.dropList != null && t.isRespawnable && t.phraseID == null) { + int averageItemDropGold = 0; + for (DropItem item : t.dropList.DEBUG_items) { + averageItemDropGold += item.itemType.baseMarketCost * item.quantity.averagef() * item.chance.current / item.chance.max; + } + + float goldPerExpReward = (float) averageItemDropGold / t.exp; + boolean warn = false; + if (goldPerExpReward > 0.5) warn = true; + else if (averageItemDropGold > 30 && goldPerExpReward > 0.3) warn = true; + + if (warn) L.log("Monster type " + t.id + " rewards " + averageItemDropGold + " gold drop on average, which is a bit high for the exp: " + t.exp + " (average " + goldPerExpReward + " gold per exp)"); + } } } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropList.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropList.java index 9b5052b..2264f97 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropList.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropList.java @@ -40,7 +40,7 @@ public final class DropList { } // Selftest method. Not part of the game logic. - public boolean contains(String itemTypeID) { + public boolean DEBUG_contains(String itemTypeID) { for (DropItem item : items) { if (item.itemType.id.equals(itemTypeID)) return true; } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropListCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropListCollection.java index b08d783..c8640ad 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropListCollection.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropListCollection.java @@ -35,7 +35,7 @@ public final class DropListCollection { public boolean verifyExistsDroplistForItem(String itemTypeID) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { for (DropList d : droplists.values()) { - if (d.contains(itemTypeID)) return true; + if (d.DEBUG_contains(itemTypeID)) return true; } } return false; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapReader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapReader.java index 4c683fb..dd196e0 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapReader.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapReader.java @@ -362,6 +362,7 @@ public final class TMXMapReader { String[] monsterTypeIDs = new String[types.size()]; for (int i = 0; i < monsterTypeIDs.length; ++i) { monsterTypeIDs[i] = types.get(i).id; + if (isUnique) types.get(i).isRespawnable = false; } MonsterSpawnArea area = new MonsterSpawnArea( position diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/quest/QuestCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/quest/QuestCollection.java index ff98028..180323f 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/quest/QuestCollection.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/quest/QuestCollection.java @@ -66,7 +66,7 @@ public final class QuestCollection { } if (q.showInLog) { if (!hasFinishingEntry) { - L.log("WARNING: Quest \"" + q.questID + "\" is shown in log, but has no progress stage that finished the quest."); + L.log("WARNING: Quest \"" + q.questID + "\" is shown in log, but has no progress stage that finishes the quest."); } } }