diff --git a/app/rpgmodule.cpp b/app/rpgmodule.cpp index 301576e..bbfe8f0 100644 --- a/app/rpgmodule.cpp +++ b/app/rpgmodule.cpp @@ -200,8 +200,41 @@ bool RPGModule::messageHandler(Message msg) 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])); + if(c->password.compare(paramList[3]) == 0) + { + playerJoin(getUsers()->getFromNick(msg.nick), c); + answer = say(QString("%1 joins the RPG as %2").arg(msg.nick).arg(paramList[2])); + } + else + privateSay(QString("ERROR : Wrong password"), msg.nick); + } + else + answer = privateSay(QString("ERROR : Character name \"%1\" does not exists").arg(paramList[2]), msg.nick); + } + return true; + } + else if(msg.args.startsWith("!rpg delete") && !msg.target.contains(getChan())) + { + QStringList paramList = msg.args.split(' '); + if(paramList.size() != 4) + answer = privateSay("usage : !rpg delete [name of character] [password]", msg.nick); + else + { + RPGCharacter *c = charList.get(paramList[2].toStdString()); + if(c != NULL) + { + if(c->password.compare(paramList[3]) == 0) + { + for(const std::pair &it : charOnline) + { + if(it.second == c) + charOnline.erase(it.first); + } + charList.erase(paramList[2].toStdString()); + answer = say(QString("Character %2 has been deleted").arg(paramList[2])); + } + else + privateSay(QString("ERROR : Wrong password"), msg.nick); } else answer = privateSay(QString("ERROR : Character name \"%1\" does not exists").arg(paramList[2]), msg.nick); @@ -238,17 +271,6 @@ 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 reset") == 0 && src->isOp()) { charList.data.clear(); @@ -285,20 +307,12 @@ bool RPGModule::messageHandler(Message msg) answer = say("you look around and you find a walnut."); return true; } - else if(msg.args.compare("break walnut") == 0) - { - answer = say("you use a rock to break the walnut, there is a walnut kernel inside."); - return true; - } - else if(msg.args.compare("eat walnut kernel") == 0) - { - answer = say("you eat the walnut kernel, and you feel repleted."); - return true; - } 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("Commands : register, join, delete, leave, save, stats, list", msg.nick); + 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("Delete character (works only in private message) : !rpg delete [name of character] [password]", msg.nick); answer += privateSay("leave the game : !rpg leave", msg.nick); answer += privateSay("show your stats : !rpg stats", msg.nick); answer += privateSay("show all in-game players : !rpg list", msg.nick); diff --git a/app/rpgmodule.h b/app/rpgmodule.h index e05369a..592805c 100644 --- a/app/rpgmodule.h +++ b/app/rpgmodule.h @@ -99,7 +99,15 @@ public: return NULL; } - // TODO serialization + void erase(const std::string &name) + { + data.erase(name); + for(auto it = names.begin(); it != names.end(); ++it) + { + if(*it == name) + names.erase(it); + } + } }; class RPGModule : public Module