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