Jump to content

Tomas

Members
  • Posts

    2,530
  • Joined

  • Last visited

Everything posted by Tomas

  1. Pues, quizás sólo obteniendo las cuentas activas? Cuando el servidor inicia, todas las cuentas que se han conectado el último mes se guardan en una tabla, luego en vez de getAccounts puedes usar esa tabla, el lagaso sólo será al principio.
  2. Vas a tener que editarlo y adaptarlo a tu servidor, lo hice hace bastante tiempo, no recuerdo si funciona al cien por ciento. topKills = {} topHeadshots = {} topDamage = {} addEventHandler( "onResourceStart", resourceRoot, function() col = createColCuboid( 865.371, 499.701, -100, 2200, 2600, 300) addEventHandler( "onColShapeHit", col, dmEnter) addEventHandler( "onColShapeLeave", col, dmLeave) end ) function dmEnter( hitElement, dim) if isElement( hitElement) and dim then if getElementType ( hitElement ) == "player" then if not exports.GTIgangTerritories:isGangster ( hitElement ) and not exports.GTIgangTerritories:isSWAT( hitElement ) then return end if not topKills [ getAccountName ( getPlayerAccount ( hitElement ) ) ] then topKills[ getAccountName( getPlayerAccount ( hitElement ) ) ] = 0 topHeadshots[ getAccountName( getPlayerAccount ( hitElement ) ) ] = 0 topDamage[ getAccountName( getPlayerAccount ( hitElement ) ) ] = 0 end addTops ( hitElement ) end end end function dmLeave ( hitElement, dim) if isElement ( hitElement ) and dim then if getElementType ( hitElement ) == "player" then exports.GTIhud:drawNote("GTIdeathmatchingDamage", "", hitElement) exports.GTIhud:drawNote("GTIdeathmatchingKill", "", hitElement) exports.GTIhud:drawNote("GTIdeathmatchingHeadshot", "", hitElement) end end end function addTops ( player ) local max_kills, key_kills = -math.huge for k, v in pairs(topKills) do if v > max_kills then max_kills, key_kills = v, k end end local max_headshots, key_headshots = -math.huge for k, v in pairs(topHeadshots) do if v > max_headshots then max_headshots, key_headshots = v, k end end local max_damage, key_damage = -math.huge for k, v in pairs(topDamage) do if v > max_damage then max_damage, key_damage = v, k end end r, g, b = getPlayerNametagColor(player) if not key_damage then key_damage = "Unknown" else key_damage = getPlayerName ( getAccountPlayer ( getAccount ( key_damage ) ) ) or exports.GTIaccounts:GAD( getAccount(key_damage), "lastname") or "Unknown" end if not max_damage then max_damage = 0 end if not key_headshots then key_headshots = "Unknown" else key_headshots = getPlayerName ( getAccountPlayer ( getAccount ( key_headshots ) ) ) or exports.GTIaccounts:GAD( getAccount(key_headshots), "lastname") or "Unknown" end if not max_headshots then max_headshots = 0 end if not key_kills then key_kills = "Unknown" else key_kills = getPlayerName ( getAccountPlayer ( getAccount ( key_kills ) ) ) or exports.GTIaccounts:GAD( getAccount(key_kills), "lastname") or "Unknown" end if not max_kills then max_kills = 0 end if not exports.GTIgangTerritories:isGangster ( player ) and not exports.GTIgangTerritories:isSWAT( player ) then return end -- exports.GTIhud:drawNote("GTIdeathmatchingDamage", "Top Damage: " .. key_damage.. " (" .. max_damage .. " HP )", player, r, g, b, math.huge) exports.GTIhud:drawNote("GTIdeathmatchingHeadshot", "Top HS: " .. key_headshots .. " ( " .. max_headshots .. " headshots )", player, 0, 255, 0, math.huge) exports.GTIhud:drawNote("GTIdeathmatchingKill", "Top Kills: " .. key_kills .. " ( " .. max_kills .. " kills )", player, 0, 255, 0, math.huge) end function updateTops ( ) for index, value in ipairs ( getElementsByType ( "player" ) ) do if isPlayerInDMArea ( value ) then addTops ( value ) end end end addEventHandler( "onPlayerWasted", root, function ( _, attacker, _, bodypart ) if isPlayerInDMArea ( source ) and isPlayerInDMArea ( attacker ) then topKills[ getAccountName( getPlayerAccount ( attacker ) ) ] = topKills[ getAccountName( getPlayerAccount ( attacker ) ) ] + 1 updateTops ( ) if ( bodypart == 9 ) then topHeadshots[ getAccountName( getPlayerAccount ( attacker ) ) ] = topHeadshots[ getAccountName( getPlayerAccount ( attacker ) ) ] + 1 end end end ) function isPlayerInDMArea( element) if not isElement ( element ) then return false end return isElementWithinColShape ( element, col ) end addEventHandler("onResourceStart", resourceRoot, function ( ) for i,v in ipairs ( getElementsByType ("player") ) do if isPlayerInDMArea ( v ) then topKills[ getAccountName( getPlayerAccount ( v ) ) ] = 0 topHeadshots[ getAccountName( getPlayerAccount ( v ) ) ] = 0 topDamage[ getAccountName( getPlayerAccount ( v ) ) ] = 0 updateTops () end end updateTops () end ) function onResign ( ) exports.GTIhud:drawNote("GTIdeathmatchingDamage", "", source) exports.GTIhud:drawNote("GTIdeathmatchingKill", "", source) exports.GTIhud:drawNote("GTIdeathmatchingHeadshot", "", source) end addEvent ("onPlayerQuitJob", true ) addEventHandler ("onPlayerQuitJob", root, onResign )
  3. Espero y eso sea, tengo 2 dias aprox usandolo asi y ya no he tenido ese problema, ayer jugue aprox 10h, en mi servidor y ni una vez me paso. Yo utilizo ese fix de Arran y nunca se me despegó nada, aunque en tu servidor deben estar todo el día con algo pegado, en el mío es sólo en ciertos jobs.
  4. Googlea alpha.png, descárgalo y utiliza los argumentos de color de la imagen
  5. Pero eso está en un loop, al returnar end pasa a la siguiente key, no es un break.
  6. Pero al menos con esto se comparten conocimientos y saber como se hicieron tal y tal cosa.. No estoy cuestionando eso, simplemente digo que hasta ahora ningún proyecto de código abierto ha triunfado.
  7. A pesar de que el código abierto no ha triunfado en MTA (y dudo que lo haga...) les deseo la mayor de las suertes
  8. No, it uses the clip/wordBreak arguments so color-coded texts aren't possible. You could add it by spliting the string into different draws.
  9. guiGridListSetItemText(armagrid, wea, ammo, getPedTotalAmmo ( player, getSlotFromWeapon(id)), false, false)
  10. Cliente: GUI = { ventana = {}, edit = {}, gridlist = {}, boton = {}, } local status function crearPanel () if ( not status ) then status = true GUI.ventana[1] = guiCreateWindow(199, 98, 499, 349, "Give Money", false) guiWindowSetMovable(GUI.ventana[1], false) guiWindowSetSizable(GUI.ventana[1], false) GUI.edit[1] = guiCreateEdit(176, 94, 274, 45, "", false, GUI.ventana[1]) GUI.boton[1] = guiCreateButton(176, 178, 182, 68, "Give", false, GUI.ventana[1]) guiSetProperty(GUI.boton[1], "NormalTextColour", "FF37FB02") GUI.gridlist[1] = guiCreateGridList ( 0.80, 0.10, 0.15, 0.60, true, GUI.ventana[1]) -- Agregar los jugadores for _, player in ipairs ( getElementsByType("player") ) do guiGridListSetItemText( GUI.gridlist[1], guiGridListAddRow(GUI.gridlist[1]), guiGridListAddColumn(GUI.gridlist[1], "Player", 0.85), getPlayerName(player), false, false) end addEventHandler("onClientGUIClick", GUI.boton[1], function () local row, column = guiGridListGetSelectedItem(GUI.gridlist[1]) if ( row ~= -1 and column ~= -1 ) then local player = getPlayerFromName( guiGridListGetItemText( GUI.gridlist[1], row, column ) local amount = guiGetText( GUI.edit[1] ) if ( tonumber(amount) and isElement(player) ) then triggerServerEvent("enviarDinero", player, amount) end end end, false) else status = false for keys in pairs ( GUI ) do for data in ipairs (keys) do destroyElement(data) end end end end addCommandHandler("dinero", crearPanel) Servidor: addEvent("enviarDinero", true) addEventHandler("enviarDinero", root, function ( amount ) givePlayerMoney(source, amount) end )
  11. Sí se puede. Data = {} Data.inventory = {} Data.inventory.weapons = {} Data.inventory.bullets = {} Data.inventory.items = {}
  12. Servidores grandes usan el registry.db para sqlite y también podría usar executeSQLQuery que tambien se guarda hay, Monsters tomate el tiempo de tratar de aprender Lua, Al principio es algo dificil pero despues terminas cogiendole la logica. Realmente todo lo contrario. Depende del servidor, de los desarrolladores y del orden que éste tenga. Yo soy el dueño de un 'servidor grande' y nunca usamos la base de datos de MTA, sólo para el nombre de las cuentas y cosas volátiles como elementDatas. Yo preferentemente prefiero usar bases de datos aisladas para cada proyecto, es más fácil de administrar, personalmente no recomiendo PARA NADA usar la base de datos que trae MTA por defecto.
  13. En la comunidad hay uno que se llama freeroam admin o algo así, ya está todo listo ahí
  14. Hay un error aquí outputChatBox ( "Bienvenido de nuevo "..player..". Que tenga un buen patrullaje.", player, 0, 255, 120 )
  15. https://github.com/nokizorque/GTI-sourc ... abase.slua Los queries los hará al enviar la información (guardarla), pero no al intentar obtenerla ya que estará en la tabla, es más eficiente que estás haciendo queries a cada rato.
  16. Si vas a trabajar con SQL, te recomiendo utilizar una tabla como caché y luego guardar todo, en vez de hacer queries a cada rato simplemente tomas el valor de la tabla. Si quieres ejemplos busca el repo de los recursos robados de mi servidor (GTI), ahí hay muchos ejemplos.
  17. addEventHandler("onPlayerQuit", root, function () if ( not isGuestAccount( getPlayerAccount( source ) ) ) then skin, money = getElementModel(source), getPlayerMoney(source) setAccountData(getPlayerAccount(source), "data", skin..";"..money) end end ) addEventHandler("onPlayerLogin", root, function (_, acc) data = getAccountData(acc, "data") data = split(data, ";") setElementModel(source, data[1]) givePlayerMoney(source, data[2]) end )
  18. Hay una diferencia importante de tiempo entre entrar al servidor y entre cargar los client-side, si quieres hacer el texto antes de descargar, sólo con server-side.
  19. Tomas

    fxAddDebris

    Triggea el efecto desde el servidor
  20. Invincible = {} addCommandHandler("godmode", function (player) if ( Invincible[player] ) then Invincible[player] = getElementData(player, "blood") setElementData(player, "blood", 999999) setAccountData(getPlayerAccount(player), "blood", 999999) outputChatBox("ADMIN: Godmode enabled.", player, 255, 0, 0) else setElementData(player, "blood", Invincible[player]) setAccountData(getPlayerAccount(player), "blood", Invincible[player]) Invincible[player] = nil outputChatBox("ADMIN: Godmode disabled.", player, 255, 0, 0) end end )
  21. Tomas

    [Fuego]

    Se supone que el ped se destruye al morir, debería perder el fuego por sí solo.
  22. Realmente no, he usado este 'hacky fix' desde que comencé y nunca me dio problemas.
×
×
  • Create New...