-
Posts
2,106 -
Joined
-
Last visited
-
Days Won
6
Everything posted by aka Blue
-
No es server-side, los elementData son shared. Usa lo mismo pero en el clientSide y ya está.
-
[AYUDA] Dare $5 al que me ayude
aka Blue replied to nomin7's topic in Ayuda relacionada al cliente/servidor
¿En serio pagar $5 por eso? Dios, como estás... -
A lo que me refería era si podía usar, en vez de elementData, tablas para ello.
-
No entiendo.
-
function obtenerPosicion( modelID ) local modelID = tonumber( modelID ) if modelID then local tabla_objetos = getElementsByType( 'object' ) for i=1, #tabla_objetos do local objeto = tabla_objetos[ i ] if objeto == modelID then local x, y, z = getElementPosition( objeto ) local rx, ry, rz = getElementRotation( objeto ) outputChatBox( "Poste "..i..": Posicion: "..x..", "..y..", "..z.."." ) outputChatBox( "Poste "..i..": Rotacion: "..rx..", "..ry..", "..rz.."." ) end end end end
-
La verdad, no sabía donde publicar este tema. Me lleva sucediendo ya varias veces, he intentado solucionarlo de todas las formas posibles, pero no hay manera. Resulta que uso el sistema de vehiculos de Paradise, todo va bien, pero me da bastantes errores con el guardado toJSON. He aquí el flood que me hace en la consola y donde dice que la función está mal, supuestamente. Gracias de antemano
-
Básicamente, lo que dice la pregunta. Quiero pasar unos elementData a tablas, pero scripts clientes que tengo los usan. Mi duda es si puedo usar una función que retorne los datos de la tabla para establecerlo en el script server-side. Algo así: function getEstado( player ) if isPedDead( player ) then return 0 else return 1 end end -- Client-side local estado = exports.script_vida:getEstado( player ) if estado == 0 then print( "está muerto el pavo" ) else print( "está vivo el pavo" ) end
-
No veo cual es el problema sinceramente. Si quieres ver quien es el dueño, eso depende del script que tengas para asignarlo. Puede usar desde tablas del vehículo (que almacene el color, dueño y demás), hasta elementData. No somos adivinos. Sobre lo de abierto y cerrado, podrías usar ésto: addEventHandler( "onClientPreRender", root, function( ) local vehiculos = getElementsByType( 'vehicle' ) for i=1, #vehiculos do local v = vehiculos[ i ] local salud = getElementHealth( v ) local modelo = getVehicleName( v ) local cerrado = isVehicleLocked( v ) local conductor = getVehicleController( v ) if conductor then return end else if cerrado then dxDrawTextOnElement(v,"Vehiculo: "..modelo,1.09,20,255,0,0,255,1.00,"default-bold") dxDrawTextOnElement(v,"Salud: "..tonumber( salud ).."%",1,20,255,0,0,255,1.00,"default-bold") dxDrawTextOnElement(v,"Estado: Cerrado",0.8,20,255,0,0,255,1.00,"default-bold") else dxDrawTextOnElement(v,"Vehiculo: "..modelo,1.09,20,255,0,0,255,1.00,"default-bold") dxDrawTextOnElement(v,"Salud: "..tonumber( salud ).."%",1,20,255,0,0,255,1.00,"default-bold") dxDrawTextOnElement(v,"Estado: Abierto",0.8,20,255,0,0,255,1.00,"default-bold") end end end end ) Acomoda las posiciones a tu gusto.
-
Esto es algo que me acaba de suceder y realmente no entiendo el motivo. Resulta que uso la función onClientClick junto a isMouseInPosition para los clicks en un panel personalizado DX (lo normal) pero resulta también que al darle click me ejecuta, ya sea el trigger como un outputChatBox, dos veces, lo cual, no entiendo. He intentado añadir un timer de 100 milisegundos pero nada... addEventHandler( "onClientClick", root, function( ) boton_cerrar = isMouseInPosition( (367/sourceX)*sx, (472/sourceY)*sy, (325/sourceX)*sx, (47/sourceY)*sy ) boton_multar = isMouseInPosition( (621/sourceX)*sx, (366/sourceY)*sy, (62/sourceX)*sx, (18/sourceY)*sy ) boton_freno = isMouseInPosition( (485/sourceX)*sx, (250/sourceY)*sy, (94/sourceX)*sx, (93/sourceY)*sy ) boton_cepo = isMouseInPosition( (379/sourceX)*sx, (249/sourceY)*sy, (94/sourceX)*sx, (93/sourceY)*sy ) if boton_cerrar then setTimer( function( ) cerrarTodo( ) end, 100, 1 ) elseif jugador_policia == 1 and boton_multar then local razon = guiGetText( edit_razon ) local cantidad = guiGetText( edit_cantidad ) if #cantidad == 0 and #razon < 2 then outputChatBox( "(( Introduce una cantidad y razón adecuados. ))", 255, 145, 0 ) else setTimer( function( ) triggerServerEvent( "vehiculos:ponerMulta", getLocalPlayer( ), getLocalPlayer( ), cantidad, razon, veh, tabla_coche ) end, 200, 1 ) end elseif jugador_policia == 1 and boton_freno then local actualEstado = isElementFrozen ( veh ) local nuevoEstado = not actualEstado if getElementVelocity( veh ) == 0 then setElementFrozen( veh, nuevoEstado ) else outputChatBox( "(( El vehículo está en movimiento ))", 255, 145, 0 ) setTimer( function( ) cerrarTodo( ) end, 100, 1 ) end elseif jugador_policia == 1 and boton_cepo then end end ) Como se puede apreciar, he añadido timers a casi todo, pero nada... sigue ejecutando las funciones un par de veces.
-
@Tomas cometió un pequeño error, confundió getPedController con getVehicleController. Usa ésto: addEventHandler( "onClientRender", getRootElement( ), function( ) local tabla_vehiculos = getElementsByType( 'vehicle' ) for i=1, #tabla_vehiculos do local vehiculo = tabla_vehiculos[ i ] local vehiculo_vida = getElementHealth( vehiculo ) local conductor = getVehicleController( vehiculo ) if conductor then return end else dxDrawTextOnElement( vehiculo,"Vehiculo:"..getVehicleName( vehiculo ).."",1.5,20,255,0,0,255,1.5,"default-bold") dxDrawTextOnElement( vehiculo,"Vida:"..(math.floor(vehiculo_vida/10)).."%",1,20,255,0,0,255,1.5,"default-bold") end end end )
-
Es que dxDrawTextOnElement es una función useful, deberás añadirla encima de tu código: function dxDrawTextOnElement(TheElement,text,height,distance,R,G,B,alpha,size,font,checkBuildings,checkVehicles,checkPeds,checkDummies,seeThroughStuff,ignoreSomeObjectsForCamera,ignoredElement) local x, y, z = getElementPosition(TheElement) local x2, y2, z2 = getElementPosition(localPlayer) local distance = distance or 20 local height = height or 1 local checkBuildings = checkBuildings or true local checkVehicles = checkVehicles or false local checkPeds = checkPeds or false local checkObjects = checkObjects or true local checkDummies = checkDummies or true local seeThroughStuff = seeThroughStuff or false local ignoreSomeObjectsForCamera = ignoreSomeObjectsForCamera or false local ignoredElement = ignoredElement or nil if (isLineOfSightClear(x, y, z, x2, y2, z2, checkBuildings, checkVehicles, checkPeds , checkObjects,checkDummies,seeThroughStuff,ignoreSomeObjectsForCamera,ignoredElement)) then local sx, sy = getScreenFromWorldPosition(x, y, z+height) if(sx) and (sy) then local distanceBetweenPoints = getDistanceBetweenPoints3D(x, y, z, x2, y2, z2) if(distanceBetweenPoints < distance) then dxDrawText(text, sx+2, sy+2, sx, sy, tocolor(R or 255, G or 255, B or 255, alpha or 255), (size or 1)-(distanceBetweenPoints / distance), font or "arial", "center", "center") end end end end
-
No tiene nada que ver, si es onClientRender ejecutado directamente, lo verán todos. Si es un evento exterior o función que se ejecuta desde otro script teniendo como argumento un jugador en específico, lo verá solo él.
-
Puedes almacenar el contenido de una tabla de un script en un fichero txt, no es imposible, pero para eso, mejor usa MySQL y te ahorras dolores de cabeza.
-
Quería estar seguro de lo que hacía. Sí, se que es el índice de la tabla, puse 'k' ya que supuse que la mayoría de este foro lo entenderían como índice, vamos, , disculpas.
-
Buenas, estaba realizando un script en el cual se guardan valores en una tabla cuando realizas una serie de cosas. Me gustaría saber como se podrían eliminar ya que uso la tabla en una GUI y quiero que al tener clickeado el objeto del gui en la gridlist y darle a eliminar se elimine de la tabla. ¿Debo usar el 'k' en el table.remove? Esa es mi duda principal. Es decir, esto: local tabla_prueba = { } addCommandHandler( "meter_valor", function( player ) table.insert( tabla_prueba, { jugador = getPlayerName( player ), valor = "1" } ) table.insert( tabla_prueba, { jugador = getPlayerName( player ), valor = "2" } ) table.insert( tabla_prueba, { jugador = getPlayerName( player ), valor = "3" } ) table.insert( tabla_prueba, { jugador = getPlayerName( player ), valor = "4" } ) end ) addCommandHandler( "remover_valor", function( player, cmd, valor ) local valor = tonumber( valor ) if valor then local success = table.remove( tabla_prueba, valor ) if success then outputChatBox( "Borrado 'k': "..valor ) else outputChatBox( "Ese 'k' no existe en la tabla." ) end end end ) No sé si me expresé bien. Mi duda es el uso de la función. Para remover un valor de la tabla se usa su 'k', cierto? Ya que nunca usé la función. Gracias de antemano.
-
getAccounts devuelve una tabla con todas las cuentas en el servidor. local cuentas = { } function obtenerCuentas( ) local allAccts = getAccounts( ) cuentas = { } -- Limpiamos la tabla por si hay una cuenta nueva o algo. for i=1, #allAccts do local cuenta = allAccts[ i ] table.insert( cuentas, cuenta ) end end Esto lo que hace es obtener las cuentas de todo el servidor e introducirlas en una tabla. Lo que podrías hacer a continuación es loopear esa tabla nuevamente y sacarle el accountData, enviandolo al cliente y de ahí comparando.
-
Ah pero si es accountData es mas sencillo...
-
Debes usar las funciones db.
-
Justo por eso es por lo que se recomienda cifrar los códigos.
-
Prueba Ox + 1 y 0y - 1 (?
-
Coloca en vez de Oy, -Oy, que hace referencia a la altura. Si va actualmente de abajo para arriba, supongo que convertiéndolo en negativo, tendría que hacer lo que tú quieres.
-
Que tu entiendas tu código no significa que los demás seamos adivinos, no entiendo nada.
-
El código de @Dannys deberia funcionarte correctamente.
-
Es para enviar false en caso de que no se haya usado correctamente la función, pero claro, eso es gusto de cada uno.
