FatBoy-DOTC
2 weeks ago
5 changed files with 183 additions and 11 deletions
@ -0,0 +1,112 @@
@@ -0,0 +1,112 @@
|
||||
package engine.QuestSystem; |
||||
|
||||
import engine.InterestManagement.WorldGrid; |
||||
import engine.net.client.msg.ErrorPopupMsg; |
||||
import engine.objects.*; |
||||
import engine.server.MBServerStatics; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.HashMap; |
||||
import java.util.HashSet; |
||||
import java.util.Random; |
||||
|
||||
public class QuestManager { |
||||
public static HashMap<PlayerCharacter,QuestObject> acceptedQuests; |
||||
public static HashMap<PlayerCharacter,ArrayList<String>> completedQuests; |
||||
|
||||
public static boolean grantsQuest(NPC npc){ |
||||
if(npc == null) |
||||
return false; |
||||
|
||||
if(npc.contract == null) |
||||
return false; |
||||
|
||||
return npc.contract.getName().contains("ZoneLore") || npc.contract.getName().equals("Barrowlands Sentry"); |
||||
} |
||||
|
||||
public static void displayCurrentQuest(PlayerCharacter pc){ |
||||
if(acceptedQuests.containsKey(pc)){ |
||||
QuestObject obj = acceptedQuests.get(pc); |
||||
String output = "You have embarked on the noble quest: "; |
||||
output += obj.QuestName + ". "; |
||||
output += obj.description; |
||||
output += ". " + obj.objectiveCount + " / " + obj.objectiveCountRequired; |
||||
ErrorPopupMsg.sendErrorMsg(pc, output); |
||||
}else{ |
||||
ErrorPopupMsg.sendErrorMsg(pc, "You have no active quest."); |
||||
} |
||||
} |
||||
|
||||
public static void acceptQuest(PlayerCharacter pc, QuestObject obj){ |
||||
if (completedQuests.containsKey(pc)) { |
||||
if(completedQuests.get(pc).contains(obj.QuestName)){ |
||||
ErrorPopupMsg.sendErrorMsg(pc, "You have already completed the quest: " + obj.QuestName); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
if(acceptedQuests.containsKey(pc)){ |
||||
if(acceptedQuests.get(pc)!= null){ |
||||
ErrorPopupMsg.sendErrorMsg(pc, "You have already embarked on a noble quest."); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
acceptedQuests.put(pc,obj); |
||||
} |
||||
|
||||
public static void completeQuest(PlayerCharacter pc, QuestObject obj){ |
||||
//notify the player they have completed their quest
|
||||
ErrorPopupMsg.sendErrorMsg(pc, "You have completed the quest: " + obj.QuestName); |
||||
|
||||
//add completed quest to completion log
|
||||
if (completedQuests.containsKey(pc)) { |
||||
completedQuests.get(pc).add(obj.QuestName); |
||||
}else{ |
||||
ArrayList<String> completed = new ArrayList<>(); |
||||
completed.add(obj.QuestName); |
||||
completedQuests.put(pc,completed); |
||||
} |
||||
|
||||
//remove current quest from active log
|
||||
if(acceptedQuests.containsKey(pc)) |
||||
acceptedQuests.remove(pc); |
||||
|
||||
//grant rewards
|
||||
pc.grantXP((int) (Experience.maxXPPerKill(pc.getLevel()) * 10)); |
||||
pc.getCharItemManager().addGoldToInventory((int) Experience.maxXPPerKill(pc.getLevel()),false); |
||||
pc.getCharItemManager().updateInventory(); |
||||
} |
||||
|
||||
public static QuestObject getQuestForContract(NPC npc){ |
||||
QuestObject obj = new QuestObject(); |
||||
obj.QuestName = npc.getFirstName() + "'s Quest"; |
||||
|
||||
HashSet<AbstractWorldObject> mobs = WorldGrid.getObjectsInRangePartial(npc.loc,2048, MBServerStatics.MASK_MOB); |
||||
if (mobs.isEmpty()) |
||||
return null; // Handle the case where the set is empty
|
||||
|
||||
// Convert HashSet to a List
|
||||
ArrayList<AbstractWorldObject> mobList = new ArrayList<>(mobs); |
||||
|
||||
// Generate a random index
|
||||
Random random = new Random(); |
||||
int randomIndex = random.nextInt(mobList.size()); |
||||
|
||||
|
||||
if(mobList.get(randomIndex) == null) { |
||||
return null; |
||||
} |
||||
|
||||
Mob mob = (Mob) mobList.get(randomIndex); |
||||
|
||||
obj.progressionNames = new ArrayList<>(); |
||||
obj.progressionNames.add(mob.getFirstName()); |
||||
|
||||
obj.objectiveCountRequired = 10; |
||||
obj.objectiveCount = 0; |
||||
|
||||
obj.description = "These lands are plagued with " + mob.getFirstName() + " complete the quest by slaying 10 of them!"; |
||||
return obj; |
||||
} |
||||
} |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
package engine.QuestSystem; |
||||
|
||||
import engine.objects.ItemBase; |
||||
import engine.objects.NPC; |
||||
import engine.objects.PlayerCharacter; |
||||
|
||||
import java.util.ArrayList; |
||||
|
||||
public class QuestObject { |
||||
|
||||
public String QuestName; |
||||
public String description; |
||||
public int objectiveCount; |
||||
public int objectiveCountRequired; |
||||
public ArrayList<String> progressionNames; |
||||
public PlayerCharacter owner; |
||||
|
||||
public QuestObject(){ |
||||
|
||||
} |
||||
public void tryProgress(String option){ |
||||
if(this.progressionNames.contains(option)) |
||||
this.objectiveCount++; |
||||
else |
||||
return; |
||||
|
||||
if(this.objectiveCount >= this.objectiveCountRequired){ |
||||
QuestManager.completeQuest(this.owner,this); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue