示例#1
0
// 加载数据
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;
}
示例#2
0
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);
}
示例#3
0
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;
}
示例#4
0
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;
}
示例#5
0
GameObjectReference::GameObjectReference(unsigned int guid)
{
    SetGuid(guid);
}