mirror of
https://github.com/vcmi/vcmi.git
synced 2025-06-17 00:07:41 +02:00
highscore input window
This commit is contained in:
@ -37,6 +37,7 @@
|
|||||||
#include "gui/WindowHandler.h"
|
#include "gui/WindowHandler.h"
|
||||||
|
|
||||||
#include "mainmenu/CMainMenu.h"
|
#include "mainmenu/CMainMenu.h"
|
||||||
|
#include "mainmenu/CHighScoreScreen.h"
|
||||||
|
|
||||||
#include "mapView/mapHandler.h"
|
#include "mapView/mapHandler.h"
|
||||||
|
|
||||||
@ -1690,11 +1691,13 @@ void CPlayerInterface::requestReturningToMainMenu(bool won)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
GH.dispatchMainThread(
|
GH.dispatchMainThread(
|
||||||
[]()
|
[won]()
|
||||||
{
|
{
|
||||||
CSH->endGameplay();
|
CSH->endGameplay();
|
||||||
GH.defActionsDef = 63;
|
GH.defActionsDef = 63;
|
||||||
CMM->menu->switchToTab("main");
|
CMM->menu->switchToTab("main");
|
||||||
|
if(won)
|
||||||
|
GH.windows().createAndPushWindow<CHighScoreInputScreen>();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include "mainmenu/CMainMenu.h"
|
#include "mainmenu/CMainMenu.h"
|
||||||
#include "mainmenu/CPrologEpilogVideo.h"
|
#include "mainmenu/CPrologEpilogVideo.h"
|
||||||
|
#include "mainmenu/CHighScoreScreen.h"
|
||||||
|
|
||||||
#ifdef VCMI_ANDROID
|
#ifdef VCMI_ANDROID
|
||||||
#include "../lib/CAndroidVMHelper.h"
|
#include "../lib/CAndroidVMHelper.h"
|
||||||
@ -695,7 +696,10 @@ void CServerHandler::startCampaignScenario(std::shared_ptr<CampaignState> cs)
|
|||||||
if(!ourCampaign->isCampaignFinished())
|
if(!ourCampaign->isCampaignFinished())
|
||||||
CMM->openCampaignLobby(ourCampaign);
|
CMM->openCampaignLobby(ourCampaign);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
CMM->openCampaignScreen(ourCampaign->campaignSet);
|
CMM->openCampaignScreen(ourCampaign->campaignSet);
|
||||||
|
GH.windows().createAndPushWindow<CHighScoreInputScreen>();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
if(epilogue.hasPrologEpilog)
|
if(epilogue.hasPrologEpilog)
|
||||||
{
|
{
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
#include "CHighScoreScreen.h"
|
#include "CHighScoreScreen.h"
|
||||||
#include "../gui/CGuiHandler.h"
|
#include "../gui/CGuiHandler.h"
|
||||||
|
#include "../gui/WindowHandler.h"
|
||||||
|
#include "../gui/Shortcut.h"
|
||||||
#include "../widgets/TextControls.h"
|
#include "../widgets/TextControls.h"
|
||||||
#include "../widgets/Buttons.h"
|
#include "../widgets/Buttons.h"
|
||||||
#include "../widgets/Images.h"
|
#include "../widgets/Images.h"
|
||||||
@ -19,6 +21,7 @@
|
|||||||
#include "../render/Canvas.h"
|
#include "../render/Canvas.h"
|
||||||
|
|
||||||
#include "../CGameInfo.h"
|
#include "../CGameInfo.h"
|
||||||
|
#include "../CVideoHandler.h"
|
||||||
#include "../../lib/CGeneralTextHandler.h"
|
#include "../../lib/CGeneralTextHandler.h"
|
||||||
#include "../../lib/CConfigHandler.h"
|
#include "../../lib/CConfigHandler.h"
|
||||||
#include "../../lib/CCreatureHandler.h"
|
#include "../../lib/CCreatureHandler.h"
|
||||||
@ -44,13 +47,13 @@ CHighScoreScreen::CHighScoreScreen()
|
|||||||
Settings entry2 = persistentStorage.write["highscore"]["campaign"][std::to_string(i)]["points"];
|
Settings entry2 = persistentStorage.write["highscore"]["campaign"][std::to_string(i)]["points"];
|
||||||
entry2->Integer() = std::rand() % 400 * 5;
|
entry2->Integer() = std::rand() % 400 * 5;
|
||||||
|
|
||||||
Settings entry3 = persistentStorage.write["highscore"]["standard"][std::to_string(i)]["player"];
|
Settings entry3 = persistentStorage.write["highscore"]["scenario"][std::to_string(i)]["player"];
|
||||||
entry3->String() = "test";
|
entry3->String() = "test";
|
||||||
Settings entry4 = persistentStorage.write["highscore"]["standard"][std::to_string(i)]["land"];
|
Settings entry4 = persistentStorage.write["highscore"]["scenario"][std::to_string(i)]["land"];
|
||||||
entry4->String() = "test";
|
entry4->String() = "test";
|
||||||
Settings entry5 = persistentStorage.write["highscore"]["standard"][std::to_string(i)]["days"];
|
Settings entry5 = persistentStorage.write["highscore"]["scenario"][std::to_string(i)]["days"];
|
||||||
entry5->Integer() = 123;
|
entry5->Integer() = 123;
|
||||||
Settings entry6 = persistentStorage.write["highscore"]["standard"][std::to_string(i)]["points"];
|
Settings entry6 = persistentStorage.write["highscore"]["scenario"][std::to_string(i)]["points"];
|
||||||
entry6->Integer() = std::rand() % 400;
|
entry6->Integer() = std::rand() % 400;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -71,7 +74,7 @@ void CHighScoreScreen::addHighScores()
|
|||||||
{
|
{
|
||||||
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
|
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
|
||||||
|
|
||||||
background = std::make_shared<CPicture>(ImagePath::builtin(highscorepage == HighScorePage::STANDARD ? "HISCORE" : "HISCORE2"));
|
background = std::make_shared<CPicture>(ImagePath::builtin(highscorepage == HighScorePage::SCENARIO ? "HISCORE" : "HISCORE2"));
|
||||||
|
|
||||||
texts.clear();
|
texts.clear();
|
||||||
images.clear();
|
images.clear();
|
||||||
@ -83,7 +86,7 @@ void CHighScoreScreen::addHighScores()
|
|||||||
texts.push_back(std::make_shared<CLabel>(115, 20, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, CGI->generaltexth->translate("core.genrltxt.433")));
|
texts.push_back(std::make_shared<CLabel>(115, 20, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, CGI->generaltexth->translate("core.genrltxt.433")));
|
||||||
texts.push_back(std::make_shared<CLabel>(220, 20, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, CGI->generaltexth->translate("core.genrltxt.434")));
|
texts.push_back(std::make_shared<CLabel>(220, 20, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, CGI->generaltexth->translate("core.genrltxt.434")));
|
||||||
|
|
||||||
if(highscorepage == HighScorePage::STANDARD)
|
if(highscorepage == HighScorePage::SCENARIO)
|
||||||
{
|
{
|
||||||
texts.push_back(std::make_shared<CLabel>(400, 20, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, CGI->generaltexth->translate("core.genrltxt.435")));
|
texts.push_back(std::make_shared<CLabel>(400, 20, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, CGI->generaltexth->translate("core.genrltxt.435")));
|
||||||
texts.push_back(std::make_shared<CLabel>(555, 20, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, CGI->generaltexth->translate("core.genrltxt.436")));
|
texts.push_back(std::make_shared<CLabel>(555, 20, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, CGI->generaltexth->translate("core.genrltxt.436")));
|
||||||
@ -97,15 +100,15 @@ void CHighScoreScreen::addHighScores()
|
|||||||
|
|
||||||
// Content
|
// Content
|
||||||
int y = 65;
|
int y = 65;
|
||||||
auto & data = persistentStorage["highscore"][highscorepage == HighScorePage::STANDARD ? "standard" : "campaign"];
|
auto & data = persistentStorage["highscore"][highscorepage == HighScorePage::SCENARIO ? "scenario" : "campaign"];
|
||||||
for (int i = 0; i < 11; i++)
|
for (int i = 0; i < 11; i++)
|
||||||
{
|
{
|
||||||
auto & curData = data[std::to_string(i)];
|
auto & curData = data[std::to_string(i)];
|
||||||
|
|
||||||
texts.push_back(std::make_shared<CLabel>(115, y + i * 50, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, std::to_string(i)));
|
texts.push_back(std::make_shared<CLabel>(115, y + i * 50, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, std::to_string(i+1)));
|
||||||
texts.push_back(std::make_shared<CLabel>(220, y + i * 50, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, curData["player"].String()));
|
texts.push_back(std::make_shared<CLabel>(220, y + i * 50, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, curData["player"].String()));
|
||||||
|
|
||||||
if(highscorepage == HighScorePage::STANDARD)
|
if(highscorepage == HighScorePage::SCENARIO)
|
||||||
{
|
{
|
||||||
texts.push_back(std::make_shared<CLabel>(400, y + i * 50, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, curData["land"].String()));
|
texts.push_back(std::make_shared<CLabel>(400, y + i * 50, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, curData["land"].String()));
|
||||||
texts.push_back(std::make_shared<CLabel>(555, y + i * 50, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, std::to_string(curData["days"].Integer())));
|
texts.push_back(std::make_shared<CLabel>(555, y + i * 50, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, std::to_string(curData["days"].Integer())));
|
||||||
@ -117,7 +120,7 @@ void CHighScoreScreen::addHighScores()
|
|||||||
texts.push_back(std::make_shared<CLabel>(590, y + i * 50, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, std::to_string(curData["points"].Integer())));
|
texts.push_back(std::make_shared<CLabel>(590, y + i * 50, FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, std::to_string(curData["points"].Integer())));
|
||||||
}
|
}
|
||||||
|
|
||||||
int divide = (highscorepage == HighScorePage::STANDARD) ? 1 : 5;
|
int divide = (highscorepage == HighScorePage::SCENARIO) ? 1 : 5;
|
||||||
for(auto & creature : creatures) {
|
for(auto & creature : creatures) {
|
||||||
if(curData["points"].Integer() / divide <= creature["max"].Integer() && curData["points"].Integer() / divide >= creature["min"].Integer())
|
if(curData["points"].Integer() / divide <= creature["max"].Integer() && curData["points"].Integer() / divide >= creature["min"].Integer())
|
||||||
images.push_back(std::make_shared<CAnimImage>(AnimationPath::builtin("CPRSMALL"), (*CGI->creh)[CreatureID::decode(creature["creature"].String())]->getIconIndex(), 0, 670, y - 15 + i * 50));
|
images.push_back(std::make_shared<CAnimImage>(AnimationPath::builtin("CPRSMALL"), (*CGI->creh)[CreatureID::decode(creature["creature"].String())]->getIconIndex(), 0, 670, y - 15 + i * 50));
|
||||||
@ -136,7 +139,7 @@ void CHighScoreScreen::buttonCampaginClick()
|
|||||||
void CHighScoreScreen::buttonStandardClick()
|
void CHighScoreScreen::buttonStandardClick()
|
||||||
{
|
{
|
||||||
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
|
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
|
||||||
highscorepage = HighScorePage::STANDARD;
|
highscorepage = HighScorePage::SCENARIO;
|
||||||
addHighScores();
|
addHighScores();
|
||||||
addButtons();
|
addButtons();
|
||||||
redraw();
|
redraw();
|
||||||
@ -163,3 +166,89 @@ void CHighScoreScreen::buttonExitClick()
|
|||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHighScoreInputScreen::CHighScoreInputScreen()
|
||||||
|
: CWindowObject(BORDERED)
|
||||||
|
{
|
||||||
|
addUsedEvents(LCLICK);
|
||||||
|
|
||||||
|
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
|
||||||
|
pos = center(Rect(0, 0, 800, 600));
|
||||||
|
updateShadow();
|
||||||
|
|
||||||
|
int border = 100;
|
||||||
|
int textareaW = ((pos.w - 2 * border) / 4);
|
||||||
|
std::vector<std::string> t = { "438", "439", "440", "441", "676" };
|
||||||
|
for (int i = 0; i < 5; i++)
|
||||||
|
texts.push_back(std::make_shared<CMultiLineLabel>(Rect(textareaW * i + border - (textareaW / 2), 450, textareaW, 100), FONT_HIGH_SCORE, ETextAlignment::TOPCENTER, Colors::WHITE, CGI->generaltexth->translate("core.genrltxt." + t[i])));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CHighScoreInputScreen::addEntry(std::string text) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CHighScoreInputScreen::show(Canvas & to)
|
||||||
|
{
|
||||||
|
CCS->videoh->update(pos.x, pos.y, to.getInternalSurface(), true, false);
|
||||||
|
redraw();
|
||||||
|
|
||||||
|
CIntObject::show(to);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CHighScoreInputScreen::activate()
|
||||||
|
{
|
||||||
|
CCS->videoh->open(VideoPath::builtin("HSLOOP.SMK"));
|
||||||
|
CIntObject::activate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CHighScoreInputScreen::deactivate()
|
||||||
|
{
|
||||||
|
CCS->videoh->close();
|
||||||
|
CIntObject::deactivate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CHighScoreInputScreen::clickPressed(const Point & cursorPosition)
|
||||||
|
{
|
||||||
|
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
|
||||||
|
|
||||||
|
if(!input)
|
||||||
|
{
|
||||||
|
input = std::make_shared<CHighScoreInput>(
|
||||||
|
[&] (std::string text)
|
||||||
|
{
|
||||||
|
if(!text.empty())
|
||||||
|
{
|
||||||
|
addEntry(text);
|
||||||
|
}
|
||||||
|
close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CHighScoreInput::CHighScoreInput(std::function<void(std::string text)> readyCB)
|
||||||
|
: CWindowObject(0), ready(readyCB)
|
||||||
|
{
|
||||||
|
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
|
||||||
|
|
||||||
|
pos = center(Rect(0, 0, 232, 212));
|
||||||
|
updateShadow();
|
||||||
|
|
||||||
|
background = std::make_shared<CPicture>(ImagePath::builtin("HIGHNAME"));
|
||||||
|
text = std::make_shared<CMultiLineLabel>(Rect(15, 15, 202, 202), FONT_SMALL, ETextAlignment::TOPCENTER, Colors::WHITE, CGI->generaltexth->translate("core.genrltxt.96"));
|
||||||
|
|
||||||
|
buttonOk = std::make_shared<CButton>(Point(26, 142), AnimationPath::builtin("MUBCHCK.DEF"), CGI->generaltexth->zelp[560], std::bind(&CHighScoreInput::okay, this), EShortcut::GLOBAL_ACCEPT);
|
||||||
|
buttonCancel = std::make_shared<CButton>(Point(142, 142), AnimationPath::builtin("MUBCANC.DEF"), CGI->generaltexth->zelp[561], std::bind(&CHighScoreInput::abort, this), EShortcut::GLOBAL_CANCEL);
|
||||||
|
statusBar = CGStatusBar::create(std::make_shared<CPicture>(background->getSurface(), Rect(7, 186, 218, 18), 7, 186));
|
||||||
|
textInput = std::make_shared<CTextInput>(Rect(18, 104, 200, 25), FONT_SMALL, 0);
|
||||||
|
textInput->setText(settings["general"]["playerName"].String());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CHighScoreInput::okay()
|
||||||
|
{
|
||||||
|
ready(textInput->getText());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CHighScoreInput::abort()
|
||||||
|
{
|
||||||
|
ready("");
|
||||||
|
}
|
@ -12,11 +12,13 @@
|
|||||||
|
|
||||||
class CButton;
|
class CButton;
|
||||||
class CLabel;
|
class CLabel;
|
||||||
|
class CMultiLineLabel;
|
||||||
class CAnimImage;
|
class CAnimImage;
|
||||||
|
class CTextInput;
|
||||||
|
|
||||||
class CHighScoreScreen : public CWindowObject
|
class CHighScoreScreen : public CWindowObject
|
||||||
{
|
{
|
||||||
enum HighScorePage { STANDARD, CAMPAIGN };
|
enum HighScorePage { SCENARIO, CAMPAIGN };
|
||||||
|
|
||||||
void addButtons();
|
void addButtons();
|
||||||
void addHighScores();
|
void addHighScores();
|
||||||
@ -26,7 +28,7 @@ class CHighScoreScreen : public CWindowObject
|
|||||||
void buttonResetClick();
|
void buttonResetClick();
|
||||||
void buttonExitClick();
|
void buttonExitClick();
|
||||||
|
|
||||||
HighScorePage highscorepage = HighScorePage::STANDARD;
|
HighScorePage highscorepage = HighScorePage::SCENARIO;
|
||||||
|
|
||||||
std::shared_ptr<CPicture> background;
|
std::shared_ptr<CPicture> background;
|
||||||
std::vector<std::shared_ptr<CButton>> buttons;
|
std::vector<std::shared_ptr<CButton>> buttons;
|
||||||
@ -35,3 +37,35 @@ class CHighScoreScreen : public CWindowObject
|
|||||||
public:
|
public:
|
||||||
CHighScoreScreen();
|
CHighScoreScreen();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CHighScoreInput : public CWindowObject
|
||||||
|
{
|
||||||
|
std::shared_ptr<CPicture> background;
|
||||||
|
std::shared_ptr<CMultiLineLabel> text;
|
||||||
|
std::shared_ptr<CButton> buttonOk;
|
||||||
|
std::shared_ptr<CButton> buttonCancel;
|
||||||
|
std::shared_ptr<CGStatusBar> statusBar;
|
||||||
|
std::shared_ptr<CTextInput> textInput;
|
||||||
|
|
||||||
|
std::function<void(std::string text)> ready;
|
||||||
|
|
||||||
|
void okay();
|
||||||
|
void abort();
|
||||||
|
public:
|
||||||
|
CHighScoreInput(std::function<void(std::string text)> readyCB);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CHighScoreInputScreen : public CWindowObject
|
||||||
|
{
|
||||||
|
std::vector<std::shared_ptr<CMultiLineLabel>> texts;
|
||||||
|
std::shared_ptr<CHighScoreInput> input;
|
||||||
|
public:
|
||||||
|
CHighScoreInputScreen();
|
||||||
|
|
||||||
|
void addEntry(std::string text);
|
||||||
|
|
||||||
|
void show(Canvas & to) override;
|
||||||
|
void activate() override;
|
||||||
|
void deactivate() override;
|
||||||
|
void clickPressed(const Point & cursorPosition) override;
|
||||||
|
};
|
@ -1,122 +1,122 @@
|
|||||||
{
|
{
|
||||||
"creatures": [
|
"creatures": [
|
||||||
{ "min" : 1, "max" : 4, "creature": "core:imp" },
|
{ "min" : 1, "max" : 4, "creature": "imp" },
|
||||||
{ "min" : 5, "max" : 8, "creature": "core:gremlin" },
|
{ "min" : 5, "max" : 8, "creature": "gremlin" },
|
||||||
{ "min" : 9, "max" : 12, "creature": "core:gnoll" },
|
{ "min" : 9, "max" : 12, "creature": "gnoll" },
|
||||||
{ "min" : 13, "max" : 16, "creature": "core:troglodyte" },
|
{ "min" : 13, "max" : 16, "creature": "troglodyte" },
|
||||||
{ "min" : 17, "max" : 20, "creature": "core:familiar" },
|
{ "min" : 17, "max" : 20, "creature": "familiar" },
|
||||||
{ "min" : 21, "max" : 24, "creature": "core:skeleton" },
|
{ "min" : 21, "max" : 24, "creature": "skeleton" },
|
||||||
{ "min" : 25, "max" : 28, "creature": "core:goblin" },
|
{ "min" : 25, "max" : 28, "creature": "goblin" },
|
||||||
{ "min" : 29, "max" : 32, "creature": "core:masterGremlin" },
|
{ "min" : 29, "max" : 32, "creature": "masterGremlin" },
|
||||||
{ "min" : 33, "max" : 36, "creature": "core:hobgoblin" },
|
{ "min" : 33, "max" : 36, "creature": "hobgoblin" },
|
||||||
{ "min" : 37, "max" : 40, "creature": "core:pikeman" },
|
{ "min" : 37, "max" : 40, "creature": "pikeman" },
|
||||||
{ "min" : 41, "max" : 44, "creature": "core:infernalTroglodyte" },
|
{ "min" : 41, "max" : 44, "creature": "infernalTroglodyte" },
|
||||||
{ "min" : 45, "max" : 48, "creature": "core:skeletonWarrior" },
|
{ "min" : 45, "max" : 48, "creature": "skeletonWarrior" },
|
||||||
{ "min" : 49, "max" : 52, "creature": "core:gnollMarauder" },
|
{ "min" : 49, "max" : 52, "creature": "gnollMarauder" },
|
||||||
{ "min" : 53, "max" : 56, "creature": "core:walkingDead" },
|
{ "min" : 53, "max" : 56, "creature": "walkingDead" },
|
||||||
{ "min" : 57, "max" : 60, "creature": "core:centaur" },
|
{ "min" : 57, "max" : 60, "creature": "centaur" },
|
||||||
{ "min" : 61, "max" : 64, "creature": "core:halberdier" },
|
{ "min" : 61, "max" : 64, "creature": "halberdier" },
|
||||||
{ "min" : 65, "max" : 68, "creature": "core:archer" },
|
{ "min" : 65, "max" : 68, "creature": "archer" },
|
||||||
{ "min" : 69, "max" : 72, "creature": "core:lizardman" },
|
{ "min" : 69, "max" : 72, "creature": "lizardman" },
|
||||||
{ "min" : 73, "max" : 76, "creature": "core:zombie" },
|
{ "min" : 73, "max" : 76, "creature": "zombie" },
|
||||||
{ "min" : 77, "max" : 80, "creature": "core:goblinWolfRider" },
|
{ "min" : 77, "max" : 80, "creature": "goblinWolfRider" },
|
||||||
{ "min" : 81, "max" : 84, "creature": "core:centaurCaptain" },
|
{ "min" : 81, "max" : 84, "creature": "centaurCaptain" },
|
||||||
{ "min" : 85, "max" : 88, "creature": "core:dwarf" },
|
{ "min" : 85, "max" : 88, "creature": "dwarf" },
|
||||||
{ "min" : 89, "max" : 92, "creature": "core:harpy" },
|
{ "min" : 89, "max" : 92, "creature": "harpy" },
|
||||||
{ "min" : 93, "max" : 96, "creature": "core:lizardWarrior" },
|
{ "min" : 93, "max" : 96, "creature": "lizardWarrior" },
|
||||||
{ "min" : 97, "max" : 100, "creature": "core:gog" },
|
{ "min" : 97, "max" : 100, "creature": "gog" },
|
||||||
{ "min" : 101, "max" : 104, "creature": "core:stoneGargoyle" },
|
{ "min" : 101, "max" : 104, "creature": "stoneGargoyle" },
|
||||||
{ "min" : 105, "max" : 108, "creature": "core:sharpshooter" },
|
{ "min" : 105, "max" : 108, "creature": "sharpshooter" },
|
||||||
{ "min" : 109, "max" : 112, "creature": "core:orc" },
|
{ "min" : 109, "max" : 112, "creature": "orc" },
|
||||||
{ "min" : 113, "max" : 116, "creature": "core:obsidianGargoyle" },
|
{ "min" : 113, "max" : 116, "creature": "obsidianGargoyle" },
|
||||||
{ "min" : 117, "max" : 120, "creature": "core:hobgoblinWolfRider" },
|
{ "min" : 117, "max" : 120, "creature": "hobgoblinWolfRider" },
|
||||||
{ "min" : 121, "max" : 124, "creature": "core:battleDwarf" },
|
{ "min" : 121, "max" : 124, "creature": "battleDwarf" },
|
||||||
{ "min" : 125, "max" : 128, "creature": "core:woodElf" },
|
{ "min" : 125, "max" : 128, "creature": "woodElf" },
|
||||||
{ "min" : 129, "max" : 132, "creature": "core:harpyHag" },
|
{ "min" : 129, "max" : 132, "creature": "harpyHag" },
|
||||||
{ "min" : 133, "max" : 136, "creature": "core:magog" },
|
{ "min" : 133, "max" : 136, "creature": "magog" },
|
||||||
{ "min" : 137, "max" : 140, "creature": "core:orcChieftain" },
|
{ "min" : 137, "max" : 140, "creature": "orcChieftain" },
|
||||||
{ "min" : 141, "max" : 144, "creature": "core:stoneGolem" },
|
{ "min" : 141, "max" : 144, "creature": "stoneGolem" },
|
||||||
{ "min" : 145, "max" : 148, "creature": "core:wight" },
|
{ "min" : 145, "max" : 148, "creature": "wight" },
|
||||||
{ "min" : 149, "max" : 152, "creature": "core:serpentFly" },
|
{ "min" : 149, "max" : 152, "creature": "serpentFly" },
|
||||||
{ "min" : 153, "max" : 156, "creature": "core:dragonFly" },
|
{ "min" : 153, "max" : 156, "creature": "dragonFly" },
|
||||||
{ "min" : 157, "max" : 160, "creature": "core:wraith" },
|
{ "min" : 157, "max" : 160, "creature": "wraith" },
|
||||||
{ "min" : 161, "max" : 164, "creature": "core:waterElemental" },
|
{ "min" : 161, "max" : 164, "creature": "waterElemental" },
|
||||||
{ "min" : 165, "max" : 168, "creature": "core:earthElemental" },
|
{ "min" : 165, "max" : 168, "creature": "earthElemental" },
|
||||||
{ "min" : 169, "max" : 172, "creature": "core:grandElf" },
|
{ "min" : 169, "max" : 172, "creature": "grandElf" },
|
||||||
{ "min" : 173, "max" : 176, "creature": "core:beholder" },
|
{ "min" : 173, "max" : 176, "creature": "beholder" },
|
||||||
{ "min" : 177, "max" : 180, "creature": "core:fireElemental" },
|
{ "min" : 177, "max" : 180, "creature": "fireElemental" },
|
||||||
{ "min" : 181, "max" : 184, "creature": "core:griffin" },
|
{ "min" : 181, "max" : 184, "creature": "griffin" },
|
||||||
{ "min" : 185, "max" : 187, "creature": "core:airElemental" },
|
{ "min" : 185, "max" : 187, "creature": "airElemental" },
|
||||||
{ "min" : 188, "max" : 190, "creature": "core:hellHound" },
|
{ "min" : 188, "max" : 190, "creature": "hellHound" },
|
||||||
{ "min" : 191, "max" : 193, "creature": "core:evilEye" },
|
{ "min" : 191, "max" : 193, "creature": "evilEye" },
|
||||||
{ "min" : 194, "max" : 196, "creature": "core:cerberus" },
|
{ "min" : 194, "max" : 196, "creature": "cerberus" },
|
||||||
{ "min" : 197, "max" : 199, "creature": "core:ironGolem" },
|
{ "min" : 197, "max" : 199, "creature": "ironGolem" },
|
||||||
{ "min" : 200, "max" : 202, "creature": "core:ogre" },
|
{ "min" : 200, "max" : 202, "creature": "ogre" },
|
||||||
{ "min" : 203, "max" : 205, "creature": "core:swordsman" },
|
{ "min" : 203, "max" : 205, "creature": "swordsman" },
|
||||||
{ "min" : 206, "max" : 208, "creature": "core:demon" },
|
{ "min" : 206, "max" : 208, "creature": "demon" },
|
||||||
{ "min" : 209, "max" : 211, "creature": "core:royalGriffin" },
|
{ "min" : 209, "max" : 211, "creature": "royalGriffin" },
|
||||||
{ "min" : 212, "max" : 214, "creature": "core:hornedDemon" },
|
{ "min" : 212, "max" : 214, "creature": "hornedDemon" },
|
||||||
{ "min" : 215, "max" : 217, "creature": "core:monk" },
|
{ "min" : 215, "max" : 217, "creature": "monk" },
|
||||||
{ "min" : 218, "max" : 220, "creature": "core:dendroidGuard" },
|
{ "min" : 218, "max" : 220, "creature": "dendroidGuard" },
|
||||||
{ "min" : 221, "max" : 223, "creature": "core:medusa" },
|
{ "min" : 221, "max" : 223, "creature": "medusa" },
|
||||||
{ "min" : 224, "max" : 226, "creature": "core:pegasus" },
|
{ "min" : 224, "max" : 226, "creature": "pegasus" },
|
||||||
{ "min" : 227, "max" : 229, "creature": "core:silverPegasus" },
|
{ "min" : 227, "max" : 229, "creature": "silverPegasus" },
|
||||||
{ "min" : 230, "max" : 232, "creature": "core:basilisk" },
|
{ "min" : 230, "max" : 232, "creature": "basilisk" },
|
||||||
{ "min" : 233, "max" : 235, "creature": "core:vampire" },
|
{ "min" : 233, "max" : 235, "creature": "vampire" },
|
||||||
{ "min" : 236, "max" : 238, "creature": "core:mage" },
|
{ "min" : 236, "max" : 238, "creature": "mage" },
|
||||||
{ "min" : 239, "max" : 241, "creature": "core:medusaQueen" },
|
{ "min" : 239, "max" : 241, "creature": "medusaQueen" },
|
||||||
{ "min" : 242, "max" : 244, "creature": "core:crusader" },
|
{ "min" : 242, "max" : 244, "creature": "crusader" },
|
||||||
{ "min" : 245, "max" : 247, "creature": "core:goldGolem" },
|
{ "min" : 245, "max" : 247, "creature": "goldGolem" },
|
||||||
{ "min" : 248, "max" : 250, "creature": "core:ogreMage" },
|
{ "min" : 248, "max" : 250, "creature": "ogreMage" },
|
||||||
{ "min" : 251, "max" : 253, "creature": "core:archMage" },
|
{ "min" : 251, "max" : 253, "creature": "archMage" },
|
||||||
{ "min" : 254, "max" : 256, "creature": "core:greaterBasilisk" },
|
{ "min" : 254, "max" : 256, "creature": "greaterBasilisk" },
|
||||||
{ "min" : 257, "max" : 259, "creature": "core:zealot" },
|
{ "min" : 257, "max" : 259, "creature": "zealot" },
|
||||||
{ "min" : 260, "max" : 262, "creature": "core:pitFiend" },
|
{ "min" : 260, "max" : 262, "creature": "pitFiend" },
|
||||||
{ "min" : 263, "max" : 265, "creature": "core:diamondGolem" },
|
{ "min" : 263, "max" : 265, "creature": "diamondGolem" },
|
||||||
{ "min" : 266, "max" : 268, "creature": "core:vampireLord" },
|
{ "min" : 266, "max" : 268, "creature": "vampireLord" },
|
||||||
{ "min" : 269, "max" : 271, "creature": "core:dendroidSoldier" },
|
{ "min" : 269, "max" : 271, "creature": "dendroidSoldier" },
|
||||||
{ "min" : 272, "max" : 274, "creature": "core:minotaur" },
|
{ "min" : 272, "max" : 274, "creature": "minotaur" },
|
||||||
{ "min" : 275, "max" : 277, "creature": "core:lich" },
|
{ "min" : 275, "max" : 277, "creature": "lich" },
|
||||||
{ "min" : 278, "max" : 280, "creature": "core:genie" },
|
{ "min" : 278, "max" : 280, "creature": "genie" },
|
||||||
{ "min" : 281, "max" : 283, "creature": "core:gorgon" },
|
{ "min" : 281, "max" : 283, "creature": "gorgon" },
|
||||||
{ "min" : 284, "max" : 286, "creature": "core:masterGenie" },
|
{ "min" : 284, "max" : 286, "creature": "masterGenie" },
|
||||||
{ "min" : 287, "max" : 289, "creature": "core:roc" },
|
{ "min" : 287, "max" : 289, "creature": "roc" },
|
||||||
{ "min" : 290, "max" : 292, "creature": "core:mightyGorgon" },
|
{ "min" : 290, "max" : 292, "creature": "mightyGorgon" },
|
||||||
{ "min" : 293, "max" : 295, "creature": "core:minotaurKing" },
|
{ "min" : 293, "max" : 295, "creature": "minotaurKing" },
|
||||||
{ "min" : 296, "max" : 298, "creature": "core:powerLich" },
|
{ "min" : 296, "max" : 298, "creature": "powerLich" },
|
||||||
{ "min" : 299, "max" : 301, "creature": "core:thunderbird" },
|
{ "min" : 299, "max" : 301, "creature": "thunderbird" },
|
||||||
{ "min" : 302, "max" : 304, "creature": "core:pitLord" },
|
{ "min" : 302, "max" : 304, "creature": "pitLord" },
|
||||||
{ "min" : 305, "max" : 307, "creature": "core:cyclop" },
|
{ "min" : 305, "max" : 307, "creature": "cyclop" },
|
||||||
{ "min" : 308, "max" : 310, "creature": "core:wyvern" },
|
{ "min" : 308, "max" : 310, "creature": "wyvern" },
|
||||||
{ "min" : 311, "max" : 313, "creature": "core:cyclopKing" },
|
{ "min" : 311, "max" : 313, "creature": "cyclopKing" },
|
||||||
{ "min" : 314, "max" : 316, "creature": "core:wyvernMonarch" },
|
{ "min" : 314, "max" : 316, "creature": "wyvernMonarch" },
|
||||||
{ "min" : 317, "max" : 319, "creature": "core:manticore" },
|
{ "min" : 317, "max" : 319, "creature": "manticore" },
|
||||||
{ "min" : 320, "max" : 322, "creature": "core:scorpicore" },
|
{ "min" : 320, "max" : 322, "creature": "scorpicore" },
|
||||||
{ "min" : 323, "max" : 325, "creature": "core:efreet" },
|
{ "min" : 323, "max" : 325, "creature": "efreet" },
|
||||||
{ "min" : 326, "max" : 328, "creature": "core:unicorn" },
|
{ "min" : 326, "max" : 328, "creature": "unicorn" },
|
||||||
{ "min" : 329, "max" : 331, "creature": "core:efreetSultan" },
|
{ "min" : 329, "max" : 331, "creature": "efreetSultan" },
|
||||||
{ "min" : 332, "max" : 334, "creature": "core:cavalier" },
|
{ "min" : 332, "max" : 334, "creature": "cavalier" },
|
||||||
{ "min" : 335, "max" : 337, "creature": "core:naga" },
|
{ "min" : 335, "max" : 337, "creature": "naga" },
|
||||||
{ "min" : 338, "max" : 340, "creature": "core:warUnicorn" },
|
{ "min" : 338, "max" : 340, "creature": "warUnicorn" },
|
||||||
{ "min" : 341, "max" : 343, "creature": "core:blackKnight" },
|
{ "min" : 341, "max" : 343, "creature": "blackKnight" },
|
||||||
{ "min" : 344, "max" : 346, "creature": "core:champion" },
|
{ "min" : 344, "max" : 346, "creature": "champion" },
|
||||||
{ "min" : 347, "max" : 349, "creature": "core:dreadKnight" },
|
{ "min" : 347, "max" : 349, "creature": "dreadKnight" },
|
||||||
{ "min" : 350, "max" : 352, "creature": "core:nagaQueen" },
|
{ "min" : 350, "max" : 352, "creature": "nagaQueen" },
|
||||||
{ "min" : 353, "max" : 355, "creature": "core:behemoth" },
|
{ "min" : 353, "max" : 355, "creature": "behemoth" },
|
||||||
{ "min" : 356, "max" : 358, "creature": "core:boneDragon" },
|
{ "min" : 356, "max" : 358, "creature": "boneDragon" },
|
||||||
{ "min" : 359, "max" : 361, "creature": "core:giant" },
|
{ "min" : 359, "max" : 361, "creature": "giant" },
|
||||||
{ "min" : 362, "max" : 364, "creature": "core:hydra" },
|
{ "min" : 362, "max" : 364, "creature": "hydra" },
|
||||||
{ "min" : 365, "max" : 367, "creature": "core:ghostDragon" },
|
{ "min" : 365, "max" : 367, "creature": "ghostDragon" },
|
||||||
{ "min" : 368, "max" : 370, "creature": "core:redDragon" },
|
{ "min" : 368, "max" : 370, "creature": "redDragon" },
|
||||||
{ "min" : 371, "max" : 373, "creature": "core:greenDragon" },
|
{ "min" : 371, "max" : 373, "creature": "greenDragon" },
|
||||||
{ "min" : 374, "max" : 376, "creature": "core:angel" },
|
{ "min" : 374, "max" : 376, "creature": "angel" },
|
||||||
{ "min" : 377, "max" : 379, "creature": "core:devil" },
|
{ "min" : 377, "max" : 379, "creature": "devil" },
|
||||||
{ "min" : 380, "max" : 382, "creature": "core:chaosHydra" },
|
{ "min" : 380, "max" : 382, "creature": "chaosHydra" },
|
||||||
{ "min" : 383, "max" : 385, "creature": "core:ancientBehemoth" },
|
{ "min" : 383, "max" : 385, "creature": "ancientBehemoth" },
|
||||||
{ "min" : 386, "max" : 388, "creature": "core:archDevil" },
|
{ "min" : 386, "max" : 388, "creature": "archDevil" },
|
||||||
{ "min" : 389, "max" : 391, "creature": "core:titan" },
|
{ "min" : 389, "max" : 391, "creature": "titan" },
|
||||||
{ "min" : 392, "max" : 394, "creature": "core:goldDragon" },
|
{ "min" : 392, "max" : 394, "creature": "goldDragon" },
|
||||||
{ "min" : 395, "max" : 397, "creature": "core:blackDragon" },
|
{ "min" : 395, "max" : 397, "creature": "blackDragon" },
|
||||||
{ "min" : 398, "max" : 400, "creature": "core:archangel" }
|
{ "min" : 398, "max" : 400, "creature": "archangel" }
|
||||||
]
|
]
|
||||||
}
|
}
|
Reference in New Issue
Block a user