Fix packet spam

This commit is contained in:
Koncord 2016-09-18 15:52:13 +08:00
parent 96e2d749c7
commit 24617589e4
4 changed files with 30 additions and 23 deletions

View file

@ -49,15 +49,6 @@ void Networking::Update(RakNet::Packet *packet)
Player *player = Players::GetPlayer(packet->guid); Player *player = Players::GetPlayer(packet->guid);
if (player == 0)
{
controller->GetPacket(ID_HANDSHAKE)->RequestData(packet->guid);
Players::NewPlayer(packet->guid);
player = Players::GetPlayer(packet->guid);
controller->GetPacket(ID_USER_MYID)->Send(Players::GetPlayer(packet->guid), false);
return;
}
RakNet::BitStream bsIn(&packet->data[1], packet->length, false); RakNet::BitStream bsIn(&packet->data[1], packet->length, false);
{ {
@ -68,6 +59,15 @@ void Networking::Update(RakNet::Packet *packet)
controller->SetStream(&bsIn, 0); controller->SetStream(&bsIn, 0);
if (player == 0)
{
controller->GetPacket(ID_HANDSHAKE)->RequestData(packet->guid);
Players::NewPlayer(packet->guid);
player = Players::GetPlayer(packet->guid);
controller->GetPacket(ID_USER_MYID)->Send(Players::GetPlayer(packet->guid), false);
return;
}
BasePacket *myPacket = controller->GetPacket(packet->data[0]); BasePacket *myPacket = controller->GetPacket(packet->data[0]);
if (packet->data[0] == ID_HANDSHAKE) if (packet->data[0] == ID_HANDSHAKE)
@ -109,7 +109,7 @@ void Networking::Update(RakNet::Packet *packet)
if (packet->data[0] == ID_LOADED) if (packet->data[0] == ID_LOADED)
{ {
player->Loaded(); player->Loaded(Player::LOADED);
static constexpr unsigned int ident = Script::CallbackIdentity("OnPlayerConnect"); static constexpr unsigned int ident = Script::CallbackIdentity("OnPlayerConnect");
Script::CallBackReturn<ident> result = true; Script::CallBackReturn<ident> result = true;
@ -131,12 +131,13 @@ void Networking::Update(RakNet::Packet *packet)
myPacket->Send(player, true); myPacket->Send(player, true);
} }
if(!player->isLoaded()) if (player->LoadedState() == Player::NOTLOADED)
return; return;
else if(player->BirthSign()->empty()) else if (player->LoadedState() == Player::LOADED)
{ {
(*player->BirthSign()) = "a"; player->Loaded(Player::POSTLOADED);
NewPlayer(packet->guid); NewPlayer(packet->guid);
return;
} }
switch (packet->data[0]) switch (packet->data[0])

View file

@ -92,12 +92,12 @@ bool Player::isHandshaked()
return handshake; return handshake;
} }
void Player::Loaded() void Player::Loaded(int state)
{ {
loaded = true; loaded = state;
} }
bool Player::isLoaded() int Player::LoadedState()
{ {
return loaded; return loaded;
} }

View file

@ -40,6 +40,12 @@ class Player : public mwmp::BasePlayer
unsigned short id; unsigned short id;
public: public:
enum
{
NOTLOADED=0,
LOADED,
POSTLOADED
};
Player(RakNet::RakNetGUID id); Player(RakNet::RakNetGUID id);
unsigned short GetID(); unsigned short GetID();
@ -48,13 +54,13 @@ public:
bool isHandshaked(); bool isHandshaked();
void Handshake(); void Handshake();
void Loaded(); void Loaded(int state);
bool isLoaded(); int LoadedState();
virtual ~Player(); virtual ~Player();
private: private:
bool handshake; bool handshake;
bool loaded; int loaded;
}; };
#endif //OPENMW_PLAYER_HPP #endif //OPENMW_PLAYER_HPP

View file

@ -91,11 +91,11 @@ void Main::Configure(const boost::program_options::variables_map &variables)
Main::addr = variables["connect"].as<string>(); Main::addr = variables["connect"].as<string>();
} }
Settings::CategorySettingValueMap saveUserSettings; static Settings::CategorySettingValueMap saveUserSettings;
Settings::CategorySettingValueMap saveDefaultSettings; static Settings::CategorySettingValueMap saveDefaultSettings;
Settings::CategorySettingVector saveChangedSettings; static Settings::CategorySettingVector saveChangedSettings;
Settings::Manager InitMgr(Settings::Manager &mgr) void InitMgr(Settings::Manager &mgr)
{ {
saveUserSettings = mgr.mUserSettings; saveUserSettings = mgr.mUserSettings;
saveDefaultSettings = mgr.mDefaultSettings; saveDefaultSettings = mgr.mDefaultSettings;