mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Finally, all quest and duel decks fully encapsulated with acceptable format.
Helper files completely removed (easy.txt, quests.txt, etc.) and hard-coded quest properties are a thing of the past. Model and view fully separated for main panel in quest GUI. Critical file: QuestEventManager can handle instantiation of all decks, once (ideally).
This commit is contained in:
22
.gitattributes
vendored
22
.gitattributes
vendored
@@ -9399,13 +9399,9 @@ res/quest/decks/quest6.dck -text
|
|||||||
res/quest/decks/quest7.dck -text
|
res/quest/decks/quest7.dck -text
|
||||||
res/quest/decks/quest8.dck -text
|
res/quest/decks/quest8.dck -text
|
||||||
res/quest/decks/quest9.dck -text
|
res/quest/decks/quest9.dck -text
|
||||||
res/quest/easy.txt svneol=native#text/plain
|
|
||||||
res/quest/hard.txt svneol=native#text/plain
|
|
||||||
res/quest/medium.txt svneol=native#text/plain
|
|
||||||
res/quest/price.txt svneol=native#text/plain
|
res/quest/price.txt svneol=native#text/plain
|
||||||
res/quest/quest.preferences -text
|
res/quest/quest.preferences -text
|
||||||
res/quest/quest.properties svneol=native#text/plain
|
res/quest/quest.properties svneol=native#text/plain
|
||||||
res/quest/quests.txt svneol=native#text/plain
|
|
||||||
res/quest/themes/-1[!!-~]-1[!!-~]Counters[!!-~]BG.thm -text
|
res/quest/themes/-1[!!-~]-1[!!-~]Counters[!!-~]BG.thm -text
|
||||||
res/quest/themes/Anti[!!-~]Black[!!-~]WB.thm -text
|
res/quest/themes/Anti[!!-~]Black[!!-~]WB.thm -text
|
||||||
res/quest/themes/Anti[!!-~]Black[!!-~]WG.thm -text
|
res/quest/themes/Anti[!!-~]Black[!!-~]WG.thm -text
|
||||||
@@ -9474,7 +9470,6 @@ res/quest/themes/Vigilance[!!-~]Meekstone[!!-~]W.thm -text
|
|||||||
res/quest/themes/White.thm -text
|
res/quest/themes/White.thm -text
|
||||||
res/quest/themes/Wolves[!!-~]WG.thm -text
|
res/quest/themes/Wolves[!!-~]WG.thm -text
|
||||||
res/quest/themes/Zombies[!!-~]B.thm -text
|
res/quest/themes/Zombies[!!-~]B.thm -text
|
||||||
res/quest/veryhard.txt svneol=native#text/plain
|
|
||||||
res/reprintSetInfo.py svneol=native#text/x-python
|
res/reprintSetInfo.py svneol=native#text/x-python
|
||||||
res/sealed/juzamjedi.zsealed -text
|
res/sealed/juzamjedi.zsealed -text
|
||||||
res/setInfoScript.py svneol=native#text/x-python
|
res/setInfoScript.py svneol=native#text/x-python
|
||||||
@@ -9583,8 +9578,6 @@ src/main/java/forge/PlayerType.java svneol=native#text/plain
|
|||||||
src/main/java/forge/PlayerUtil.java svneol=native#text/plain
|
src/main/java/forge/PlayerUtil.java svneol=native#text/plain
|
||||||
src/main/java/forge/PlayerZone.java svneol=native#text/plain
|
src/main/java/forge/PlayerZone.java svneol=native#text/plain
|
||||||
src/main/java/forge/PlayerZone_ComesIntoPlay.java svneol=native#text/plain
|
src/main/java/forge/PlayerZone_ComesIntoPlay.java svneol=native#text/plain
|
||||||
src/main/java/forge/Quest_Assignment.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/ReadQuest_Assignment.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/SetInfo.java svneol=native#text/plain
|
src/main/java/forge/SetInfo.java svneol=native#text/plain
|
||||||
src/main/java/forge/SetUtils.java svneol=native#text/plain
|
src/main/java/forge/SetUtils.java svneol=native#text/plain
|
||||||
src/main/java/forge/SimpleCombat.java svneol=native#text/plain
|
src/main/java/forge/SimpleCombat.java svneol=native#text/plain
|
||||||
@@ -9768,7 +9761,7 @@ src/main/java/forge/game/limited/CardPoolLimitation.java -text
|
|||||||
src/main/java/forge/game/limited/CustomLimited.java svneol=native#text/plain
|
src/main/java/forge/game/limited/CustomLimited.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/limited/DeckColors.java svneol=native#text/plain
|
src/main/java/forge/game/limited/DeckColors.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/limited/SealedDeck.java svneol=native#text/plain
|
src/main/java/forge/game/limited/SealedDeck.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/limited/package-info.java -text svneol=native#text/plain
|
src/main/java/forge/game/limited/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/package-info.java -text
|
src/main/java/forge/game/package-info.java -text
|
||||||
src/main/java/forge/gui/CardListViewer.java -text
|
src/main/java/forge/gui/CardListViewer.java -text
|
||||||
src/main/java/forge/gui/ForgeAction.java svneol=native#text/plain
|
src/main/java/forge/gui/ForgeAction.java svneol=native#text/plain
|
||||||
@@ -9835,10 +9828,8 @@ src/main/java/forge/properties/NewConstants.java svneol=native#text/plain
|
|||||||
src/main/java/forge/properties/Preferences.java svneol=native#text/plain
|
src/main/java/forge/properties/Preferences.java svneol=native#text/plain
|
||||||
src/main/java/forge/properties/SavePreferencesListener.java svneol=native#text/plain
|
src/main/java/forge/properties/SavePreferencesListener.java svneol=native#text/plain
|
||||||
src/main/java/forge/properties/package-info.java svneol=native#text/plain
|
src/main/java/forge/properties/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/data/QuestBattleManager.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/quest/data/QuestData.java svneol=native#text/plain
|
src/main/java/forge/quest/data/QuestData.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/data/QuestDataIO.java svneol=native#text/plain
|
src/main/java/forge/quest/data/QuestDataIO.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/data/QuestEvent.java -text
|
|
||||||
src/main/java/forge/quest/data/QuestMatchState.java svneol=native#text/plain
|
src/main/java/forge/quest/data/QuestMatchState.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/data/QuestPreferences.java svneol=native#text/plain
|
src/main/java/forge/quest/data/QuestPreferences.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/data/QuestUtil.java svneol=native#text/plain
|
src/main/java/forge/quest/data/QuestUtil.java svneol=native#text/plain
|
||||||
@@ -9869,15 +9860,19 @@ src/main/java/forge/quest/data/pet/QuestPetWolf.java svneol=native#text/plain
|
|||||||
src/main/java/forge/quest/data/pet/package-info.java svneol=native#text/plain
|
src/main/java/forge/quest/data/pet/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/QuestAbstractPanel.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/QuestAbstractPanel.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/QuestFrame.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/QuestFrame.java svneol=native#text/plain
|
||||||
|
src/main/java/forge/quest/gui/QuestMainPanel.java -text
|
||||||
src/main/java/forge/quest/gui/QuestOptions.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/QuestOptions.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/bazaar/QuestBazaarItem.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/bazaar/QuestBazaarItem.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/bazaar/QuestBazaarPanel.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/bazaar/QuestBazaarPanel.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/bazaar/QuestBazaarStall.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/bazaar/QuestBazaarStall.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/bazaar/package-info.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/bazaar/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/main/QuestBattle.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/main/QuestDuel.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/main/QuestMainPanel.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/main/QuestDuelPanel.java -text
|
||||||
|
src/main/java/forge/quest/gui/main/QuestEvent.java -text
|
||||||
|
src/main/java/forge/quest/gui/main/QuestEventManager.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/main/QuestQuest.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/main/QuestQuest.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/main/QuestSelectablePanel.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/main/QuestQuestPanel.java -text
|
||||||
|
src/main/java/forge/quest/gui/main/QuestSelectablePanel.java -text
|
||||||
src/main/java/forge/quest/gui/main/package-info.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/main/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/gui/package-info.java svneol=native#text/plain
|
src/main/java/forge/quest/gui/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/quest/package-info.java svneol=native#text/plain
|
src/main/java/forge/quest/package-info.java svneol=native#text/plain
|
||||||
@@ -9937,7 +9932,6 @@ src/test/java/forge/GuiQuestOptionsTest.java svneol=native#text/plain
|
|||||||
src/test/java/forge/GuiWinLoseTest.java svneol=native#text/plain
|
src/test/java/forge/GuiWinLoseTest.java svneol=native#text/plain
|
||||||
src/test/java/forge/PanelTest.java svneol=native#text/plain
|
src/test/java/forge/PanelTest.java svneol=native#text/plain
|
||||||
src/test/java/forge/PhaseTest.java svneol=native#text/plain
|
src/test/java/forge/PhaseTest.java svneol=native#text/plain
|
||||||
src/test/java/forge/ReadQuestAssignmentTest.java svneol=native#text/plain
|
|
||||||
src/test/java/forge/RunTest.java svneol=native#text/plain
|
src/test/java/forge/RunTest.java svneol=native#text/plain
|
||||||
src/test/java/forge/TinyTest.java svneol=native#text/plain
|
src/test/java/forge/TinyTest.java svneol=native#text/plain
|
||||||
src/test/java/forge/card/cardFactory/CardFactoryTest.java svneol=native#text/plain
|
src/test/java/forge/card/cardFactory/CardFactoryTest.java svneol=native#text/plain
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Text:no text
|
|||||||
K:Flash
|
K:Flash
|
||||||
K:Enchant creature
|
K:Enchant creature
|
||||||
A:SP$ Attach | Cost$ 1 W | ValidTgts$ Creature | AILogic$ Curse
|
A:SP$ Attach | Cost$ 1 W | ValidTgts$ Creature | AILogic$ Curse
|
||||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Shadow | AddHiddenKeyword$ HIDDEN Prevent all damage that would be dealt by CARDNAME. | Description$ Enchanted creature has shadow. Prevent all damage that would be dealt by enchanted creature.
|
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Shadow & HIDDEN Prevent all damage that would be dealt by CARDNAME. | Description$ Enchanted creature has shadow. Prevent all damage that would be dealt by enchanted creature.
|
||||||
SVar:Rarity:Common
|
SVar:Rarity:Common
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/temporal_isolation.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/temporal_isolation.jpg
|
||||||
SetInfo:TSP|Common|http://magiccards.info/scans/en/ts/43.jpg
|
SetInfo:TSP|Common|http://magiccards.info/scans/en/ts/43.jpg
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
Aquaman 1
|
|
||||||
Aragorn 1
|
|
||||||
Bamm Bamm Rubble 1
|
|
||||||
Barney Rubble 1
|
|
||||||
Bart Simpson 1
|
|
||||||
Buffy 1
|
|
||||||
C3PO 1
|
|
||||||
Catwoman 1
|
|
||||||
Conan the Barbarian 1
|
|
||||||
Cow 1
|
|
||||||
Crocodile Dundee 1
|
|
||||||
Da Vinci 1
|
|
||||||
Darrin Stephens 1
|
|
||||||
Dino 1
|
|
||||||
Doc Holiday 1
|
|
||||||
Elrond 1
|
|
||||||
Fat Albert 1
|
|
||||||
Fin Fang Foom 1
|
|
||||||
Frankenstein 1
|
|
||||||
Frodo 1
|
|
||||||
Galahad 1
|
|
||||||
Genghis Khan 1
|
|
||||||
George of the Jungle 1
|
|
||||||
Grampa Simpson 1
|
|
||||||
Green Arrow 1
|
|
||||||
Harry Potter 1
|
|
||||||
Hercules 1
|
|
||||||
Homer Simpson 1
|
|
||||||
Indiana Jones 1
|
|
||||||
Jack Sparrow 1
|
|
||||||
James Bond 1
|
|
||||||
Joe Kidd 1
|
|
||||||
Kang 1
|
|
||||||
King Arthur 1
|
|
||||||
King Edward 1
|
|
||||||
King Goldemar 1
|
|
||||||
King Kong 1
|
|
||||||
Kojak 1
|
|
||||||
Leprechaun 1
|
|
||||||
Magnum 1
|
|
||||||
Ned Flanders 1
|
|
||||||
Oberon 1
|
|
||||||
Odin 1
|
|
||||||
Princess Selenia 1
|
|
||||||
Rocky 1
|
|
||||||
Samantha Stephens 1
|
|
||||||
Seabiscuit 1
|
|
||||||
Sherlock Holmes 1
|
|
||||||
Shrek 1
|
|
||||||
Storm 1
|
|
||||||
Tarzan 1
|
|
||||||
Treebeard 1
|
|
||||||
Wilma Flintstone 1
|
|
||||||
White Knight 1
|
|
||||||
Wyatt Earp 1
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
Abraham Lincoln 3
|
|
||||||
Albert Einstein 3
|
|
||||||
Alice in Wonderland 3
|
|
||||||
Aquaman 3
|
|
||||||
Atomic Robo 3
|
|
||||||
Barney Rubble 3
|
|
||||||
Bart Simpson 3
|
|
||||||
Batman 3
|
|
||||||
Bela Lugosi 3
|
|
||||||
Betty Rubble 3
|
|
||||||
Blackbeard 3
|
|
||||||
Boba Fett 3
|
|
||||||
Boris Karloff 3
|
|
||||||
Boromir 3
|
|
||||||
Bridge Troll 3
|
|
||||||
Buffy 3
|
|
||||||
C3PO 3
|
|
||||||
Captain America 3
|
|
||||||
Cave Troll 3
|
|
||||||
Comic Book Guy 3
|
|
||||||
Crocodile Dundee 3
|
|
||||||
Cyclops 3
|
|
||||||
Da Vinci 3
|
|
||||||
Darrin Stephens 3
|
|
||||||
Darth Vader 3
|
|
||||||
Data 3
|
|
||||||
Deadpool 3
|
|
||||||
Demon 3
|
|
||||||
Dilbert 3
|
|
||||||
Dino 3
|
|
||||||
Doc Holiday 3
|
|
||||||
Doran 3
|
|
||||||
Dream 3
|
|
||||||
Dr No 3
|
|
||||||
Dr Strangelove 3
|
|
||||||
Electro 3
|
|
||||||
Elrond 3
|
|
||||||
Endora 3
|
|
||||||
Ezio 3
|
|
||||||
Fat Albert 3
|
|
||||||
Fin Fang Foom 3
|
|
||||||
Frankenstein 3
|
|
||||||
Fred Flintstone 3
|
|
||||||
Frodo 3
|
|
||||||
Galahad 3
|
|
||||||
Genghis Khan 3
|
|
||||||
George of the Jungle 3
|
|
||||||
Gimli 3
|
|
||||||
Gold Finger 3
|
|
||||||
Grampa Simpson 3
|
|
||||||
Green Arrow 3
|
|
||||||
Green Lantern 3
|
|
||||||
Han Solo 3
|
|
||||||
Hans 3
|
|
||||||
Harry Potter 3
|
|
||||||
Hellboy 3
|
|
||||||
Hercules 3
|
|
||||||
Hermione Granger 3
|
|
||||||
Higgins 3
|
|
||||||
Hobbes 3
|
|
||||||
Homer Simpson 3
|
|
||||||
Iceman 3
|
|
||||||
Indiana Jones 3
|
|
||||||
Jabba the Hut 3
|
|
||||||
James Bond 3
|
|
||||||
James T Kirk 3
|
|
||||||
Joe Kidd 3
|
|
||||||
Kang 3
|
|
||||||
King Arthur 3
|
|
||||||
King Edward 3
|
|
||||||
King Kong 3
|
|
||||||
Kojak 3
|
|
||||||
Krypto 3
|
|
||||||
Luke Skywalker 3
|
|
||||||
Maggie Simpson 3
|
|
||||||
Magneto 3
|
|
||||||
Magnum 3
|
|
||||||
Mister Fantastic 3
|
|
||||||
Morpheus 3
|
|
||||||
Mr Slate 3
|
|
||||||
Napoleon 3
|
|
||||||
Ned Flanders 3
|
|
||||||
Neo 3
|
|
||||||
Newton 3
|
|
||||||
Oberon 3
|
|
||||||
Odin 3
|
|
||||||
Optimus Prime 3
|
|
||||||
Pebbles Flintstone 3
|
|
||||||
Picard 3
|
|
||||||
Pointy Haired Boss 3
|
|
||||||
Professor X 3
|
|
||||||
R2-D2 3
|
|
||||||
Radiant 3
|
|
||||||
Radioactive Man 3
|
|
||||||
Riddler 3
|
|
||||||
Rocky 3
|
|
||||||
Sabertooth 3
|
|
||||||
Samantha Stephens 3
|
|
||||||
Samwise Gamgee 3
|
|
||||||
Saruman 3
|
|
||||||
Scooby Doo 3
|
|
||||||
Scotty 3
|
|
||||||
Seabiscuit 3
|
|
||||||
Secret Squirrel 3
|
|
||||||
Sherlock Holmes 3
|
|
||||||
Silver Surfer 3
|
|
||||||
Spiderman 3
|
|
||||||
Storm 3
|
|
||||||
Superman 3
|
|
||||||
Terminator 3
|
|
||||||
The Great Gazoo 3
|
|
||||||
Tom Bombadil 3
|
|
||||||
Treebeard 3
|
|
||||||
Uncle Owen 3
|
|
||||||
Wally 3
|
|
||||||
White Knight 3
|
|
||||||
Wilma Flintstone 3
|
|
||||||
Wolverine 3
|
|
||||||
Wyatt Earp 3
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
Albert Einstein 2
|
|
||||||
Alice in Wonderland 2
|
|
||||||
Apu Nahasapeemapetilon 2
|
|
||||||
Aquaman 2
|
|
||||||
Aragorn 2
|
|
||||||
Barney Rubble 2
|
|
||||||
Bart Simpson 2
|
|
||||||
Boromir 2
|
|
||||||
Buffy 2
|
|
||||||
C3PO 2
|
|
||||||
Captain America 2
|
|
||||||
Catwoman 2
|
|
||||||
Conan the Barbarian 2
|
|
||||||
Crocodile Dundee 2
|
|
||||||
Cyclops 2
|
|
||||||
Da Vinci 2
|
|
||||||
Darrin Stephens 2
|
|
||||||
Deadpool 2
|
|
||||||
Dino 2
|
|
||||||
Doc Holiday 2
|
|
||||||
Dogbert 2
|
|
||||||
Electro 2
|
|
||||||
Elrond 2
|
|
||||||
Endora 2
|
|
||||||
Eomer 2
|
|
||||||
Fat Albert 2
|
|
||||||
Fin Fang Foom 2
|
|
||||||
Frankenstein 2
|
|
||||||
Frodo 2
|
|
||||||
Galadriel 2
|
|
||||||
Galahad 2
|
|
||||||
Gambit 2
|
|
||||||
Genghis Khan 2
|
|
||||||
George of the Jungle 2
|
|
||||||
Gimli 2
|
|
||||||
Grampa Simpson 2
|
|
||||||
Green Arrow 2
|
|
||||||
Hagrid 2
|
|
||||||
Harry Potter 2
|
|
||||||
Hercules 2
|
|
||||||
Homer Simpson 2
|
|
||||||
Indiana Jones 2
|
|
||||||
Jack Sparrow 2
|
|
||||||
James Bond 2
|
|
||||||
Joe Kidd 2
|
|
||||||
Kang 2
|
|
||||||
King Arthur 2
|
|
||||||
King Edward 2
|
|
||||||
King Kong 2
|
|
||||||
Kojak 2
|
|
||||||
Krypto 2
|
|
||||||
Lisa Simpson 2
|
|
||||||
Magnum 2
|
|
||||||
Marge Simpson 2
|
|
||||||
Nagini 2
|
|
||||||
Ned Flanders 2
|
|
||||||
Neo 2
|
|
||||||
Oberon 2
|
|
||||||
Odin 2
|
|
||||||
Pebbles Flintstone 2
|
|
||||||
Pinky and the Brain 2
|
|
||||||
Professor X 2
|
|
||||||
Radagast 2
|
|
||||||
Ratbert 2
|
|
||||||
Redwall 2
|
|
||||||
Reverend Lovejoy 2
|
|
||||||
Rocky 2
|
|
||||||
Samantha Stephens 2
|
|
||||||
Samwise Gamgee 2
|
|
||||||
Saruman 2
|
|
||||||
Sauron 2
|
|
||||||
Scotty 2
|
|
||||||
Seabiscuit 2
|
|
||||||
Sherlock Holmes 2
|
|
||||||
Silver Samurai 2
|
|
||||||
Spiderman 2
|
|
||||||
Spock 2
|
|
||||||
Storm 2
|
|
||||||
Sun Quan 2
|
|
||||||
Swan 2
|
|
||||||
Tarzan 2
|
|
||||||
The Thing 2
|
|
||||||
Totoro 2
|
|
||||||
Treebeard 2
|
|
||||||
Walle 2
|
|
||||||
White Knight 2
|
|
||||||
Wilma Flintstone 2
|
|
||||||
Wonder Woman 2
|
|
||||||
Wyatt Earp 2
|
|
||||||
@@ -1,315 +0,0 @@
|
|||||||
Notes
|
|
||||||
- A [quest] line triggers a new quest object.
|
|
||||||
- Properties can be in any order
|
|
||||||
- IDs are mandatory, and must be sequential.
|
|
||||||
- Any other property, if empty, will use a default value.
|
|
||||||
- Both AI and human can have extra legal cards and/or tokens at match start.
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=1
|
|
||||||
Icon=Dungeon Crawling White.jpg
|
|
||||||
Title=Dungeon Crawling (White)
|
|
||||||
Desc=This realm is guarded by a divine entity laying his protecting hand on each living being.
|
|
||||||
Diff=Medium
|
|
||||||
AILife=25
|
|
||||||
Repeat=true
|
|
||||||
Wins=20
|
|
||||||
Card Reward=3 white rares
|
|
||||||
Credit Reward=100
|
|
||||||
HumanExtras=
|
|
||||||
AIExtras=Divine Presence
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=2
|
|
||||||
Icon=Dungeon Crawling Blue.jpg
|
|
||||||
Title=Dungeon Crawling (Blue)
|
|
||||||
Desc=This realm holds knowledge so vast it can overburden the unwary.
|
|
||||||
Diff=Medium
|
|
||||||
AILife=25
|
|
||||||
Repeat=true
|
|
||||||
Wins=20
|
|
||||||
Card Reward=3 blue rares
|
|
||||||
Credit Reward=100
|
|
||||||
HumanExtras=Quest for Ancient Secrets
|
|
||||||
AIExtras=Forced Fruition
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=3
|
|
||||||
Icon=Dungeon Crawling Black.jpg
|
|
||||||
Title=Dungeon Crawling (Black)
|
|
||||||
Desc=The dead cannot be silenced, and want you to join their ranks.
|
|
||||||
Diff=Medium
|
|
||||||
AILife=25
|
|
||||||
Repeat=true
|
|
||||||
Wins=20
|
|
||||||
Card Reward=3 black rares
|
|
||||||
Credit Reward=100
|
|
||||||
HumanExtras=
|
|
||||||
AIExtras=Infernal Genesis
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=4
|
|
||||||
Icon=Dungeon Crawling Red.jpg
|
|
||||||
Title=Dungeon Crawling (Red)
|
|
||||||
Desc=Untold treasure awaits you, should you successfully dodge the lightning and lava.
|
|
||||||
Diff=Medium
|
|
||||||
AILife=25
|
|
||||||
Repeat=true
|
|
||||||
Wins=20
|
|
||||||
Card Reward=3 red rares
|
|
||||||
Credit Reward=100
|
|
||||||
HumanExtras=
|
|
||||||
AIExtras=Furnace of Rath
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=5
|
|
||||||
Icon=Dungeon Crawling Green.jpg
|
|
||||||
Title=Dungeon Crawling (Green)
|
|
||||||
Desc=Gnarled, twisting, sinister growths slowly rend the walls in twain and try to silence all who cross their path.
|
|
||||||
Diff=Medium
|
|
||||||
AILife=25
|
|
||||||
Repeat=true
|
|
||||||
Wins=20
|
|
||||||
Card Reward=3 green rares
|
|
||||||
Credit Reward=100
|
|
||||||
HumanExtras=Defense of the Heart
|
|
||||||
AIExtras=Eladamri's Vineyard|Upwelling
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=6
|
|
||||||
Icon=Dungeon Crawling Colorless.jpg
|
|
||||||
Title=Dungeon Crawling (Colorless)
|
|
||||||
Desc=The inhabitants of this plane tread with a light step.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=true
|
|
||||||
Wins=28
|
|
||||||
Card Reward=3 colorless rares
|
|
||||||
Credit Reward=150
|
|
||||||
HumanExtras=
|
|
||||||
AIExtras=Eon Hub|Eon Hub|Eon Hub
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=7
|
|
||||||
Icon=Dungeon Crawling Gold.jpg
|
|
||||||
Title=Dungeon Crawling (Gold)
|
|
||||||
Desc=Clever sorcerers draw energy from countless sources - can you outwit them?
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=true
|
|
||||||
Wins=28
|
|
||||||
Card Reward=3 multi-colored rares
|
|
||||||
Credit Reward=150
|
|
||||||
HumanExtras=
|
|
||||||
AIExtras=Darksteel Ingot
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=8
|
|
||||||
Icon=A Wolf in Sheeps Clothing.jpg
|
|
||||||
Title=A Wolf in Sheep's Clothing
|
|
||||||
Desc=The local sheep farm is under attack by a pack of wolves. Kill the wolves, save the sheep!
|
|
||||||
Diff=Medium
|
|
||||||
AILife=25
|
|
||||||
Repeat=false
|
|
||||||
Wins=28
|
|
||||||
Card Reward=3 random rares
|
|
||||||
Credit Reward=200
|
|
||||||
HumanExtras=TOKEN;G;0;1;Sheep;Creature;Sheep|TOKEN;G;0;1;Sheep;Creature;Sheep|TOKEN;G;0;1;Sheep;Creature;Sheep
|
|
||||||
AIExtras=
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=9
|
|
||||||
Icon=Bushwhacked.jpg
|
|
||||||
Title=Bushwhacked!
|
|
||||||
Desc=You find yourself surrounded by carnivorous plants and poisonous vines. Cut your way out of this foresty mess and make it home safe.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=40
|
|
||||||
Card Reward=4 green rares
|
|
||||||
Credit Reward=225
|
|
||||||
HumanExtras=Trusty Machete
|
|
||||||
AIExtras=Wall of Wood|Wall of Wood|Wall of Wood
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=10
|
|
||||||
Icon=Zombie Attack.jpg
|
|
||||||
Title=Zombie Attack!
|
|
||||||
Desc=The village of Haven is getting attacked by the Zombie horde! Protect the village.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=40
|
|
||||||
Card Reward=4 black rares
|
|
||||||
Credit Reward=200
|
|
||||||
HumanExtras=TOKEN;W;1;1;Citizen;Creature|TOKEN;W;1;1;Citizen;Creature|TOKEN;W;1;1;Citizen;Creature|Wall of Spears
|
|
||||||
AIExtras=Scathe Zombies|Mass of Ghouls
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=11
|
|
||||||
Icon=The Kings Contest.jpg
|
|
||||||
Title=The King's Contest
|
|
||||||
Desc=The king is holding a contest. You are invited to participate and compete against other legends of this era.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=40
|
|
||||||
Card Reward=3 random rares
|
|
||||||
Credit Reward=150
|
|
||||||
HumanExtras=Seal of Cleansing
|
|
||||||
AIExtras=Loyal Retainers
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=12
|
|
||||||
Icon=Barroom Brawl.jpg
|
|
||||||
Title=Barroom Brawl
|
|
||||||
Desc=A drunken giant of a man takes a swing at you, your brew spills and a fight breaks out.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=64
|
|
||||||
Card Reward=4 random rares
|
|
||||||
Credit Reward=250
|
|
||||||
HumanExtras=TOKEN;W;1;1;Soldier Ally;Creature;Soldier;Ally|TOKEN;W;1;1;Soldier Ally;Creature;Soldier;Ally|TOKEN;W;1;1;Soldier Ally;Creature;Soldier;Ally
|
|
||||||
AIExtras=Lowland Giant
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=13
|
|
||||||
Icon=The Court Jester.jpg
|
|
||||||
Title=The Court Jester
|
|
||||||
Desc=The Court Jester pulls a prank on you. Will you laugh it off or pay him back?
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=52
|
|
||||||
Card Reward=4 multi-colored rares
|
|
||||||
Credit Reward=300
|
|
||||||
HumanExtras=Sensei's Divining Top
|
|
||||||
AIExtras=Teferi's Puzzle Box
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=14
|
|
||||||
Title=Ancient Battlefield
|
|
||||||
Desc=You visit an ancient battlefield at midnight. It is overgrown and dark. You trip on a root, utter a curse and wish that you could see.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=64
|
|
||||||
Card Reward=4 random rares
|
|
||||||
Credit Reward=250
|
|
||||||
Icon=Ancient Battlefield.jpg
|
|
||||||
HumanExtras=Glasses of Urza|Blight Sickle
|
|
||||||
AIExtras=Bad Moon|Wall of Brambles
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=15
|
|
||||||
Title=Don't Play With Matches
|
|
||||||
Desc=The goblins are battling the elves. Those pesky elves, will they ever learn. Do not play with fire!
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=52
|
|
||||||
Card Reward=4 red rares
|
|
||||||
Credit Reward=200
|
|
||||||
Icon=Dont Play With Matches.jpg
|
|
||||||
HumanExtras=Mudbutton Torchrunner|Scuzzback Scrapper
|
|
||||||
AIExtras=Heedless One|Norwood Archers|Wildslayer Elves
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=16
|
|
||||||
Title=Mines of Kazum Durl
|
|
||||||
Desc=While exploring a mine with a group of dwarves the mine caves in. You start to dig out and then realize that your group is not alone.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=52
|
|
||||||
Card Reward=4 green rares
|
|
||||||
Credit Reward=250
|
|
||||||
Icon=Mines of Kazum Durl.jpg
|
|
||||||
HumanExtras=Dwarven Demolition Team|Dwarven Pony|Dwarven Trader
|
|
||||||
AIExtras=Wall of Earth|Wall of Air|Wall of Ice|Wall of Light|Carrion Wall|Steel Wall
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=17
|
|
||||||
Title=House Party
|
|
||||||
Desc=Your friends decide to hold a house party at your home tonight. Later that night uninvited guests show up and disrupt the party.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=64
|
|
||||||
Card Reward=4 colorless rares
|
|
||||||
Credit Reward=250
|
|
||||||
Icon=House Party.jpg
|
|
||||||
HumanExtras=Hopping Automaton|Honden of Life's Web|Forbidden Orchard
|
|
||||||
AIExtras=Honden of Infinite Rage|Mikokoro, Center of the Sea
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=18
|
|
||||||
Title=Crows in the Field
|
|
||||||
Desc=Crows are eating the seed planted in the local farm fields. The farmers are scared. Those crows are big, you will need some help.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=64
|
|
||||||
Card Reward=5 random rares
|
|
||||||
Credit Reward=300
|
|
||||||
Icon=Crows in the Field.jpg
|
|
||||||
HumanExtras=Straw Soldiers|Femeref Archers|Moonglove Extract
|
|
||||||
AIExtras=Defiant Falcon|Soulcatcher|Storm Crow|Hypnotic Specter
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=19
|
|
||||||
Title=The Desert Caravan
|
|
||||||
Desc=A caravan is transporting silk across the desert. While setting up camp for the night you are attacked by thieves. Defend yourself.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=80
|
|
||||||
Card Reward=5 random rares
|
|
||||||
Credit Reward=300
|
|
||||||
Icon=The Desert Caravan.jpg
|
|
||||||
HumanExtras=Spidersilk Net|Dromad Purebred
|
|
||||||
AIExtras=Ambush Party|Ambush Party|Ambush Party|Ambush Party|Gnat Alley Creeper
|
|
||||||
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=20
|
|
||||||
Title=Blood Oath
|
|
||||||
Desc=A druid saves your life and the two of you take a blood oath. It is now time to fulfill your oath.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=80
|
|
||||||
Card Reward=5 colorless rares
|
|
||||||
Credit Reward=300
|
|
||||||
Icon=Blood Oath.jpg
|
|
||||||
HumanExtras=Counterbalance|Hatching Plans|Ley Druid
|
|
||||||
AIExtras=Ior Ruin Expedition|Oversold Cemetery|Trapjaw Kelpie
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=21
|
|
||||||
Title=Private Domain
|
|
||||||
Desc=During your travels, you accidentally stumble upon the domain of an evil, powerful wizard. A fight to the death ensues.
|
|
||||||
Diff=Expert
|
|
||||||
AILife=50
|
|
||||||
Repeat=false
|
|
||||||
Wins=96
|
|
||||||
Card Reward=6 random rares
|
|
||||||
Credit Reward=500
|
|
||||||
Icon=Private Domain.jpg
|
|
||||||
HumanExtras=Strip Mine
|
|
||||||
AIExtras=Plains|Island|Mountain|Swamp|Forest
|
|
||||||
|
|
||||||
[quest]
|
|
||||||
id=22
|
|
||||||
Title=The Pied Piper
|
|
||||||
Desc=A mysterious man threatens to flood the land with a relentless stream of hungry rats. Cross his plan before it's too late.
|
|
||||||
Diff=Hard
|
|
||||||
AILife=30
|
|
||||||
Repeat=false
|
|
||||||
Wins=32
|
|
||||||
Card Reward=3 random rares
|
|
||||||
Credit Reward=150
|
|
||||||
Icon=The Pied Piper.jpg
|
|
||||||
HumanExtras=Volunteer Militia|Land Tax|Elvish Farmer|An-Havva Township
|
|
||||||
AIExtras=Darksteel Citadel|Relentless Rats
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
Boromir 4
|
|
||||||
Darrin Stephens 4
|
|
||||||
Dino 4
|
|
||||||
Gold Finger 4
|
|
||||||
Hobbes 4
|
|
||||||
Ned Flanders 4
|
|
||||||
Radioactive Man 4
|
|
||||||
Riddler 4
|
|
||||||
Samantha Stephens 4
|
|
||||||
@@ -17,6 +17,7 @@ import forge.properties.ForgeProps;
|
|||||||
import forge.properties.NewConstants;
|
import forge.properties.NewConstants;
|
||||||
import forge.quest.data.QuestMatchState;
|
import forge.quest.data.QuestMatchState;
|
||||||
import forge.quest.data.QuestData;
|
import forge.quest.data.QuestData;
|
||||||
|
import forge.quest.gui.main.QuestQuest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Please use public getters and setters instead of direct field access.
|
* Please use public getters and setters instead of direct field access.
|
||||||
@@ -42,7 +43,7 @@ public final class AllZone implements NewConstants {
|
|||||||
private static forge.quest.data.QuestData questData = null;
|
private static forge.quest.data.QuestData questData = null;
|
||||||
|
|
||||||
/** Global <code>QuestAssignment</code>. */
|
/** Global <code>QuestAssignment</code>. */
|
||||||
private static Quest_Assignment questAssignment = null;
|
private static QuestQuest questquest = null;
|
||||||
|
|
||||||
/** Constant <code>NAME_CHANGER</code>. */
|
/** Constant <code>NAME_CHANGER</code>. */
|
||||||
private static final NameChanger NAME_CHANGER = new NameChanger();
|
private static final NameChanger NAME_CHANGER = new NameChanger();
|
||||||
@@ -136,8 +137,8 @@ public final class AllZone implements NewConstants {
|
|||||||
* @return a {@link forge.Quest_Assignment} object.
|
* @return a {@link forge.Quest_Assignment} object.
|
||||||
* @since 1.0.15
|
* @since 1.0.15
|
||||||
*/
|
*/
|
||||||
public static Quest_Assignment getQuestAssignment() {
|
public static QuestQuest getQuestQuest() {
|
||||||
return questAssignment;
|
return questquest;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -146,8 +147,8 @@ public final class AllZone implements NewConstants {
|
|||||||
* @param assignment a {@link forge.Quest_Assignment} object.
|
* @param assignment a {@link forge.Quest_Assignment} object.
|
||||||
* @since 1.0.15
|
* @since 1.0.15
|
||||||
*/
|
*/
|
||||||
public static void setQuestAssignment(final Quest_Assignment assignment) {
|
public static void setQuestQuest(final QuestQuest q) {
|
||||||
questAssignment = assignment;
|
questquest = q;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import forge.gui.input.Input_PayManaCost_Ability;
|
|||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
import forge.properties.ForgeProps;
|
import forge.properties.ForgeProps;
|
||||||
import forge.properties.NewConstants.LANG.GameAction.GAMEACTION_TEXT;
|
import forge.properties.NewConstants.LANG.GameAction.GAMEACTION_TEXT;
|
||||||
|
import forge.quest.gui.main.QuestQuest;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
@@ -653,7 +654,7 @@ public class GameAction {
|
|||||||
AllZone.getDisplay().savePrefs();
|
AllZone.getDisplay().savePrefs();
|
||||||
frame.setEnabled(false);
|
frame.setEnabled(false);
|
||||||
//frame.dispose();
|
//frame.dispose();
|
||||||
Gui_WinLose gwl = new Gui_WinLose(AllZone.getMatchState(), AllZone.getQuestData(), AllZone.getQuestAssignment());
|
Gui_WinLose gwl = new Gui_WinLose(AllZone.getMatchState(), AllZone.getQuestData(), AllZone.getQuestQuest());
|
||||||
//gwl.setAlwaysOnTop(true);
|
//gwl.setAlwaysOnTop(true);
|
||||||
gwl.toFront();
|
gwl.toFront();
|
||||||
canShowWinLose = false;
|
canShowWinLose = false;
|
||||||
@@ -1074,15 +1075,15 @@ public class GameAction {
|
|||||||
* @param computer a {@link forge.CardList} object.
|
* @param computer a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public final void newGame(final Deck humanDeck, final Deck computerDeck, final CardList human,
|
public final void newGame(final Deck humanDeck, final Deck computerDeck, final CardList human,
|
||||||
final CardList computer, final int humanLife, final int computerLife, final Quest_Assignment qa)
|
final CardList computer, final int humanLife, final int computerLife, final QuestQuest qq)
|
||||||
{
|
{
|
||||||
this.newGame(humanDeck, computerDeck);
|
this.newGame(humanDeck, computerDeck);
|
||||||
|
|
||||||
AllZone.getComputerPlayer().setLife(computerLife, null);
|
AllZone.getComputerPlayer().setLife(computerLife, null);
|
||||||
AllZone.getHumanPlayer().setLife(humanLife, null);
|
AllZone.getHumanPlayer().setLife(humanLife, null);
|
||||||
|
|
||||||
if (qa != null) {
|
if (qq != null) {
|
||||||
computer.addAll(forge.quest.data.QuestUtil.getComputerStartingCards(AllZone.getQuestData(), AllZone.getQuestAssignment()));
|
computer.addAll(forge.quest.data.QuestUtil.getComputerStartingCards(AllZone.getQuestData(), AllZone.getQuestQuest()));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Card c : human) {
|
for (Card c : human) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import forge.quest.data.QuestData;
|
|||||||
import forge.quest.data.QuestMatchState;
|
import forge.quest.data.QuestMatchState;
|
||||||
import forge.quest.data.QuestPreferences;
|
import forge.quest.data.QuestPreferences;
|
||||||
import forge.quest.gui.QuestFrame;
|
import forge.quest.gui.QuestFrame;
|
||||||
|
import forge.quest.gui.main.QuestQuest;
|
||||||
import forge.view.swing.OldGuiNewGame;
|
import forge.view.swing.OldGuiNewGame;
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
|
||||||
@@ -65,7 +66,7 @@ public class Gui_WinLose extends JFrame implements NewConstants {
|
|||||||
private class WinLoseModel {
|
private class WinLoseModel {
|
||||||
public QuestMatchState match;
|
public QuestMatchState match;
|
||||||
public QuestData quest;
|
public QuestData quest;
|
||||||
public Quest_Assignment qa;
|
public QuestQuest qq;
|
||||||
}
|
}
|
||||||
|
|
||||||
private WinLoseModel model;
|
private WinLoseModel model;
|
||||||
@@ -77,11 +78,11 @@ public class Gui_WinLose extends JFrame implements NewConstants {
|
|||||||
* @param quest a QuestData object
|
* @param quest a QuestData object
|
||||||
* @param qa a Quest_Assignment object
|
* @param qa a Quest_Assignment object
|
||||||
*/
|
*/
|
||||||
public Gui_WinLose(final QuestMatchState matchState, final QuestData quest, final Quest_Assignment qa) {
|
public Gui_WinLose(final QuestMatchState matchState, final QuestData quest, final QuestQuest qq) {
|
||||||
model = new WinLoseModel();
|
model = new WinLoseModel();
|
||||||
model.match = matchState;
|
model.match = matchState;
|
||||||
model.quest = quest;
|
model.quest = quest;
|
||||||
model.qa = qa;
|
model.qq = qq;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
jbInit();
|
jbInit();
|
||||||
@@ -186,25 +187,25 @@ public class Gui_WinLose extends JFrame implements NewConstants {
|
|||||||
void prepareForNextRound() {
|
void prepareForNextRound() {
|
||||||
if (Constant.Quest.fantasyQuest[0]) {
|
if (Constant.Quest.fantasyQuest[0]) {
|
||||||
int extraLife = 0;
|
int extraLife = 0;
|
||||||
if (model.qa != null) {
|
if (model.qq != null) {
|
||||||
if (model.quest.getInventory().hasItem("Zeppelin")) {
|
if (model.quest.getInventory().hasItem("Zeppelin")) {
|
||||||
extraLife = 3;
|
extraLife = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//AllZone.getGameAction().newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0],
|
//AllZone.getGameAction().newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0],
|
||||||
//humanList, computerList, humanLife, computerLife);
|
//humanList, computerList, humanLife, computerLife);
|
||||||
CardList humanList = forge.quest.data.QuestUtil.getHumanStartingCards(model.quest, model.qa);
|
CardList humanList = forge.quest.data.QuestUtil.getHumanStartingCards(model.quest, model.qq);
|
||||||
CardList computerList = new CardList();
|
CardList computerList = new CardList();
|
||||||
|
|
||||||
|
|
||||||
int humanLife = model.quest.getLife() + extraLife;
|
int humanLife = model.quest.getLife() + extraLife;
|
||||||
int computerLife = 20;
|
int computerLife = 20;
|
||||||
if (model.qa != null) {
|
if (model.qq != null) {
|
||||||
computerLife = model.qa.getComputerLife();
|
computerLife = model.qq.getAILife();
|
||||||
}
|
}
|
||||||
|
|
||||||
AllZone.getGameAction().newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0],
|
AllZone.getGameAction().newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0],
|
||||||
humanList, computerList, humanLife, computerLife, model.qa);
|
humanList, computerList, humanLife, computerLife, model.qq);
|
||||||
} else {
|
} else {
|
||||||
AllZone.getGameAction().newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0]);
|
AllZone.getGameAction().newGame(Constant.Runtime.HumanDeck[0], Constant.Runtime.ComputerDeck[0]);
|
||||||
}
|
}
|
||||||
@@ -362,7 +363,7 @@ public class Gui_WinLose extends JFrame implements NewConstants {
|
|||||||
giveQuestRewards(wonMatch);
|
giveQuestRewards(wonMatch);
|
||||||
|
|
||||||
model.match.reset();
|
model.match.reset();
|
||||||
AllZone.setQuestAssignment(null);
|
AllZone.setQuestQuest(null);
|
||||||
|
|
||||||
model.quest.saveData();
|
model.quest.saveData();
|
||||||
|
|
||||||
@@ -440,11 +441,11 @@ public class Gui_WinLose extends JFrame implements NewConstants {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Rewards from QuestAssignment
|
// Rewards from QuestAssignment
|
||||||
if (wonMatch && model.qa != null) {
|
if (wonMatch && model.qq != null) {
|
||||||
model.quest.addQuestsPlayed();
|
model.quest.addQuestsPlayed();
|
||||||
|
|
||||||
List<CardPrinted> questRewardCards = model.qa.getCardRewardList();
|
List<CardPrinted> questRewardCards = model.qq.getCardRewardList();
|
||||||
long questRewardCredits = model.qa.getCreditsReward();
|
long questRewardCredits = model.qq.getCreditsReward();
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("Quest Completed - \r\n");
|
sb.append("Quest Completed - \r\n");
|
||||||
@@ -465,7 +466,7 @@ public class Gui_WinLose extends JFrame implements NewConstants {
|
|||||||
|
|
||||||
String fileName = "BoxIcon.png";
|
String fileName = "BoxIcon.png";
|
||||||
ImageIcon icon = getIcon(fileName);
|
ImageIcon icon = getIcon(fileName);
|
||||||
String title = "Quest Rewards for " + model.qa.getName();
|
String title = "Quest Rewards for " + model.qq.getTitle();
|
||||||
JOptionPane.showMessageDialog(null, sb.toString(), title, JOptionPane.INFORMATION_MESSAGE, icon);
|
JOptionPane.showMessageDialog(null, sb.toString(), title, JOptionPane.INFORMATION_MESSAGE, icon);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,289 +0,0 @@
|
|||||||
package forge;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import forge.item.CardPrinted;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Quest_Assignment class.</p>
|
|
||||||
* An instance of a single quest assignment. Holds values that aren't defined in
|
|
||||||
* Deck class, such as credit reward.
|
|
||||||
*
|
|
||||||
* @author Forge
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class Quest_Assignment {
|
|
||||||
// ID (default -1, should be explicitly set at later time.)
|
|
||||||
private int id = -1;
|
|
||||||
|
|
||||||
// Default vals if none provided for this ID in quests.txt.
|
|
||||||
private int requiredNumberWins = 20;
|
|
||||||
private int computerLife = 25;
|
|
||||||
private long creditsReward = 100;
|
|
||||||
private String name = "Mystery Quest";
|
|
||||||
private String desc = "";
|
|
||||||
private String difficulty = "Medium";
|
|
||||||
private String cardReward = "1 colorless rare";
|
|
||||||
private String iconName = "Unknown.jpg";
|
|
||||||
private boolean repeatable = false;
|
|
||||||
|
|
||||||
// Other cards used in assignment: starting, and reward.
|
|
||||||
private CardList humanExtraCards = new CardList();
|
|
||||||
private CardList aiExtraCards = new CardList();
|
|
||||||
private List<CardPrinted> cardRewardList = new ArrayList<CardPrinted>();
|
|
||||||
|
|
||||||
// No constructor required; fields are set dynamically.
|
|
||||||
|
|
||||||
// Setters and getters, in alphabetical order.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>aiExtraCards</code>.</p>
|
|
||||||
* Sets list of cards automatically played at start of match.
|
|
||||||
*
|
|
||||||
* @param s a CardList object.
|
|
||||||
*/
|
|
||||||
public final void setAIExtraCards(final CardList cl) {
|
|
||||||
this.aiExtraCards = cl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>aiExtraCards</code>.</p>
|
|
||||||
* Gets list of cards automatically played at start of match.
|
|
||||||
*
|
|
||||||
* @return a {@link java.util.ArrayList} object.
|
|
||||||
*/
|
|
||||||
public final CardList getAIExtraCards() {
|
|
||||||
return aiExtraCards;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>cardReward</code>.</p>
|
|
||||||
* Sets string notated card reward received if match is won.
|
|
||||||
*
|
|
||||||
* @param cardRewardIn a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public final void setCardReward(final String cardRewardIn) {
|
|
||||||
this.cardReward = cardRewardIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>cardReward</code>.</p>
|
|
||||||
* Gets string notated card reward received if match is won.
|
|
||||||
*
|
|
||||||
* @return a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public final String getCardReward() {
|
|
||||||
return cardReward;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>cardRewardList</code>.</p>
|
|
||||||
* Sets card reward list for cards received if match is won.
|
|
||||||
*
|
|
||||||
* @return a {@link java.util.ArrayList} object.
|
|
||||||
*/
|
|
||||||
public void setCardRewardList(final List<CardPrinted> cp) {
|
|
||||||
this.cardRewardList = cp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>cardRewardList</code>.</p>
|
|
||||||
* Gets card reward list for cards received if match is won.
|
|
||||||
*
|
|
||||||
* @return a {@link java.util.ArrayList} object.
|
|
||||||
*/
|
|
||||||
public final List<CardPrinted> getCardRewardList() {
|
|
||||||
return cardRewardList;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>computerLife</code>.</p>
|
|
||||||
* Sets computer life at start of match.
|
|
||||||
*
|
|
||||||
* @param computerLifeIn a int.
|
|
||||||
*/
|
|
||||||
public final void setComputerLife(final int computerLifeIn) {
|
|
||||||
this.computerLife = computerLifeIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>computerLife</code>.</p>
|
|
||||||
* Gets computer life at start of match.
|
|
||||||
*
|
|
||||||
* @return a int.
|
|
||||||
*/
|
|
||||||
public final int getComputerLife() {
|
|
||||||
return computerLife;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>creditsReward</code>.</p>
|
|
||||||
* Sets credit reward received if match is won.
|
|
||||||
*
|
|
||||||
* @param creditsRewardIn a long.
|
|
||||||
*/
|
|
||||||
public final void setCreditsReward(final long creditsRewardIn) {
|
|
||||||
this.creditsReward = creditsRewardIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>creditsReward</code>.</p>
|
|
||||||
* Gets credit reward received if match is won.
|
|
||||||
*
|
|
||||||
* @return a long.
|
|
||||||
*/
|
|
||||||
public final long getCreditsReward() {
|
|
||||||
return creditsReward;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>desc</code>.</p>
|
|
||||||
*
|
|
||||||
* @param descIn a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public final void setDesc(final String descIn) {
|
|
||||||
this.desc = descIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>desc</code>.</p>
|
|
||||||
*
|
|
||||||
* @return a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public final String getDesc() {
|
|
||||||
return desc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>difficulty</code>.</p>
|
|
||||||
*
|
|
||||||
* @param difficultyIn a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public final void setDifficulty(final String difficultyIn) {
|
|
||||||
this.difficulty = difficultyIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>humanExtraCards</code>.</p>
|
|
||||||
* Sets list of cards automatically played at start of match.
|
|
||||||
*
|
|
||||||
* @param s a CardList object.
|
|
||||||
*/
|
|
||||||
public final void setHumanExtraCards(final CardList cl) {
|
|
||||||
this.humanExtraCards = cl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>humanExtraCards</code>.</p>
|
|
||||||
* Gets list of cards automatically played at start of match.
|
|
||||||
*
|
|
||||||
* @return a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
public final CardList getHumanExtraCards() {
|
|
||||||
return humanExtraCards;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>difficulty</code>.</p>
|
|
||||||
*
|
|
||||||
* @return a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public final String getDifficulty() {
|
|
||||||
return difficulty;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>id</code>.</p>
|
|
||||||
*
|
|
||||||
* @param idIn a int.
|
|
||||||
*/
|
|
||||||
public final void setId(final int idIn) {
|
|
||||||
this.id = idIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>id</code>.</p>
|
|
||||||
*
|
|
||||||
* @return a int.
|
|
||||||
*/
|
|
||||||
public final int getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>iconName</code>.</p>
|
|
||||||
* Sets filename of icon used when displaying this quest.
|
|
||||||
*
|
|
||||||
* @param s a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public final void setIconName(final String s) {
|
|
||||||
iconName = s;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>iconName</code>.</p>
|
|
||||||
* Gets filename of icon used when displaying this quest.
|
|
||||||
*
|
|
||||||
* @return a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public final String getIconName() {
|
|
||||||
return iconName;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>name</code>.</p>
|
|
||||||
*
|
|
||||||
* @param nameIn a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public final void setName(final String nameIn) {
|
|
||||||
this.name = nameIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>name</code>.</p>
|
|
||||||
*
|
|
||||||
* @return a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public final String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>repeatable</code>.</p>
|
|
||||||
*
|
|
||||||
* @param repeatableIn a boolean.
|
|
||||||
*/
|
|
||||||
public final void setRepeatable(final boolean repeatableIn) {
|
|
||||||
this.repeatable = repeatableIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>isRepeatable.</p>
|
|
||||||
*
|
|
||||||
* @return a boolean.
|
|
||||||
*/
|
|
||||||
public final boolean isRepeatable() {
|
|
||||||
return repeatable;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Setter for the field <code>requiredNumberWins</code>.</p>
|
|
||||||
* Sets number of wins required to unlock this quest.
|
|
||||||
*
|
|
||||||
* @param requiredNumberWinsIn a int.
|
|
||||||
*/
|
|
||||||
public final void setRequiredNumberWins(final int requiredNumberWinsIn) {
|
|
||||||
this.requiredNumberWins = requiredNumberWinsIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Getter for the field <code>requiredNumberWins</code>.</p>
|
|
||||||
* Gets number of wins required to unlock this quest.
|
|
||||||
*
|
|
||||||
* @return a int.
|
|
||||||
*/
|
|
||||||
public final int getRequiredNumberWins() {
|
|
||||||
return requiredNumberWins;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,278 +0,0 @@
|
|||||||
package forge;
|
|
||||||
|
|
||||||
import forge.error.ErrorViewer;
|
|
||||||
import forge.properties.NewConstants;
|
|
||||||
import forge.quest.data.QuestUtil;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileReader;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>ReadQuest_Assignment class.</p>
|
|
||||||
*
|
|
||||||
* @author Forge
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class ReadQuest_Assignment implements Runnable, NewConstants {
|
|
||||||
|
|
||||||
ArrayList<Quest_Assignment> allQuests = new ArrayList<Quest_Assignment>();
|
|
||||||
private ArrayList<Integer> ids = new ArrayList<Integer>();
|
|
||||||
|
|
||||||
private BufferedReader br;
|
|
||||||
private int totalWins;
|
|
||||||
private List<Integer> completedQuests = new ArrayList<Integer>();
|
|
||||||
|
|
||||||
// Constants, tied to properties in the quests.txt file.
|
|
||||||
private static final String ID = "id";
|
|
||||||
private static final String ICON = "Icon";
|
|
||||||
private static final String TITLE = "Title";
|
|
||||||
private static final String DESC = "Desc";
|
|
||||||
private static final String DIFF = "Diff";
|
|
||||||
private static final String AILIFE = "AILife";
|
|
||||||
private static final String REPEAT = "Repeat";
|
|
||||||
private static final String WINS = "Wins";
|
|
||||||
private static final String CARDS = "Card Reward";
|
|
||||||
private static final String CREDITS = "Credit Reward";
|
|
||||||
private static final String HUMANEXTRAS = "HumanExtras";
|
|
||||||
private static final String AIEXTRAS = "AIExtras";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Constructor for ReadQuest_Assignment.</p>
|
|
||||||
* Sets parameters for available quests and prepares buffered reader for quests.txt.
|
|
||||||
*
|
|
||||||
* @param filename a {@link java.lang.String} object.
|
|
||||||
* @param questData a {@link forge.quest.data.QuestData} object.
|
|
||||||
*/
|
|
||||||
public ReadQuest_Assignment(String filename, forge.quest.data.QuestData questData) {
|
|
||||||
this(new File(filename), questData);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Constructor for ReadQuest_Assignment.</p>
|
|
||||||
* Sets parameters for available quests and prepares buffered reader for quests.txt.
|
|
||||||
*
|
|
||||||
* @param file a {@link java.io.File} object.
|
|
||||||
* @param questData a {@link forge.quest.data.QuestData} object.
|
|
||||||
*/
|
|
||||||
public ReadQuest_Assignment(File file, forge.quest.data.QuestData questData) {
|
|
||||||
if (questData != null) {
|
|
||||||
totalWins = questData.getWin();
|
|
||||||
if (questData.getCompletedQuests() != null) {
|
|
||||||
completedQuests = questData.getCompletedQuests();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
completedQuests = new ArrayList<Integer>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
br = new BufferedReader(new FileReader(file));
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ErrorViewer.showError(ex, "File \"%s\" not found", file.getAbsolutePath());
|
|
||||||
throw new RuntimeException("ReadQuest_Assignment > constructor error: "+
|
|
||||||
"BufferedReader failed, '"+file.getAbsolutePath()+"' not found.");
|
|
||||||
}
|
|
||||||
} // ReadQuest_Assignment()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>getAvailableQuests.</p>
|
|
||||||
* Returns list of currently available quest objects.
|
|
||||||
*
|
|
||||||
* @return a {@link java.util.List} object.
|
|
||||||
*/
|
|
||||||
public List<Quest_Assignment> getAvailableQuests() {
|
|
||||||
ArrayList<Quest_Assignment> availableQuests = new ArrayList<Quest_Assignment>();
|
|
||||||
|
|
||||||
for(Quest_Assignment qa : allQuests) {
|
|
||||||
if (qa.getRequiredNumberWins() <= totalWins && !completedQuests.contains(qa.getId())) {
|
|
||||||
availableQuests.add(qa);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return availableQuests;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>getQuests.</p>
|
|
||||||
* Returns complete list of all quest objects.
|
|
||||||
*
|
|
||||||
* @return a {@link java.util.List} object.
|
|
||||||
*/
|
|
||||||
public List<Quest_Assignment> getAllQuests() {
|
|
||||||
return allQuests;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>getQuestsByIds.</p>
|
|
||||||
*
|
|
||||||
* @param availableQuestIds a {@link java.util.List} object.
|
|
||||||
* @return a {@link java.util.List} object.
|
|
||||||
*/
|
|
||||||
public List<Quest_Assignment> getQuestsByIds(List<Integer> availableQuestIds) {
|
|
||||||
List<Quest_Assignment> q = new ArrayList<Quest_Assignment>();
|
|
||||||
|
|
||||||
for (Quest_Assignment qa : allQuests) {
|
|
||||||
if (availableQuestIds.contains(qa.getId())) {
|
|
||||||
q.add(qa);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return q;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>getQuestById.</p>
|
|
||||||
*
|
|
||||||
* @param i a int.
|
|
||||||
* @return a {@link forge.Quest_Assignment} object.
|
|
||||||
*/
|
|
||||||
public Quest_Assignment getQuestById(int id) {
|
|
||||||
// Error handling for OOB ID?
|
|
||||||
return allQuests.get(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>run.</p>
|
|
||||||
* Assembles Quest_Assignment instances into allQuests.
|
|
||||||
*/
|
|
||||||
public void run() {
|
|
||||||
Quest_Assignment qa = null;
|
|
||||||
String line;
|
|
||||||
int i;
|
|
||||||
String[] linedata;
|
|
||||||
|
|
||||||
try {
|
|
||||||
while ((line = br.readLine()) != null) {
|
|
||||||
if(line.equals("[quest]")) {
|
|
||||||
qa = new Quest_Assignment();
|
|
||||||
allQuests.add(qa);
|
|
||||||
}
|
|
||||||
else if(!line.equals("") && qa != null) {
|
|
||||||
linedata = line.split("=", 2);
|
|
||||||
linedata[1] = linedata[1].trim();
|
|
||||||
|
|
||||||
// If empty data, ignore the line (assignment will use default).
|
|
||||||
if(linedata[1].equals("")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Data OK.
|
|
||||||
if(linedata[0].equals(ID)) {
|
|
||||||
i = Integer.parseInt(linedata[1]);
|
|
||||||
|
|
||||||
// Duplicate ID check
|
|
||||||
if(ids.contains(i)) {
|
|
||||||
throw new RuntimeException("ReadQuest_Assignment > run() error: duplicate quest ID ("+i+")");
|
|
||||||
}
|
|
||||||
// Non-sequential ID check
|
|
||||||
else if(i != allQuests.size()) {
|
|
||||||
throw new RuntimeException("ReadQuest_Assignment > run() error: non-sequential quest ID ("+i+")");
|
|
||||||
}
|
|
||||||
// ID OK.
|
|
||||||
else {
|
|
||||||
ids.add(i);
|
|
||||||
qa.setId(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(linedata[0].equals(ICON)) {
|
|
||||||
qa.setIconName(linedata[1]);
|
|
||||||
}
|
|
||||||
else if(linedata[0].equals(TITLE)) {
|
|
||||||
qa.setName(linedata[1]);
|
|
||||||
}
|
|
||||||
else if(linedata[0].equals(DESC)) {
|
|
||||||
qa.setDesc(linedata[1]);
|
|
||||||
}
|
|
||||||
else if(linedata[0].equals(DIFF)) {
|
|
||||||
qa.setDifficulty(linedata[1]);
|
|
||||||
}
|
|
||||||
else if(linedata[0].equals(REPEAT)) {
|
|
||||||
qa.setRepeatable(Boolean.parseBoolean(linedata[1]));
|
|
||||||
}
|
|
||||||
else if(linedata[0].equals(AILIFE)) {
|
|
||||||
qa.setComputerLife(Integer.parseInt(linedata[1]));
|
|
||||||
}
|
|
||||||
else if(linedata[0].equals(WINS)) {
|
|
||||||
qa.setRequiredNumberWins(Integer.parseInt(linedata[1]));
|
|
||||||
}
|
|
||||||
else if(linedata[0].equals(CREDITS)) {
|
|
||||||
qa.setCreditsReward(Integer.parseInt(linedata[1]));
|
|
||||||
}
|
|
||||||
// Card reward list assembled here.
|
|
||||||
else if(linedata[0].equals(CARDS)) {
|
|
||||||
qa.setCardReward(linedata[1]);
|
|
||||||
qa.setCardRewardList(QuestUtil.generateCardRewardList(linedata[1]));
|
|
||||||
}
|
|
||||||
// Human extra card list assembled here.
|
|
||||||
else if(linedata[0].equals(HUMANEXTRAS)) {
|
|
||||||
String[] names = linedata[1].split("\\|");
|
|
||||||
CardList templist = new CardList();
|
|
||||||
Card tempcard;
|
|
||||||
|
|
||||||
for(String s : names) {
|
|
||||||
// Token card creation
|
|
||||||
if(s.substring(0,5).equals("TOKEN")) {
|
|
||||||
tempcard = QuestUtil.createToken(s);
|
|
||||||
tempcard.addController(AllZone.getHumanPlayer());
|
|
||||||
tempcard.setOwner(AllZone.getHumanPlayer());
|
|
||||||
templist.add(tempcard);
|
|
||||||
}
|
|
||||||
// Standard card creation
|
|
||||||
else {
|
|
||||||
tempcard = AllZone.getCardFactory().getCard(s, AllZone.getHumanPlayer());
|
|
||||||
tempcard.setCurSetCode(tempcard.getMostRecentSet());
|
|
||||||
tempcard.setImageFilename(CardUtil.buildFilename(tempcard));
|
|
||||||
templist.add(tempcard);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
qa.setHumanExtraCards(templist);
|
|
||||||
}
|
|
||||||
// AI extra card list assembled here.
|
|
||||||
else if(linedata[0].equals(AIEXTRAS)) {
|
|
||||||
String[] names = linedata[1].split("\\|");
|
|
||||||
CardList templist = new CardList();
|
|
||||||
Card tempcard;
|
|
||||||
|
|
||||||
for(String s : names) {
|
|
||||||
// Token card creation
|
|
||||||
if(s.substring(0,5).equals("TOKEN")) {
|
|
||||||
tempcard = QuestUtil.createToken(s);
|
|
||||||
tempcard.addController(AllZone.getComputerPlayer());
|
|
||||||
tempcard.setOwner(AllZone.getComputerPlayer());
|
|
||||||
templist.add(tempcard);
|
|
||||||
}
|
|
||||||
// Standard card creation
|
|
||||||
else {
|
|
||||||
tempcard = AllZone.getCardFactory().getCard(s, AllZone.getComputerPlayer());
|
|
||||||
tempcard.setCurSetCode(tempcard.getMostRecentSet());
|
|
||||||
tempcard.setImageFilename(CardUtil.buildFilename(tempcard));
|
|
||||||
templist.add(tempcard);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
qa.setAIExtraCards(templist);
|
|
||||||
}
|
|
||||||
} // else if()
|
|
||||||
} // while()
|
|
||||||
|
|
||||||
br.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Confirm that all quests have IDs.
|
|
||||||
for(Quest_Assignment q : allQuests) {
|
|
||||||
if(q.getId()==-1) {
|
|
||||||
throw new RuntimeException("ReadQuest_Assignment > getQuests() error: "+
|
|
||||||
"Quest ID missing for '"+q.getName()+"'.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // run()
|
|
||||||
}
|
|
||||||
@@ -53,7 +53,7 @@ public final class BoosterUtils {
|
|||||||
|
|
||||||
int nRares = numRare, nMythics = 0;
|
int nRares = numRare, nMythics = 0;
|
||||||
Predicate<CardPrinted> filterMythics = Predicate.and(filter, CardPrinted.Predicates.Presets.isMythicRare);
|
Predicate<CardPrinted> filterMythics = Predicate.and(filter, CardPrinted.Predicates.Presets.isMythicRare);
|
||||||
boolean haveMythics = filterMythics.any(cardpool);
|
boolean haveMythics = false;//filterMythics.any(cardpool);
|
||||||
for(int iSlot = 0; haveMythics && iSlot < numRare; iSlot++) {
|
for(int iSlot = 0; haveMythics && iSlot < numRare; iSlot++) {
|
||||||
if (MyRandom.random.nextInt(7) < 1) { // a bit higher chance to get a mythic
|
if (MyRandom.random.nextInt(7) < 1) { // a bit higher chance to get a mythic
|
||||||
nRares--;
|
nRares--;
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
/** Forge Card Game */
|
/** Forge Card Game */
|
||||||
package forge.game.limited;
|
package forge.game.limited;
|
||||||
|
|||||||
@@ -1,194 +0,0 @@
|
|||||||
package forge.quest.data;
|
|
||||||
|
|
||||||
import forge.AllZone;
|
|
||||||
import forge.FileUtil;
|
|
||||||
import forge.deck.Deck;
|
|
||||||
import forge.deck.DeckManager;
|
|
||||||
import forge.error.ErrorViewer;
|
|
||||||
import forge.properties.ForgeProps;
|
|
||||||
import forge.properties.NewConstants;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>QuestBattleManager class.</p>
|
|
||||||
*
|
|
||||||
* @author Forge
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class QuestBattleManager {
|
|
||||||
/** Constant <code>easyAIDecks</code> */
|
|
||||||
private static transient List<String> easyAIDecks;
|
|
||||||
/** Constant <code>mediumAIDecks</code> */
|
|
||||||
private static transient List<String> mediumAIDecks;
|
|
||||||
/** Constant <code>hardAIDecks</code> */
|
|
||||||
private static transient List<String> hardAIDecks;
|
|
||||||
/** Constant <code>veryHardAIDecks</code> */
|
|
||||||
private static transient List<String> veryHardAIDecks;
|
|
||||||
|
|
||||||
static {
|
|
||||||
easyAIDecks = readFile(ForgeProps.getFile(NewConstants.QUEST.EASY));
|
|
||||||
mediumAIDecks = readFile(ForgeProps.getFile(NewConstants.QUEST.MEDIUM));
|
|
||||||
hardAIDecks = readFile(ForgeProps.getFile(NewConstants.QUEST.HARD));
|
|
||||||
veryHardAIDecks = readFile(ForgeProps.getFile(NewConstants.QUEST.VERYHARD));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>getOpponent.</p>
|
|
||||||
*
|
|
||||||
* Badly named; AllZoneUtil already has a method called getOpponents.
|
|
||||||
* ?????
|
|
||||||
*
|
|
||||||
* @param aiDeck a {@link java.util.List} object.
|
|
||||||
* @param number a int.
|
|
||||||
* @return a {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public static String getOpponent(List<String> aiDeck, int number) {
|
|
||||||
//This is to make sure that the opponents do not change when the deck editor is launched.
|
|
||||||
List<String> deckListCopy = new ArrayList<String>(aiDeck);
|
|
||||||
Collections.shuffle(deckListCopy, new Random(AllZone.getQuestData().getRandomSeed()));
|
|
||||||
|
|
||||||
return deckListCopy.get(number);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>generateBattles.</p>
|
|
||||||
* Generates an array of new opponents based on current win conditions.
|
|
||||||
*
|
|
||||||
* @return an array of {@link java.lang.String} objects.
|
|
||||||
*/
|
|
||||||
public static String[] generateBattles() {
|
|
||||||
int index = AllZone.getQuestData().getDifficultyIndex();
|
|
||||||
|
|
||||||
if (AllZone.getQuestData().getWin() < QuestPreferences.getWinsForMediumAI(index)) {
|
|
||||||
return new String[]{
|
|
||||||
getOpponent(easyAIDecks, 0),
|
|
||||||
getOpponent(easyAIDecks, 1),
|
|
||||||
getOpponent(easyAIDecks, 2)};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AllZone.getQuestData().getWin() == QuestPreferences.getWinsForMediumAI(index)) {
|
|
||||||
return new String[]{
|
|
||||||
getOpponent(easyAIDecks, 0),
|
|
||||||
getOpponent(mediumAIDecks, 0),
|
|
||||||
getOpponent(mediumAIDecks, 1)};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AllZone.getQuestData().getWin() < QuestPreferences.getWinsForHardAI(index)) {
|
|
||||||
return new String[]{
|
|
||||||
getOpponent(mediumAIDecks, 0),
|
|
||||||
getOpponent(mediumAIDecks, 1),
|
|
||||||
getOpponent(mediumAIDecks, 2)};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AllZone.getQuestData().getWin() == QuestPreferences.getWinsForHardAI(index)) {
|
|
||||||
return new String[]{
|
|
||||||
getOpponent(mediumAIDecks, 0),
|
|
||||||
getOpponent(hardAIDecks, 0),
|
|
||||||
getOpponent(hardAIDecks, 1)};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AllZone.getQuestData().getWin() >= QuestPreferences.getWinsForVeryHardAI(index)) {
|
|
||||||
return new String[]{
|
|
||||||
getOpponent(hardAIDecks, 0),
|
|
||||||
getOpponent(hardAIDecks, 1),
|
|
||||||
getOpponent(veryHardAIDecks, 0)};
|
|
||||||
}
|
|
||||||
|
|
||||||
return new String[]{
|
|
||||||
getOpponent(hardAIDecks, 0),
|
|
||||||
getOpponent(hardAIDecks, 1),
|
|
||||||
getOpponent(hardAIDecks, 2)};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>getDeckFromFile.</p>
|
|
||||||
* Returns a deck object built from a file name.
|
|
||||||
*
|
|
||||||
* @param deckName a {@link java.lang.String} object.
|
|
||||||
* @return a {@link forge.deck.Deck} object.
|
|
||||||
*/
|
|
||||||
public static Deck getAIDeckFromFile(String deckName) {
|
|
||||||
final File file = ForgeProps.getFile(NewConstants.QUEST.DECKS);
|
|
||||||
final DeckManager manager = new DeckManager(file);
|
|
||||||
return manager.getDeck(deckName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>getQuestEventFromFile.</p>
|
|
||||||
* Returns QuestEvent data for the challenge stored in that file name.
|
|
||||||
*
|
|
||||||
* @param deckName a {@link java.lang.String} object.
|
|
||||||
* @return a {@link forge.deck.Deck} object.
|
|
||||||
*/
|
|
||||||
public static QuestEvent getQuestEventFromFile(String deckName) {
|
|
||||||
final File deckPath = ForgeProps.getFile(NewConstants.QUEST.DECKS);
|
|
||||||
File deckFile = new File(deckPath, deckName + ".dck");
|
|
||||||
|
|
||||||
QuestEvent result = readQuestBattleMetadataFromDeckFile(deckFile);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>readFile.</p>
|
|
||||||
* A reader util for accessing the AI deck list text files.
|
|
||||||
*
|
|
||||||
* @param file a {@link java.io.File} object.
|
|
||||||
* @param aiDecks a {@link java.util.List} object.
|
|
||||||
* @return a {@link java.util.List} object.
|
|
||||||
*/
|
|
||||||
private static List<String> readFile(File file) {
|
|
||||||
ArrayList<String> list = FileUtil.readFile(file);
|
|
||||||
|
|
||||||
//remove any blank lines
|
|
||||||
ArrayList<String> noBlankLines = new ArrayList<String>();
|
|
||||||
String s;
|
|
||||||
for (String aList : list) {
|
|
||||||
s = aList.trim();
|
|
||||||
if (!s.equals("")) {
|
|
||||||
noBlankLines.add(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
list = noBlankLines;
|
|
||||||
|
|
||||||
if (list.size() < 3) {
|
|
||||||
ErrorViewer.showError(new Exception(),
|
|
||||||
"QuestData : readFile() error, file %s is too short, it must contain at least 3 ai deck names",
|
|
||||||
file);
|
|
||||||
}
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static QuestEvent readQuestBattleMetadataFromDeckFile(final File f) {
|
|
||||||
QuestEvent out = new QuestEvent();
|
|
||||||
List<String> contents = FileUtil.readFile(f);
|
|
||||||
|
|
||||||
for (String s : contents) {
|
|
||||||
if ("[main]".equals(s)) { break; }
|
|
||||||
if (StringUtils.isBlank(s) || s.charAt(0) == '[') { continue; }
|
|
||||||
|
|
||||||
int eqPos = s.indexOf('=');
|
|
||||||
if (eqPos < 0) { continue; } // no equals sign here
|
|
||||||
String key = s.substring(0, eqPos);
|
|
||||||
String value = s.substring(eqPos + 1);
|
|
||||||
|
|
||||||
if ("DisplayName".equalsIgnoreCase(key)) {
|
|
||||||
out.displayName = value;
|
|
||||||
} else if ("Difficulty".equalsIgnoreCase(key)) {
|
|
||||||
out.difficulty = value;
|
|
||||||
} else if ("Description".equalsIgnoreCase(key)) {
|
|
||||||
out.description = value;
|
|
||||||
} else if ("Icon".equalsIgnoreCase(key)) {
|
|
||||||
out.icon = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
package forge.quest.data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Write javadoc for this type.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class QuestEvent {
|
|
||||||
String displayName;
|
|
||||||
String difficulty;
|
|
||||||
String description;
|
|
||||||
String icon;
|
|
||||||
|
|
||||||
public final String getDisplayName() { return displayName; }
|
|
||||||
public final String getDifficulty() { return difficulty; }
|
|
||||||
public final String getDescription() { return description; }
|
|
||||||
public final String getIcon() { return icon; }
|
|
||||||
}
|
|
||||||
@@ -3,21 +3,21 @@ package forge.quest.data;
|
|||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.Constant;
|
import forge.Constant;
|
||||||
import forge.Quest_Assignment;
|
|
||||||
import forge.card.CardRarity;
|
import forge.card.CardRarity;
|
||||||
import forge.card.BoosterUtils;
|
import forge.card.BoosterUtils;
|
||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
|
import forge.quest.gui.main.QuestQuest;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>QuestUtil class.</p>
|
* <p>QuestUtil class.</p>
|
||||||
|
* MODEL - Static utility methods to help with minor tasks around Quest.
|
||||||
*
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
public class QuestUtil {
|
public class QuestUtil {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>getComputerStartingCards.</p>
|
* <p>getComputerStartingCards.</p>
|
||||||
*
|
*
|
||||||
@@ -36,11 +36,11 @@ public class QuestUtil {
|
|||||||
* @param qa a {@link forge.Quest_Assignment} object.
|
* @param qa a {@link forge.Quest_Assignment} object.
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public static CardList getComputerStartingCards(final QuestData qd, Quest_Assignment qa) {
|
public static CardList getComputerStartingCards(final QuestData qd, QuestQuest qq) {
|
||||||
CardList list = new CardList();
|
CardList list = new CardList();
|
||||||
|
|
||||||
if (qa != null) {
|
if (qq != null) {
|
||||||
list.addAll(qa.getAIExtraCards());
|
list.addAll(qq.getAIExtraCards());
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@@ -75,11 +75,11 @@ public class QuestUtil {
|
|||||||
* @param qa a {@link forge.Quest_Assignment} object.
|
* @param qa a {@link forge.Quest_Assignment} object.
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public static CardList getHumanStartingCards(final QuestData qd, Quest_Assignment qa) {
|
public static CardList getHumanStartingCards(final QuestData qd, QuestQuest qq) {
|
||||||
CardList list = getHumanStartingCards(qd);
|
CardList list = getHumanStartingCards(qd);
|
||||||
|
|
||||||
if (qa != null) {
|
if (qq != null) {
|
||||||
list.addAll(qa.getHumanExtraCards());
|
list.addAll(qq.getHumanExtraCards());
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
@@ -163,17 +163,5 @@ public class QuestUtil {
|
|||||||
|
|
||||||
return BoosterUtils.generateCards(qty, rar, col);
|
return BoosterUtils.generateCards(qty, rar, col);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>setupQuest.</p>
|
|
||||||
* Assembled hard-coded quest options.
|
|
||||||
* All non-deck-specific handling now takes place in quests.txt.
|
|
||||||
*
|
|
||||||
* @deprecated
|
|
||||||
* @param qa
|
|
||||||
*/
|
|
||||||
public static void setupQuest(Quest_Assignment qa) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} //QuestUtil
|
} //QuestUtil
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package forge.quest.gui;
|
|||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
import forge.quest.gui.bazaar.QuestBazaarPanel;
|
import forge.quest.gui.bazaar.QuestBazaarPanel;
|
||||||
import forge.quest.gui.main.QuestMainPanel;
|
import forge.quest.gui.main.QuestEventManager;
|
||||||
import forge.view.swing.OldGuiNewGame;
|
import forge.view.swing.OldGuiNewGame;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
@@ -24,6 +24,7 @@ public class QuestFrame extends JFrame {
|
|||||||
|
|
||||||
JPanel visiblePanel;
|
JPanel visiblePanel;
|
||||||
CardLayout questLayout;
|
CardLayout questLayout;
|
||||||
|
QuestEventManager qem = new QuestEventManager();
|
||||||
|
|
||||||
/** Constant <code>MAIN_PANEL="Main"</code> */
|
/** Constant <code>MAIN_PANEL="Main"</code> */
|
||||||
public static final String MAIN_PANEL = "Main";
|
public static final String MAIN_PANEL = "Main";
|
||||||
@@ -39,7 +40,14 @@ public class QuestFrame extends JFrame {
|
|||||||
*/
|
*/
|
||||||
public QuestFrame() throws HeadlessException {
|
public QuestFrame() throws HeadlessException {
|
||||||
this.setTitle("Quest Mode");
|
this.setTitle("Quest Mode");
|
||||||
|
// DOUBLESTRIKE SEZ - this assembles all events, once.
|
||||||
|
// Unfortunately, QuestFrame is called several times.
|
||||||
|
// This is THE WRONG PLACE for this method, feel free to move,
|
||||||
|
// I'll do it very soon anyways, this is only a temporary thing.
|
||||||
|
if(qem.getAllDuels()==null) {
|
||||||
|
qem.assembleAllEvents();
|
||||||
|
}
|
||||||
|
|
||||||
visiblePanel = new JPanel(new BorderLayout());
|
visiblePanel = new JPanel(new BorderLayout());
|
||||||
visiblePanel.setBorder(new EmptyBorder(2, 2, 2, 2));
|
visiblePanel.setBorder(new EmptyBorder(2, 2, 2, 2));
|
||||||
questLayout = new CardLayout();
|
questLayout = new CardLayout();
|
||||||
@@ -53,7 +61,6 @@ public class QuestFrame extends JFrame {
|
|||||||
visiblePanel.add(newPanel, BAZAAR_PANEL);
|
visiblePanel.add(newPanel, BAZAAR_PANEL);
|
||||||
subPanelMap.put(BAZAAR_PANEL, newPanel);
|
subPanelMap.put(BAZAAR_PANEL, newPanel);
|
||||||
|
|
||||||
|
|
||||||
this.getContentPane().setLayout(new BorderLayout());
|
this.getContentPane().setLayout(new BorderLayout());
|
||||||
this.getContentPane().add(visiblePanel, BorderLayout.CENTER);
|
this.getContentPane().add(visiblePanel, BorderLayout.CENTER);
|
||||||
this.setPreferredSize(new Dimension(1024, 768));
|
this.setPreferredSize(new Dimension(1024, 768));
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,90 +0,0 @@
|
|||||||
package forge.quest.gui.main;
|
|
||||||
|
|
||||||
|
|
||||||
import forge.gui.GuiUtils;
|
|
||||||
import forge.quest.data.QuestBattleManager;
|
|
||||||
import forge.quest.data.QuestEvent;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>QuestBattle class.</p>
|
|
||||||
* Manages QuestSelectablePanel instances for "battle" style matches.
|
|
||||||
*
|
|
||||||
* @author Forge
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class QuestBattle extends QuestSelectablePanel {
|
|
||||||
/** Constant <code>serialVersionUID=3112668476017792084L</code> */
|
|
||||||
private static final long serialVersionUID = 3112668476017792084L;
|
|
||||||
|
|
||||||
private String deckName;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Constructor for QuestBattle.</p>
|
|
||||||
*
|
|
||||||
* @param name a {@link java.lang.String}, stores display name of opponent.
|
|
||||||
* @param diff a {@link java.lang.String} stores difficulty of opponent.
|
|
||||||
* @param description a {@link java.lang.String} stores description of opponent's deck.
|
|
||||||
* @param icon a {@link javax.swing.ImageIcon} stores opponent's icon.
|
|
||||||
*/
|
|
||||||
private QuestBattle(String name, String deck, String diff, String desc, ImageIcon icon) {
|
|
||||||
super(name, diff, desc, icon);
|
|
||||||
this.deckName = deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>getBattles.</p>
|
|
||||||
*
|
|
||||||
* Returns list of QuestBattle objects storing data
|
|
||||||
* of the battles currently available.
|
|
||||||
*
|
|
||||||
* @return a {@link java.util.List} object.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// There's got to be a better place for this method.
|
|
||||||
public static List<QuestSelectablePanel> getBattles() {
|
|
||||||
List<QuestSelectablePanel> opponentList = new ArrayList<QuestSelectablePanel>();
|
|
||||||
|
|
||||||
String[] oppDecks = QuestBattleManager.generateBattles();
|
|
||||||
for (String oppDeckName : oppDecks) {
|
|
||||||
// Get deck object and properties for this opponent.
|
|
||||||
QuestEvent event1 = QuestBattleManager.getQuestEventFromFile(oppDeckName);
|
|
||||||
|
|
||||||
String oppName = event1.getDisplayName();
|
|
||||||
String oppDiff = event1.getDifficulty();
|
|
||||||
String oppDesc = event1.getDescription();
|
|
||||||
String oppIconAddress = event1.getIcon();
|
|
||||||
|
|
||||||
ImageIcon icon;
|
|
||||||
// If non-default icon defined, use it
|
|
||||||
if (StringUtils.isBlank(oppIconAddress)) {
|
|
||||||
icon = GuiUtils.getIconFromFile(oppName + ".jpg");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
icon = GuiUtils.getIconFromFile(oppIconAddress + ".jpg");
|
|
||||||
|
|
||||||
// Add to list of current quest opponents.
|
|
||||||
opponentList.add(
|
|
||||||
new QuestBattle(oppName, oppDeckName, oppDiff, oppDesc, icon)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return opponentList;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
// Called by ???? to get deck name for image icon generation.
|
|
||||||
// Exception should be thrown somewhere if image can't be found.
|
|
||||||
return deckName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
12
src/main/java/forge/quest/gui/main/QuestDuel.java
Normal file
12
src/main/java/forge/quest/gui/main/QuestDuel.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package forge.quest.gui.main;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>QuestDuel class.</p>
|
||||||
|
* MODEL - A single duel event data instance, including meta and deck.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class QuestDuel extends QuestEvent {
|
||||||
|
|
||||||
|
// [QuestDuel has no unique properties yet.]
|
||||||
|
|
||||||
|
}
|
||||||
20
src/main/java/forge/quest/gui/main/QuestDuelPanel.java
Normal file
20
src/main/java/forge/quest/gui/main/QuestDuelPanel.java
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
package forge.quest.gui.main;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>QuestDuelPanel.</p>
|
||||||
|
* VIEW - Creates a QuestSelectablePanel instance for a "battle" style event.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class QuestDuelPanel extends QuestSelectablePanel {
|
||||||
|
|
||||||
|
/** <p>QuestDuelPanel.</p>
|
||||||
|
* Constructor, using duel data instance.
|
||||||
|
*
|
||||||
|
* @param {@link forge.quest.gui.main.QuestDuel}
|
||||||
|
*/
|
||||||
|
public QuestDuelPanel(QuestDuel d) {
|
||||||
|
super(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
73
src/main/java/forge/quest/gui/main/QuestEvent.java
Normal file
73
src/main/java/forge/quest/gui/main/QuestEvent.java
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
package forge.quest.gui.main;
|
||||||
|
|
||||||
|
import forge.deck.Deck;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>QuestEvent.</p>
|
||||||
|
*
|
||||||
|
* MODEL - A basic event instance in Quest mode. Can be extended for use in
|
||||||
|
* unique event types: battles, quests, and others.
|
||||||
|
*/
|
||||||
|
public class QuestEvent {
|
||||||
|
// Default vals if none provided in the event file.
|
||||||
|
public Deck eventDeck = null;
|
||||||
|
public String title = "Mystery Event";
|
||||||
|
public String description = "";
|
||||||
|
public String difficulty = "Medium";
|
||||||
|
public String icon = "Unknown.jpg";
|
||||||
|
public String name = "Noname";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getTitle.</p>
|
||||||
|
*
|
||||||
|
* @return a {@link java.lang.String}.
|
||||||
|
*/
|
||||||
|
public final String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getDifficulty.</p>
|
||||||
|
*
|
||||||
|
* @return a {@link java.lang.String}.
|
||||||
|
*/
|
||||||
|
public final String getDifficulty() {
|
||||||
|
return difficulty;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getDescription.</p>
|
||||||
|
*
|
||||||
|
* @return a {@link java.lang.String}.
|
||||||
|
*/
|
||||||
|
public final String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getEventDeck.</p>
|
||||||
|
*
|
||||||
|
* @return {@link forge.deck.Deck}
|
||||||
|
*/
|
||||||
|
public final Deck getEventDeck() {
|
||||||
|
return eventDeck;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getIcon.</p>
|
||||||
|
*
|
||||||
|
* @return a {@link java.lang.String}.
|
||||||
|
*/
|
||||||
|
public final String getIcon() {
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getName.</p>
|
||||||
|
*
|
||||||
|
* @return a {@link java.lang.String}.
|
||||||
|
*/
|
||||||
|
public final String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
406
src/main/java/forge/quest/gui/main/QuestEventManager.java
Normal file
406
src/main/java/forge/quest/gui/main/QuestEventManager.java
Normal file
@@ -0,0 +1,406 @@
|
|||||||
|
package forge.quest.gui.main;
|
||||||
|
|
||||||
|
import forge.AllZone;
|
||||||
|
import forge.Card;
|
||||||
|
import forge.CardList;
|
||||||
|
import forge.CardUtil;
|
||||||
|
import forge.FileUtil;
|
||||||
|
import forge.deck.DeckManager;
|
||||||
|
import forge.properties.ForgeProps;
|
||||||
|
import forge.properties.NewConstants;
|
||||||
|
import forge.quest.data.QuestPreferences;
|
||||||
|
import forge.quest.data.QuestUtil;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>QuestEventManager.</p>
|
||||||
|
* MODEL - Manages collections of quest events (duelsquests, etc.)
|
||||||
|
*
|
||||||
|
* @author Forge
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class QuestEventManager {
|
||||||
|
public List<QuestDuel> easyAIduels = null;
|
||||||
|
public List<QuestDuel> mediumAIduels = null;
|
||||||
|
public List<QuestDuel> hardAIduels = null;
|
||||||
|
public List<QuestDuel> veryHardAIduels = null;
|
||||||
|
|
||||||
|
public List<QuestDuel> allDuels = null;
|
||||||
|
public List<QuestQuest> allQuests = null;
|
||||||
|
|
||||||
|
/**<p>assembleAllEvents.</p> *
|
||||||
|
* Reads all quest and battle files to extract quest data.
|
||||||
|
* Instantiates all duel and quest events, and difficulty lists accordingly.
|
||||||
|
* Should be used sparingly.
|
||||||
|
*/
|
||||||
|
public void assembleAllEvents() {
|
||||||
|
this.allDuels = new ArrayList<QuestDuel>();
|
||||||
|
this.allQuests = new ArrayList<QuestQuest>();
|
||||||
|
|
||||||
|
List<String> contents;
|
||||||
|
QuestEvent tempEvent;
|
||||||
|
|
||||||
|
File file = ForgeProps.getFile(NewConstants.QUEST.DECKS);
|
||||||
|
|
||||||
|
DeckManager manager = new DeckManager(file);
|
||||||
|
|
||||||
|
File[] allFiles = ForgeProps.getFile(NewConstants.QUEST.DECKS).listFiles();
|
||||||
|
|
||||||
|
for(File f : allFiles) {
|
||||||
|
contents = FileUtil.readFile(f);
|
||||||
|
|
||||||
|
if(contents.get(0).trim().equals("[quest]")) {
|
||||||
|
tempEvent = new QuestQuest();
|
||||||
|
assembleQuestUniquedata(contents,(QuestQuest)tempEvent);
|
||||||
|
allQuests.add((QuestQuest)tempEvent);
|
||||||
|
} // End if([quest])
|
||||||
|
else {
|
||||||
|
tempEvent = new QuestDuel();
|
||||||
|
assembleDuelUniquedata(contents,(QuestDuel)tempEvent);
|
||||||
|
allDuels.add((QuestDuel)tempEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assemble metadata (may not be necessary later) and deck object.
|
||||||
|
assembleEventMetadata(contents,tempEvent);
|
||||||
|
tempEvent.eventDeck = manager.getDeck(tempEvent.getName());
|
||||||
|
} // End for(allFiles)
|
||||||
|
|
||||||
|
assembleDuelDifficultyLists();
|
||||||
|
|
||||||
|
} // End assembleAllEvents()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>assembleDuelUniqueData.</p>
|
||||||
|
* Handler for any unique data contained in duel files.
|
||||||
|
*
|
||||||
|
* @param contents
|
||||||
|
* @param qd
|
||||||
|
*/
|
||||||
|
private void assembleDuelUniquedata(List<String> contents, QuestDuel qd) {
|
||||||
|
int eqpos;
|
||||||
|
String key, value;
|
||||||
|
|
||||||
|
for(String s : contents) {
|
||||||
|
if (s.equals("[metadata]")) { break; }
|
||||||
|
if (s.equals("[duel]")) { continue; }
|
||||||
|
if (s.equals("")) { continue; }
|
||||||
|
|
||||||
|
eqpos = s.indexOf('=');
|
||||||
|
key = s.substring(0, eqpos);
|
||||||
|
value = s.substring(eqpos + 1);
|
||||||
|
|
||||||
|
if (key.equalsIgnoreCase("Name")) {
|
||||||
|
qd.name = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>assembleQuestUniquedata.</p>
|
||||||
|
* Handler for any unique data contained in quest files.
|
||||||
|
*
|
||||||
|
* @param contents
|
||||||
|
* @param qq
|
||||||
|
*/
|
||||||
|
private void assembleQuestUniquedata(List<String> contents, QuestQuest qq) {
|
||||||
|
int eqpos;
|
||||||
|
String key, value;
|
||||||
|
|
||||||
|
// Unique properties
|
||||||
|
for(String s : contents) {
|
||||||
|
if (s.equals("[metadata]")) { break; }
|
||||||
|
if (s.equals("[quest]")) { continue; }
|
||||||
|
if (s.equals("")) { continue; }
|
||||||
|
|
||||||
|
eqpos = s.indexOf('=');
|
||||||
|
key = s.substring(0, eqpos);
|
||||||
|
value = s.substring(eqpos + 1).trim();
|
||||||
|
|
||||||
|
if (key.equalsIgnoreCase("ID")) {
|
||||||
|
qq.id = Integer.parseInt(value);
|
||||||
|
}
|
||||||
|
else if (key.equalsIgnoreCase("Repeat")) {
|
||||||
|
qq.repeatable = Boolean.parseBoolean(value);
|
||||||
|
}
|
||||||
|
else if (key.equalsIgnoreCase("AILife")) {
|
||||||
|
qq.aiLife = Integer.parseInt(value);
|
||||||
|
}
|
||||||
|
else if (key.equalsIgnoreCase("Wins")) {
|
||||||
|
qq.winsReqd = Integer.parseInt(value);
|
||||||
|
}
|
||||||
|
else if (key.equalsIgnoreCase("Credit Reward")) {
|
||||||
|
qq.creditsReward = Integer.parseInt(value);
|
||||||
|
}
|
||||||
|
else if (key.equalsIgnoreCase("Card Reward")) {
|
||||||
|
qq.cardReward = value;
|
||||||
|
qq.cardRewardList = QuestUtil.generateCardRewardList(value);
|
||||||
|
}
|
||||||
|
// Human extra card list assembled here.
|
||||||
|
else if(key.equalsIgnoreCase("HumanExtras") && !value.equals("")) {
|
||||||
|
String[] names = value.split("\\|");
|
||||||
|
CardList templist = new CardList();
|
||||||
|
Card tempcard;
|
||||||
|
|
||||||
|
for(String n : names) {
|
||||||
|
// Token card creation
|
||||||
|
if(n.substring(0,5).equals("TOKEN")) {
|
||||||
|
tempcard = QuestUtil.createToken(n);
|
||||||
|
tempcard.addController(AllZone.getHumanPlayer());
|
||||||
|
tempcard.setOwner(AllZone.getHumanPlayer());
|
||||||
|
templist.add(tempcard);
|
||||||
|
}
|
||||||
|
// Standard card creation
|
||||||
|
else {
|
||||||
|
tempcard = AllZone.getCardFactory().getCard(n, AllZone.getHumanPlayer());
|
||||||
|
tempcard.setCurSetCode(tempcard.getMostRecentSet());
|
||||||
|
tempcard.setImageFilename(CardUtil.buildFilename(tempcard));
|
||||||
|
templist.add(tempcard);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qq.humanExtraCards = templist;
|
||||||
|
}
|
||||||
|
// AI extra card list assembled here.
|
||||||
|
else if(key.equalsIgnoreCase("AIExtras") && !value.equals("")) {
|
||||||
|
String[] names = value.split("\\|");
|
||||||
|
CardList templist = new CardList();
|
||||||
|
Card tempcard;
|
||||||
|
|
||||||
|
for(String n : names) {
|
||||||
|
// Token card creation
|
||||||
|
if(n.substring(0,5).equals("TOKEN")) {
|
||||||
|
tempcard = QuestUtil.createToken(n);
|
||||||
|
tempcard.addController(AllZone.getComputerPlayer());
|
||||||
|
tempcard.setOwner(AllZone.getComputerPlayer());
|
||||||
|
templist.add(tempcard);
|
||||||
|
}
|
||||||
|
// Standard card creation
|
||||||
|
else {
|
||||||
|
tempcard = AllZone.getCardFactory().getCard(n, AllZone.getComputerPlayer());
|
||||||
|
tempcard.setCurSetCode(tempcard.getMostRecentSet());
|
||||||
|
tempcard.setImageFilename(CardUtil.buildFilename(tempcard));
|
||||||
|
templist.add(tempcard);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qq.aiExtraCards = templist;
|
||||||
|
}
|
||||||
|
// Card reward list assembled here.
|
||||||
|
else if(key.equalsIgnoreCase("Card Reward")) {
|
||||||
|
qq.cardReward = value;
|
||||||
|
qq.cardRewardList = QuestUtil.generateCardRewardList(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>assembleEventMetadata.</p>
|
||||||
|
* Handler for metadata contained in event files.
|
||||||
|
*
|
||||||
|
* @param contents
|
||||||
|
* @param qe
|
||||||
|
*/
|
||||||
|
private void assembleEventMetadata(List<String> contents, QuestEvent qe) {
|
||||||
|
int eqpos;
|
||||||
|
String key, value;
|
||||||
|
|
||||||
|
for(String s : contents) {
|
||||||
|
s = s.trim();
|
||||||
|
eqpos = s.indexOf('=');
|
||||||
|
|
||||||
|
if (s.equals("[main]")) { break; }
|
||||||
|
if (s.equals("[metadata]")) { continue; }
|
||||||
|
if (s.equals("")) { continue; }
|
||||||
|
if (eqpos==-1) { continue; }
|
||||||
|
|
||||||
|
key = s.substring(0, eqpos);
|
||||||
|
value = s.substring(eqpos + 1);
|
||||||
|
|
||||||
|
if (key.equalsIgnoreCase("Name")) {
|
||||||
|
qe.name = value;
|
||||||
|
}
|
||||||
|
else if (key.equalsIgnoreCase("Title")) {
|
||||||
|
qe.title = value;
|
||||||
|
}
|
||||||
|
else if (key.equalsIgnoreCase("Difficulty")) {
|
||||||
|
qe.difficulty = value;
|
||||||
|
}
|
||||||
|
else if (key.equalsIgnoreCase("Description")) {
|
||||||
|
qe.description = value;
|
||||||
|
}
|
||||||
|
else if (key.equalsIgnoreCase("Icon")) {
|
||||||
|
qe.icon = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getAllDuels.</p>
|
||||||
|
* Returns complete list of all duel objects.
|
||||||
|
*
|
||||||
|
* @return a {@link java.util.List} object.
|
||||||
|
*/
|
||||||
|
public List<QuestDuel> getAllDuels() {
|
||||||
|
return this.allDuels;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getAllQuests.</p>
|
||||||
|
* Returns complete list of all quest objects.
|
||||||
|
*
|
||||||
|
* @return a {@link java.util.List} object.
|
||||||
|
*/
|
||||||
|
public List<QuestQuest> getAllQuests() {
|
||||||
|
return this.allQuests;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>assembleDuelDifficultyLists.</p>
|
||||||
|
* Assemble duel deck difficulty lists
|
||||||
|
*/
|
||||||
|
private void assembleDuelDifficultyLists() {
|
||||||
|
easyAIduels = new ArrayList<QuestDuel>();
|
||||||
|
mediumAIduels = new ArrayList<QuestDuel>();
|
||||||
|
hardAIduels = new ArrayList<QuestDuel>();
|
||||||
|
veryHardAIduels = new ArrayList<QuestDuel>();
|
||||||
|
String s;
|
||||||
|
|
||||||
|
for(QuestDuel qd : allDuels) {
|
||||||
|
s = qd.getDifficulty();
|
||||||
|
if(s.equalsIgnoreCase("easy")) {
|
||||||
|
easyAIduels.add(qd);
|
||||||
|
}
|
||||||
|
else if(s.equalsIgnoreCase("medium")) {
|
||||||
|
mediumAIduels.add(qd);
|
||||||
|
}
|
||||||
|
else if(s.equalsIgnoreCase("hard")) {
|
||||||
|
hardAIduels.add(qd);
|
||||||
|
}
|
||||||
|
else if(s.equalsIgnoreCase("very hard")) {
|
||||||
|
veryHardAIduels.add(qd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getDuelOpponent.</p>
|
||||||
|
* Returns specific duel opponent from current shuffle of available duels.
|
||||||
|
* This is to make sure that the opponents do not change
|
||||||
|
* when the deck editor is launched.
|
||||||
|
*
|
||||||
|
* @param aiDeck a {@link java.util.List} object.
|
||||||
|
* @param number a int.
|
||||||
|
* @return a {@link java.lang.String} object.
|
||||||
|
*/
|
||||||
|
private static QuestDuel getDuelOpponentByNumber(List<QuestDuel> aiDeck, int n) {
|
||||||
|
List<QuestDuel> deckListCopy = new ArrayList<QuestDuel>(aiDeck);
|
||||||
|
Collections.shuffle(deckListCopy, new Random(AllZone.getQuestData().getRandomSeed()));
|
||||||
|
|
||||||
|
return deckListCopy.get(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
private QuestQuest getQuestOpponentByNumber(int n) {
|
||||||
|
for(QuestQuest qq : allQuests) {
|
||||||
|
if(qq.getId()==n) {
|
||||||
|
return qq;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>generateDuels.</p>
|
||||||
|
* Generates an array of new duel opponents based on current win conditions.
|
||||||
|
*
|
||||||
|
* @return an array of {@link java.lang.String} objects.
|
||||||
|
*/
|
||||||
|
public List<QuestDuel> generateDuels() {
|
||||||
|
|
||||||
|
int index = AllZone.getQuestData().getDifficultyIndex();
|
||||||
|
List<QuestDuel> duelOpponents = new ArrayList<QuestDuel>();
|
||||||
|
|
||||||
|
if (AllZone.getQuestData().getWin() < QuestPreferences.getWinsForMediumAI(index)) {
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(easyAIduels, 0));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(easyAIduels, 1));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(easyAIduels, 2));
|
||||||
|
}
|
||||||
|
else if (AllZone.getQuestData().getWin() == QuestPreferences.getWinsForMediumAI(index)) {
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(easyAIduels, 0));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(mediumAIduels, 0));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(mediumAIduels, 1));
|
||||||
|
}
|
||||||
|
else if (AllZone.getQuestData().getWin() < QuestPreferences.getWinsForHardAI(index)) {
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(mediumAIduels, 0));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(mediumAIduels, 1));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(mediumAIduels, 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (AllZone.getQuestData().getWin() == QuestPreferences.getWinsForHardAI(index)) {
|
||||||
|
duelOpponents.add( getDuelOpponentByNumber(mediumAIduels, 0));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(hardAIduels, 0));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(hardAIduels, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (AllZone.getQuestData().getWin() >= QuestPreferences.getWinsForVeryHardAI(index)) {
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(hardAIduels, 0));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(hardAIduels, 1));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(veryHardAIduels, 0));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(veryHardAIduels, 0));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(veryHardAIduels, 1));
|
||||||
|
duelOpponents.add(getDuelOpponentByNumber(veryHardAIduels, 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
return duelOpponents;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>generateQuests.</p>
|
||||||
|
* Generates an array of new quest opponents based on current win conditions.
|
||||||
|
*
|
||||||
|
* @return a {@link java.util.List} object.
|
||||||
|
*/
|
||||||
|
public List<QuestQuest> generateQuests() {
|
||||||
|
forge.quest.data.QuestData questData = AllZone.getQuestData();
|
||||||
|
|
||||||
|
List<QuestQuest> questOpponents = new ArrayList<QuestQuest>();
|
||||||
|
|
||||||
|
// If no quests available right now, generate new IDs.
|
||||||
|
if (questData.getAvailableQuests() == null || questData.getAvailableQuests().size() == 0) {
|
||||||
|
// Assemble full list of currently available IDs.
|
||||||
|
List<Integer> availableQuestIds = new ArrayList<Integer>();
|
||||||
|
for(QuestQuest qq : allQuests) {
|
||||||
|
if (qq.getWinsReqd() <= questData.getWin() &&
|
||||||
|
!questData.getCompletedQuests().contains(qq.getId())) {
|
||||||
|
availableQuestIds.add(qq.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter that list as needed.
|
||||||
|
int maxQuests = questData.getWin() / 10;
|
||||||
|
if (maxQuests > 5) {
|
||||||
|
maxQuests = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.shuffle(availableQuestIds);
|
||||||
|
|
||||||
|
for (int i = 0; i < maxQuests; i++) {
|
||||||
|
availableQuestIds.add(i);
|
||||||
|
}
|
||||||
|
questData.setAvailableQuests(availableQuestIds);
|
||||||
|
questData.saveData();
|
||||||
|
} //
|
||||||
|
|
||||||
|
// Finally, pull quest events from available IDs and return.
|
||||||
|
for(int i : questData.getAvailableQuests()) {
|
||||||
|
questOpponents.add(getQuestOpponentByNumber(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return questOpponents;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,116 +1,114 @@
|
|||||||
package forge.quest.gui.main;
|
package forge.quest.gui.main;
|
||||||
|
|
||||||
import forge.AllZone;
|
import forge.CardList;
|
||||||
import forge.Quest_Assignment;
|
import forge.item.CardPrinted;
|
||||||
import forge.ReadQuest_Assignment;
|
|
||||||
import forge.gui.GuiUtils;
|
|
||||||
import forge.properties.ForgeProps;
|
|
||||||
import forge.properties.NewConstants;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>QuestQuest class.</p>
|
* <p>QuestQuest class.</p>
|
||||||
*
|
*
|
||||||
* Manages QuestSelectablePanel instances for "quest" style matches.
|
* MODEL - A single quest event data instance, including meta,
|
||||||
*
|
* deck, and quest-specific properties.
|
||||||
* @author Forge
|
*
|
||||||
* @version $Id$
|
|
||||||
*/
|
*/
|
||||||
public class QuestQuest extends QuestSelectablePanel {
|
public class QuestQuest extends QuestEvent {
|
||||||
/** Constant <code>serialVersionUID=-162817410327650160L</code> */
|
// ID (default -1, should be explicitly set at later time.)
|
||||||
private static final long serialVersionUID = -162817410327650160L;
|
public int id = -1;
|
||||||
|
|
||||||
|
// Default vals if none provided for this ID
|
||||||
|
public int aiLife = 25;
|
||||||
|
public int creditsReward = 100;
|
||||||
|
public String cardReward = "1 colorless rare";
|
||||||
|
public boolean repeatable = false;
|
||||||
|
public int winsReqd = 20;
|
||||||
|
|
||||||
Quest_Assignment assignment;
|
// Other cards used in assignment: starting, and reward.
|
||||||
|
public CardList humanExtraCards = new CardList();
|
||||||
|
public CardList aiExtraCards = new CardList();
|
||||||
|
public List<CardPrinted> cardRewardList = new ArrayList<CardPrinted>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for QuestQuest.</p>
|
* <p>getAILife.</p>
|
||||||
*
|
*
|
||||||
* @param assignment a {@link forge.Quest_Assignment} object.
|
* @return {@link java.lang.Integer}.
|
||||||
*/
|
*/
|
||||||
public QuestQuest(Quest_Assignment assignment) {
|
public final int getAILife() {
|
||||||
super(assignment.getName(), assignment.getDifficulty(), assignment.getDesc(), GuiUtils.getIconFromFile(assignment.getIconName()));
|
return aiLife;
|
||||||
this.assignment = assignment;
|
|
||||||
|
|
||||||
JLabel repeatabilityLabel;
|
|
||||||
if (assignment.isRepeatable()) {
|
|
||||||
repeatabilityLabel = new JLabel("This quest is repeatable");
|
|
||||||
} else {
|
|
||||||
repeatabilityLabel = new JLabel("This quest is not repeatable");
|
|
||||||
}
|
|
||||||
|
|
||||||
GuiUtils.addGap(centerPanel);
|
|
||||||
this.centerPanel.add(repeatabilityLabel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>getQuests.</p>
|
* <p>getCardReward.</p>
|
||||||
*
|
*
|
||||||
* @return a {@link java.util.List} object.
|
* @return {@link java.lang.String}.
|
||||||
*/
|
*/
|
||||||
public static List<QuestQuest> getQuests() {
|
public final String getCardReward() {
|
||||||
List<QuestQuest> quests = new ArrayList<QuestQuest>();
|
return cardReward;
|
||||||
|
|
||||||
List<Quest_Assignment> questList = readQuests();
|
|
||||||
|
|
||||||
for (Quest_Assignment assignment : questList) {
|
|
||||||
quests.add(new QuestQuest(assignment));
|
|
||||||
}
|
|
||||||
return quests;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>readQuests.</p>
|
* <p>getCreditsReward.</p>
|
||||||
*
|
*
|
||||||
* @return a {@link java.util.List} object.
|
* @return {@link java.lang.Integer}.
|
||||||
*/
|
*/
|
||||||
private static List<Quest_Assignment> readQuests() {
|
public final int getCreditsReward() {
|
||||||
forge.quest.data.QuestData questData = AllZone.getQuestData();
|
return creditsReward;
|
||||||
ReadQuest_Assignment read = new ReadQuest_Assignment(ForgeProps.getFile(NewConstants.QUEST.QUESTS), questData);
|
|
||||||
read.run();
|
|
||||||
|
|
||||||
List<Quest_Assignment> questsToDisplay = new ArrayList<Quest_Assignment>();
|
|
||||||
|
|
||||||
if (questData.getAvailableQuests() != null && questData.getAvailableQuests().size() > 0) {
|
|
||||||
List<Quest_Assignment> availableQuests = read.getQuestsByIds(questData.getAvailableQuests());
|
|
||||||
questsToDisplay = availableQuests;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
List<Quest_Assignment> allAvailableQuests = read.getAvailableQuests();
|
|
||||||
|
|
||||||
List<Integer> availableInts = new ArrayList<Integer>();
|
|
||||||
|
|
||||||
int maxQuests = questData.getWin() / 10;
|
|
||||||
if (maxQuests > 5) {
|
|
||||||
maxQuests = 5;
|
|
||||||
}
|
|
||||||
if (allAvailableQuests.size() < maxQuests) {
|
|
||||||
maxQuests = allAvailableQuests.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
Collections.shuffle(allAvailableQuests);
|
|
||||||
|
|
||||||
for (int i = 0; i < maxQuests; i++) {
|
|
||||||
Quest_Assignment qa = allAvailableQuests.get(i);
|
|
||||||
|
|
||||||
availableInts.add(qa.getId());
|
|
||||||
questsToDisplay.add(qa);
|
|
||||||
}
|
|
||||||
questData.setAvailableQuests(availableInts);
|
|
||||||
questData.saveData();
|
|
||||||
}//else
|
|
||||||
return questsToDisplay;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>getQuestAssignment.</p>
|
* <p>getId.</p>
|
||||||
*
|
*
|
||||||
* @return a {@link forge.Quest_Assignment} object.
|
* @return {@link java.lang.Integer}.
|
||||||
*/
|
*/
|
||||||
public Quest_Assignment getQuestAssignment() {
|
public final int getId() {
|
||||||
return assignment;
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getRepeatable.</p>
|
||||||
|
*
|
||||||
|
* @return {@link java.lang.Boolean}.
|
||||||
|
*/
|
||||||
|
public final boolean getRepeatable() {
|
||||||
|
return repeatable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getWinsReqd.</p>
|
||||||
|
*
|
||||||
|
* @return {@link java.lang.Integer}.
|
||||||
|
*/
|
||||||
|
public final int getWinsReqd() {
|
||||||
|
return winsReqd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getAIExtraCards.</p>
|
||||||
|
* Retrieves list of cards AI has in play at the beginning of this quest.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public final CardList getAIExtraCards() {
|
||||||
|
return aiExtraCards;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getHumanExtraCards.</p>
|
||||||
|
* Retrieves list of cards human has in play at the beginning of this quest.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public final CardList getHumanExtraCards() {
|
||||||
|
return humanExtraCards;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getCardRewardList.</p>
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public final List<CardPrinted> getCardRewardList() {
|
||||||
|
return cardRewardList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
35
src/main/java/forge/quest/gui/main/QuestQuestPanel.java
Normal file
35
src/main/java/forge/quest/gui/main/QuestQuestPanel.java
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package forge.quest.gui.main;
|
||||||
|
|
||||||
|
//import javax.swing.JLabel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>QuestQuestPanel.</p>
|
||||||
|
* VIEW - Creates a QuestSelectablePanel instance for a "quest" style event.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class QuestQuestPanel extends QuestSelectablePanel {
|
||||||
|
|
||||||
|
//private JLabel repeatabilityLabel;
|
||||||
|
|
||||||
|
/** <p>QuestQuestPanel.</p>
|
||||||
|
* Constructor, using quest data instance.
|
||||||
|
*
|
||||||
|
* @param {@link forge.quest.gui.main.QuestDuel}
|
||||||
|
*/
|
||||||
|
public QuestQuestPanel(QuestQuest q) {
|
||||||
|
super(q);
|
||||||
|
|
||||||
|
// Repeatability is currently meaningless.
|
||||||
|
// Can be added here later if necessary.
|
||||||
|
/*
|
||||||
|
* if (q.getRepeatable()) {
|
||||||
|
repeatabilityLabel = new JLabel("This quest is repeatable");
|
||||||
|
} else {
|
||||||
|
repeatabilityLabel = new JLabel("This quest is not repeatable");
|
||||||
|
}
|
||||||
|
|
||||||
|
super.rootPanel.add(repeatabilityLabel);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,15 +1,19 @@
|
|||||||
package forge.quest.gui.main;
|
package forge.quest.gui.main;
|
||||||
|
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.properties.ForgeProps;
|
||||||
|
import forge.properties.NewConstants;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.CompoundBorder;
|
import javax.swing.border.CompoundBorder;
|
||||||
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.EmptyBorder;
|
||||||
import javax.swing.border.LineBorder;
|
import javax.swing.border.LineBorder;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>QuestSelectablePanel class.</p>
|
* <p>QuestSelectablePanel class.</p>
|
||||||
|
* VIEW - Creates a selectable panel, used for picking events.
|
||||||
*
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
@@ -20,35 +24,38 @@ public class QuestSelectablePanel extends JPanel {
|
|||||||
|
|
||||||
protected Color backgroundColor;
|
protected Color backgroundColor;
|
||||||
private boolean selected;
|
private boolean selected;
|
||||||
|
private QuestEvent event;
|
||||||
ImageIcon icon;
|
private String iconfilename;
|
||||||
String name;
|
public JPanel rootPanel = new JPanel();
|
||||||
String description;
|
|
||||||
String difficulty;
|
|
||||||
JPanel centerPanel = new JPanel();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for QuestSelectablePanel.</p>
|
* <p>Constructor for QuestSelectablePanel.</p>
|
||||||
|
* VIEW - A JPanel for selecting quest events.
|
||||||
*
|
*
|
||||||
* @param name a {@link java.lang.String} object.
|
* @param name a {@link java.lang.String} object.
|
||||||
* @param difficulty a {@link java.lang.String} object.
|
* @param difficulty a {@link java.lang.String} object.
|
||||||
* @param description a {@link java.lang.String} object.
|
* @param description a {@link java.lang.String} object.
|
||||||
* @param icon a {@link javax.swing.ImageIcon} object.
|
* @param icon a {@link javax.swing.ImageIcon} object.
|
||||||
*/
|
*/
|
||||||
public QuestSelectablePanel(String name, String difficulty, String description, ImageIcon icon) {
|
public QuestSelectablePanel(QuestEvent qe) {
|
||||||
|
this.event = qe;
|
||||||
|
this.iconfilename = qe.icon;
|
||||||
|
File base = ForgeProps.getFile(NewConstants.IMAGE_ICON);
|
||||||
|
File file = new File(base, iconfilename);
|
||||||
|
|
||||||
|
if(!file.exists()) {
|
||||||
|
file = new File(base,"Unknown.jpg");
|
||||||
|
this.iconfilename = "Unknown.jpg";
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageIcon icon = new ImageIcon(file.toString());
|
||||||
|
|
||||||
this.backgroundColor = getBackground();
|
this.backgroundColor = getBackground();
|
||||||
|
|
||||||
this.name = name;
|
|
||||||
this.difficulty = difficulty;
|
|
||||||
this.description = description;
|
|
||||||
this.icon = icon;
|
|
||||||
|
|
||||||
this.setLayout(new BorderLayout(5, 5));
|
this.setLayout(new BorderLayout(5, 5));
|
||||||
|
|
||||||
|
|
||||||
JLabel iconLabel;
|
JLabel iconLabel;
|
||||||
|
|
||||||
if (icon == null) {
|
if (icon.getIconHeight() == -1) {
|
||||||
iconLabel = new JLabel(GuiUtils.getEmptyIcon(40, 40));
|
iconLabel = new JLabel(GuiUtils.getEmptyIcon(40, 40));
|
||||||
} else {
|
} else {
|
||||||
iconLabel = new JLabel(GuiUtils.getResizedIcon(icon, 40, 40));
|
iconLabel = new JLabel(GuiUtils.getResizedIcon(icon, 40, 40));
|
||||||
@@ -62,32 +69,32 @@ public class QuestSelectablePanel extends JPanel {
|
|||||||
iconPanel.add(iconLabel, BorderLayout.NORTH);
|
iconPanel.add(iconLabel, BorderLayout.NORTH);
|
||||||
this.add(iconPanel, BorderLayout.WEST);
|
this.add(iconPanel, BorderLayout.WEST);
|
||||||
|
|
||||||
centerPanel.setOpaque(false);
|
rootPanel.setOpaque(false);
|
||||||
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.Y_AXIS));
|
rootPanel.setLayout(new BoxLayout(rootPanel, BoxLayout.Y_AXIS));
|
||||||
this.add(centerPanel, BorderLayout.CENTER);
|
this.add(rootPanel, BorderLayout.CENTER);
|
||||||
|
|
||||||
JPanel centerTopPanel = new JPanel();
|
JPanel centerTopPanel = new JPanel();
|
||||||
centerTopPanel.setOpaque(false);
|
centerTopPanel.setOpaque(false);
|
||||||
centerTopPanel.setAlignmentX(LEFT_ALIGNMENT);
|
centerTopPanel.setAlignmentX(LEFT_ALIGNMENT);
|
||||||
centerTopPanel.setLayout(new BoxLayout(centerTopPanel, BoxLayout.X_AXIS));
|
centerTopPanel.setLayout(new BoxLayout(centerTopPanel, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
JLabel nameLabel = new JLabel(this.name);
|
JLabel nameLabel = new JLabel(qe.getTitle());
|
||||||
GuiUtils.setFontSize(nameLabel, 20);
|
GuiUtils.setFontSize(nameLabel, 20);
|
||||||
nameLabel.setAlignmentY(BOTTOM_ALIGNMENT);
|
nameLabel.setAlignmentY(BOTTOM_ALIGNMENT);
|
||||||
centerTopPanel.add(nameLabel);
|
centerTopPanel.add(nameLabel);
|
||||||
|
|
||||||
GuiUtils.addExpandingHorizontalSpace(centerTopPanel);
|
GuiUtils.addExpandingHorizontalSpace(centerTopPanel);
|
||||||
|
|
||||||
JLabel difficultyLabel = new JLabel(this.difficulty);
|
JLabel difficultyLabel = new JLabel(qe.getDifficulty());
|
||||||
difficultyLabel.setAlignmentY(BOTTOM_ALIGNMENT);
|
difficultyLabel.setAlignmentY(BOTTOM_ALIGNMENT);
|
||||||
centerTopPanel.add(difficultyLabel);
|
centerTopPanel.add(difficultyLabel);
|
||||||
centerPanel.add(centerTopPanel);
|
rootPanel.add(centerTopPanel);
|
||||||
|
|
||||||
GuiUtils.addGap(centerPanel);
|
GuiUtils.addGap(rootPanel);
|
||||||
|
|
||||||
JLabel descriptionLabel = new JLabel(description);
|
JLabel descriptionLabel = new JLabel(qe.getDescription());
|
||||||
descriptionLabel.setAlignmentX(LEFT_ALIGNMENT);
|
descriptionLabel.setAlignmentX(LEFT_ALIGNMENT);
|
||||||
centerPanel.add(descriptionLabel);
|
rootPanel.add(descriptionLabel);
|
||||||
|
|
||||||
this.setMaximumSize(new Dimension(Integer.MAX_VALUE, 80));
|
this.setMaximumSize(new Dimension(Integer.MAX_VALUE, 80));
|
||||||
this.setBorder(new CompoundBorder(new LineBorder(Color.BLACK), new EmptyBorder(5, 5, 5, 5)));
|
this.setBorder(new CompoundBorder(new LineBorder(Color.BLACK), new EmptyBorder(5, 5, 5, 5)));
|
||||||
@@ -117,9 +124,21 @@ public class QuestSelectablePanel extends JPanel {
|
|||||||
this.selected = selected;
|
this.selected = selected;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/**
|
||||||
@Override
|
* <p>getIconFilename.</p>
|
||||||
public String getName() {
|
*
|
||||||
return name;
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getIconFilename() {
|
||||||
|
return this.iconfilename;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>getEvent.</p>
|
||||||
|
*
|
||||||
|
* @return QuestEvent
|
||||||
|
*/
|
||||||
|
public QuestEvent getEvent() {
|
||||||
|
return this.event;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
package forge;
|
|
||||||
|
|
||||||
import forge.error.ErrorViewer;
|
|
||||||
import forge.properties.ForgeProps;
|
|
||||||
import forge.properties.NewConstants;
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by IntelliJ IDEA.
|
|
||||||
* User: dhudson
|
|
||||||
*/
|
|
||||||
@Test(groups = {"UnitTest"}, timeOut = 1000)
|
|
||||||
public class ReadQuestAssignmentTest implements NewConstants {
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Test(groups = {"UnitTest", "fast"}, timeOut = 1000)
|
|
||||||
public void ReadQuestAssignmentTest1() {
|
|
||||||
try {
|
|
||||||
ReadQuest_Assignment read = new ReadQuest_Assignment(ForgeProps.getFile(QUEST.QUESTS), null);
|
|
||||||
|
|
||||||
javax.swing.SwingUtilities.invokeAndWait(read);
|
|
||||||
// read.run();
|
|
||||||
|
|
||||||
Quest_Assignment qa[] = new Quest_Assignment[read.allQuests.size()];
|
|
||||||
read.allQuests.toArray(qa);
|
|
||||||
for (int i = 0; i < qa.length; i++) {
|
|
||||||
System.out.println(qa[i].getId());
|
|
||||||
System.out.println(qa[i].getName());
|
|
||||||
System.out.println(qa[i].getDesc());
|
|
||||||
System.out.println(qa[i].getDifficulty());
|
|
||||||
System.out.println(qa[i].isRepeatable());
|
|
||||||
System.out.println(qa[i].getRequiredNumberWins());
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ErrorViewer.showError(ex);
|
|
||||||
System.out.println("Error reading file " + ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user