Exemplo n.º 1
0
int Open( lua_State *L )
{
	ILuaInterface* gLua = Lua();

	gLua->NewGlobalTable( "cmd" );

	ILuaObject *cmdTable = gLua->GetGlobal( "cmd" );
		cmdTable->SetMember( "exec", cmd_exec );
	cmdTable->UnReference();
	return 0;
}
Exemplo n.º 2
0
void CLuaInterface_Hooks::ErrorFromLua_H( const char *err, ... )
{
	ILuaInterface *luaInterface = (ILuaInterface *)this;

	// Construct error string
	char szBuf[512];
	va_list arg_ptr;
	va_start( arg_ptr, err );
	_vsntprintf( szBuf, sizeof(szBuf)-1, (char *)err, arg_ptr );
	va_end( arg_ptr );

	// Only call hook if the state has the module loaded
	if ( g_LuaInterfaces.Find( luaInterface ) == -1 )
	{
		(this->*ErrorFromLua_T)( szBuf );

		return;
	}

	// Call LuaError hook

	ILuaObject *hookTable = luaInterface->GetGlobal( "hook" );
	ILuaObject *hookCallFunction = hookTable->GetMember( "Call" );
	hookCallFunction->Push();

	luaInterface->Push( "LuaError" );
	luaInterface->PushNil();
	luaInterface->Push( szBuf );
	luaInterface->Call( 3, 1 );

	hookTable->UnReference();
	hookCallFunction->UnReference();

	// Check return value

	ILuaObject *returnValue = luaInterface->GetReturn( 0 );

	// Call original if nothing is returned
	if ( returnValue->isNil() )
		(this->*ErrorFromLua_T)( szBuf );

	returnValue->UnReference();
}
Exemplo n.º 3
0
void VFUNC newDispatchUserMessage( IBaseClientDLL *baseCLDLL, int peebis, int msg_type, bf_read &msg_data ) {

	for ( int i=0; i <= 1; i++) {
		ILuaInterface* gLua = CStateManager::GetByIndex( i );
		if ( gLua == NULL ){ continue; }

		gLua->Push( gLua->GetGlobal("hook")->GetMember("Call") );
			gLua->Push("DispatchUserMessage");
			gLua->PushNil();

			gLua->Push( (float) peebis );
			gLua->Push( (float) msg_type );

			ILuaObject *metaT = gLua->GetMetaTable( CBITREAD_NAME, CBITREAD_ID ); //Push our custom stringtable object
				gLua->PushUserData( metaT, &msg_data );
			metaT->UnReference();

		gLua->Call(4, 0);
	}

	return origDispatchUserMessage( baseCLDLL, peebis, msg_type, msg_data );
}