// 加载数据 bool CPlayer::LoadData(Msg *pMsg) { svrData::LoadPlayerData msg; _CHECK_PARSE_(pMsg, msg) false; if (!UnPackData(msg.data().c_str(), msg.data().size())) return false; SetAccount(msg.account()); SetName(msg.name().c_str()); SetGuid(msg.nguid()); SetSex(msg.nsex()); SetJob(msg.njob()); SetLevel(msg.nlevel()); SetCreateTime(msg.ncreatetime()); SetLoginTime(msg.nlogintime()); SetMapID(msg.nmapid()); SetNowPos(msg.nx(), msg.ny(), msg.nz()); m_LastSaveTime = CTimer::GetTime() + CRandomPool::GetOneLess(60); RunStateLog("加载玩家:%s数据成功!账号:%s", GetName(), msg.account().c_str()); if (!msg.bchangeline()) { svrData::AddPlayerToCenter SendMsg; SendMsg.set_nguid(GetGuid()); SendMsg.set_ngameid(GetGameID()); SendMsg.set_nclientid(GetClientID()); SendMsg.set_ngateid(GetGateID()); SendMsg.set_account(GetAccount()); FuncUti::SendMsgToCenter(this, SendMsg, SERVER_TYPE_MAIN, SVR_SUB_ADD_PLAYER_TO_CENTER); } m_LoadDataSucc = true; return true; }
Plugin::Plugin(GenericPluginModel* model, const string& ModuleName): Exports(), m_model(model), Activity(0), bPendingRemove(false), m_strModuleName(ModuleName), m_strCacheName(ModuleName), m_Instance(nullptr) { ReplaceBackslashToSlash(m_strCacheName); SetGuid(FarGuid); }
bool Plugin::LoadFromCache(const os::FAR_FIND_DATA &FindData) { const auto& PlCache = *ConfigProvider().PlCacheCfg(); if (const auto id = PlCache.GetCacheID(m_strCacheName)) { if (PlCache.IsPreload(id)) //PF_PRELOAD plugin, skip cache { WorkFlags.Set(PIWF_PRELOADED); return false; } { string strCurPluginID = str_printf( L"%I64x%x%x", FindData.nFileSize, FindData.ftCreationTime.dwLowDateTime, FindData.ftLastWriteTime.dwLowDateTime ); string strPluginID = PlCache.GetSignature(id); if (strPluginID != strCurPluginID) //одинаковые ли бинарники? return false; } if (!PlCache.GetMinFarVersion(id, &MinFarVersion)) { MinFarVersion = FAR_VERSION; } if (!PlCache.GetVersion(id, &PluginVersion)) { ClearStruct(PluginVersion); } VersionString = VersionToString(PluginVersion); m_strGuid = PlCache.GetGuid(id); SetGuid(StrToGuid(m_strGuid,m_Guid)?m_Guid:FarGuid); strTitle = PlCache.GetTitle(id); strDescription = PlCache.GetDescription(id); strAuthor = PlCache.GetAuthor(id); m_model->LoadExportsFromCache(PlCache, id, Exports); WorkFlags.Set(PIWF_CACHED); //too much "cached" flags return true; } return false; }
bool Plugin::LoadData() { if (WorkFlags.Check(PIWF_DONTLOADAGAIN)) return false; if (WorkFlags.Check(PIWF_DATALOADED)) return true; if (m_Instance) return true; if (!m_Instance) { string strCurPlugDiskPath; wchar_t Drive[]={0,L' ',L':',0}; //ставим 0, как признак того, что вертать обратно ненадо! const auto strCurPath = os::GetCurrentDirectory(); if (ParsePath(m_strModuleName) == PATH_DRIVELETTER) // если указан локальный путь, то... { Drive[0] = L'='; Drive[1] = m_strModuleName.front(); os::env::get_variable(Drive, strCurPlugDiskPath); } PrepareModulePath(m_strModuleName); m_Instance = m_model->Create(m_strModuleName); FarChDir(strCurPath); if (Drive[0]) // вернем ее (переменную окружения) обратно os::env::set_variable(Drive, strCurPlugDiskPath); } if (!m_Instance) { //чтоб не пытаться загрузить опять а то ошибка будет постоянно показываться. WorkFlags.Set(PIWF_DONTLOADAGAIN); if (!Global->Opt->LoadPlug.SilentLoadPlugin) //убрать в PluginSet { Message(MSG_WARNING|MSG_ERRORTYPE|MSG_NOPLUGINS, MSG(MError), make_vector<string>(MSG(MPlgLoadPluginError), m_strModuleName), make_vector<string>(MSG(MOk)), L"ErrLoadPlugin"); } return false; } WorkFlags.Clear(PIWF_CACHED); if(bPendingRemove) { bPendingRemove = false; m_model->GetOwner()->UndoRemove(this); } InitExports(); GlobalInfo Info={sizeof(Info)}; if(GetGlobalInfo(&Info) && Info.StructSize && Info.Title && *Info.Title && Info.Description && *Info.Description && Info.Author && *Info.Author) { MinFarVersion = Info.MinFarVersion; PluginVersion = Info.Version; VersionString = VersionToString(PluginVersion); strTitle = Info.Title; strDescription = Info.Description; strAuthor = Info.Author; bool ok=true; if(m_Guid != FarGuid && m_Guid != Info.Guid) { ok = m_model->GetOwner()->UpdateId(this, Info.Guid); } else { SetGuid(Info.Guid); } if (ok) { WorkFlags.Set(PIWF_DATALOADED); return true; } } Unload(); //чтоб не пытаться загрузить опять а то ошибка будет постоянно показываться. WorkFlags.Set(PIWF_DONTLOADAGAIN); return false; }
GameObjectReference::GameObjectReference(unsigned int guid) { SetGuid(guid); }