-
Posts
1,102 -
Joined
Enargy,'s Achievements
Banger (36/54)
26
Reputation
-
if (string.len(regUsernameBox:getText()) >= 3) then confirmMailPanel:setVisible(true) registerPanel:setVisible(false) else outputChatBox ("Your username most be longer then...") end
-
Eso es en el caso de que si la variable 'sp' fuese global ahí si habria conflicto con los timers. En este caso como la variable está dentro de un bloque se asigna solo a esa parte de la memoria. Por otro lado concuerdo contigo en usar getDistanceBetweenPoints3D
-
Aprendes mejor editando scripts de otras personas siempre y cuando no digas que no son totalmente tuyos, así vas aprendiendo la estructura del código que construye el programador. Ya cuando te familiarices dicha estructura la puedes mezclar con otro tipo de scripts y sin darte cuenta ya tienes algo armado. En mi caso yo aprendí así xd. La teoría es útil pero no suficiente y no aprendes muy bien que digamos. Aprendes que si la estructura de programación, sentencias, tipos de datos, ciclos, recursividad, etc. Toma el ejemplo de las Matemáticas, tu no aprendes hacer derivadas leyendo libros sino haciendo cientos de ejercicios tomando en cuenta la teoría. Con la programación es igual, hay miles de ejercicios de programación que puedes hacer. Comienza desde lo más fácil hasta lo mas difícil.
-
function sendData(userLogin, userPassword) outputServerLog("Data sent") local userLogin = userLogin:gsub("%\n", "") local userPassword = userPassword:gsub("%\n", "") outputServerLog(userLogin) local qh = exports.sql:_Query('SELECT * FROM users WHERE playerAccount=? and playerPass=?', userLogin, userPassword) local results = qh and exports.sql:_QueryResult(qh) if type(results) == "table" and #results > 0 then outputServerLog(results[1]["playerAccount"]) outputServerLog(results[1]["playerPass"]) end end
-
You can use the split function to separate a string into several sub-strings. local sep = "_" -- This character will be your separator local var1 = split("Bobby_Bob", sep) print(var1[1]) -- Result: Bobby print(var1[2]) -- Result: Bob
-
Para crear el grupo del acl tienes que irte a la carpeta deathmatch de tu MTA y abrir el archivo acl.xml, agregas un nuevo grupo y luego las cuentas que podrán utilizar el comando. Ej: <object name="user.Enargy"></object> addCommandHandler("canspray", function(player) local aclGroup = aclGetGroup("NombreGrupo") local account = getPlayerAccount(player) if account then local accName = getAccountName(account) if isObjectInACLGroup("user." .. accName, aclGroup) then -- -- -- Funcion que abre el panel. end end end
-
Me tomé la libertad de organizar mejor tu código, no está probado pero el código se ve "bien". local elements = { } local function loadText(id, text, x, y, z, interior, dimension, saveInDB) if id and elements[id] then return false end if type(x) ~= "number" or type(y) ~= "number" or type(z) ~= "number" then return false end if saveInDB then if not handler then return false end dbExec(handler, "INSERT INTO `3dtext`(`textID`, `text`, `x`, `y`, `z`, `interior`, `dimension`) VALUES (?,?,?,?,?,?,?)", id, text, x, y, z, interior, dimension) end interior = interior or 0 dimension = dimension or 0 elements[id] = createElement("3dtext") setElementPosition(elements[id], x, y, z) setElementInterior(elements[id], interior) setElementDimension(elements[id], dimension) setElementData(elements[id], "text", tostring(text)) return elements[id] end addEventHandler("onResourceStart", resourceRoot, function() local qh = dbQuery(handler, "SELECT * FROM 3dtext ORDER BY textID ASC") local result = qh and dbPoll(qh, -1) if result then for key, data in ipairs(result) do loadText(data.textID, data.text, data.x, data.y, data.z, data.interior, data.dimension, false) end end end ) local function createxto(player, cmd, textID, ...) if textID then if ((getElementData(player, "NivelAdmin", 5) or 0) == 5) then if textID and elements[textID] then outputChatBox( "Esta ID ya existe!", player, 255, 0, 0 ) return end local text = table.concat({ ... }, " ") local x, y, z = getElementPosition(player) loadText(textID, text, x, y, z, getElementInterior(player), getElementDimension(player), true) outputChatBox("Texto creado. (ID " .. textID .. ")", player, 0, 255, 0) else outputChatBox("No tienes permiso para usar este comando!", player, 255, 255, 255) end else outputChatBox("Comando: /" .. cmd .. " [ID] [texto]", player, 255, 255, 255) end end addCommandHandler("creartextoentorno", createxto)
-
https://community.multitheftauto.com/index.php?p=resources&s=details&id=10673
-
Discord: Enargy#7907
-
I think you are looking for something like this.
-
O mapeas en una dimension normal y editas el archivo .map cambiando los valores del atributo dimension al numero que te parezca, o editas el archivo WORKING_DIMENSION del mapeditor.
-
I did not see that lol. Anyways you're welcome.
-
That's weird... the code is right. Are you typing the command after you get logged in?
-
function SetearDatas() local KD = getElementData(source, "KD") or 0 if (KD < 1) then setElementData(source, "ranking", "Bronze") --Bronce elseif (KD >= 1 and KD < 2.5) then setElementData(source, "ranking", "Silver") --Plata elseif (KD >= 2.5 and KD < 4) then setElementData(source, "ranking", "Gold") --Oro elseif (KD >= 4 and KD < 7) then setElementData(source, "ranking", "Platinum") --Platino elseif (KD >= 7 and KD < 10) then setElementData(source, "ranking", "Diamond") --Diamante elseif (KD >= 10) then setElementData(source, "ranking", "Master") --Challenger end end addEventHandler ("onPlayerLogin", getRootElement(), SetearDatas) function statsss () outputChatBox("Your rank is: ".. (getElementData (source, "ranking") or "None"), source,0,255,0) end addCommandHandler ( "statinfo", statsss )
-
Cuando iteras un elemento dx es importante el orden en que está establecido en tu código. Por ejemplo: -- La ultima funcion en iterarse va ser la que va a superponerse a la otra. addEventHandler("onClientRender", root, function() dxDrawImage(0, 0, 50, 50, "imagen.png", 0, 0, 0, tocolor(255, 0, 0, 255), false) dxDrawImage(0, 0, 50, 50, "imagen.png", 0, 0, 0, tocolor(0, 255, 0, 255), false) end ) En el caso de usar el argumento POSTGUI: -- La primera funcion en iterarse va ser la que va a superponerse a todas las demás que las siguen. addEventHandler("onClientRender", root, function() dxDrawImage(0, 0, 50, 50, "imagen.png", 0, 0, 0, tocolor(255, 0, 0, 255), true) dxDrawImage(0, 0, 50, 50, "imagen.png", 0, 0, 0, tocolor(0, 255, 0, 255), false) end ) Ahora con el caso de adaptarse DX Image a todas las resoluciones, al igual que con guiCreateStaticImage, puedes utilizar los porcentajes para que se adapten de igual manera que los static-image. -- Se busca la resolución. local sx, sy = guiGetScreenSize() -- Calcular las posiciones utilizando porcentajes. ejemplo: x=0.5, y=0.5 crea la imagen a partir de la mitad de la pantalla. dxDrawImage(sx * 0.5, sy * 0.5, sx * 0.3, sy * 0.1, "imagen.png") Una forma más accesible sería re definir la misma función dxDrawImage para que se adapte a los porcentajes sin realizar los cálculos uno y otra vez. -- Primero redefinir la función. _dxDrawImage = dxDrawImage local function dxDrawImage(x, y, w, h, ...) local sx, sy = guiGetScreenSize() return _dxDrawImage(x * sx, y * sy, w * sx, h * sy, ...) end -- Luego dibujar addEventHandler("onClientRender", root, function() dxDrawImage(0.5, 0.5, 0.05, 0.05, "imagen.png", 0, 0, 0, tocolor(0, 255, 0, 255), false) dxDrawImage(0.3, 0.5, 0.05, 0.05, "imagen.png", 0, 0, 0, tocolor(255, 255, 0, 255), false) -- Ya como vez no haces el calculo una y otra vez ya que está realizandolo directamente cuando llamas a la función. end ) Puedes utilizar las posiciones del static-image como guía para usarlos en dx-image.