added first version of rpgmodule
This commit is contained in:
parent
cd173ab505
commit
a9ecba8bc3
@ -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
|
||||||
|
@ -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
97
app/rpgmodule.cpp
Normal 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
68
app/rpgmodule.h
Normal 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
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user