#include "rpgmodule.h" #include #include #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; }