added Event structures, fixed a few bugs
This commit is contained in:
parent
0ad4728816
commit
a9a925ca47
@ -18,6 +18,66 @@ QString RPGCharacter::toString()
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RPGModule::initVillages()
|
||||||
|
{
|
||||||
|
Village v;
|
||||||
|
|
||||||
|
Event eventBlacksmith;
|
||||||
|
eventBlacksmith.name = "blacksmith";
|
||||||
|
eventBlacksmith.description = "you approach the strong bearded blacksmith, and asks him to show his goods.";
|
||||||
|
eventBlacksmith.type = Event::TRADER;
|
||||||
|
Trade t;
|
||||||
|
t.goldPrice = 100;
|
||||||
|
t.item = "rusty sword";
|
||||||
|
Trader *blacksmithTrader = new Trader();
|
||||||
|
blacksmithTrader->push_back(t);
|
||||||
|
eventBlacksmith.trader = blacksmithTrader;
|
||||||
|
|
||||||
|
Event eventInn;
|
||||||
|
eventInn.name = "inn";
|
||||||
|
eventInn.description = "you enter the inn, there are plenty of townsfolk drinking and eating loudly.";
|
||||||
|
eventInn.type = Event::TRADER;
|
||||||
|
t.goldPrice = 20;
|
||||||
|
t.item = "night of rest";
|
||||||
|
Trader *innkeeperTrader = new Trader();
|
||||||
|
innkeeperTrader->push_back(t);
|
||||||
|
eventInn.trader = innkeeperTrader;
|
||||||
|
|
||||||
|
v.x = 7;
|
||||||
|
v.y = 4;
|
||||||
|
v.name = "Dornwich";
|
||||||
|
v.events.push_back(eventInn);
|
||||||
|
v.events.push_back(eventBlacksmith);
|
||||||
|
villages.push_back(v);
|
||||||
|
v.x = 1;
|
||||||
|
v.y = 11;
|
||||||
|
v.name = "Dawsbury";
|
||||||
|
v.events.push_back(eventInn);
|
||||||
|
villages.push_back(v);
|
||||||
|
v.x = 17;
|
||||||
|
v.y = 8;
|
||||||
|
v.name = "Willowdale";
|
||||||
|
v.events.push_back(eventInn);
|
||||||
|
v.events.push_back(eventBlacksmith);
|
||||||
|
villages.push_back(v);
|
||||||
|
v.x = 19;
|
||||||
|
v.y = 22;
|
||||||
|
v.name = "Myrefall";
|
||||||
|
v.events.push_back(eventInn);
|
||||||
|
villages.push_back(v);
|
||||||
|
v.x = 12;
|
||||||
|
v.y = 15;
|
||||||
|
v.name = "Calmarnock";
|
||||||
|
v.events.push_back(eventInn);
|
||||||
|
villages.push_back(v);
|
||||||
|
v.x = 3;
|
||||||
|
v.y = 18;
|
||||||
|
v.name = "Waeldestone";
|
||||||
|
v.events.push_back(eventInn);
|
||||||
|
v.events.push_back(eventBlacksmith);
|
||||||
|
villages.push_back(v);
|
||||||
|
}
|
||||||
|
|
||||||
bool RPGCharacter::fromString(QString str)
|
bool RPGCharacter::fromString(QString str)
|
||||||
{
|
{
|
||||||
QStringList list = str.split(QChar(' '));
|
QStringList list = str.split(QChar(' '));
|
||||||
@ -46,6 +106,7 @@ bool RPGCharacter::fromString(QString str)
|
|||||||
|
|
||||||
RPGModule::RPGModule()
|
RPGModule::RPGModule()
|
||||||
{
|
{
|
||||||
|
initVillages();
|
||||||
QFile f("../../res/rpg.save");
|
QFile f("../../res/rpg.save");
|
||||||
if(!f.open(QFile::ReadOnly | QFile::Text))
|
if(!f.open(QFile::ReadOnly | QFile::Text))
|
||||||
{
|
{
|
||||||
@ -57,7 +118,9 @@ RPGModule::RPGModule()
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
line = in.readLine();
|
line = in.readLine();
|
||||||
charList.add(new RPGCharacter(line));
|
RPGCharacter *c = new RPGCharacter(line);
|
||||||
|
if(c->pseudo.compare("trash") != 0)
|
||||||
|
charList.add(c);
|
||||||
}
|
}
|
||||||
while(!line.isNull());
|
while(!line.isNull());
|
||||||
f.close();
|
f.close();
|
||||||
@ -119,13 +182,13 @@ QString RPGModule::lookAt(RPGCharacter *c, QString target)
|
|||||||
if(target.compare("around") == 0)
|
if(target.compare("around") == 0)
|
||||||
return QString("%1 is in %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x][c->y]));
|
return QString("%1 is in %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x][c->y]));
|
||||||
else if(target.compare("north") == 0 || target.compare("n") == 0)
|
else if(target.compare("north") == 0 || target.compare("n") == 0)
|
||||||
return QString("%1 looks north and sees %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x][c->y-1]));
|
return QString("%1 looks north and sees %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x-1][c->y]));
|
||||||
else if(target.compare("south") == 0 || target.compare("s") == 0)
|
else if(target.compare("south") == 0 || target.compare("s") == 0)
|
||||||
return QString("%1 looks south and sees %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x][c->y+1]));
|
return QString("%1 looks south and sees %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x+1][c->y]));
|
||||||
else if(target.compare("west") == 0 || target.compare("w") == 0)
|
else if(target.compare("west") == 0 || target.compare("w") == 0)
|
||||||
return QString("%1 looks west and sees %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x-1][c->y]));
|
return QString("%1 looks west and sees %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x][c->y-1]));
|
||||||
else if(target.compare("east") == 0 || target.compare("e") == 0)
|
else if(target.compare("east") == 0 || target.compare("e") == 0)
|
||||||
return QString("%1 looks east and sees %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x+1][c->y]));
|
return QString("%1 looks east and sees %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x][c->y+1]));
|
||||||
else
|
else
|
||||||
return QString("%1 is not a valid target").arg(target);
|
return QString("%1 is not a valid target").arg(target);
|
||||||
}
|
}
|
||||||
@ -142,7 +205,7 @@ QString RPGModule::playerTravel(RPGCharacter *c, QString dir, bool repeat)
|
|||||||
{
|
{
|
||||||
if(dir.compare("north") == 0 || dir.compare("n") == 0)
|
if(dir.compare("north") == 0 || dir.compare("n") == 0)
|
||||||
{
|
{
|
||||||
bool isDiff = repeat && terrainType != WORLDMAP[c->x][c->y-1];
|
bool isDiff = repeat && terrainType != WORLDMAP[c->x-1][c->y];
|
||||||
if(c->y == 0 || (isDiff && dist != 0))
|
if(c->y == 0 || (isDiff && dist != 0))
|
||||||
blocked = true;
|
blocked = true;
|
||||||
else
|
else
|
||||||
@ -156,7 +219,7 @@ QString RPGModule::playerTravel(RPGCharacter *c, QString dir, bool repeat)
|
|||||||
}
|
}
|
||||||
else if(dir.compare("south") == 0 || dir.compare("s") == 0)
|
else if(dir.compare("south") == 0 || dir.compare("s") == 0)
|
||||||
{
|
{
|
||||||
bool isDiff = repeat && terrainType != WORLDMAP[c->x][c->y+1];
|
bool isDiff = repeat && terrainType != WORLDMAP[c->x+1][c->y];
|
||||||
if(c->y == 24 || (isDiff && dist != 0))
|
if(c->y == 24 || (isDiff && dist != 0))
|
||||||
blocked = true;
|
blocked = true;
|
||||||
else
|
else
|
||||||
@ -170,7 +233,7 @@ QString RPGModule::playerTravel(RPGCharacter *c, QString dir, bool repeat)
|
|||||||
}
|
}
|
||||||
else if(dir.compare("west") == 0 || dir.compare("w") == 0)
|
else if(dir.compare("west") == 0 || dir.compare("w") == 0)
|
||||||
{
|
{
|
||||||
bool isDiff = repeat && terrainType != WORLDMAP[c->x-1][c->y];
|
bool isDiff = repeat && terrainType != WORLDMAP[c->x][c->y-1];
|
||||||
if(c->x == 0 || (isDiff && dist != 0))
|
if(c->x == 0 || (isDiff && dist != 0))
|
||||||
blocked = true;
|
blocked = true;
|
||||||
else
|
else
|
||||||
@ -184,7 +247,7 @@ QString RPGModule::playerTravel(RPGCharacter *c, QString dir, bool repeat)
|
|||||||
}
|
}
|
||||||
else if(dir.compare("east") == 0 || dir.compare("e") == 0)
|
else if(dir.compare("east") == 0 || dir.compare("e") == 0)
|
||||||
{
|
{
|
||||||
bool isDiff = repeat && terrainType != WORLDMAP[c->x+1][c->y];
|
bool isDiff = repeat && terrainType != WORLDMAP[c->x][c->y+1];
|
||||||
if(c->x == 24 || (isDiff && dist != 0))
|
if(c->x == 24 || (isDiff && dist != 0))
|
||||||
blocked = true;
|
blocked = true;
|
||||||
else
|
else
|
||||||
|
@ -15,6 +15,65 @@ enum
|
|||||||
VILLAGE = 'O'
|
VILLAGE = 'O'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct Event;
|
||||||
|
|
||||||
|
struct Enemy
|
||||||
|
{
|
||||||
|
QString name;
|
||||||
|
int hp;
|
||||||
|
// TODO stats
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Trade
|
||||||
|
{
|
||||||
|
int goldPrice;
|
||||||
|
QString itemPrice;
|
||||||
|
QString item;
|
||||||
|
Event *reward;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Roleplay
|
||||||
|
{
|
||||||
|
QString trigger;
|
||||||
|
Event *reward;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Fight
|
||||||
|
{
|
||||||
|
Enemy enemy;
|
||||||
|
Event *reward;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::vector<Trade> Trader;
|
||||||
|
|
||||||
|
struct Event
|
||||||
|
{
|
||||||
|
enum Type
|
||||||
|
{
|
||||||
|
TRADER,
|
||||||
|
TRADE,
|
||||||
|
FIGHT,
|
||||||
|
ROLEPLAY
|
||||||
|
};
|
||||||
|
|
||||||
|
QString name;
|
||||||
|
QString description;
|
||||||
|
Type type;
|
||||||
|
|
||||||
|
Trader *trader;
|
||||||
|
Trade *trade;
|
||||||
|
Fight *fight;
|
||||||
|
Roleplay *roleplay;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Village
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
QString name;
|
||||||
|
std::vector<Event> events;
|
||||||
|
};
|
||||||
|
|
||||||
const char WORLDMAP[25][26] = {
|
const char WORLDMAP[25][26] = {
|
||||||
"^^^^^^^^^^^^^^^^^^^^^^^^^",
|
"^^^^^^^^^^^^^^^^^^^^^^^^^",
|
||||||
"^^^^^^^^^^^^^^^^^^^^^^^^^",
|
"^^^^^^^^^^^^^^^^^^^^^^^^^",
|
||||||
@ -42,7 +101,6 @@ const char WORLDMAP[25][26] = {
|
|||||||
"XXXXXX^^^^^^^^^^^^^^^^^^^",
|
"XXXXXX^^^^^^^^^^^^^^^^^^^",
|
||||||
"XX^^^^^^^^^^^^^^^^^^^^^^^"};
|
"XX^^^^^^^^^^^^^^^^^^^^^^^"};
|
||||||
|
|
||||||
|
|
||||||
struct RPGCharacter
|
struct RPGCharacter
|
||||||
{
|
{
|
||||||
static const int VERSION = 1;
|
static const int VERSION = 1;
|
||||||
@ -112,13 +170,14 @@ public:
|
|||||||
|
|
||||||
class RPGModule : public Module
|
class RPGModule : public Module
|
||||||
{
|
{
|
||||||
|
std::vector<Village> villages;
|
||||||
CharacterMap charList;
|
CharacterMap charList;
|
||||||
std::unordered_map<User*, RPGCharacter*> charOnline;
|
std::unordered_map<User*, RPGCharacter*> charOnline;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RPGModule();
|
RPGModule();
|
||||||
void saveCharacters();
|
void saveCharacters();
|
||||||
|
void initVillages();
|
||||||
void playerJoin(User* user, RPGCharacter *c);
|
void playerJoin(User* user, RPGCharacter *c);
|
||||||
void playerLeave(User* user);
|
void playerLeave(User* user);
|
||||||
QString lookAt(RPGCharacter *c, QString target);
|
QString lookAt(RPGCharacter *c, QString target);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user