Jump to content

Ayuda con PayDay


aka Blue

Recommended Posts

Posted

Bueno, estoy creando mi propio PayDay a partir de uno básico y bueno, tengo un problema que es que, le da el dinero del rango 1 y de su rango. Digamos que yo estoy en el rango 6, lo que pasa es que me da el dinero de ese rango y del rango 1, no lo entiendo. Posteo aquí el código.

function allPlayersPayDay() 
  local allPlayers = getElementsByType("player") 
  for index,value in ipairs(allPlayers) do 
  local charID = exports.players:getCharacterID( value ) 
  if charID == exports.players:getCharacterID( value ) then 
  local dude = value 
if exports.factions:isPlayerInFaction( value, 5 ) then 
local player = value 
local characterID = exports.players:getCharacterID( value ) 
local name = exports.players:getCharacterName(characterID) 
local result = exports.sql:query_assoc( "SELECT factionRank FROM character_to_factions WHERE characterID = " .. characterID ) 
    for key, value in ipairs( result ) do 
    local rango = value.factionRank 
                        if rango == 1 then 
                exports.players:giveMoney( player, 25 ) 
                    outputChatBox ( "Gobierno: #00FF00$25", player, 255, 193, 37, true ) 
            elseif rango == 2 then 
                exports.players:giveMoney( player, 50 ) 
                    outputChatBox ( "Gobierno: #00FF00$50", player, 255, 193, 37, true ) 
            elseif rango == 3 then 
                exports.players:giveMoney( player, 100 ) 
                    outputChatBox ( "Gobierno: #00FF00$100", player, 255, 193, 37, true ) 
            elseif rango == 4 then 
                exports.players:giveMoney( player, 150 ) 
                    outputChatBox ( "Gobierno: #00FF00$150", player, 255, 193, 37, true ) 
            elseif rango == 5 then 
                exports.players:giveMoney( player, 200 ) 
                    outputChatBox ( "Gobierno: #00FF00$200", player, 255, 193, 37, true ) 
            elseif rango == 6 then 
                exports.players:giveMoney( player, 250 ) 
                    outputChatBox ( "Gobierno: #00FF00$250", player, 255, 193, 37, true ) 
else end 
end  
end 
end 
end 
end 
function onResourceStart(thisResource) 
  setTimer ( allPlayersPayDay, 15000, 0 ) 
end 
addEventHandler ( "onResourceStart", getResourceRootElement(getThisResource()), onResourceStart ) 

Posted

Primero, explica mejor el problema, es decir, que rango tienes y cuanto dinero te da, pruebalo con todos los rangos.

Segundo, antes de decir cual es la solución, quiero saber para qué sirve esta parte del script?

for key, value in ipairs( result ) do 

Posted

Es del propio payday pero teniendo en cuenta el result, lee el rango que tiene el jugador desde la base de datos.

A ver, el problema es que, tengas el rango que tengas, te da el dinero de tu rango + el del rango 1, no lo entiendo.

Posted

Intenta con esto..

  
setTimer( 
    function ( ) 
        for index, value in ipairs ( getElementsByType("player") ) do 
            if ( exports.players:getCharacterID(value) ) then 
                if ( exports.factions:isPlayerInFaction(value, 5) ) then 
                    if ( getFactionRank(value) ) then 
                        local money = getFactionRank(value) * 50  
                        exports.players:giveMoney(value, money) 
                        outputChatBox ( "Gobierno: #00FF00$"..money, value, 255, 193, 37, true) 
                    end 
                end 
            end 
        end 
    end, 150000, 0) 
     
