Jump to content

Arsilex

Members
  • Posts

    1,410
  • Joined

  • Last visited

Everything posted by Arsilex

  1. Arsilex

    loadBrowserURL

    Que yo sepa no es posible visualizar un stream en mta por ahora
  2. local ms = { [1] = {"Mierda"}, [2] = {"Puto"}, } addEventHandler("onPlayerChat", root, function(msg) local newString = "" --Partimos el texto en varios partes for word in string.gmatch(msg, "[%a]+[%A]+") do --Revisamos si es una palabra malsonante for i = 1, #ms do if ( word:lower() == ms[i][1]:lower() ) then --Si lo es remplamazos dicha palabra con una "Bonita" newString = newString .. " "..word:gsub(ms[i][1]:lower(), "bonito") else --Si no lo es simplemente la añadimos la nuevo output newString = newString .. " "..word end end end outputChatBox(newString) end) No he podido comprobar su funcionalidad y puede que tenga fallos, pero esta es la idea principal.
  3. Arsilex

    strings

    local texts = {"asd") addEventHandler("onPlayerChat", root, function(msg, type) for _, text in pairs(texts) do if string.find(msg:lower(), text:lower()) then if type == 0 then cancelEvent() outputChatBox("Expulsado!") return end end end end) Deberia de funcionar
  4. local distance = 2.5 function onPlayerPitchATent(itemName) setElementData(source, itemName, getElementData(source, itemName) - 1) setPedAnimation(source, "BOMBER", "BOM_Plant", -1,false,false,false,false) local source = source setTimer(function() local x, y, z = getElementPosition(source) local xr, yr, zr = getElementRotation(source) px, py, pz = getElementPosition(source) prot = getPedRotation(source) local offsetRot = math.rad(prot + 90) local vx = px + distance * math.cos(offsetRot) local vy = py + distance * math.sin(offsetRot) local vz = pz + 2 local vrot = prot + 180 tent = createObject(3243, vx, vy, z - 1, 0, 0, vrot) setObjectScale(tent, 1.3) tentCol = createColSphere(x, y, z, 4) attachElements(tentCol, tent, 0, 0, 0) setElementData(tentCol, "parent", tent) setElementData(tent, "parent", tentCol) setElementData(tentCol, "tent", true) setElementData(tentCol, "vehicle", true) setElementData(tentCol, "MAX_Slots", 100) triggerClientEvent(source, "refreshInventoryManual", source) end, 1500, 1) end
  5. Has cambiado VIP por el nombre exacto del clan al cual quieres entrar que se supone que lo tienes creado?
  6. local teamName = "VIP" addCommandHandler("vip", function(player) local team = getTeamFromName ( teamName ) if team then setPlayerTeam(player, team) giveWeapon(player, 31, 200) end end)
  7. Si no recuerdo mal el setAccountData no almacena valores que pesen mas de 128 bytes aunque no me hagas mucho caso, esto pasaba anteriormente no se si sigue aun o ya han quitado el limite aun así no puedes guardar array tienes que pasarlo a JSON: function loginOut( _, acc ) local x, y, z = getElementPosition( source ) if (acc) and (not isGuestAccount( acc )) then setAccountData( acc, "pos", toJSON({ x = x, y = y, z = z }) ) outputChatBox( "Posición #00ff00GUARDADA", source, 255, 255, 255 ) end showLogin( source ) end addEventHandler( "onPlayerLogout", getRootElement(), loginOut ) local data = fromJSON(getAccountData( cuenta, "pos" )) if data then local x, y, z = data.x, data.y, data.z end
  8. Eh estado probando esta modificación hace unas semanas y por ahora con lo poco que tienen va bastante bien.. aunque como siempre faltan algunas funciones que se echan de menos como puede ser buen control de los textos, por ejemplo un texto es muy difícil ponerlo centrado, he estado haciendo una pequeña librería dxGUI por así decirlo y la verdad sin buen control de los dxText es algo difícil, pero aun así usando CEF se puede hacer aunque el CEF que usan ellos tiene el mismo problema que mta hace unos meses cuando estaba limitado a 30 FPS, en la parte del servidor puedo decir que parece estar bien montado, no podia no haberme fijado que tiene como un log de DDoS lo cual no acabo de entender del todo como lo hicieron funcionar y como de eficiente es (Me refiero si de verdad detecta DDoS o DoS real o solo alta transferencia de paquetes) por lo demás esta bastante ya que te dejan llamar algunas funciones nativas de gta las cuales vienen bastante bien en algunos casos
  9. Exactamente por eso que te dije anteriormente estoy partiendo del segundo pixel porque la linea tiene que pasar justo por el medio de del cuadrado si te fijas bien los cuadrados no tienen ese offset por asi decirlo de 2 pixeles lo cual les hace empezar en 0 + width/#array y para que la linea pase bien de un punto a otro punto sin que se vea mal empiezo cada punto 2 pixeles mas a la derecha asi haciendo el offset entre el start del cuadrado y la posición donde se encuentra. Así haciendo que la linea empiece justo en la mitad.
  10. Principalmente te agradezco tu respuesta pero..realmente no hace falta ponerlo en 0 porque 2 es justo lo que se necesita en ese caso puedes probarlo. Se hizo así principalmente para que la linea pase justo por el medio del rectangulo
  11. Buenos días, ayer estaba aburrido por la noche así que decidí hacer un pequeño stream en mi canal creando un sistema bastante simple de gráficos en mta, Voy a dejar el video y el codigo en si por si les es de utilidad en el vídeo pueden ver todos los errores que eh tenido y como he ido resolviéndolos supongo que para algunos puede ser util aprender como es el proceso de debugear scripts. Video: Código: local graphics = {} local offset = 10 function getTheMaxValue(array) local cuarrentValue = 0 for i = 1, #array do local data = array[i] if data > cuarrentValue then cuarrentValue = data end end return cuarrentValue end function calculateYByMaxValue(value, maxValue) if value and maxValue then local percentaje = value * 100 / maxValue return percentaje end return false end function renderGraphics() dxDrawText(inspect ( graphics ), 10, 200, 200, 700) for i = 1, #graphics do local data = graphics[i] dxDrawRectangle(data.x, data.y, data.w, data.h, tocolor(255, 255, 255)) local x, y, w, h = data.x + 10, data.y + 10, data.w - 20, data.h - 20 local distance = math.floor(w/#data.data) for i = 1, #data.data do local posY = calculateYByMaxValue(data.data[i], data.maxValue) / 100 * h - 10 dxDrawRectangle(x + distance * i - 5, (y + h) - posY - offset, 5, 5, tocolor(150, 150, 150)) local posY2 = calculateYByMaxValue(data.data[i - 1] or 2, data.maxValue) / 100 * h - 10 dxDrawLine(x + distance * (i - 1) - 2, (y + h) - posY2 + 2 - offset, x + distance * i - 2, (y + h) - posY + 2 - offset, tocolor(150, 150, 150), 2 ) dxDrawText(data.data[i], x + distance * i - 5 - 50, y + h - 8, 100 + (x + distance * i - 5 - 50), y + h + 8, tocolor(150, 150, 150), 1, "default-bold", "center", "center") end end end function createGraphic(x, y, w, h, values) if x and y and w and h then local array = {} table.sort(values, function(a,b) return a<b end) array.x = x array.y = y array.w = w array.h = h array.data = values array.maxValue = getTheMaxValue(values) table.insert(graphics, array) if #graphics == 1 then outputDebugString("[Graphics] Activando renderizado.") addEventHandler("onClientRender", root, renderGraphics) end outputDebugString("[Graphics] Nuevo grafico creando.") else outputDebugString("[Graphics] Faltan argumentos") end end createGraphic(500, 200, 500, 500, {100, 101, 200, 210, 500, 1000, 201, 250, 305, 350, 460}) Si tenéis alguna sugerencia en que podría hacer en mi siguiente stream si es que algún día lo hago bueno, dejarlo en los comentarios del vídeo o aquí mismo. Pueden hacer lo que quieran con el código.
  12. Mira básicamente tienes que crear una array donde vas a almacenar todos los objetos cada vez que le des a la row del object. Es decir le das al botón creas el objeto y lo metes a la array puedes dibujar la array en una gird así puedes ver los objetos que vas creando y controlarlos de esa manera Para controlar uno u otro objeto vas a tener que hacer que cada vez que crees el objeto cambias una variable por ejemplo que sea local active Creas un objeto y cambie al active y haciendo una cosa tal que así local objetos = {} local active = false function createNewObject() local obj = createObject(8858, 0, 0, 0) table.insert(objetos, obj) active = #objetos end addCommandHandler("crear", function () createNewObject() end) function renderMovements() local obj = active and objetos[active] or false if obj then local x, y, z = getElementObject(obj) if getKeyState("a") then setElementPosition(obj, x + 1, y, z) end if getKeyState("d") then setElementPosition(obj, x - 1, y, z) end if getKeyState("w") then setElementPosition(obj, x, y + 1, z) end if getKeyState("s") then setElementPosition(obj, x, y - 1, z) end end end addEventHandler("onClientRender", root, renderMovements) No estoy seguro que el código haga lo que tiene que hacer porque ni lo he testeado ni nada pero es mas o menos lo que necesitas.
  13. Este problema puede ser debido a varios factores: 1º El archivo meta.xml esta mal configurado 2º Faltan archivos que en el meta.xml esta incluidos posiblemente imagenes Para saber si alguno de estos son es el caso usa el comando refresh en la consola y enseña lo que te sale.
  14. El chaval viene de programar en C++ o C# por lo que esto es pan comido para el creo yo
  15. Bueno aporte, creo que esto le servirá a mas de uno, me incluyo entre ellos
  16. Si lo que quieres es dibujar un ped en un ámbito 2D es decir en un panel o algo por el estilo usa el shader creador por @Ren_712 https://community.multitheftauto.com/index.php?p=resources&s=details&id=11836
  17. Debes buscar la funcion donde spawnea el bot de zombies y añades un export a tu slothbot para crear un boss es así de sencillo. PS: Por el amor de dios deja de poner mayúsculas a cada palabras que escribes, gracias.
  18. https://github.com/multitheftauto/mtasa-resources/blob/master/[gameplay]/scoreboard/dxscoreboard_client.lua#L127
  19. Algo así rápido que puedes hacer sin tener que estar buscando variables y editando una por una es algo asi... Es un apaño rápido: local _dxGetFontHeight = dxGetFontHeight local size = 1.5 function dxGetFontHeight(scale, font) return _dxGetFontHeight(scale, font) * size end Insertarlo antes de la funcion function doDrawScoreboard( rtPass, onlyAnim, sX, sY ) Eso si tienes que adaptar el texto que este centrado.
  20. Nada, ya arregle el problema usando SetOcclusionsEnabled
  21. Bueno resulta que tengo un mapa y quiero remover un edificio grande y en su sitio mapear otra cosa. El problema sale cuando estas cerca de donde estaba el edificio grande que empiezan a des-renderizarse objetos del mapa basicamente por que GTA esta reconociedo como que el objeto grande sigue alli y todo lo que este detras de el no deberia de estar cargando. Hasta allí todo bastante bastante lógico. El problema empieza cuando yo activo el editor lo apago y enciendo el mapa de nuevo es decir quito el worldobject de nuevo resulta que después de eso por arte de magia todo funciona bien alguna idea?
  22. Mi pregunta es cuando... Matas a Juan Matas a Alberto Matas a Juan serian 3 o 2 kills? local checkers = {} local kills = 0 function onDead(attacker) if attacker then if checkers[source] then checkers[source] = {} if not checkers[source][attacker] then checkers[source][attacker] = true kills = kills + 1 end end end end addEventHandler("onPlayerWasted", root, onDead) Eso lo que hace es si matas a un jugador matándolo otra vez no te dará mas kills básicamente. Como siempre no lo he testeado.
  23. Como ya te dije usando setElementData(source, index, value, false) es decir apagando la syncronizacion no se usa mucha CPU
  24. local state = 0 local players = {} function drop(player) if state == 0 or state == 1 then if state == 0 then setTimer( function() if #players > 1 then state = 2 outputChatBox("El acceso al \"Drop\" ha sido cerrado durante 2 minutos.") setTimer( function() state = 0 outputChatBox("El acceso al \"Drop\" ha sido abierto nuevamente.") end ,120000, 1) else setElementHealth(players[1], 0) state = 0 players = {} end end ,10000, 1) state = 1 outputChatBox("Alguien a entrado al \"DROP\", el acceso cerrara en 10 sec", root, 255, 75, 75) end setElementPosition(player, 0, 0, 5) outputChatBox("Has sido teleportado al \"Drop\"", player, 75, 255, 75) table.insert(players, player) elseif state == 2 then outputChatBox("El acceso al drop esta sellado", player, 255, 75, 75) end end
×
×
  • Create New...