Jump to content
Araştır
  • Diğer seçenekler ...
Sonuçları bul ...
Sonuçları bul ...
cacaa

Otomatik LUA Okuma Çalışmıyor

Önerilen Mesajlar

Yardımcı olursanız çok sevinirim.

bool CLuaEngine::ExecuteScript(CUser * pUser, CNpc * pNpc, int32 nEventID, int8 bSelectedReward, const char * filename)
{
	try {
		ScriptBytecodeMap::iterator itr;
		bool result = false;

		m_lock->AcquireReadLock();
		itr = m_scriptMap.find(filename);
		if (itr == m_scriptMap.end())
		{
			// Build full path to script
			std::string szPath = LUA_SCRIPT_DIRECTORY;
			szPath += filename;

			// Release the read lock (we're not reading anymore)
			m_lock->ReleaseReadLock();

			// Attempt to compile 
			BytecodeBuffer bytecode;
			bytecode.reserve(LUA_SCRIPT_BUFFER_SIZE);
			if (!SelectAvailableScript()->CompileScript(szPath.c_str(), bytecode))
			{
				printf("ERROR: Could not compile Lua script.\n");
				printf("FILE: %s\n", szPath.c_str());
				printf("USER: %s\n", pUser->GetName().c_str());
				printf("ZONE: %d\n", pUser->GetZoneID());
				printf("NPC ID: %d\n", pNpc->m_sSid);
				printf("-\n");
				return false;
			}

			// Acquire the write lock (we're adding the compiled script)
			m_lock->AcquireWriteLock();

#if !defined(LUA_SCRIPT_CACHE_DISABLED)
			// Add the script to our map
			m_scriptMap[filename] = bytecode;
#endif

			// Now that we have the bytecode, we can use it.
			result = SelectAvailableScript()->ExecuteScript(pUser, pNpc, nEventID, bSelectedReward,
				filename, bytecode);

			// Done using the lock.
			m_lock->ReleaseWriteLock();
		}
		else
		{
			// Already have the bytecode, so now we need to use it.
			result = SelectAvailableScript()->ExecuteScript(pUser, pNpc, nEventID, bSelectedReward,
				filename, itr->second);

			// Done using the lock.
			m_lock->ReleaseReadLock();
		}

		return result;
	}
	catch (...) {
		GlobalError(__FILE__, __LINE__);
		return false;
	}
}

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

×
×
  • Yeni Oluştur...