diff --git a/app/rpgmodule.cpp b/app/rpgmodule.cpp index 96aecd6..6860bdd 100644 --- a/app/rpgmodule.cpp +++ b/app/rpgmodule.cpp @@ -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 ")) diff --git a/app/rpgmodule.h b/app/rpgmodule.h index 9668142..eb113c2 100644 --- a/app/rpgmodule.h +++ b/app/rpgmodule.h @@ -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);