Jump to content

Tomas

Members
  • Posts

    2,530
  • Joined

  • Last visited

Everything posted by Tomas

  1. Probably it has some security check which is preventing you from starting the resource and trying to shutdown the server, if you have the source post it so we can help you removing it.
  2. La segunda va dentro de los tag <script></script> o dentro de algun archivo anidado como script.
  3. Con Javascript puedes llamar a funciones de MTA utilizando OOP, por ejemplo: <input type="button" value="login" onclick="login()"> <script> var login = function() { mta.triggerEvent("login", document.getElementById("user").text, document.getElementById("password").text) } </script>
  4. Ahora sí , por cierto, como que está un poco hacia el costado.. no?
  5. Es que si no explicas qué es la maldita lista no entendemos for i = 1, #guiGridListGetRowCount(grid) do local player = getPlayerFromName(guiGridListGetItemText(grid, i, 1)) if ( player) then setElementDimension(player, 69) end end Vas a tener que cambiar la columna en la que está el nombre de los jugadores o de lo contrario no funcionará.
  6. Tomas

    Error con SQLite

    1. Se crea la tabla vacía. 2. Él crea los objetos en el juego. 3. El recurso se para y se guarda en la tabla. 4. El recurso se vuelve a iniciar, se cargan los objetos y se limpia la tabla. (y así una y otra vez, si la tabla ya tiene cosas los objetos se reescribirían)
  7. if not tonumber(jailtime) or tonumber(jailtime) == 0 then
  8. Tomas

    Error con SQLite

    Ahora solo me da el error que dije antes (bad argument #1 to 'ipairs' (table expected, got userdata) el otro de 'no such table: position' ya no aparece, pero sigue sin funcionar. ¿En qué linea?
  9. Tomas

    Error con SQLite

    Ahora que me pongo a ver el codigo original, esta lleno de errores, intenta con esto: local connects = dbConnect ("sqlite", "file.db") dbExec(connects, "CREATE TABLE IF NOT EXISTS `position` (`table` TEXT)") cache = {} function saveP () for i,v in ipairs(getElementsByType("object", resourceRoot)) do local modelid = getElementModel(v) local x,y,z = getElementPosition (v) local rx,ry,rz = getElementPosition (v) cache[i] = {modelid, x, y, z, rx, ry, rz} end dbExec(connects, "INSERT INTO `position` (`table`) VALUES(?)", toJSON(cache)) end addEventHandler ("onResourceStop", resourceRoot, saveP) function loadP () dbQuery(function(qh) local result = dbPoll(qh, 0) for _, v in ipairs(qh) do t = fromJSON(v[1]) end for _,vv in ipairs(t) do model, x, y, z, rx, ry, rz = unpack(vv) createObject(model, x, y, z, rx, ry, rz) end end, db, "SELECT * FROM `position`") dbExec(db, "DROP TABLE IF EXISTS `position`") end addEventHandler ("onResourceStart", resourceRoot, loadP)
  10. Tomas

    Error con SQLite

    Esto debería funcionar: local connects = dbConnect ("sqlite", "file.db") dbExec(connects, "CREATE TABLE IF NOT EXISTS `position` (`table` TEXT)") cache = {} function saveP () for i,vp in ipairs(getElementsByType("object"), resourceRoot) do local modelid = getElementModel(vp) local x,y,z = getElementPosition (source) local rx,ry,rz = getElementPosition (source) cache[i] = {modelid, x, y, z, rx, ry, rz} end dbExec(connects, "INSERT INTO `position` (`table`) VALUES(?)", toJSON(cache)) end addEventHandler ("onResourceStop", getRootElement(), saveP) function loadP () dbQuery(function(qh) local result = dbPoll(qh, 0) for _, v in ipairs(qh) do for _,vv in ipairs(fromJSON(v)) do model, x, y, z, rx, ry, rz = unpack(vv) createObject(model, x, y, z, rx, ry, rz) end end end end, db, "SELECT * FROM `position`") dbExec(connects, "DROP TABLE IF EXISTS `position`") end addEventHandler ("onResourceStart", getRootElement(), loadP)
  11. Eso es lo que estoy intentando hacer. ¿Debo hacer un loop con getResources y getResourceScripts, ¿cierto? Gracias @El_Zorro No es necesario utilizar MTA, con un script BAT o SH se puede hacer mas simple sin sobrecargar MTA.
  12. Es mejor tener un script que compile cualquier archivo .lua a .luac :v
  13. Mmm aun no sale el output cuando le doy click, con isCursorInside si me salen los output pero me salen muchas veces . Estas son las funciones que estoy usando: Y así como lo estoy haciendo: function h() boton = dxDrawButton("#ffffffhola",300,300,300,300,tocolor(0,0,0,255),"default",2) if boton.isClicked() then outputChatBox("sirve",255,255,255) end end addEventHandler("onClientRender", root, h) No uses onClientRender, usa onClientKey y esa función que mencionaste: isMouseInside
  14. Pues lo mismo, aritmética
  15. Eso es un poco más complicado, pero onClientClick y bastante aritmética, en un rato si tengo tiempo pruebo hacerlo
  16. startX, startY, width, height, iPR = 150, 150, 75, 75, 3 El tres es la cantidad de rectángulos por celda, lo otro son las posiciones que tienes que adaptar. Si, gracias, ya lo hice jaja. ¿Cómo podría juntarlos un poco más? Ya que cuando hago el cálculo para todas las resoluciones queda un espacio bastante grande entre ellos x = (startX * index)*0.65; y = startY * row Ve jugando con el 65.
  17. startX, startY, width, height, iPR = 150, 150, 75, 75, 3 El tres es la cantidad de rectángulos por celda, lo otro son las posiciones que tienes que adaptar.
  18. maletero = {1, 2, 3, 4, 5, 6} startX, startY, width, height, iPR = 150, 150, 75, 75, 3 addEventHandler('onClientRender', root, function () local row, index = 1, 1 for i = 1, #maletero do x = startX * index; y = startY * row if ( i%iPR == 0 ) then row = row + 1 index = 1 else index = index + 1 end dxDrawRectangle(x, y, width, height) end end )
  19. Pues a mi me funciona bien http://prntscr.com/c9ln7b
  20. El código que te dejé arriba hace eso.
  21. for i=1, slots_disponibles do if contenido_caja[ caja ][ i ] == nil then contenido_caja[ caja ][ i ] = { arma = arma, ammo = ammo } takeWeapon( player, arma ) outputChatBox( "Has guardado un arma en la caja", player, 0, 255, 0 ) break end outputChatBox( "Todos los slots están ocupados", player, 255, 0, 0 ) end
  22. addEventHandler("bomba", function (player, _, time) if ( not time or not tonumber(time) ) then return end time = tonumber(time) setTimer(outputChatBox, time, 1, "La bomba ha explotado gg") end end ) Gracias Tomas. Por cierto... Estas drogado ? addEventHandler("bomba", . . . Necesitaba era ayuda para lo del /comando [tiempo], pensé que iba a ser más complicado. (también pensé en hacerlo algo parecido a lo que me dio Tomas, pero creí que tenia que usar setTimer en algunas partes pero no, solo había que poner 'time'). Edit: Una pregunta, como puedo decir que diga en el outputChatBox segundos en vez de milisegundos? Tengo esto: function plantarBomba(_,time) local playerX,playerY,playerZ = getElementPosition(localPlayer) if getElementData(localPlayer, "Bombas") > 0 then if (not tonumber(time) or not tonumber(time)) then outputChatBox("SYNTAX: /bomba [milisigundos] e.j: /bomba 3000 = 3 segundos." ) return end time = tonumber(math.floor(time) ) obj = createObject(1945,playerX,playerY,playerZ - 1) setTimer(outputChatBox,time,1,"Ha explotado la bomba que has plantado hace unos " ..time.. " segundos.") setTimer(createExplosion, time,1, playerX,playerY,playerZ,10) setTimer(destroyElement, time,1,obj) setElementData(localPlayer, "Bombas", getElementData(localPlayer, "Bombas" ) -1 ) else outputChatBox("#ff0000No puedes plantar bombas, ve a compra más bombas. #ffffff[escribe #D50000/items #ffffff para ir a comprar]",255,255,255,true) end end addCommandHandler("bomba",plantarBomba) Donde dice ''Ha explotado la bomba que has plantado hace unos '' ..time..''segundos.'' me lo dice en milisegundos, ya intente dividiendo el time entre /60 (si lo divido entre /60 me explotan de una vez), /1000 (si lo divido entre /1000 me da error en setTimer [interval is below 50] y también intente con math.floor pero igual me lo cuenta en milisegundos en el outputChatbox. setTimer(outputChatBox,time,1,"Ha explotado la bomba que has plantado hace unos " ..time/1000.. " segundos.")
×
×
  • Create New...