ES/callServerFunction

From Multi Theft Auto: Wiki

[[{{{image}}}|link=]] Note: Se recomienda encerecidamente que valides la funcion que está siendo llamada o potencialmente un cliente puede hacer lo que quiera con tu servidor - banear jugadores, agregarse a sí mismo como admin (dependiende de que tan bien estén configuradas las ACL ) etc. Por esta razón es que esta función no viene incluida dentro de MTA.

Esta funcion te permite llamar cualquier funcion de servidor desde el lado del cliente. Obviamente solo aquellas que están disponibles del lado del servidor. No importa si es una funcion MTA, una funcion estándar Lua o una funcion creada.

Los numeros se convierten automáticamente a string y vice versa en el servidor para evitar pérdida de datos. Si no necesitas esta caracterñistica, solo elimínala.

Nota Importante: Ten presente que ¡el nombre de la función debe ser un string!

Sintaxis

void callServerFunction( string funcname, [ var arg1, ... ] )

Argumentos Requeridos

  • funcname: El nombre de la funcion de servidor que será llamada. Tambien puede ser una funcion dentro de una tabla, p.ej. "math.round".

Argumentos Opcionales

NOTA: cuando se usan argumentos opcionales, debes poporcionar all arguments antes del que deseas usar. For more information on optional arguments, mira los Argumentos Opcionales.

  • arg1-argn: The arguments that should be passed to the function.

Código

Click to collapse [-]
Clientside Script
function callServerFunction(funcname, ...)
    local arg = { ... }
    if (arg[1]) then
        for key, value in next, arg do
            if (type(value) == "number") then arg[key] = tostring(value) end
        end
    end
    -- Si el controlador de eventos en el servidor no está dentro de mismo resource, reemplaza 'resourceRoot' con el elemento apropiado
    triggerServerEvent("onClientCallsServerFunction", resourceRoot , funcname, unpack(arg))
end
Click to collapse [-]
Serverside Script
function callServerFunction(funcname, ...)
    local arg = { ... }
    if (arg[1]) then
        for key, value in next, arg do arg[key] = tonumber(value) or value end
    end
    loadstring("return "..funcname)()(unpack(arg))
end
addEvent("onClientCallsServerFunction", true)
addEventHandler("onClientCallsServerFunction", resourceRoot , callServerFunction)

Ejemplo

Click to collapse [-]
Cliente

En este ejemplo se quitan a los jugaores de su equipo.

-- obtiene el elemento de jugador local
local _local = getLocalPlayer()
-- define el la funcion del controlador de comandos
function cmdLeaveTeam()
    -- establece el equipo del jugador a nil
    callServerFunction("setPlayerTeam", _local)
end
-- y en controlador de eme
addCommandHandler("leaveTeam", cmdLeaveTeam, false)

Vea También

  • callClientFunction » Esta función permite llamar cualquier función del lado del cliente desde el lado del servidor.
  • callServerFunction » Esta función permite llamar cualquier función del lado del servidor desde el lado del cliente.
  • centerWindow » Esta función centra la ventana en cualquier resolución.
  • Check » Esta funcion verifica si sus argumentos son de los tipos correctos y llama la función error si uno no lo es.
  • doForAllElements » Esta función puede ser usada para ejecutar una funcion especifica para todos los elementos de un tipo especifico.
  • dxDrawColorText » Esta función dibuja un texto dx con soporte para códigos de color #RRGGBB.
  • findRotation » Toma dos puntos y devuelve la dirección del punto A al punto B.
  • FormatDate » Formatea una fecha sobre la basándose en una cadena de formato y la devuelve.
  • getAge » Esta función la edad según el cumpleaños.
  • getCursorMoveOn » Esta función verifica de que forma se está moviendo el cursor actualmente.
  • getElementSpeed » Esta función permite obtener la velocidad del elemento en unidades de kph o mph.
  • IfElse » Devuelve uno de dos valores basado en una expresión booleana.
  • isLeapYear » Comprueba si año proporcionado es bisiesto.
  • iterElements » Devuelve un iterador para tus bucles, ahorrando tiempo en escribir ipairs( getElementsByType( type ) ), en lugar de eso escribes: iterElements( type ).
  • math.round »Redondea un número mientras pueden establecerce el numero de decimales y el método.
  • onVehicleWeaponFire » Este código implementa un evento que provocado cuando un jugador en un vehículo dispara un arma del vehículo.
  • RGBToHex » Esta funcion devuelve un string que representa el color en hexadecimal.
  • setElementSpeed » Esta funcio permite establecer la velocidad de movimiento de un elemento en unidades de kph o mph.
  • setVehicleGravityPoint » Esta función del lado del cliente establece una gravedad de vehiculo en la dirección de una coordenada tridimensional con la fuerza especificada.
  • string.explode » Esta función divide un string con un patrón separador dado y devuelve una tabla con las partes.
  • table.copy » Esta función copia una tabla completa y todas las tablas dentro de ella.
  • table.map » Esta función recorre una tabla y reemplaza cada campo con lo que devuelva la función que es pasada, donde los valores de campo son pasados como primer argumento y opcionalmente más argumentos.
  • table.size » Encuentra el tamaño completo de una tabla.
  • toHex » Esta función convierte un número decimal a un número hexadecimal, como una corrección para el lado del cliente.
  • var_dump » Esta función entrega información acerca de una o más variables usando outputConsole().
  • multi_check » Esta función comprueba de de uno a varios elementos, util y limpia.
  • isElementInPhotograph » Esta función comprueba si un elemento estuvo en la foto de cámara de un jugador. Necesita se escrita aun. --Ransom 21:45, 2 May 2012 (UTC)