JAVI10210

Members
  • Content Count

    29
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by JAVI10210

  1. Disculpa la tardanza. Tengo pensado en este verano (probablemente este mes) elaborar una wiki dedicada al GM, cuando esté lista lo anunciaré por aquí. Mientras, no queda otra que ir buscando addCommandHandler's y funciones por todo el GM 😅 Saludos
  2. Buenas! La solución para este problema, es obtener la dimensión y el interior del jugador y compararla con la del marker. Un breve ejemplo: playerMarker = createMarker(1601, 1212, 12.434, "cylinder", 15, 10, 244, 23, 2) setElementDimension(playerMarker, 43) setElementInterior(playerMarker, 1) addEventHandler("onMarkerHit", playerMarker, function(hitElement, matchingDimension) if getElementDimension(source) == getElementDimension(hitElement) && getElementInterior(source) == getElementDimension(hitElement) then outputChatBox("Estás dentro del marker.", hitElement, 0, 255, 0) end end) Sí que es cierto que en principio, debería de valer simplemente comparando la dimensión del jugador, y no el interior (esto es hilar más fino, nada más). Así, podemos hacerlo sólo comparando la dimensión del jugador respecto del marker, a través del 'matchingDimension' que nos llega. playerMarker = createMarker(1601, 1212, 12.434, "cylinder", 15, 10, 244, 23, 2) setElementDimension(playerMarker, 43) setElementInterior(playerMarker, 1) addEventHandler("onMarkerHit", playerMarker, function(hitElement, matchingDimension) if matchingDimension == true then outputChatBox("Estás dentro del marker.", hitElement, 0, 255, 0) end end) Lo que no va a funcionar nunca, o al menos como esperamos, es esto: playerMarker = createMarker(1601, 1212, 12.434, "cylinder", 15, 10, 244, 23, 2) setElementDimension(playerMarker, 43) setElementInterior(playerMarker, 1) addEventHandler("onMarkerHit", playerMarker, function(hitElement, matchingDimension) if getElementDimension(playerMarker) == 43 && getElementInterior(playerMarker) == 1 then -- Error, comparamos los datos del marker, pero no los del jugador. outputChatBox("Estás dentro del marker.", hitElement, 0, 255, 0) end end) ¿Por qué? Porque cuando un player que esté en la dimensión 50 pase por el marker, el 'getElementDimension(playerMarker)' va a devolver 43, que es donde está creado en teoría el marker, y no el 50 que es donde está el player. Así, le dirá al player que está dentro del marker, cuando en realidad no debería de estarlo. Saludos.
  3. Buenas! Te recomendaría que intentaras hacer una función y que utilizaras guiSetVisible y guiGetVisible para poder mostrar / ocultar la ventana. En este caso, el código sigue siendo cliente debido a que actúas sobre una GUI (podría hacerse de otras formas, pero creo que es la más sencilla). Añade este código a la parte cliente que tengas, y usa /ventana para mostrar u ocultar la ventana. function toggleWindow() if guiGetVisible(window) == true then guiSetVisible(window, false) else guiSetVisible(window, true) end end addCommandHandler("ventana", toggleWindow) Como recomendación personal, para todo lo que quieras hacer necesitarás funciones. Aquí tienes el listado de todas las funciones, tanto de servidor como de cliente. La wiki es tu amigo 😄 Funciones servidor: https://wiki.multitheftauto.com/wiki/Server_Scripting_Functions Funciones cliente: https://wiki.multitheftauto.com/wiki/Client_Scripting_Functions Saludos!
  4. He estado probando y he llegado a la conclusión de que el problema está en que no se ha eliminado la base de datos de MTA-Paradise y se abre el servidor de DownTown, y al tener estructuras similares arranca pero obviamente no funciona bien. Debido a que la instalación era un poco complicada, sobretodo en Windows ya que había que aplicar numerosos fixes, he decidido lanzar la versión 1.3 solucionando todos estos problemas y mejorando las instrucciones de instalación. Aquí tienes toda la información sobre la nueva versión: https://github.com/javier-es/DownTown-RP Saludos!
  5. Buenas! El principal problema que existía, es que algunos abrían el GM con la base de datos de MTA-Paradise, por lo que arrancar 'arrancaba' pero la mitad de las cosas no funcionaban. Otro problema que existía era con MySQL en Windows, que aplicando los diversos fixes se solucionaba, aunque era un poco tedioso hacerlo funcionar. He decidido lanzar la versión 1.3, con nuevas instrucciones de instalación y sin la necesidad de tener que aplicar los fixes para que funcione. El link de descarga e instrucciones sigue siendo el mismo: https://github.com/javier-es/DownTown-RP Saludos!
  6. Interesante. ¿Usas Windows o Linux? Tengo que revisar qué ocurre porque no eres la única persona que está teniendo problemas con MySQL en determinadas consultas (crear vehículos, crear interiores...) y todas se dan en sistemas Windows. Probaré en mi máquina con Windows para ver si consigo replicar el error, solucionarlo y subir actualización.
  7. Puedes contactarme por privado como has hecho, o comentar aquí el problema que tienes y miramos qué es lo que sucede. Tienes respuesta mía por privado. Saludos!
  8. Buenas a todos. Vengo a la comunidad para aportar el GM con el que abrí unas cuantas veces, y que decidí publicar para que cualquiera pueda aprender a programar y, por qué no, abrir su propio RolePlay. Está basado en MTA Paradise, pero traducido todo al español y con numerosos sistemas nuevos. Os dejo directamente el link al repositorio para poder descargarlo junto con las instrucciones de instalación y solución a problemas varios conocidos con MTA Paradise. Espero que lo disfruten tanto como lo disfruté yo. Saludos a todo MTA! Link del GM: https://github.com/javier-es/DownTown-RP
  9. Buenas! Es un fallo conocido de paradise, y es que el GM necesita realizar una consulta ALTER TABLE para modificar la estructura de las tablas que no es compatible con la versión de MySQL que incorpora XAMPP. Aunque podrías tratar de solucionar el fallo en esa GM, te recomiendo que utilices esta: https://github.com/javier-es/DownTown-RP Está basada en paradise, tiene numerosos sistemas, está en español y bugs como ese están documentados junto con su respectiva solución. Saludos.
  10. Bueno, más que paradise sí que está actualizada. Es la GM de DownTown, no sé si habrás llegado a jugar ahí. Este es el código fuente: https://github.com/javier-es/DownTown-RP El error sucede debido a que la resource mysql necesita ejecutar una sentencia ALTER TABLE que no es compatible con la version de MySQL que instala XAMPP. En el link del GM que he puesto, está solucionado y se explica en el fichero README.md cómo solucionarlo (es el que aparece nada más entrar en la página) https://github.com/javier-es/DownTown-RP Saludos!
  11. Buenas! Por un lado, ¿quieres instalar MTA o abrir un servidor de MTA en ese PC? Te lo digo porque estás intentando ejecutar el servidor, no el cliente de MTA. Por otro lado, ejecuta el programa como administrador para ver si ese puede ser el problema. Aquí tienes una versión reciente del instalador de MTA tanto servidor como cliente: https://nightly.mtasa.com/mtasa-1.5.5-full_rc-11998-20180601.exe Salu2!
  12. Hemos cambiado de foro, ahora la dirección es https://www.downtownrp.com así como de direcciones IP. TS3: ts3://ts3.downtownrp.com Servidor: mtasa://server.downtownrp.com
  13. Te recomiendo que escribas en la consola el comando openports, y nos digas si todos te aparecen abiertos. Por otra parte, la mayoría de los firewall bloquean al servidor, con lo que deberías de revisar que no tienes ninguno bloqueando los puertos. Y por último, aunque los puertos pueden variar si los cambias, son 22003 y 22126 UDP, y 22005 TCP. Si no me equivoco, si se pueden unir pero no les descarga, el puerto que tiene problemas es el 22005 TCP.
  14. Para empezar, el getLocalPlayer es exclusivamente de client, y sin embargo el evento que estas usando (onPlayerVehicleEnter) es únicamente para server, así que no puedes usar ambos en la misma función. Aquí te dejo el código hecho en server. Y por cierto, cuidado con la función getPedOccupiedVehicle, pues esta no te da al jugador, sino el vehículo en el que esta el jugador. PD: Te sugiero que si dudas de si la función es server o client, ve a https://wiki.multitheftauto.com/wiki/NOMBRE_FUNCION.Ej: https://wiki.multitheftauto.com/wiki/GetLocalPlayer function tw (vehiculo) if vehiculo then local modelo = getVehicleName (vehiculo) outputChatBox("Te has subido a un vehículo, su nombre es "..modelo..".", source, 0, 255, 0) end end addEventHandler ("onPlayerVehicleEnter", getRootElement(), tw)
  15. Haré un resumen de los sistemas de script: - Sistema de cabinas telefónicas: Clickeas en ella, marcas el número de teléfono y te cobra el minuto a un dólar. - Mejorados los servicios públicos: Llamando al 112 te piden si quieres policía, médicos y bomberos. - Sistema de sed, cansancio y hambre Deberás de ir a beber y a comer si no quieres que te baje la vida del personaje. Y para el cansancio, de momento está el /dormir, aunque próximamente se eliminará y se enlazará con el sistema de muebles, para que al clickear en un banco, sofá, o cama, te de la opción de dormir ahí. - Sistema de muebles(En desarrollo) Podrás poner y personalizar tu interior a tu gusto. - Interiores mejorados: Al comprar un chalet que tiene un garaje, te da automáticamente llave del garaje. Y, al venderlo, la quita. Lo mismo pasa si por ejemplo compras un local y tiene almacén y oficina. El bug de que compras un interior, y luego al venderle no te quita la llave, se ha solucionado. Se ha implementado un sistema de alquiler automático, que permite poder estar en viviendas de alquiler por un módico precio. Se ha añadido un sistema para los policias. Pueden precintar los interiores, haciendo que no se pueda entrar en ellos. - Sistema de items Se han corregido importantes bugs de la base, añadiendo un take2 que no funciona por slot, sino por item y value. Se han añadido items, y se han dado detalles como que si te compras un paquete de cigarrillos, si no tienes mechero no puedes encenderte el cigarro. -Sistema de vehículos (vehicles) Se ha hecho una mejoría en el sistema de maleteros. Ahora, si no tienes llave no puedes abrirlo ni sacar nada, con lo cual es mejor dado que muchos trolls van robando en los maleteros. Si no tienes llave del vehículo, o si no eres de la facción a la que pertenece el vehículo, no te deja arrancarle. Se ha instalado un sistema de marchas que mejoran la conducción, y yendo al mecánico puedes elegir el modo de las marchas, si manual o automático. Se ha implementado un sistema de alquiler de vehículos, pero está en fase beta. Ahora, el concesionario donde compras los vehículos, va por bot. Todas las matrículas siguen el siguiente patrón: US0000AP, donde 0000 es el ID del vehículo. -Sistema de payday: Se ha añadido que por cada local te entrege una suma de dinero si está abierto, o te quite dinero si está precintado por la policia. Se ha añadido un impuesto de vehículo. Se ha añadido un impuesto a las viviendas. Contra mejor sea la vivienda, mayor es el impuesto. - Administración: Se han añadido comandos que obtienen la IP y el serial del jugador Se han implementado comandos que permiten comprobar las multicuentas en un segundo, sin tener que estar llendo a la base de datos. Se ha implementado un sistema WEB por http por el que los admins y developers podemos gestionar la base de datos, ftp, jugadores online y banlist. Se ha añadido un sistema de dudas. El usuario pregunta por /duda, y avisa a todos los staffs que estén de servicio. ------------------------------------------------------------------ De momento, eso es todo lo que hay y lo que se me ha venido a la mente. Iré añadiendo cosas en cuanto se vayan poniendo.
  16. Buenas a todos. A ver, quiero hacer esto: local ntest = 0000 local id = 32 local suma = id + ntest local suma = tonumber(suma) El problema es que al hacer eso, quiero que suma fuera 0032, y sin embargo, MTA me quita los 0 y me lo deja en 32.
  17. Prueba esto: local Area = createColCircle ( 1481.2875976563,-1655.6435546875, 1000 ) function Mutacion (pHitElement) local ID = getElementModel(pHitElement) local Mutta = getElementData(pHitElement,"Mutacion") or 0 if getElementType(pHitElement) == 'player' then Muta = setTimer(Mutacion,10000,0) if ID == 260 then return else setElementData(pHitElement,"Mutacion", Mutta + 10) if Mutta >= 100 then ---setElementData(localPlayer,"blood",5) setElementData(pHitElement,"bleeding",500) elseif Mutta >= 50 then setElementData(pHitElement,"bleeding",200) ---setElementData(localPlayer,"pain",true) end end end end addEventHandler('onClientColShapeHit', Area, Mutacion) addEventHandler('onClientColShapeLeave', Area, function (pHitElement) if getElementType( pHitElement ) == 'player' then if Muta then killTimer(Muta) end end end ) addEventHandler('onClientPlayerWasted', root, function () killTimer(Muta) setElementData(localPlayer,"Mutacion",0) end )
  18. Lo que yo te recomendaría es que cambiaras la contraseña del FTP, y del TCAdmin por una más segura. En http://password.es te generan passwords super seguras. En cuanto al DoS, eso lo tiene que resolver tu host, pero vamos, que un DoS te deniega el acceso a entrar al server. No accede a la FTP y te borra archivos.
  19. And now, all the servers hosted in Sane they are offline...
  20. Una solucion más sencilla sería poner cada marker separado y usar el evento onMarkerHit.
  21. I went offline, you see, computer or sanehosting is not my life. I would never block anyone from skype, if guy annoys me, i will delete him, blocking is for gays. Little notification to everybody: We are experiencing problems with TCAdmin like someones have noticed so it is pretty normal that starting and stopping can be bit slow and server status is unknown for littlewhile. Waiting support from TCA... And now, I can´t access the FTP server... Very Well Sane!
  22. Buenas a todos. Quiero hacer un /nearbyints para ver los interiores cercanos ( Paradise ) He hecho esto, pero no me funciona. ¿Me podeis ayudar? addCommandHandler ( " nearbyints " function ( player, commandName ) hasObjectPermissionTo if ( player, " command.createint ", false ) or hasObjectPermissionTo ( player, " command.deleteint ", false ) then Local x , y, z = getElementPosition ( player) Local dimension = getElementDimension ( player) Local inner = getElementInterior ( player) outputChatBox ( "Nearby Interiors " , player , 255, 255, 0 ) for key, value in pairs ( interiors ) do isElement if (key) and getElementDimension (key) == dimension and getElementInterior (key) == inside then Local getDistanceBetweenPoints3D distance = (x, y, z, getElementPosition (key) ) if distance < 20 then outputChatBox ( "Interior" .. value .. " . " player , 255, 255, 0 ) end end end end end ) PD: Solo es porque estoy aprendiendo a scriptear, así que no tengo prisa ni nada.
  23. No me refiero a esto, me refiero al /call 911 Y que avise a los policias, por ejemplo. O darme un ejemplo y ya lo monto yo.
  24. Buenas. Estoy montando mi propio servidor de rol, y necesito el phones ya hecho, que por ejemplo al llamar 911 llame a la policia. Muchas gracias, y espero respuesta.
  25. Hola, estoy montando un server con MTA Paradise, y va todo genial, pero tengo algunas dudas, y un problema con una resource, bueno, empezemos. 1. Cuando te metes al sv, esta en ingles todo eso, donde edito eso, lo de new chartacter y todo eso, es que no se donde. 2. Lo de la resource: local rbWindow, rbList, bUse, bClose, tempObject, tempObjectID, tempObjectRot = nil local tempObjectPosX, tempObjectPosY, tempObjectPosZ, tempObjectPosRot = nil local roadblockID = { "978", "981", "3578", "1228", "1282", "1422", "1424", "1425", "1459", "3091" } -- objectid local roadblockTypes = { "Bloqueo pequeño", "Bloqueo grande", "Barrera amarilla", "Pequeña barrera de aviso", "Pequeña barrera de aviso con luz", "Barrera fea pequeña", "Bloqueo de paso", "Desvio ->", "Barrera de aviso","Vehiculos ->" } -- name local roadblockRot = { "180", "0", "0", "90", "90", "0", "0", "0", "0", "0" } -- rotation needed to face to player local thePlayer = getLocalPlayer() function enableRoadblockGUI(enable) if not (rbWindow) then local width, height = 300, 400 local scrWidth, scrHeight = guiGetScreenSize() local x = scrWidth*0.8 - (width/2) local y = scrHeight*0.75 - (height/2) rbWindow = guiCreateWindow ( x, y, width, height, "Crear bloqueos", false) rbList = guiCreateGridList(0.05, 0.05, 0.9, 0.8, true, rbWindow) addEventHandler("onClientGUIDoubleClick", rbList, selectRoadblockGUI, false) local column = guiGridListAddColumn(rbList, "ID", 0.2) local column2 = guiGridListAddColumn(rbList, "Tipo", 0.6) local column3 = guiGridListAddColumn(rbList, "Rot", 0.1) for key, value in ipairs(roadblockID) do local newRow = guiGridListAddRow(rbList) guiGridListSetItemText(rbList, newRow, column, roadblockID[key], true, false) guiGridListSetItemText(rbList, newRow, column2, roadblockTypes[key], false, false) guiGridListSetItemText(rbList, newRow, column3, roadblockRot[key], false, false) end bUse = guiCreateButton(0.05, 0.85, 0.45, 0.1, "Usar", true, rbWindow) addEventHandler("onClientGUIClick", bUse, selectRoadblockGUI, false) bClose = guiCreateButton(0.5, 0.85, 0.45, 0.1, "Cerrar", true, rbWindow) addEventHandler("onClientGUIClick", bClose, cancelRoadblockGUI, false) outputChatBox("Selecciona una barrera y ponla donde tu quieras.", 0, 255, 0) outputChatBox("Pulsa alt izda para poner el objeto.", 0, 255, 0) showCursor(true) else cleanupRoadblockGUI() end end function cleanupRoadblockGUI() cleanupRoadblock() destroyElement(rbWindow) rbWindow = nil showCursor(false) end function cleanupRoadblock() if (isElement(tempObject)) then destroyElement(tempObject) tempObjectPosX, tempObjectPosY, tempObjectPosZ, tempObjectPosRot = nil tempObjectID, tempObjectRot = nil unbindKey ( "lalt", "down", convertTempToRealObject) end removeEventHandler("onClientPreRender",getRootElement(),updateRoadblockObject) end function selectRoadblockGUI(button, state) if (source==bUse) and (button=="left") or (source==rbList) and (button=="left") then local row, col = guiGridListGetSelectedItem(rbList) if (row==-1) or (col==-1) then outputChatBox("¡Por favor elige un tipo!", 255, 0, 0) else if (isElement(tempObject)) then destroyElement(tempObject) end local objectid = tonumber(guiGridListGetItemText(rbList, guiGridListGetSelectedItem(rbList), 1)) local objectrot = tonumber(guiGridListGetItemText(rbList, guiGridListGetSelectedItem(rbList), 3)) spawnTempObject(objectid, objectrot) showCursor(false) end end end function spawnTempObject(objectid, objectrot) -- create temporary object tempObjectID = objectid tempObjectRot = objectrot tempObject = createObject( objectid, 0, 0, 0, 0, 0, 0) setElementAlpha(tempObject, 150) setElementInterior ( tempObject, getElementInterior ( thePlayer ) ) setElementDimension ( tempObject, getElementDimension ( thePlayer ) ) bindKey ( "lalt", "down", convertTempToRealObject) updateRoadblockObject() addEventHandler("onClientPreRender",getRootElement(),updateRoadblockObject) end function convertTempToRealObject(key, keyState) if (isElement(tempObject)) then triggerServerEvent("roadblockCreateWorldObject", thePlayer, tempObjectID, tempObjectPosX, tempObjectPosY, tempObjectPosZ, tempObjectPosRot) cleanupRoadblock() showCursor(true) end end function updateRoadblockObject(key, keyState) if (isElement(tempObject)) then local distance = 6 local px, py, pz = getElementPosition ( thePlayer ) local rz = getPedRotation ( thePlayer ) local x = distance*math.cos((rz+90)*math.pi/180) local y = distance*math.sin((rz+90)*math.pi/180) local b2 = 15 / math.cos(math.pi/180) local nx = px + x local ny = py + y local nz = pz - 0.5 local objrot = rz + tempObjectRot if (objrot > 360) then objrot = objrot-360 end setElementRotation ( tempObject, 0, 0, objrot ) moveObject ( tempObject, 10, nx, ny, nz) tempObjectPosX = nx tempObjectPosY = ny tempObjectPosZ = nz tempObjectPosRot = objrot end end function cancelRoadblockGUI(button, state) if (source==bClose) and (button=="left") then cleanupRoadblockGUI() end end addEvent( "enableRoadblockGUI", true ) addEventHandler( "enableRoadblockGUI", getRootElement(), enableRoadblockGUI ) addCommandHandler("bloqueos", enableRoadblockGUI) Todo va bien, pero cuando le doy ya al lalt para ponerlo, el srv en la consola me da el siguiente error: but event is not added serverside. Espero respuestas.