103 lines
3.8 KiB
C++
103 lines
3.8 KiB
C++
#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()))
|
|
{
|
|
answer = privateSay(QString("commande !rpg join : %1").arg(msg.args), msg.nick);
|
|
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
|
|
{
|
|
answer += privateSay(QString("successfully created the character \"%1\"").arg(paramList[2]), msg.nick);
|
|
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()))
|
|
{
|
|
answer = privateSay(QString("commande !rpg join : %1").arg(msg.args), msg.nick);
|
|
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;
|
|
}
|