function getFactionRank(player) 
    db_call = exports.sql:query_assoc( "SELECT factionRank FROM character_to_factions WHERE characterID = " .. exports.players:getCharacterID(player) ) 
    if ( db_call and #db_call > 1 ) then 
        for _, data in ipairs ( db_call ) do 
            if ( data.factionRank ) then 
                return data.factionRank 
            else 
                outputDebugString("Something went wrong, failing on looping "..getPlayerName(player).."'s data.") 
            end 
        end 
    else 
        outputDebugString("Something went wrong, failing on getting "..getPlayerName(player).."'s faction rank.") 
    end 
end 
  
  

Posted

Es que no sale ningún error. Lo que sale es, por ejemplo, yo estoy en el rango 6 y me dice:

Gobierno: 250 (la paga del rango 6)

Gobierno: 25 (la paga del rango 1)

Y me da ambas pagas.

PD: Tomas, ¿no se podría hacer que yo asignara los sueldos? Osea, como en mi script.

Posted
Es que no sale ningún error. Lo que sale es, por ejemplo, yo estoy en el rango 6 y me dice:

Gobierno: 250 (la paga del rango 6)

Gobierno: 25 (la paga del rango 1)

Y me da ambas pagas.

PD: Tomas, ¿no se podría hacer que yo asignara los sueldos? Osea, como en mi script.

local dineroRank = {15,75,100,110,150,164,180,200,235,250,260,275} 
setTimer( 
    function ( ) 
    dataPlayer = {} 
        for index, value in ipairs ( getElementsByType("player") ) do 
            if ( exports.players:getCharacterID(value) ) then 
                if ( exports.factions:isPlayerInFaction(value, 5) ) then 
                    if ( getFactionRank(value) ) and dataPlayer[value] == nil then 
                        --local money = getFactionRank(value) * 50 
                        local money = dineroRank[getFactionRank(value)] 
                        exports.players:giveMoney(value, money) 
                        outputChatBox ( "Gobierno: #00FF00$"..money, value, 255, 193, 37, true) 
                        dataPlayer[value] = true 
                    end 
                end 
            end 
        end 
    end 
, 150000, 0 
) 

Ahora solo te va a dar un solo output, aver cual xD

Posted
Intenta con esto..
  
setTimer( 
    function ( ) 
        for index, value in ipairs ( getElementsByType("player") ) do 
            if ( exports.players:getCharacterID(value) ) then 
                if ( exports.factions:isPlayerInFaction(value, 5) ) then 
                    if ( getFactionRank(value) ) then 
                        local money = getFactionRank(value) * 50  
                        exports.players:giveMoney(value, money) 
                        outputChatBox ( "Gobierno: #00FF00$"..money, value, 255, 193, 37, true) 
                    end 
                end 
            end 
        end 
    end, 150000, 0) 
     
function getFactionRank(player) 
    db_call = exports.sql:query_assoc( "SELECT factionRank FROM character_to_factions WHERE characterID = " .. exports.players:getCharacterID(player) ) 
    if ( db_call and #db_call > 1 ) then 
        for _, data in ipairs ( db_call ) do 
            if ( data.factionRank ) then 
                return data.factionRank 
            else 
                outputDebugString("Something went wrong, failing on looping "..getPlayerName(player).."'s data.") 
            end 
        end 
    else 
        outputDebugString("Something went wrong, failing on getting "..getPlayerName(player).."'s faction rank.") 
    end 
end 
  
  

¿Por qué mayor a uno? ¿Es decir que tienes mas de un fila con el mismo id?

if ( db_call and #db_call > 1 ) then 

Posted
Intenta con esto..
  
setTimer( 
    function ( ) 
        for index, value in ipairs ( getElementsByType("player") ) do 
            if ( exports.players:getCharacterID(value) ) then 
                if ( exports.factions:isPlayerInFaction(value, 5) ) then 
                    if ( getFactionRank(value) ) then 
                        local money = getFactionRank(value) * 50  
                        exports.players:giveMoney(value, money) 
                        outputChatBox ( "Gobierno: #00FF00$"..money, value, 255, 193, 37, true) 
                    end 
                end 
            end 
        end 
    end, 150000, 0) 
     
function getFactionRank(player) 
    db_call = exports.sql:query_assoc( "SELECT factionRank FROM character_to_factions WHERE characterID = " .. exports.players:getCharacterID(player) ) 
    if ( db_call and #db_call > 1 ) then 
        for _, data in ipairs ( db_call ) do 
            if ( data.factionRank ) then 
                return data.factionRank 
            else 
                outputDebugString("Something went wrong, failing on looping "..getPlayerName(player).."'s data.") 
            end 
        end 
    else 
        outputDebugString("Something went wrong, failing on getting "..getPlayerName(player).."'s faction rank.") 
    end 
end 
  
  

¿Por qué mayor a uno? ¿Es decir que tienes mas de un fila con el mismo id?

if ( db_call and #db_call > 1 ) then 

Debería ser > 0 o >= 1, se me pasó xD

Posted
Intenta con esto..
  
setTimer( 
    function ( ) 
        for index, value in ipairs ( getElementsByType("player") ) do 
            if ( exports.players:getCharacterID(value) ) then 
                if ( exports.factions:isPlayerInFaction(value, 5) ) then 
                    if ( getFactionRank(value) ) then 
                        local money = getFactionRank(value) * 50  
                        exports.players:giveMoney(value, money) 
                        outputChatBox ( "Gobierno: #00FF00$"..money, value, 255, 193, 37, true) 
                    end 
                end 
            end 
        end 
    end, 150000, 0) 
     
function getFactionRank(player) 
    db_call = exports.sql:query_assoc( "SELECT factionRank FROM character_to_factions WHERE characterID = " .. exports.players:getCharacterID(player) ) 
    if ( db_call and #db_call > 1 ) then 
        for _, data in ipairs ( db_call ) do 
            if ( data.factionRank ) then 
                return data.factionRank 
            else 
                outputDebugString("Something went wrong, failing on looping "..getPlayerName(player).."'s data.") 
            end 
        end 
    else 
        outputDebugString("Something went wrong, failing on getting "..getPlayerName(player).."'s faction rank.") 
    end 
end 
  
  

¿Por qué mayor a uno? ¿Es decir que tienes mas de un fila con el mismo id?

if ( db_call and #db_call > 1 ) then 

Debería ser > 0 o >= 1, se me pasó xD

Pues ahi esta el error de Blue Pie, pues es que loopea las dos filas, uno que tiene un rank y otro que tiene otro. A pesar de que le pongas eso Tomas, siempre va a devolver el valor de la primera fila ya que el return hace que finalice por completo la funcion y es por eso que ahora solo devuelve una vez. Pero si le funciona, supongo que no habrá problema.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...