added events interaction and look around in villages

This commit is contained in:
Anselme 2016-03-18 12:09:43 +01:00
parent a9a925ca47
commit 806efbcba0
2 changed files with 66 additions and 4 deletions

View File

@ -177,10 +177,44 @@ QString RPGModule::getTerrainName(int type)
}
}
Village* RPGModule::getVillage(RPGCharacter *c)
{
for(Village &v : villages)
{
if(v.x == c->x && v.y == c->y)
return &v;
}
return NULL;
}
QString RPGModule::lookAt(RPGCharacter *c, QString target)
{
if(target.compare("around") == 0)
return QString("%1 is in %2").arg(c->pseudo).arg(getTerrainName(WORLDMAP[c->x][c->y]));
{
int terrain = WORLDMAP[c->x][c->y];
if(terrain == VILLAGE)
{
Village *v = getVillage(c);
if(v == NULL)
return QString("%1 is in an unknown village").arg(c->pseudo);
QString str = QString("%1 is in %2").arg(c->pseudo).arg(v->name);
QString evStr;
bool first = true;
for(Event &e : v->events)
{
if(first)
first = false;
else
evStr += ", ";
evStr += e.name;
}
if(!first)
str += ", you can see " + evStr;
return str;
}
else
return QString("%1 is in %2").arg(c->pseudo).arg(getTerrainName(terrain));
}
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-1][c->y]));
else if(target.compare("south") == 0 || target.compare("s") == 0)
@ -193,6 +227,22 @@ QString RPGModule::lookAt(RPGCharacter *c, QString target)
return QString("%1 is not a valid target").arg(target);
}
QString RPGModule::eventInteract(RPGCharacter *c, QString target)
{
Village *v = getVillage(c);
if(v != NULL)
{
for(Event &e : v->events)
{
if(e.name.compare(target) == 0)
{
return e.description;
}
}
}
return QString("%1 is not a valid target").arg(target);
}
QString RPGModule::playerTravel(RPGCharacter *c, QString dir, bool repeat)
{
char terrainType = WORLDMAP[c->x][c->y];
@ -401,10 +451,18 @@ bool RPGModule::messageHandler(Message msg)
else if(msg.args.startsWith("go "))
{
QStringList paramList = msg.args.split(' ');
if(charOnline.count(src) > 0 && paramList.size() == 2)
if(charOnline.count(src) > 0)
{
answer = say(playerTravel(charOnline[src], paramList[1], false));
return true;
if(paramList.size() == 2)
{
answer = say(playerTravel(charOnline[src], paramList[1], false));
return true;
}
else if(paramList.size() == 3 && paramList[1].compare("to") == 0)
{
answer = say(eventInteract(charOnline[src], paramList[2]));
return true;
}
}
}
else if(msg.args.startsWith("travel "))

View File

@ -56,6 +56,8 @@ struct Event
ROLEPLAY
};
QString lookAt();
QString name;
QString description;
Type type;
@ -180,7 +182,9 @@ public:
void initVillages();
void playerJoin(User* user, RPGCharacter *c);
void playerLeave(User* user);
Village* getVillage(RPGCharacter *c);
QString lookAt(RPGCharacter *c, QString target);
QString eventInteract(RPGCharacter *c, QString target);
QString playerTravel(RPGCharacter *c, QString dir, bool repeat=false);
QString getTerrainName(int type);