diff --git a/projects/mtg/include/AIPlayerBaka.h b/projects/mtg/include/AIPlayerBaka.h index 561f451f0..42b0a30e8 100644 --- a/projects/mtg/include/AIPlayerBaka.h +++ b/projects/mtg/include/AIPlayerBaka.h @@ -112,8 +112,7 @@ class AIPlayerBaka: public AIPlayer{ INFO_CREATURESATTACKINGPOWER }; - vectorgotPayments; - int deckId; + vectorgotPayments; AIPlayerBaka(GameObserver *observer, string deckFile, string deckfileSmall, string avatarFile, MTGDeck * deck = NULL); virtual int Act(float dt); void initTimer(); diff --git a/projects/mtg/include/Player.h b/projects/mtg/include/Player.h index 28ba1d754..a5dfb2160 100644 --- a/projects/mtg/include/Player.h +++ b/projects/mtg/include/Player.h @@ -28,6 +28,7 @@ public: MODE_AI }; + int deckId; string mAvatarName; Mode playMode; bool nomaxhandsize; diff --git a/projects/mtg/src/AIPlayer.cpp b/projects/mtg/src/AIPlayer.cpp index d45cc6a90..18f2092ec 100644 --- a/projects/mtg/src/AIPlayer.cpp +++ b/projects/mtg/src/AIPlayer.cpp @@ -249,7 +249,7 @@ AIPlayer * AIPlayerFactory::createAIPlayer(GameObserver *observer, MTGAllCards * } if (!nbdecks) return NULL; - deckid = 1 + observer->getRandomGenerator()->random() % (nbdecks); + deckid = 1 + WRand() % (nbdecks); } sprintf(deckFile, "ai/baka/deck%i.txt", deckid); DeckMetaData *aiMeta = DeckManager::GetInstance()->getDeckMetaDataByFilename( deckFile, true); diff --git a/projects/mtg/src/Player.cpp b/projects/mtg/src/Player.cpp index da704af20..2236f2915 100644 --- a/projects/mtg/src/Player.cpp +++ b/projects/mtg/src/Player.cpp @@ -4,6 +4,8 @@ #include "GameObserver.h" #include "DeckStats.h" #include "ManaCost.h" +#include "DeckMetaData.h" +#include "DeckManager.h" #ifdef TESTSUITE #include "TestSuiteAI.h" @@ -240,8 +242,9 @@ bool Player::parseLine(const string& s) return true; } else if (areaS.compare("avatar") == 0) - { // We don't load directly for now + { mAvatarName = s.substr(limiter + 1); + loadAvatar(mAvatarName, "bakaAvatar"); return true; } else if (areaS.compare("customphasering") == 0) @@ -257,6 +260,27 @@ bool Player::parseLine(const string& s) else if (areaS.compare("deckfile") == 0) { deckFile = s.substr(limiter + 1); + if(playMode == Player::MODE_AI) + { + sscanf(deckFile.c_str(), "ai/baka/deck%i.txt", &deckId); + + int deckSetting = EASY; + if ( opponent() ) + { + bool isOpponentAI = opponent()->isAI() == 1; + DeckMetaData *meta = DeckManager::GetInstance()->getDeckMetaDataByFilename( opponent()->deckFile, isOpponentAI); + if ( meta && meta->getVictoryPercentage() >= 65) + deckSetting = HARD; + } + + SAFE_DELETE(mDeck); + SAFE_DELETE(game); + mDeck = NEW MTGDeck(deckFile.c_str(), MTGCollection(),0, deckSetting); + game = NEW MTGPlayerCards(mDeck); + // This automatically sets the observer pointer on all the deck cards + game->setOwner(this); + deckName = mDeck->meta_name; + } return true; } else if (areaS.compare("deckfilesmall") == 0)