1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-15 21:49:56 +00:00
openmw-tes3mp/apps/openmw/mwmp/LocalPlayer.hpp
David Cernat d9dd7073cf [General] Send certain packets only when logged in
Previously, client mods adding packet-sending scripts to the spawn area made clients send the associated packets as soon as they inputted their character name when joining a server using those mods. This made the clients either get disconnected for not replying to a handshake first, or it made them get kicked for sending object packets that are disallowed for players who are not logged in.

To fix this, LocalPlayer's hasFinishedCharGen() has been replaced with isLoggedIn(), because the former was already returning true when players inputted their names.
2018-10-13 15:36:13 +03:00

116 lines
3.7 KiB
C++

#ifndef OPENMW_LOCALPLAYER_HPP
#define OPENMW_LOCALPLAYER_HPP
#include <components/openmw-mp/Base/BasePlayer.hpp>
#include "../mwworld/ptr.hpp"
#include <RakNetTypes.h>
namespace mwmp
{
class Networking;
class LocalPlayer : public BasePlayer
{
public:
LocalPlayer();
virtual ~LocalPlayer();
time_t deathTime;
bool receivedCharacter;
bool isReceivingInventory;
bool isReceivingQuickKeys;
bool isPlayingAnimation;
bool diedSinceArrestAttempt;
void update();
bool processCharGen();
bool isLoggedIn();
void updateStatsDynamic(bool forceUpdate = false);
void updateAttributes(bool forceUpdate = false);
void updateSkills(bool forceUpdate = false);
void updateLevel(bool forceUpdate = false);
void updateBounty(bool forceUpdate = false);
void updateReputation(bool forceUpdate = false);
void updatePosition(bool forceUpdate = false);
void updateCell(bool forceUpdate = false);
void updateEquipment(bool forceUpdate = false);
void updateInventory(bool forceUpdate = false);
void updateAttack();
void updateAnimFlags(bool forceUpdate = false);
void addItems();
void addSpells();
void addJournalItems();
void addTopics();
void removeItems();
void removeSpells();
void resurrect();
void closeInventoryWindows();
void setCharacter();
void setDynamicStats();
void setAttributes();
void setSkills();
void setLevel();
void setBounty();
void setReputation();
void setPosition();
void setMomentum();
void setCell();
void setClass();
void setEquipment();
void setInventory();
void setSpellbook();
void setQuickKeys();
void setFactions();
void setKills();
void setBooks();
void setShapeshift();
void setMarkLocation();
void setSelectedSpell();
void sendClass();
void sendInventory();
void sendItemChange(const MWWorld::Ptr& itemPtr, int count, unsigned int action);
void sendItemChange(const std::string& refId, int count, unsigned int action);
void sendSpellbook();
void sendSpellChange(std::string id, unsigned int action);
void sendQuickKey(unsigned short slot, int type, const std::string& itemId = "");
void sendJournalEntry(const std::string& quest, int index, const MWWorld::Ptr& actor);
void sendJournalIndex(const std::string& quest, int index);
void sendFactionRank(const std::string& factionId, int rank);
void sendFactionExpulsionState(const std::string& factionId, bool isExpelled);
void sendFactionReputation(const std::string& factionId, int reputation);
void sendTopic(const std::string& topic);
void sendKill(const std::string& refId, int number);
void sendBook(const std::string& bookId);
void sendWerewolfState(bool isWerewolf);
void sendMarkLocation(const ESM::Cell& newMarkCell, const ESM::Position& newMarkPosition);
void sendSelectedSpell(const std::string& newSelectedSpellId);
void sendItemUse(const MWWorld::Ptr& itemPtr);
void sendCellStates();
void clearCellStates();
void clearCurrentContainer();
void storeCellState(const ESM::Cell& cell, int stateType);
void storeCurrentContainer(const MWWorld::Ptr& container);
void playAnimation();
void playSpeech();
MWWorld::Ptr getPlayerPtr();
private:
Networking *getNetworking();
};
}
#endif //OPENMW_LOCALPLAYER_HPP