diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java index 79f1eae58..17218b434 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java @@ -18,6 +18,7 @@ import com.gpl.rpg.AndorsTrail.model.map.LayeredTileMap; import com.gpl.rpg.AndorsTrail.model.map.MapObject; import com.gpl.rpg.AndorsTrail.model.map.MonsterSpawnArea; import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; +import com.gpl.rpg.AndorsTrail.model.quest.Quest; import com.gpl.rpg.AndorsTrail.model.quest.QuestLogEntry; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; import com.gpl.rpg.AndorsTrail.model.script.Requirement; @@ -108,6 +109,9 @@ public final class ConversationController { case deactivateMapChangeArea: deactivateMapChangeArea(effect.mapName, effect.effectID); break; + case removeQuestProgress: + addRemoveQuestProgressReward(player, effect.effectID, effect.value); + break; } } @@ -156,14 +160,21 @@ public final class ConversationController { private void addQuestProgressReward(Player player, String questID, int questProgress, ScriptEffectResult result) { QuestProgress progress = new QuestProgress(questID, questProgress); boolean added = player.addQuestProgress(progress); + if (!added) return; // Only apply exp reward if the quest stage was reached just now (and not re-reached) QuestLogEntry stage = world.quests.getQuestLogEntry(progress); if (stage == null) return; + result.loot.exp += stage.rewardExperience; result.questProgress.add(progress); } + private void addRemoveQuestProgressReward(Player player, String questID, int questProgress) { + Quest currentQuest = world.quests.getQuest(questID); + player.removeQuestProgress(currentQuest,questProgress); + } + private void addDropListReward(Player player, String droplistID, ScriptEffectResult result) { world.dropLists.getDropList(droplistID).createRandomLoot(result.loot, player); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java index c49f88868..d39dc0405 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java @@ -11,6 +11,8 @@ import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection; import com.gpl.rpg.AndorsTrail.model.item.DropListCollection; import com.gpl.rpg.AndorsTrail.model.item.Inventory; import com.gpl.rpg.AndorsTrail.model.item.Loot; +import com.gpl.rpg.AndorsTrail.model.quest.Quest; +import com.gpl.rpg.AndorsTrail.model.quest.QuestLogEntry; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; import com.gpl.rpg.AndorsTrail.resource.tiles.TileManager; import com.gpl.rpg.AndorsTrail.savegames.LegacySavegameFormatReaderForPlayer; @@ -21,8 +23,11 @@ import com.gpl.rpg.AndorsTrail.util.Size; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.Map.Entry; public final class Player extends Actor { @@ -154,6 +159,10 @@ public final class Player extends Actor { return true; //Progress was added. } + public void removeQuestProgress(Quest quest, int removeProgress){ + questProgress.get(quest.questID).remove(progress); + } + public void recalculateLevelExperience() { int experienceRequiredToReachThisLevel = getRequiredExperience(level); levelExperience.set(getRequiredExperienceForNextLevel(level), totalExperience - experienceRequiredToReachThisLevel); 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 e7d1399bd..f86d28679 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java @@ -14,6 +14,7 @@ public final class Requirement { ,spentGold ,consumedBonemeals ,hasActorCondition + ,removeQuestProgress } public final RequirementType requireType; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/ScriptEffect.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/ScriptEffect.java index 0303b7606..096ac1e1c 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/ScriptEffect.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/ScriptEffect.java @@ -14,6 +14,7 @@ public final class ScriptEffect { , deactivateSpawnArea , activateMapChangeArea , deactivateMapChangeArea + , removeQuestProgress } public final ScriptEffectType type;