forked from mirror/openmw-tes3mp
New auth protocol
This commit is contained in:
parent
61c5456373
commit
96e2d749c7
5 changed files with 77 additions and 43 deletions
|
@ -52,10 +52,9 @@ void Networking::Update(RakNet::Packet *packet)
|
|||
if (player == 0)
|
||||
{
|
||||
controller->GetPacket(ID_HANDSHAKE)->RequestData(packet->guid);
|
||||
|
||||
NewPlayer(packet->guid);
|
||||
Players::NewPlayer(packet->guid);
|
||||
player = Players::GetPlayer(packet->guid);
|
||||
|
||||
controller->GetPacket(ID_USER_MYID)->Send(Players::GetPlayer(packet->guid), false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -97,6 +96,20 @@ void Networking::Update(RakNet::Packet *packet)
|
|||
return;
|
||||
}
|
||||
player->Handshake();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!player->isHandshaked())
|
||||
{
|
||||
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "Have not completed handshake with player %d",
|
||||
player->GetID());
|
||||
//KickPlayer(player->guid);
|
||||
return;
|
||||
}
|
||||
|
||||
if (packet->data[0] == ID_LOADED)
|
||||
{
|
||||
player->Loaded();
|
||||
|
||||
static constexpr unsigned int ident = Script::CallbackIdentity("OnPlayerConnect");
|
||||
Script::CallBackReturn<ident> result = true;
|
||||
|
@ -108,22 +121,27 @@ void Networking::Update(RakNet::Packet *packet)
|
|||
Players::DeletePlayer(packet->guid);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if(packet->data[0] == ID_GAME_BASE_INFO)
|
||||
{
|
||||
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "Received ID_GAME_BASE_INFO about %s",
|
||||
player->Npc()->mName.c_str());
|
||||
|
||||
return;
|
||||
|
||||
myPacket->Read(player);
|
||||
myPacket->Send(player, true);
|
||||
}
|
||||
|
||||
if (!player->isHandshaked())
|
||||
{
|
||||
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "Have not completed handshake with player %d",
|
||||
player->GetID());
|
||||
//KickPlayer(player->guid);
|
||||
if(!player->isLoaded())
|
||||
return;
|
||||
else if(player->BirthSign()->empty())
|
||||
{
|
||||
(*player->BirthSign()) = "a";
|
||||
NewPlayer(packet->guid);
|
||||
}
|
||||
|
||||
switch (packet->data[0])
|
||||
{
|
||||
case ID_GAME_BASE_INFO:
|
||||
/*case ID_GAME_BASE_INFO:
|
||||
{
|
||||
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "Received ID_GAME_BASE_INFO about %s",
|
||||
player->Npc()->mName.c_str());
|
||||
|
@ -132,7 +150,7 @@ void Networking::Update(RakNet::Packet *packet)
|
|||
myPacket->Send(player, true);
|
||||
|
||||
break;
|
||||
}
|
||||
}*/
|
||||
case ID_GAME_UPDATE_POS:
|
||||
{
|
||||
//DEBUG_PRINTF("ID_GAME_UPDATE_POS \n");
|
||||
|
@ -331,10 +349,6 @@ void Networking::Update(RakNet::Packet *packet)
|
|||
|
||||
void Networking::NewPlayer(RakNet::RakNetGUID guid)
|
||||
{
|
||||
Players::NewPlayer(guid);
|
||||
|
||||
controller->GetPacket(ID_USER_MYID)->Send(Players::GetPlayer(guid), false);
|
||||
|
||||
controller->GetPacket(ID_GAME_BASE_INFO)->RequestData(guid);
|
||||
controller->GetPacket(ID_GAME_UPDATE_BASESTATS)->RequestData(guid);
|
||||
controller->GetPacket(ID_GAME_ATTRIBUTE)->RequestData(guid);
|
||||
|
@ -343,7 +357,7 @@ void Networking::NewPlayer(RakNet::RakNetGUID guid)
|
|||
controller->GetPacket(ID_GAME_CELL)->RequestData(guid);
|
||||
controller->GetPacket(ID_GAME_UPDATE_EQUIPED)->RequestData(guid);
|
||||
|
||||
for (TPlayers::iterator pl = players->begin(); pl != players->end(); pl++)
|
||||
for (TPlayers::iterator pl = players->begin(); pl != players->end(); pl++) //sending other players to new player
|
||||
{
|
||||
if (pl->first == guid) continue;
|
||||
|
||||
|
|
|
@ -644,9 +644,9 @@ void OMW::Engine::go()
|
|||
ToUTF8::Utf8Encoder encoder (mEncoding);
|
||||
mEncoder = &encoder;
|
||||
|
||||
|
||||
mwmp::Main::Init(mContentFiles);
|
||||
prepareEngine (settings);
|
||||
mwmp::Main::Create();
|
||||
mwmp::Main::PostInit();
|
||||
mSkipMenu = true;
|
||||
|
||||
if (!mSaveGameFile.empty())
|
||||
|
|
|
@ -91,19 +91,35 @@ void Main::Configure(const boost::program_options::variables_map &variables)
|
|||
Main::addr = variables["connect"].as<string>();
|
||||
}
|
||||
|
||||
void Main::Create()
|
||||
Settings::CategorySettingValueMap saveUserSettings;
|
||||
Settings::CategorySettingValueMap saveDefaultSettings;
|
||||
Settings::CategorySettingVector saveChangedSettings;
|
||||
|
||||
Settings::Manager InitMgr(Settings::Manager &mgr)
|
||||
{
|
||||
saveUserSettings = mgr.mUserSettings;
|
||||
saveDefaultSettings = mgr.mDefaultSettings;
|
||||
saveChangedSettings = mgr.mChangedSettings;
|
||||
mgr.mUserSettings.clear();
|
||||
mgr.mDefaultSettings.clear();
|
||||
mgr.mChangedSettings.clear();
|
||||
loadSettings(mgr);
|
||||
}
|
||||
|
||||
void RestoreMgr(Settings::Manager &mgr)
|
||||
{
|
||||
mgr.mUserSettings = saveUserSettings;
|
||||
mgr.mDefaultSettings = saveDefaultSettings;
|
||||
mgr.mChangedSettings = saveChangedSettings;
|
||||
}
|
||||
|
||||
void Main::Init(std::vector<std::string> &content)
|
||||
{
|
||||
assert(!pMain);
|
||||
pMain = new Main();
|
||||
|
||||
Settings::Manager mgr;
|
||||
Settings::CategorySettingValueMap saveUserSettings = mgr.mUserSettings;
|
||||
Settings::CategorySettingValueMap saveDefaultSettings = mgr.mDefaultSettings;
|
||||
Settings::CategorySettingVector saveChangedSettings = mgr.mChangedSettings;
|
||||
mgr.mUserSettings.clear();
|
||||
mgr.mDefaultSettings.clear();
|
||||
mgr.mChangedSettings.clear();
|
||||
loadSettings(mgr);
|
||||
InitMgr(mgr);
|
||||
|
||||
int logLevel = mgr.getInt("loglevel", "General");
|
||||
Log::SetLevel(logLevel);
|
||||
|
@ -120,15 +136,21 @@ void Main::Create()
|
|||
|
||||
}
|
||||
|
||||
pMain->mNetworking->Connect(pMain->server, pMain->port);
|
||||
RestoreMgr(mgr);
|
||||
}
|
||||
|
||||
void Main::PostInit()
|
||||
{
|
||||
Settings::Manager mgr;
|
||||
InitMgr(mgr);
|
||||
|
||||
pMain->mGUIController->setupChat(mgr);
|
||||
RestoreMgr(mgr);
|
||||
|
||||
mgr.mUserSettings = saveUserSettings;
|
||||
mgr.mDefaultSettings = saveDefaultSettings;
|
||||
mgr.mChangedSettings = saveChangedSettings;
|
||||
|
||||
//pMain->mGUILogin = new GUILogin();
|
||||
const MWBase::Environment &environment = MWBase::Environment::get();
|
||||
environment.getStateManager()->newGame(true);
|
||||
MWBase::Environment::get().getMechanicsManager()->toggleAI();
|
||||
}
|
||||
|
||||
void Main::Destroy()
|
||||
|
@ -164,17 +186,14 @@ void Main::UpdateWorld(float dt) const
|
|||
if (!mLocalPlayer->CharGenThread())
|
||||
return;
|
||||
|
||||
if (!mNetworking->isConnected())
|
||||
static bool init = true;
|
||||
if (init)
|
||||
{
|
||||
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayerPtr();
|
||||
MWBase::Environment::get().getMechanicsManager()->toggleAI();
|
||||
init = false;
|
||||
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "%s", "Sending ID_GAME_BASE_INFO to server");
|
||||
|
||||
(*mLocalPlayer->Npc()) = *player.get<ESM::NPC>()->mBase;
|
||||
|
||||
mLocalPlayer->updateAttributesAndSkills();
|
||||
|
||||
mNetworking->Connect(server, port);
|
||||
player.getClass().getCreatureStats(player).getSpells().add("fireball");
|
||||
mNetworking->GetPacket(ID_GAME_BASE_INFO)->Send(getLocalPlayer());
|
||||
mNetworking->GetPacket(ID_LOADED)->Send(getLocalPlayer());
|
||||
mLocalPlayer->updateBaseStats(true);
|
||||
get().getGUIController()->setChatVisible(true);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,8 @@ namespace mwmp
|
|||
|
||||
static void OptionsDesc(boost::program_options::options_description *desc);
|
||||
static void Configure(const boost::program_options::variables_map &variables);
|
||||
static void Create();
|
||||
static void Init(std::vector<std::string> &content);
|
||||
static void PostInit();
|
||||
static void Destroy();
|
||||
static const Main &get();
|
||||
static void Frame(float dt);
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
#define OPENMW_VERSION_HPP
|
||||
|
||||
#define TES3MP_VERSION "0.0.1c"
|
||||
#define TES3MP_PROTO_VERSION 1
|
||||
#define TES3MP_PROTO_VERSION 2
|
||||
|
||||
#endif //OPENMW_VERSION_HPP
|
||||
|
|
Loading…
Reference in a new issue