You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw-tes3mp/apps/openmw-mp/Player.hpp

231 lines
6.8 KiB
C++

//
// Created by koncord on 05.01.16.
//
#ifndef OPENMW_PLAYER_HPP
#define OPENMW_PLAYER_HPP
#include <map>
#include <string>
#include <chrono>
#include <memory>
#include <RakNetTypes.h>
#include <components/esm/npcstats.hpp>
#include <components/esm/cellid.hpp>
#include <components/esm/loadnpc.hpp>
#include <components/esm/loadcell.hpp>
#include <components/openmw-mp/Log.hpp>
#include <components/openmw-mp/Base/BasePlayer.hpp>
#include <components/openmw-mp/Packets/Player/PlayerPacket.hpp>
#include <apps/openmw-mp/Script/LuaState.hpp>
#include "Cell.hpp"
#include "CellController.hpp"
#include "CharClass.hpp"
#include "Inventory.hpp"
#include "Settings.hpp"
#include "Books.hpp"
#include "GUI.hpp"
#include "Dialogue.hpp"
#include "Factions.hpp"
#include "Cells.hpp"
#include "Quests.hpp"
#include "Spells.hpp"
#include "NetActor.hpp"
#include "CellState.hpp"
#include "Weather.hpp"
class Player : public mwmp::BasePlayer, public NetActor
{
friend class Cell;
friend class Players;
unsigned short id;
uint64_t getGUID() const {return guid.g;}
public:
static void Init(LuaState &lua);
public:
enum
{
NOTLOADED=0,
LOADED,
POSTLOADED
};
explicit Player(RakNet::RakNetGUID guid);
unsigned short getId();
void setId(unsigned short id);
bool isHandshaked();
int getHandshakeAttempts();
void incrementHandshakeAttempts();
void setHandshake();
void setLoadState(int state);
int getLoadState();
virtual ~Player();
CellController::TContainer *getCells();
void sendToLoaded(mwmp::PlayerPacket &myPacket);
void forEachLoaded(std::function<void(Player *pl, Player *other)> func);
void update();
public:
void kick() const;
void ban() const;
void cleanChannel(unsigned channelId);
void message(unsigned channelId, const std::string &message, bool toAll = false);
bool joinChannel(unsigned channelId, const std::string &name);
void renameChannel(unsigned channelId, const std::string &name);
void closeChannel(unsigned channelId);
void leaveChannel(unsigned channelId);
void setChannel(unsigned channelId);
bool isChannelOpen(unsigned channelId);
int getAvgPing();
std::string getName();
void setName(const std::string &name);
void setCharGenStages(int currentStage, int endStage);
int getGender() const;
void setGender(int gender);
std::string getRace() const;
void setRace(const std::string &race);
std::string getHead() const;
void setHead(const std::string &head);
std::string getHair() const;
void setHair(const std::string &hair);
std::string getBirthsign() const;
void setBirthsign(const std::string &sign);
void setResetStats(bool state);
int getBounty() const;
void setBounty(int bounty);
int getReputation() const;
void setReputation(int reputation, bool toOthers);
int getLevel() const;
void setLevel(int level);
int getLevelProgress() const;
void setLevelProgress(int progress);
/**
* \brief Send a PlayerResurrect packet about a player.
*
* This sends the packet to all players connected to the server.
*
* \param type The type of resurrection (0 for REGULAR, 1 for IMPERIAL_SHRINE, 2 for TRIBUNAL_TEMPLE).
*/
void resurrect(unsigned int type);
/**
* \brief Send a PlayerJail packet about a player.
*
* This is similar to the player being jailed by a guard, but provides extra parameters for
* increased flexibility.
*
* It is only sent to the player being jailed, as the other players will be informed of the
* jailing's actual consequences via other packets sent by the affected client.
*
* \param jailDays The number of days to spend jailed, where each day affects one skill point.
* \param ignoreJailTeleportation Whether the player being teleported to the nearest jail
* marker should be overridden.
* \param ignoreJailSkillIncrease Whether the player's Sneak and Security skills should be
* prevented from increasing as a result of the jailing,
* overriding default behavior.
* \param jailProgressText The text that should be displayed while jailed.
* \param jailEndText The text that should be displayed once the jailing period is over.
*/
void jail(int jailDays, bool ignoreJailTeleportation, bool ignoreJailSkillIncreases,
const std::string &jailProgressText, const std::string &jailEndText);
bool getWerewolfState() const;
void setWerewolfState(bool state);
float getScale() const;
void setScale(float newScale);
std::string getCreatureRefId() const;
void setCreatureRefId(const std::string &model);
bool getCreatureNameDisplayState() const;
void setCreatureNameDisplayState(bool useName);
std::string getIP() const;
/**
*
* @return x, y, z
*/
std::tuple<float, float, float> getPreviousCellPos() const;
/**
*
* @return base, current
*/
std::tuple<int, int> getAttribute(unsigned short id) const;
void setAttribute(unsigned short id, int base, bool clearModifier);
/**
*
* @return base, current, progress, increase
*/
std::tuple<int, int, float> getSkill(unsigned short id) const;
void setSkill(unsigned short id, int base, bool clearModifier, float progress);
int getSkillIncrease(unsigned short attributeId) const;
void setSkillIncrease(unsigned short attributeId, int increase);
void setMark(float x, float y, float z, float xRot, float zRot, const std::string &cellDescription);
std::tuple<float, float, float, float, float, std::string> getMark();
std::string getSelectedSpell();
void setSelectedSpell(const std::string &newSelectedSpellId);
size_t cellStateSize() const;
CellState getCellState(int i);
CharClass &getCharClass(sol::this_state thisState);
GameSettings &getSettings();
Books &getBooks();
GUI &getGUI();
Dialogue &getDialogue();
Factions &getFactions();
Quests &getQuests();
Spells &getSpells();
QuickKeys &getQuickKeys();
WeatherMgr &getWeatherMgr();
void setAuthority();
bool isMarkedForDeletion() const;
void addToUpdateQueue();
private:
CellController::TContainer cells;
int loadState;
int handshakeCounter;
bool /*statsChanged, attributesChanged, skillsChanged, baseInfoChanged, positionChanged,*/ changedMarkLocation, changedSelectedSpell;
CharClass cClass;
GameSettings settings;
Books books;
GUI gui;
Dialogue dialogue;
Factions factions;
Quests quests;
Spells spells;
QuickKeys quickKeys;
WeatherMgr weatherMgr;
sol::table storedData;
sol::table customData;
bool markedForDeletion;
bool inUpdateQueue;
};
#endif //OPENMW_PLAYER_HPP