added lots of things

This commit is contained in:
Anselme 2016-03-16 11:46:59 +01:00
parent 61b4619a55
commit 919e7700c2
2 changed files with 96 additions and 4 deletions

View File

@ -1,12 +1,71 @@
#include "rpgmodule.h"
#include <QString>
#include <QStringList>
#include <QFileInfo>
#include <QTextStream>
#include "message.h"
#include "user.h"
QString RPGCharacter::toString()
{
QString str;
str.append(pseudo).append(" ");
str.append(password).append(" ");
str.append(level).append(" ");
str.append(xp).append(" ");
str.append(x).append(" ");
str.append(y);
return str;
}
bool RPGCharacter::fromString(QString str)
{
QStringList list = str.split(" ");
if(list.size() == 6)
{
pseudo = list[0];
password = list[1];
level = list[2].toInt();
xp = list[3].toInt();
x = list[4].toInt();
y = list[5].toInt();
return true;
}
else
return false;
}
RPGModule::RPGModule()
{
// TODO : load save file
QFile f("../../res/rpg.save");
if(!f.open(QFile::ReadOnly | QFile::Text))
{
fprintf(stderr, "can't load save file.\n");
return;
}
QTextStream in(&f);
QString line = "plop (line init)";
do
{
line = in.readLine();
charList.add(new RPGCharacter(line));
}
while(!line.isNull());
f.close();
}
void RPGModule::saveCharacters()
{
QFile f("../../res/rpg.save");
if(!f.open(QFile::WriteOnly | QFile::Text))
{
fprintf(stderr, "can't load save file.\n");
return;
}
QTextStream out(&f);
for(const std::string &name : charList.names)
out << charList.get(name)->toString() << "\n";
f.close();
}
void RPGModule::playerJoin(User *user, RPGCharacter *c)
@ -114,7 +173,7 @@ bool RPGModule::messageHandler(Message msg)
else
{
answer = privateSay(QString("successfully created the character \"%1\"").arg(paramList[2]), msg.nick);
charList.add(paramList[2].toStdString(), new RPGCharacter(paramList[2], paramList[3]));
charList.add(new RPGCharacter(paramList[2], paramList[3]));
}
}
return true;
@ -167,6 +226,23 @@ bool RPGModule::messageHandler(Message msg)
return true;
}
}
else if(msg.args.compare("!rpg debug") == 0 && src->isOp())
{
QString str;
for(const std::string &name : charList.names)
str.append(name.c_str()).append(" ");
if(!str.isEmpty())
{
answer = say(str);
return true;
}
}
else if(msg.args.compare("!rpg save") == 0)
{
saveCharacters();
answer = say("saved RPG characters");
return true;
}
else if(msg.args.startsWith("go "))
{
QStringList paramList = msg.args.split(' ');

View File

@ -45,6 +45,8 @@ const char WORLDMAP[25][26] = {
struct RPGCharacter
{
static const int VERSION = 1;
int level;
int xp;
QString password;
@ -62,6 +64,18 @@ struct RPGCharacter
y(13),
user(NULL)
{}
RPGCharacter(QString serialisationStr) : user(NULL)
{
if(!fromString(serialisationStr))
{
pseudo = QString("trash");
password = QString("trashpass");
}
}
QString toString();
bool fromString(QString str);
};
class CharacterMap
@ -70,8 +84,9 @@ public:
std::vector<std::string> names;
std::unordered_map<std::string, RPGCharacter*> data;
void add(const std::string &name, RPGCharacter* t)
void add(RPGCharacter* t)
{
std::string name = t->pseudo.toStdString();
data[name] = t;
names.push_back(name);
}
@ -94,7 +109,8 @@ class RPGModule : public Module
public:
RPGModule();
void saveCharacters();
void playerJoin(User* user, RPGCharacter *c);
void playerLeave(User* user);
QString playerTravel(RPGCharacter *c, QString dir);