added first version of rpgmodule

This commit is contained in:
Anselme 2016-03-14 15:12:04 +01:00
parent cd173ab505
commit a9ecba8bc3
5 changed files with 172 additions and 3 deletions

View File

@ -18,7 +18,8 @@ SOURCES = main.cpp \
riddles.cpp \ riddles.cpp \
todomodule.cpp \ todomodule.cpp \
jankenmodule.cpp \ jankenmodule.cpp \
janken.cpp janken.cpp \
rpgmodule.cpp
HEADERS += \ HEADERS += \
regismodule.h \ regismodule.h \
@ -29,4 +30,5 @@ HEADERS += \
riddles.h \ riddles.h \
todomodule.h \ todomodule.h \
jankenmodule.h \ jankenmodule.h \
janken.h janken.h \
rpgmodule.h

View File

@ -10,6 +10,7 @@
#include "fourasmodule.h" #include "fourasmodule.h"
#include "todomodule.h" #include "todomodule.h"
#include "jankenmodule.h" #include "jankenmodule.h"
#include "rpgmodule.h"
// //
#include "janken.h" #include "janken.h"
@ -43,6 +44,7 @@ int main(int argc, char *argv[])
app.addModule(new PoilAuModule()); app.addModule(new PoilAuModule());
app.addModule(new FourasModule()); app.addModule(new FourasModule());
app.addModule(new JankenModule()); app.addModule(new JankenModule());
app.addModule(new RPGModule());
//app.addModule(new TodoModule()); //app.addModule(new TodoModule());
return app.exec(); return app.exec();

97
app/rpgmodule.cpp Normal file
View File

@ -0,0 +1,97 @@
#include "rpgmodule.h"
#include <QString>
#include <QStringList>
#include "message.h"
#include "user.h"
RPGModule::RPGModule()
{
// TODO : load save file
}
void RPGModule::playerJoin(User *user, RPGCharacter *c)
{
c->user = user;
charOnline[user] = c;
}
void RPGModule::playerLeave(User *user)
{
if(charOnline.count(user) > 0)
{
charOnline[user]->user = NULL;
charOnline.erase(user);
}
}
bool RPGModule::messageHandler(Message msg)
{
User* src = getUsers()->getFromNick(msg.nick);
if(msg.command.compare(QString("PRIVMSG"), Qt::CaseInsensitive) == 0)
{
if(msg.args.startsWith("!rpg register ") == 0 && !msg.target.contains(getChan()))
{
QStringList paramList = msg.args.split(' ');
if(paramList.size() != 4)
answer = privateSay("usage : !rpg register [name of character] [password]", msg.nick);
else
{
if(charList.get(paramList[2].toStdString()) != NULL)
answer = privateSay(QString("ERROR : Character name \"%1\" already exists").arg(paramList[2]), msg.nick);
else
charList.add(paramList[2].toStdString(), new RPGCharacter(paramList[2], paramList[3]));
}
return true;
}
else if(msg.args.startsWith("!rpg join ") == 0 && !msg.target.contains(getChan()))
{
QStringList paramList = msg.args.split(' ');
if(paramList.size() != 4)
answer = privateSay("usage : !rpg join [name of character] [password]", msg.nick);
else
{
RPGCharacter *c = charList.get(paramList[2].toStdString());
if(c != NULL)
{
playerJoin(getUsers()->getFromNick(msg.nick), c);
answer = say(QString("%1 joins the RPG as %2").arg(msg.nick).arg(paramList[2]));
}
else
answer = privateSay(QString("ERROR : Character name \"%1\" does not exists").arg(paramList[2]), msg.nick);
}
return true;
}
else if(msg.args.compare("!rpg leave") == 0)
{
playerLeave(src);
answer = say(QString("%1 (%2) left the RPG").arg(charOnline[src]->pseudo).arg(src->getNick()));
}
else if(msg.args.compare("!rpg list") == 0)
{
bool hasPeople = false;
for(auto it : charOnline)
{
hasPeople = true;
RPGCharacter *c = it.second;
answer += say(QString("%1 [lvl %2] (%3)").arg(c->pseudo).arg(c->level).arg(c->user->getNick()));
}
return hasPeople;
}
else if(msg.args.compare("!rpg help") == 0)
{
answer = privateSay("Create new character (works only in private message) : !rpg register [name of character] [password]", msg.nick);
answer += privateSay("Join game with character (works only in private message) : !rpg join [name of character] [password]", msg.nick);
answer += privateSay("leave the game : !rpg leave", msg.nick);
return true;
}
}
else if(msg.command.compare("QUIT", Qt::CaseInsensitive) == 0)
playerLeave(src);
else if(msg.command.compare("PART", Qt::CaseInsensitive) == 0)
playerLeave(src);
else if(msg.command.compare("KICK", Qt::CaseInsensitive) == 0)
playerLeave(getUsers()->getFromNick(msg.target2));
return false;
}

68
app/rpgmodule.h Normal file
View File

@ -0,0 +1,68 @@
#ifndef RPGMODULE_H
#define RPGMODULE_H
#include "module.h"
#include <unordered_map>
class User;
struct RPGCharacter
{
int level;
int xp;
QString password;
QString pseudo;
int x;
int y;
User *user;
RPGCharacter(QString myPseudo, QString myPass) :
level(1),
xp(0),
password(myPass),
pseudo(myPseudo),
x(0),
y(0),
user(NULL)
{}
};
class CharacterMap
{
public:
std::vector<std::string> names;
std::unordered_map<std::string, RPGCharacter*> data;
void add(const std::string &name, RPGCharacter* t)
{
data[name] = t;
names.push_back(name);
}
RPGCharacter* get(const std::string &name)
{
if(data.count(name))
return data[name];
else
return NULL;
}
// TODO serialization
};
class RPGModule : public Module
{
CharacterMap charList;
std::unordered_map<User*, RPGCharacter*> charOnline;
public:
RPGModule();
void playerJoin(User* user, RPGCharacter *c);
void playerLeave(User* user);
virtual bool messageHandler(Message msg);
virtual QString getName() {return QString("rpg");}
};
#endif // RPGMODULE_H

View File

@ -28,7 +28,7 @@ bool SparrowModule::messageHandler(Message msg)
} }
else if(msg.args.compare("!version") == 0) else if(msg.args.compare("!version") == 0)
{ {
answer = say("sparrowBot v1.0"); answer = say("sparrowBot v1.1");
return true; return true;
} }
else if(msg.args.compare("!bot") == 0) else if(msg.args.compare("!bot") == 0)