Added randomly generated quest challenges to the random standard quest world

This commit is contained in:
austinio7116
2018-09-07 14:38:36 +01:00
committed by maustin
parent 67aaf75973
commit 7ebd5ef70e
2 changed files with 204 additions and 0 deletions

View File

@@ -0,0 +1,195 @@
package forge.quest;
import com.google.common.base.Predicate;
import forge.deck.DeckgenUtil;
import forge.game.GameFormat;
import forge.item.PaperCard;
import forge.model.FModel;
import forge.util.MyRandom;
import forge.util.storage.IStorage;
import java.util.*;
public class QuestChallengeGenerator {
public static QuestEventChallengeList generateChallenges(){
Map<String,QuestEventChallenge> challenges = new HashMap<>();
int id = 0;
for (int i=0;i<5;++i) {
QuestEventChallenge qc = getFormatChallenge(FModel.getFormats().getModern());
qc.setId(new Integer(id).toString());
qc.setCreditsReward(1000);
qc.setWinsReqd(MyRandom.getRandom().nextInt(5));
qc.setDifficulty(QuestEventDifficulty.MEDIUM);
qc.setCardReward("1 multicolor rare");
challenges.put(Integer.toString(id),qc);
id++;
}
for (int i=0;i<5;++i) {
QuestEventChallenge qc = getAIHeadstartChallenge(1);
qc.setId(new Integer(id).toString());
qc.setCreditsReward(1000);
qc.setCardReward("1 multicolor rare");
qc.setWinsReqd(MyRandom.getRandom().nextInt(5));
qc.setDifficulty(QuestEventDifficulty.EASY);
challenges.put(Integer.toString(id),qc);
id++;
}
for (int i=0;i<5;++i) {
QuestEventChallenge qc = getFormatChallenge(FModel.getFormats().get("Legacy"));
qc.setId(new Integer(id).toString());
qc.setCreditsReward(5000);
qc.setCardReward("2 multicolor rares");
qc.setWinsReqd(MyRandom.getRandom().nextInt(25));
qc.setDifficulty(QuestEventDifficulty.HARD);
challenges.put(Integer.toString(id),qc);
id++;
}
for (int i=0;i<5;++i) {
QuestEventChallenge qc = getAIHeadstartChallenge(2);
qc.setId(new Integer(id).toString());
qc.setCreditsReward(5000);
qc.setCardReward("2 multicolor rares");
qc.setWinsReqd(MyRandom.getRandom().nextInt(25));
qc.setDifficulty(QuestEventDifficulty.MEDIUM);
challenges.put(Integer.toString(id),qc);
id++;
}
for (int i=0;i<5;++i) {
QuestEventChallenge qc = getFormatChallenge(FModel.getFormats().get("Vintage"));
qc.setId(new Integer(id).toString());
qc.setCreditsReward(10000);
qc.setCardReward("3 multicolor rares");
qc.setWinsReqd(MyRandom.getRandom().nextInt(50));
qc.setDifficulty(QuestEventDifficulty.EXPERT);
challenges.put(Integer.toString(id),qc);
id++;
}
for (int i=0;i<5;++i) {
QuestEventChallenge qc = getAIHeadstartChallenge(3);
qc.setId(new Integer(id).toString());
qc.setCreditsReward(10000);
qc.setCardReward("3 multicolor rares");
qc.setWinsReqd(MyRandom.getRandom().nextInt(50));
qc.setDifficulty(QuestEventDifficulty.HARD);
challenges.put(Integer.toString(id),qc);
id++;
}
return new QuestEventChallengeList(challenges);
}
public static QuestEventChallenge getFormatChallenge(GameFormat format){
QuestEventChallenge qc = new QuestEventChallenge();
qc.setEventDeck(DeckgenUtil.buildLDACArchetypeDeck(format,true));
qc.setTitle(format.getName() + " " + qc.getEventDeck().getName() + " challenge");
qc.setName(format.getName() + " " + qc.getEventDeck().getName() + " challenge");
qc.setOpponentName(qc.getEventDeck().getName());
qc.setDescription("Take on a " + format.getName() + " format deck");
qc.setOpponentName(qc.getEventDeck().getName());
qc.setRepeatable(true);
return qc;
}
public static QuestEventChallenge getAIHeadstartChallenge(int extras){
QuestEventChallenge qc = new QuestEventChallenge();
qc.setEventDeck(DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getStandard(),true));
qc.setTitle(qc.getEventDeck().getName() + " headstart challenge");
qc.setName(qc.getEventDeck().getName() + " headstart challenge");
qc.setOpponentName(qc.getEventDeck().getName());
qc.setDescription("The AI gets a bit of a headstart...");
ArrayList<String> cards = new ArrayList<>();
for(int i=0; i < extras; ++i) {
cards.add(qc.getEventDeck().getMain().toFlatList().get(
MyRandom.getRandom().nextInt(qc.getEventDeck().getMain().toFlatList().size())).getName());
}
qc.setAiExtraCards(cards);
qc.setOpponentName(qc.getEventDeck().getName());
qc.setRepeatable(true);
return qc;
}
public static class QuestEventChallengeList implements IStorage<QuestEventChallenge>{
private Map<String,QuestEventChallenge> challenges;
public QuestEventChallengeList(Map<String, QuestEventChallenge> list){
challenges = list;
}
@Override
public String getFullPath() {
return null;
}
@Override
public QuestEventChallenge get(String id) {
return challenges.get(id);
}
@Override
public QuestEventChallenge find(Predicate<QuestEventChallenge> condition) {
for(QuestEventChallenge challenge:challenges.values()){
if(condition.apply(challenge)){
return challenge;
}
}
return null;
}
@Override
public Collection<String> getItemNames() {
List<String> names = new ArrayList<>();
for(QuestEventChallenge challenge:challenges.values()){
names.add(challenge.getName());
}
return names;
}
@Override
public boolean contains(String id) {
return challenges.containsKey(id);
}
@Override
public int size() {
return challenges.keySet().size();
}
@Override
public void add(QuestEventChallenge item) {
}
@Override
public void delete(String id) {
challenges.remove(id);
}
@Override
public IStorage<IStorage<QuestEventChallenge>> getFolders() {
return null;
}
@Override
public IStorage<QuestEventChallenge> tryGetFolder(String path) {
return null;
}
@Override
public IStorage<QuestEventChallenge> getFolderOrCreate(String path) {
return null;
}
@Override
public String getName() {
return "QuestChallenges";
}
@Override
public Iterator<QuestEventChallenge> iterator() {
return challenges.values().iterator();
}
}
}

View File

@@ -418,6 +418,9 @@ public class QuestController {
* @return QuestEventManager
*/
public IStorage<QuestEventChallenge> getChallenges() {
if (getWorld().getName().equals(QuestWorld.STANDARDWORLDNAME)){
allChallenges = QuestChallengeGenerator.generateChallenges();
}
if (this.allChallenges == null) {
resetChallengesManager();
}
@@ -455,6 +458,10 @@ public class QuestController {
public void resetChallengesManager() {
QuestWorld world = getWorld();
String path;
if (world.getName().equals(QuestWorld.STANDARDWORLDNAME)){
allChallenges = QuestChallengeGenerator.generateChallenges();
return;
}
if (world == null || !world.isCustom()){
path = world == null || world.getChallengesDir() == null ? ForgeConstants.DEFAULT_CHALLENGES_DIR : ForgeConstants.QUEST_WORLD_DIR + world.getChallengesDir();
}else{
@@ -543,6 +550,8 @@ public class QuestController {
maxChallenges = 5;
}
maxChallenges = 5;
// Generate IDs as needed.
if (achievements.getCurrentChallenges().size() < maxChallenges) {
for (final QuestEventChallenge qc : allChallenges) {