From 57ed67b87a8174cf403bf698846ea554766de87b Mon Sep 17 00:00:00 2001 From: Zukero Date: Sat, 26 Jan 2019 16:52:13 +0100 Subject: [PATCH 01/15] Workaround for saving issue on first execution of app. --- AndorsTrail/AndroidManifest.xml | 8 ++--- .../activity/LoadSaveActivity.java | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/AndorsTrail/AndroidManifest.xml b/AndorsTrail/AndroidManifest.xml index 50e2e56b0..f9b64b2b5 100644 --- a/AndorsTrail/AndroidManifest.xml +++ b/AndorsTrail/AndroidManifest.xml @@ -20,10 +20,10 @@ android:anyDensity="true" /> - - + + + + = Build.VERSION_CODES.M) { + if (getApplicationContext().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + this.requestPermissions(new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, READ_EXTERNAL_STORAGE_REQUEST); + } + if (getApplicationContext().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + this.requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_REQUEST); + } + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + if (grantResults.length > 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) { + Toast.makeText(this, R.string.storage_permissions_mandatory, Toast.LENGTH_LONG).show(); + ((AndorsTrailApplication)getApplication()).discardWorld(); + finish(); + } + } + private void addSavegameSlotButtons(ViewGroup parent, LayoutParams params, List usedSavegameSlots) { for (int slot : usedSavegameSlots) { final FileHeader header = Savegames.quickload(this, slot); From 83d88deba7f52565700a60b1536a616acb01ef89 Mon Sep 17 00:00:00 2001 From: Zukero Date: Sat, 26 Jan 2019 23:00:06 +0100 Subject: [PATCH 02/15] v0.7.5 --- AndorsTrail/AndroidManifest.xml | 2 +- .../src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AndorsTrail/AndroidManifest.xml b/AndorsTrail/AndroidManifest.xml index f9b64b2b5..72ee8e7cd 100644 --- a/AndorsTrail/AndroidManifest.xml +++ b/AndorsTrail/AndroidManifest.xml @@ -4,7 +4,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" package="com.gpl.rpg.AndorsTrail" android:versionCode="46" - android:versionName="0.7.5dev" + android:versionName="0.7.5d" android:installLocation="auto" > Date: Sat, 26 Jan 2019 23:03:32 +0100 Subject: [PATCH 03/15] Bump version code to 47 (0.7.6) --- AndorsTrail/AndroidManifest.xml | 4 ++-- .../src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/AndorsTrail/AndroidManifest.xml b/AndorsTrail/AndroidManifest.xml index 72ee8e7cd..c7b996b8c 100644 --- a/AndorsTrail/AndroidManifest.xml +++ b/AndorsTrail/AndroidManifest.xml @@ -3,8 +3,8 @@ Date: Mon, 11 Feb 2019 21:01:16 -0500 Subject: [PATCH 04/15] Added Rafael Mendes (fifa1988) to authors.xml for PT/BR translation. Long overdue! --- AndorsTrail/res/values/authors.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndorsTrail/res/values/authors.xml b/AndorsTrail/res/values/authors.xml index 660e2d808..a870f95b6 100644 --- a/AndorsTrail/res/values/authors.xml +++ b/AndorsTrail/res/values/authors.xml @@ -32,7 +32,7 @@ Hungarian translation by <a href="https://urbalazs.hu">Balázs Úr</a><br /> Hebrew translation by eitanbm<br /> Portuguese(PT) translation by mira<br /> - Portuguese(BR) translation by Mauro Carvalho Chehab<br /> + Portuguese(BR) translation by Mauro Carvalho Chehab, Rafael Mendes (fifa1988)<br /> Japanese translation by surgecurrent<br /> Polish translation by tobik9090siemens, DanielS and Piotr Wieczorek<br /> Forum moderated by Tim Davis<br /> From 72a36a7c129b1b950553d11206315ef20700b1ae Mon Sep 17 00:00:00 2001 From: Zukero Date: Fri, 22 Feb 2019 19:37:30 +0100 Subject: [PATCH 05/15] Fix crash when taunting with instant combat speed. Thanks Little_John for your help tracking it down! --- .../src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java | 4 ++-- .../gpl/rpg/AndorsTrail/controller/CombatController.java | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java index 723702129..26b81a953 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java @@ -25,8 +25,8 @@ public final class AndorsTrailApplication extends Application { public static final boolean DEVELOPMENT_FORCE_CONTINUEGAME = false; public static final boolean DEVELOPMENT_DEBUGBUTTONS = false; public static final boolean DEVELOPMENT_FASTSPEED = false; - public static final boolean DEVELOPMENT_VALIDATEDATA = false; - public static final boolean DEVELOPMENT_DEBUGMESSAGES = false; + public static final boolean DEVELOPMENT_VALIDATEDATA = true; + public static final boolean DEVELOPMENT_DEBUGMESSAGES = true; public static final boolean DEVELOPMENT_INCOMPATIBLE_SAVEGAMES = DEVELOPMENT_DEBUGRESOURCES || DEVELOPMENT_DEBUGBUTTONS || DEVELOPMENT_FASTSPEED; public static final int CURRENT_VERSION = DEVELOPMENT_INCOMPATIBLE_SAVEGAMES ? 999 : 47; public static final String CURRENT_VERSION_DISPLAY = "0.7.6dev"; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java index b0cd7978d..f38ac9ffc 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java @@ -176,12 +176,13 @@ public final class CombatController implements VisualEffectCompletedCallback { playerKilledMonster(target); } + controllers.skillController.applySkillEffectsFromPlayerAttack(attack, target); startAttackEffect(attack, attackPosition, this, CALLBACK_PLAYERATTACK); } else { combatActionListeners.onPlayerAttackMissed(target, attack); + controllers.skillController.applySkillEffectsFromPlayerAttack(attack, target); startMissedEffect(attack, attackPosition, this, CALLBACK_PLAYERATTACK); } - controllers.skillController.applySkillEffectsFromPlayerAttack(attack, target); } @@ -404,12 +405,13 @@ public final class CombatController implements VisualEffectCompletedCallback { if (attack.isHit) { combatActionListeners.onMonsterAttackSuccess(currentActiveMonster, attack); + controllers.skillController.applySkillEffectsFromMonsterAttack(attack, currentActiveMonster); startAttackEffect(attack, world.model.player.position, this, CALLBACK_MONSTERATTACK); } else { combatActionListeners.onMonsterAttackMissed(currentActiveMonster, attack); + controllers.skillController.applySkillEffectsFromMonsterAttack(attack, currentActiveMonster); startMissedEffect(attack, world.model.player.position, this, CALLBACK_MONSTERATTACK); } - controllers.skillController.applySkillEffectsFromMonsterAttack(attack, currentActiveMonster); } private static final int CALLBACK_MONSTERATTACK = 0; From 1dbf4bf5cb3119c8af53456425676b8a500fee1e Mon Sep 17 00:00:00 2001 From: Zukero Date: Fri, 22 Feb 2019 21:02:35 +0100 Subject: [PATCH 06/15] Fixes for the most "popular" and puzzling crashes on GPlay, supposedly caused by extreme race conditions. --- .../com/gpl/rpg/AndorsTrail/activity/MainActivity.java | 2 +- .../activity/fragment/HeroinfoActivity_Inventory.java | 3 +++ .../activity/fragment/HeroinfoActivity_Quests.java | 5 ++++- .../activity/fragment/HeroinfoActivity_Skills.java | 5 ++++- .../activity/fragment/HeroinfoActivity_Stats.java | 10 +++++++--- .../rpg/AndorsTrail/controller/MovementController.java | 2 +- .../controller/listeners/PlayerMovementListener.java | 2 +- .../controller/listeners/PlayerMovementListeners.java | 8 ++++---- .../src/com/gpl/rpg/AndorsTrail/view/MainView.java | 3 ++- 9 files changed, 27 insertions(+), 13 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java index 0fed16ded..38b812119 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java @@ -308,7 +308,7 @@ public final class MainActivity @Override - public void onPlayerMoved(Coord newPosition, Coord previousPosition) { } + public void onPlayerMoved(PredefinedMap map, Coord newPosition, Coord previousPosition) { } @Override public void onPlayerEnteredNewMap(PredefinedMap map, Coord p) { } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Inventory.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Inventory.java index 6a95ee8fa..ad71ea402 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Inventory.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Inventory.java @@ -79,6 +79,9 @@ public final class HeroinfoActivity_Inventory extends Fragment implements Custom public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View v = inflater.inflate(R.layout.heroinfo_inventory, container, false); + AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this.getActivity()); + if (!app.isInitialized()) return v; + inventoryList = (ListView) v.findViewById(R.id.inventorylist_root); ImageView heroicon = (ImageView) v.findViewById(R.id.heroinfo_inventory_heroicon); heroinfo_stats_gold = (TextView) v.findViewById(R.id.heroinfo_stats_gold); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Quests.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Quests.java index d51d19f72..ece9d03f7 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Quests.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Quests.java @@ -51,7 +51,10 @@ public final class HeroinfoActivity_Quests extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.questlog, container, false); - + + AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this.getActivity()); + if (!app.isInitialized()) return v; + Context ctx = getActivity(); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Skills.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Skills.java index 22bcf6918..6d3a3275e 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Skills.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Skills.java @@ -48,7 +48,10 @@ public final class HeroinfoActivity_Skills extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.heroinfo_skill_list, container, false); - + + AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this.getActivity()); + if (!app.isInitialized()) return v; + final Activity ctx = getActivity(); new SpinnerEmulator(v,R.id.skillList_category_filters_button, R.array.skill_category_filters, R.string.heroinfo_skill_categories) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Stats.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Stats.java index 088b28e6c..3068e181f 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Stats.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Stats.java @@ -67,10 +67,14 @@ public final class HeroinfoActivity_Stats extends Fragment { View v = inflater.inflate(R.layout.heroinfo_stats, container, false); view = v; + AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this.getActivity()); + if (!app.isInitialized()) return v; + TextView tv = (TextView) v.findViewById(R.id.heroinfo_title); - tv.setText(player.getName()); - tv.setCompoundDrawablesWithIntrinsicBounds(HeroCollection.getHeroLargeSprite(player.iconID), 0, 0, 0); - + if (tv != null) { + tv.setText(player.getName()); + tv.setCompoundDrawablesWithIntrinsicBounds(HeroCollection.getHeroLargeSprite(player.iconID), 0, 0, 0); + } heroinfo_container = (ViewGroup) v.findViewById(R.id.heroinfo_container); heroinfo_reequip_cost = (TextView) v.findViewById(R.id.heroinfo_reequip_cost); heroinfo_useitem_cost = (TextView) v.findViewById(R.id.heroinfo_useitem_cost); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java index 6695ff0ad..a7d1e67c6 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java @@ -246,7 +246,7 @@ public final class MovementController implements TimedMessageTask.Callback { @Override public void onVisualEffectCompleted(int callbackValue) { - playerMovementListeners.onPlayerMoved(newPosition, player.lastPosition); + playerMovementListeners.onPlayerMoved(currentMap, newPosition, player.lastPosition); controllers.mapController.handleMapEventsAfterMovement(currentMap, newPosition, player.lastPosition); if (!world.model.uiSelections.isInCombat) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/PlayerMovementListener.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/PlayerMovementListener.java index ffa475d5d..3f6a53d73 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/PlayerMovementListener.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/PlayerMovementListener.java @@ -4,6 +4,6 @@ import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.util.Coord; public interface PlayerMovementListener { - void onPlayerMoved(Coord newPosition, Coord previousPosition); + void onPlayerMoved(PredefinedMap map, Coord newPosition, Coord previousPosition); void onPlayerEnteredNewMap(PredefinedMap map, Coord p); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/PlayerMovementListeners.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/PlayerMovementListeners.java index c0a373ba2..739ae13fb 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/PlayerMovementListeners.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/PlayerMovementListeners.java @@ -6,8 +6,8 @@ import com.gpl.rpg.AndorsTrail.util.ListOfListeners; public final class PlayerMovementListeners extends ListOfListeners implements PlayerMovementListener { - private final Function2 onPlayerMoved = new Function2() { - @Override public void call(PlayerMovementListener listener, Coord newPosition, Coord previousPosition) { listener.onPlayerMoved(newPosition, previousPosition); } + private final Function3 onPlayerMoved = new Function3() { + @Override public void call(PlayerMovementListener listener, PredefinedMap map, Coord newPosition, Coord previousPosition) { listener.onPlayerMoved(map, newPosition, previousPosition); } }; private final Function2 onPlayerEnteredNewMap = new Function2() { @@ -15,8 +15,8 @@ public final class PlayerMovementListeners extends ListOfListeners Date: Sat, 9 Mar 2019 11:30:07 -0500 Subject: [PATCH 07/15] Add scythe to axe proficiency skill and whip to blunt proficiency skill. Changes to Falothen's dialogue to reflect this are here: https://github.com/Rijackson/0_7_6_ATCS --- .../com/gpl/rpg/AndorsTrail/controller/SkillController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java index a4a264123..68667b556 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java @@ -284,10 +284,10 @@ public final class SkillController { return SkillID.weaponProficiency1hsword; else if (itemCategoryID.equals("2hsword")) return SkillID.weaponProficiency2hsword; - else if (itemCategoryID.equals("axe") || itemCategoryID.equals("axe2h")) + else if (itemCategoryID.equals("axe") || itemCategoryID.equals("axe2h") || itemCategoryID.equals("scythe")) return SkillID.weaponProficiencyAxe; else if (itemCategoryID.equals("club") || itemCategoryID.equals("staff") || itemCategoryID.equals("mace") - || itemCategoryID.equals("scepter") || itemCategoryID.equals("hammer") || itemCategoryID.equals("hammer2h")) + || itemCategoryID.equals("scepter") || itemCategoryID.equals("hammer") || itemCategoryID.equals("hammer2h") || itemCategoryID.equals("whip")) return SkillID.weaponProficiencyBlunt; } else if (category.isShield()) { return SkillID.armorProficiencyShield; From 65d2a73efa15f3397cc19ab24ef344b65f4cbc2d Mon Sep 17 00:00:00 2001 From: Peter Anderson Date: Fri, 15 Mar 2019 22:15:05 +0200 Subject: [PATCH 08/15] Removed 'guynmart_main_3' duplicate --- AndorsTrail/res/values/loadresources.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/AndorsTrail/res/values/loadresources.xml b/AndorsTrail/res/values/loadresources.xml index 60e0d1230..2a9562df6 100644 --- a/AndorsTrail/res/values/loadresources.xml +++ b/AndorsTrail/res/values/loadresources.xml @@ -778,7 +778,6 @@ @xml/guynmart_main_1 @xml/guynmart_main_2 @xml/guynmart_main_3 - @xml/guynmart_main_3 @xml/guynmart_passage @xml/guynmart_tower_0 @xml/guynmart_tower_1 From 03958eb3f14482679a752a0168f36a58aa3bb16e Mon Sep 17 00:00:00 2001 From: Peter Anderson Date: Fri, 15 Mar 2019 23:15:01 +0200 Subject: [PATCH 09/15] Fixed grammar. --- AndorsTrail/res/raw/conversationlist_lodar.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AndorsTrail/res/raw/conversationlist_lodar.json b/AndorsTrail/res/raw/conversationlist_lodar.json index 18a4de220..8dcdb974d 100644 --- a/AndorsTrail/res/raw/conversationlist_lodar.json +++ b/AndorsTrail/res/raw/conversationlist_lodar.json @@ -1389,7 +1389,7 @@ }, { "id":"lodar_hira1", - "message":"That's the effects of the Hira'zinn. Its desires is to consume the minds of all it finds.", + "message":"That's the effect of the Hira'zinn. Its desire is to consume the minds of all it finds.", "replies":[ { "text":"N", @@ -2130,4 +2130,4 @@ } ] } -] \ No newline at end of file +] From 43831ae7e089daeb63090adb4bbf62caea186bb1 Mon Sep 17 00:00:00 2001 From: Gonk Date: Thu, 28 Mar 2019 21:49:24 +0100 Subject: [PATCH 10/15] Fixed replace area validation --- .../src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java index 20aeb424f..133ee1a61 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java @@ -313,7 +313,7 @@ public final class TMXMapTranslator { else if (prop.name.equalsIgnoreCase(LAYERNAME_TOP)) layerNames.topLayersName = prop.value; else if (prop.name.equalsIgnoreCase(LAYERNAME_WALKABLE)) layerNames.walkableLayersName = prop.value; else if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - if (!requirementPropertiesNames.contains(prop.name)) + if (!requirementPropertiesNames.contains(prop.name.toLowerCase())) L.log("OPTIMIZE: Map " + map.name + " contains replace area with unknown property \"" + prop.name + "\"."); } } From f856b03c37836c0d7574e8a9e5363549a645f421 Mon Sep 17 00:00:00 2001 From: Zukero Date: Wed, 10 Apr 2019 15:17:59 +0200 Subject: [PATCH 11/15] Removed bogus tileset references in a pair of maps. --- AndorsTrail/res/xml/blackwater_mountain7.tmx | 5 +---- AndorsTrail/res/xml/wild20a.tmx | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/AndorsTrail/res/xml/blackwater_mountain7.tmx b/AndorsTrail/res/xml/blackwater_mountain7.tmx index acfa76bc7..519a06a29 100644 --- a/AndorsTrail/res/xml/blackwater_mountain7.tmx +++ b/AndorsTrail/res/xml/blackwater_mountain7.tmx @@ -1,5 +1,5 @@ - + @@ -135,9 +135,6 @@ - - - eJztlkESwiAMRTssXLjyAL2CwRtYV+57Bg7rscQZmcH0Jw0UrAsXbzpNSX+B5FPvhiEInCP30yev+AyYQCyA/ISPzx4HzBXkSWNn4T01ujPQlcYHEEfrZdFF66SNb6WL1kkaf2k4X5S3ly7F2DEyvq+Jid2nWA65pe7olpDyvST0k4Y2fyte6fsSP6jRtda1Zb+t3Cp0cx8isP8WXcmfNHIf8gWemoP8aY3AdPn+W3RLNbkPofr4Rl3x/NE43626xLxiAuuOeqB1H0l12ltXqtPeutYcvj8WNL+vyfnTD+6vpWetdo6u5dXW7lr+Hrq/Pt/avpN0W/yTaEi+09snnlpanUE= diff --git a/AndorsTrail/res/xml/wild20a.tmx b/AndorsTrail/res/xml/wild20a.tmx index 1b817a17c..ca3e3256d 100644 --- a/AndorsTrail/res/xml/wild20a.tmx +++ b/AndorsTrail/res/xml/wild20a.tmx @@ -1,5 +1,5 @@ - + @@ -183,9 +183,6 @@ - - - eJxbz8TAsIWTgaEdSK+nEhsAYaMNwg== From 6deca064d452180d9d2efa7ec73e7c710c3a22b1 Mon Sep 17 00:00:00 2001 From: Zukero Date: Wed, 10 Apr 2019 15:20:56 +0200 Subject: [PATCH 12/15] Clean up debugging items. --- AndorsTrail/res/raw/itemlist_food.json | 492 +++++++++++-------------- 1 file changed, 205 insertions(+), 287 deletions(-) diff --git a/AndorsTrail/res/raw/itemlist_food.json b/AndorsTrail/res/raw/itemlist_food.json index f58b244bc..7a8d44686 100644 --- a/AndorsTrail/res/raw/itemlist_food.json +++ b/AndorsTrail/res/raw/itemlist_food.json @@ -1,288 +1,206 @@ -[ - { - "id":"apple_green", - "iconID":"items_consumables:2", - "name":"Green apple", - "hasManualPrice":1, - "baseMarketCost":14, - "category":"food", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":1, - "duration":8, - "chance":"100" - } - ] - } - }, - { - "id":"apple_red", - "iconID":"items_consumables:3", - "name":"Red apple", - "hasManualPrice":1, - "baseMarketCost":22, - "category":"food", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":1, - "duration":12, - "chance":"100" - } - ] - } - }, - { - "id":"meat", - "iconID":"items_consumables:25", - "name":"Meat", - "hasManualPrice":1, - "baseMarketCost":29, - "category":"animal_e", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":2, - "duration":12, - "chance":"100" - }, - { - "condition":"foodp", - "magnitude":3, - "duration":10, - "chance":"10" - } - ] - } - }, - { - "id":"meat_cooked", - "iconID":"items_consumables:27", - "name":"Cooked meat", - "hasManualPrice":1, - "baseMarketCost":78, - "category":"food", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":3, - "duration":11, - "chance":"100" - } - ] - } - }, - { - "id":"strawberry", - "iconID":"items_consumables:8", - "name":"Strawberry", - "hasManualPrice":1, - "baseMarketCost":3, - "category":"food", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":1, - "duration":2, - "chance":"100" - } - ] - } - }, - { - "id":"carrot", - "iconID":"items_consumables:15", - "name":"Carrot", - "hasManualPrice":1, - "baseMarketCost":14, - "category":"food", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":1, - "duration":8, - "chance":"100" - } - ] - } - }, - { - "id":"bread", - "iconID":"items_consumables:21", - "name":"Bread", - "hasManualPrice":1, - "baseMarketCost":6, - "category":"food", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":1, - "duration":10, - "chance":"100" - } - ] - } - }, - { - "id":"mushroom", - "iconID":"items_consumables:19", - "name":"Mushroom", - "hasManualPrice":1, - "baseMarketCost":3, - "category":"food", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":1, - "duration":2, - "chance":"100" - } - ] - } - }, - { - "id":"pear", - "iconID":"items_consumables:9", - "name":"Pear", - "hasManualPrice":1, - "baseMarketCost":14, - "category":"food", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":1, - "duration":8, - "chance":"100" - } - ] - } - }, - { - "id":"eggs", - "iconID":"items_consumables:20", - "name":"Eggs", - "hasManualPrice":1, - "baseMarketCost":10, - "category":"food", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":1, - "duration":6, - "chance":"100" - } - ] - } - }, - { - "id":"radish", - "iconID":"items_consumables:14", - "name":"Radish", - "hasManualPrice":1, - "baseMarketCost":6, - "category":"food", - "useEffect":{ - "conditionsSource":[ - { - "condition":"food", - "magnitude":1, - "duration":4, - "chance":"100" - } - ] - } - }, - { - "id": "chaotic_penalty", - "iconID": "items_weapons:61", - "name": "Chaotic Penalty", - "category": "lsword", - "displaytype": "extraordinary", - "hasManualPrice": 1, - "baseMarketCost": 0, - "equipEffect": { - "increaseMaxAP": 2, - "increaseAttackCost": 7, - "increaseAttackChance": 25, - "increaseCriticalSkill": 10, - "setCriticalMultiplier": 2, - "increaseAttackDamage": { - "min": -10, - "max": -10 - }, - "addedConditions":[ - { - "condition":"courage", - "magnitude": 5 - } - ] - }, - "killEffect": { - "increaseCurrentHP": { - "min": 1, - "max": 1 - } - }, - "hitEffect":{ - "conditionsTarget":[ - { - "condition":"fear", - "magnitude":5, - "duration":2, - "chance":"100" - } - ] - }, - "hitReceivedEffect" : { - "increaseCurrentHP": { - "min": 1, - "max": 1 - }, - "increaseCurrentAP": { - "min": 1, - "max": 1 - }, - "increaseAttackerCurrentHP": { - "min": 1, - "max": 1 - }, - "increaseAttackerCurrentAP": { - "min": 1, - "max": 1 - }, - "conditionsSource":[ - { - "condition":"crit_aware", - "magnitude": 2, - "duration": 5, - "chance":"50" - } - ], - "conditionsTarget":[ - { - "condition":"def", - "magnitude": 2, - "duration": 5, - "chance":"80" - }, - { - "condition":"regen2", - "magnitude":3, - "duration":4, - "chance":"50" - } - ] - } - } +[ + { + "id":"apple_green", + "iconID":"items_consumables:2", + "name":"Green apple", + "hasManualPrice":1, + "baseMarketCost":14, + "category":"food", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":1, + "duration":8, + "chance":"100" + } + ] + } + }, + { + "id":"apple_red", + "iconID":"items_consumables:3", + "name":"Red apple", + "hasManualPrice":1, + "baseMarketCost":22, + "category":"food", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":1, + "duration":12, + "chance":"100" + } + ] + } + }, + { + "id":"meat", + "iconID":"items_consumables:25", + "name":"Meat", + "hasManualPrice":1, + "baseMarketCost":29, + "category":"animal_e", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":2, + "duration":12, + "chance":"100" + }, + { + "condition":"foodp", + "magnitude":3, + "duration":10, + "chance":"10" + } + ] + } + }, + { + "id":"meat_cooked", + "iconID":"items_consumables:27", + "name":"Cooked meat", + "hasManualPrice":1, + "baseMarketCost":78, + "category":"food", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":3, + "duration":11, + "chance":"100" + } + ] + } + }, + { + "id":"strawberry", + "iconID":"items_consumables:8", + "name":"Strawberry", + "hasManualPrice":1, + "baseMarketCost":3, + "category":"food", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":1, + "duration":2, + "chance":"100" + } + ] + } + }, + { + "id":"carrot", + "iconID":"items_consumables:15", + "name":"Carrot", + "hasManualPrice":1, + "baseMarketCost":14, + "category":"food", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":1, + "duration":8, + "chance":"100" + } + ] + } + }, + { + "id":"bread", + "iconID":"items_consumables:21", + "name":"Bread", + "hasManualPrice":1, + "baseMarketCost":6, + "category":"food", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":1, + "duration":10, + "chance":"100" + } + ] + } + }, + { + "id":"mushroom", + "iconID":"items_consumables:19", + "name":"Mushroom", + "hasManualPrice":1, + "baseMarketCost":3, + "category":"food", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":1, + "duration":2, + "chance":"100" + } + ] + } + }, + { + "id":"pear", + "iconID":"items_consumables:9", + "name":"Pear", + "hasManualPrice":1, + "baseMarketCost":14, + "category":"food", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":1, + "duration":8, + "chance":"100" + } + ] + } + }, + { + "id":"eggs", + "iconID":"items_consumables:20", + "name":"Eggs", + "hasManualPrice":1, + "baseMarketCost":10, + "category":"food", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":1, + "duration":6, + "chance":"100" + } + ] + } + }, + { + "id":"radish", + "iconID":"items_consumables:14", + "name":"Radish", + "hasManualPrice":1, + "baseMarketCost":6, + "category":"food", + "useEffect":{ + "conditionsSource":[ + { + "condition":"food", + "magnitude":1, + "duration":4, + "chance":"100" + } + ] + } + } ] \ No newline at end of file From fc569d841f6247532a5e8587541e9c93bcff8d66 Mon Sep 17 00:00:00 2001 From: Zukero Date: Wed, 24 Apr 2019 00:48:02 +0200 Subject: [PATCH 13/15] Fixed issue in the debug droplist's chance format (number instead of string) --- AndorsTrail/res/raw/droplists_debug.json | 370 +++++++++++------------ 1 file changed, 185 insertions(+), 185 deletions(-) diff --git a/AndorsTrail/res/raw/droplists_debug.json b/AndorsTrail/res/raw/droplists_debug.json index 4104c1d3e..755100bb5 100644 --- a/AndorsTrail/res/raw/droplists_debug.json +++ b/AndorsTrail/res/raw/droplists_debug.json @@ -1,185 +1,185 @@ -[ - { - "id": "debugshop1", - "items": [ - { - "itemID": "club1", - "quantity": { - "min": 10, - "max": 10 - }, - "chance": 100 - }, - { - "itemID": "club3", - "quantity": { - "min": 5, - "max": 5 - }, - "chance": 100 - }, - { - "itemID": "hammer0", - "quantity": { - "min": 5, - "max": 5 - }, - "chance": 100 - }, - { - "itemID": "hammer1", - "quantity": { - "min": 5, - "max": 5 - }, - "chance": 100 - }, - { - "itemID": "shirt1", - "quantity": { - "min": 5, - "max": 5 - }, - "chance": 100 - }, - { - "itemID": "shirt2", - "quantity": { - "min": 5, - "max": 5 - }, - "chance": 100 - }, - { - "itemID": "dagger0", - "quantity": { - "min": 5, - "max": 5 - }, - "chance": 100 - } - ] - }, - { - "id": "debuglist1", - "items": [ - { - "itemID": "gold", - "quantity": { - "min": 3, - "max": 3 - }, - "chance": 100 - }, - { - "itemID": "dagger0", - "quantity": { - "min": 1, - "max": 1 - }, - "chance": 100 - }, - { - "itemID": "shirt1", - "quantity": { - "min": 1, - "max": 1 - }, - "chance": 100 - }, - { - "itemID": "club3", - "quantity": { - "min": 1, - "max": 1 - }, - "chance": 100 - } - ] - }, - { - "id": "debuglist2", - "items": [{ - "itemID": "gold", - "quantity": { - "min": 3, - "max": 3 - }, - "chance": 100 - }] - }, - { - "id": "startitems", - "items": [ - { - "itemID": "gold", - "quantity": { - "min": 12, - "max": 12 - }, - "chance": 100 - }, - { - "itemID": "club1", - "quantity": { - "min": 1, - "max": 1 - }, - "chance": 100 - }, - { - "itemID": "shirt1", - "quantity": { - "min": 5, - "max": 5 - }, - "chance": 100 - }, - { - "itemID": "dagger0", - "quantity": { - "min": 1, - "max": 1 - }, - "chance": 100 - }, - { - "itemID": "debug_dagger1", - "quantity": { - "min": 1, - "max": 1 - }, - "chance": 100 - }, - { - "itemID": "debug_ring1", - "quantity": { - "min": 1, - "max": 1 - }, - "chance": 100 - }, - { - "itemID": "shadow_slayer", - "quantity": { - "min": 1, - "max": 1 - }, - "chance": 100 - } - ] - }, - { - "id": "debugrequires10gold_droplist", - "items": [ - { - "quantity": { - "min": 10, - "max": 10 - }, - "itemID": "gold", - "chance": 100 - } - ] - } -] +[ + { + "id": "debugshop1", + "items": [ + { + "itemID": "club1", + "quantity": { + "min": 10, + "max": 10 + }, + "chance": "100" + }, + { + "itemID": "club3", + "quantity": { + "min": 5, + "max": 5 + }, + "chance": "100" + }, + { + "itemID": "hammer0", + "quantity": { + "min": 5, + "max": 5 + }, + "chance": "100" + }, + { + "itemID": "hammer1", + "quantity": { + "min": 5, + "max": 5 + }, + "chance": "100" + }, + { + "itemID": "shirt1", + "quantity": { + "min": 5, + "max": 5 + }, + "chance": "100" + }, + { + "itemID": "shirt2", + "quantity": { + "min": 5, + "max": 5 + }, + "chance": "100" + }, + { + "itemID": "dagger0", + "quantity": { + "min": 5, + "max": 5 + }, + "chance": "100" + } + ] + }, + { + "id": "debuglist1", + "items": [ + { + "itemID": "gold", + "quantity": { + "min": 3, + "max": 3 + }, + "chance": "100" + }, + { + "itemID": "dagger0", + "quantity": { + "min": 1, + "max": 1 + }, + "chance": "100" + }, + { + "itemID": "shirt1", + "quantity": { + "min": 1, + "max": 1 + }, + "chance": "100" + }, + { + "itemID": "club3", + "quantity": { + "min": 1, + "max": 1 + }, + "chance": "100" + } + ] + }, + { + "id": "debuglist2", + "items": [{ + "itemID": "gold", + "quantity": { + "min": 3, + "max": 3 + }, + "chance": "100" + }] + }, + { + "id": "startitems", + "items": [ + { + "itemID": "gold", + "quantity": { + "min": 12, + "max": 12 + }, + "chance": "100" + }, + { + "itemID": "club1", + "quantity": { + "min": 1, + "max": 1 + }, + "chance": "100" + }, + { + "itemID": "shirt1", + "quantity": { + "min": 5, + "max": 5 + }, + "chance": "100" + }, + { + "itemID": "dagger0", + "quantity": { + "min": 1, + "max": 1 + }, + "chance": "100" + }, + { + "itemID": "debug_dagger1", + "quantity": { + "min": 1, + "max": 1 + }, + "chance": "100" + }, + { + "itemID": "debug_ring1", + "quantity": { + "min": 1, + "max": 1 + }, + "chance": "100" + }, + { + "itemID": "shadow_slayer", + "quantity": { + "min": 1, + "max": 1 + }, + "chance": "100" + } + ] + }, + { + "id": "debugrequires10gold_droplist", + "items": [ + { + "quantity": { + "min": 10, + "max": 10 + }, + "itemID": "gold", + "chance": "100" + } + ] + } +] From 9a0f183392fed7247d0ef632129601bafbaf9857 Mon Sep 17 00:00:00 2001 From: Gonk Date: Wed, 24 Apr 2019 23:03:36 +0200 Subject: [PATCH 14/15] Added random requirement using the same format like the droplist chance encoded in the requireID. --- .../controller/ConversationController.java | 4 ++ .../AndorsTrail/model/script/Requirement.java | 54 ++++++++++--------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java index 9d57477df..dd956ff08 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java @@ -28,6 +28,7 @@ import com.gpl.rpg.AndorsTrail.model.quest.QuestLogEntry; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; import com.gpl.rpg.AndorsTrail.model.script.Requirement; import com.gpl.rpg.AndorsTrail.model.script.ScriptEffect; +import com.gpl.rpg.AndorsTrail.resource.parsers.ResourceParserUtils; import com.gpl.rpg.AndorsTrail.util.ConstRange; import com.gpl.rpg.AndorsTrail.util.L; @@ -295,6 +296,9 @@ public final class ConversationController { case spentGold: result = stats.getSpentGold() >= requirement.value; break; + case random: + result = Constants.rollResult(ResourceParserUtils.parseChance(requirement.requireID)); + break; case consumedBonemeals: result = stats.getNumberOfUsedBonemealPotions() >= requirement.value; break; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java index bcd2b65d7..7555e4fe0 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java @@ -17,6 +17,7 @@ public final class Requirement { ,consumedBonemeals ,hasActorCondition ,factionScore + ,random } public final RequirementType requireType; @@ -34,8 +35,9 @@ public final class Requirement { this.requireID = requireID; this.value = value; this.negate = negate; + } - + public Requirement(QuestProgress qp) { this.requireType = RequirementType.questProgress; this.requireID = qp.questID; @@ -52,32 +54,34 @@ public final class Requirement { buf.append(value); return buf.toString(); } - + public boolean isValid() { switch (this.requireType) { - case consumedBonemeals: - return value >= 0; - case hasActorCondition: - return requireID != null; - case inventoryKeep: - case inventoryRemove: - case usedItem: - return requireID != null && value >= 0; - case killedMonster: - return requireID != null && value >= 0; - case questLatestProgress: - case questProgress: - return requireID != null && value >= 0; - case skillLevel: - return requireID != null && value >= 0; - case spentGold: - return value >= 0; - case timerElapsed: - return requireID != null && value >= 0; - case wear: - return requireID != null; - default: - return false; + case consumedBonemeals: + return value >= 0; + case hasActorCondition: + return requireID != null; + case inventoryKeep: + case inventoryRemove: + case usedItem: + return requireID != null && value >= 0; + case killedMonster: + return requireID != null && value >= 0; + case questLatestProgress: + case questProgress: + return requireID != null && value >= 0; + case skillLevel: + return requireID != null && value >= 0; + case spentGold: + return value >= 0; + case random: + return requireID != null; + case timerElapsed: + return requireID != null && value >= 0; + case wear: + return requireID != null; + default: + return false; } } } From 176cf1dd764b41064b2f830ef186d1640aeecf1d Mon Sep 17 00:00:00 2001 From: Gonk Date: Sat, 11 May 2019 21:27:11 +0200 Subject: [PATCH 15/15] Use chance member in Requirement for random requirements - it is based on the text in requireID - adjusted parsing --- .../controller/ConversationController.java | 3 +-- .../rpg/AndorsTrail/model/map/TMXMapTranslator.java | 11 ++++++++++- .../gpl/rpg/AndorsTrail/model/script/Requirement.java | 8 ++++++-- .../resource/parsers/ConversationListParser.java | 7 +++++-- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java index dd956ff08..5834be335 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java @@ -28,7 +28,6 @@ import com.gpl.rpg.AndorsTrail.model.quest.QuestLogEntry; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; import com.gpl.rpg.AndorsTrail.model.script.Requirement; import com.gpl.rpg.AndorsTrail.model.script.ScriptEffect; -import com.gpl.rpg.AndorsTrail.resource.parsers.ResourceParserUtils; import com.gpl.rpg.AndorsTrail.util.ConstRange; import com.gpl.rpg.AndorsTrail.util.L; @@ -297,7 +296,7 @@ public final class ConversationController { result = stats.getSpentGold() >= requirement.value; break; case random: - result = Constants.rollResult(ResourceParserUtils.parseChance(requirement.requireID)); + result = Constants.rollResult(requirement.chance); break; case consumedBonemeals: result = stats.getNumberOfUsedBonemealPotions() >= requirement.value; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java index 133ee1a61..1b9f50b1d 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java @@ -27,7 +27,9 @@ import com.gpl.rpg.AndorsTrail.model.map.TMXMapFileParser.TMXProperty; import com.gpl.rpg.AndorsTrail.model.map.TMXMapFileParser.TMXTileSet; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; import com.gpl.rpg.AndorsTrail.model.script.Requirement; +import com.gpl.rpg.AndorsTrail.resource.parsers.ResourceParserUtils; import com.gpl.rpg.AndorsTrail.resource.tiles.TileCache; +import com.gpl.rpg.AndorsTrail.util.ConstRange; import com.gpl.rpg.AndorsTrail.util.Coord; import com.gpl.rpg.AndorsTrail.util.CoordRect; import com.gpl.rpg.AndorsTrail.util.L; @@ -227,6 +229,7 @@ public final class TMXMapTranslator { String requireId = null; int requireValue = 0; boolean requireNegation = false; + ConstRange requireChance = null; for (TMXProperty p : object.properties) { if (p.name.equalsIgnoreCase("requireType")) { try { @@ -246,7 +249,13 @@ public final class TMXMapTranslator { } } if (requireType == null) return null; - return new Requirement(requireType, requireId, requireValue, requireNegation); + if (requireType == Requirement.RequirementType.random) + { + requireChance = ResourceParserUtils.parseChance(requireId); + requireId = null; + } + + return new Requirement(requireType, requireId, requireValue, requireNegation, requireChance); } private static CoordRect getTMXObjectPosition(TMXObject object, TMXMap m) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java index 7555e4fe0..d12f71ec1 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java @@ -1,6 +1,7 @@ package com.gpl.rpg.AndorsTrail.model.script; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; +import com.gpl.rpg.AndorsTrail.util.ConstRange; public final class Requirement { public static enum RequirementType { @@ -24,18 +25,20 @@ public final class Requirement { public final String requireID; public final int value; public final boolean negate; + public final ConstRange chance; public Requirement( RequirementType requireType , String requireID , int value , boolean negate + , ConstRange chance ) { this.requireType = requireType; this.requireID = requireID; this.value = value; this.negate = negate; - + this.chance = chance; } public Requirement(QuestProgress qp) { @@ -43,6 +46,7 @@ public final class Requirement { this.requireID = qp.questID; this.value = qp.progress; this.negate = false; + this.chance = null; } public String toString() { @@ -75,7 +79,7 @@ public final class Requirement { case spentGold: return value >= 0; case random: - return requireID != null; + return chance != null; case timerElapsed: return requireID != null && value >= 0; case wear: diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java index aef8b1c0f..215c984b2 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java @@ -22,11 +22,14 @@ public final class ConversationListParser extends JsonCollectionParserFor requirementParser = new JsonArrayParserFor(Requirement.class) { @Override protected Requirement parseObject(JSONObject o) throws JSONException { + Requirement.RequirementType type = Requirement.RequirementType.valueOf(o.getString(JsonFieldNames.ReplyRequires.requireType)); + String requireID = o.getString(JsonFieldNames.ReplyRequires.requireID); return new Requirement( - Requirement.RequirementType.valueOf(o.getString(JsonFieldNames.ReplyRequires.requireType)) - ,o.getString(JsonFieldNames.ReplyRequires.requireID) + type + ,type == Requirement.RequirementType.random ? null : requireID ,o.optInt(JsonFieldNames.ReplyRequires.value, 0) ,o.optBoolean(JsonFieldNames.ReplyRequires.negate, false) + ,type == Requirement.RequirementType.random ? ResourceParserUtils.parseChance(requireID) : null ); } };