aka Blue Posted August 9, 2015 Share Posted August 9, 2015 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 ) Link to comment
El_Zorro Posted August 13, 2015 Share Posted August 13, 2015 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 Link to comment
aka Blue Posted August 13, 2015 Author Share Posted August 13, 2015 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. Link to comment
Tomas Posted August 13, 2015 Share Posted August 13, 2015 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 Link to comment
El_Zorro Posted August 13, 2015 Share Posted August 13, 2015 Toma una captura del resultado, cuando te sale el mensaje del chat del dinero que te da. Link to comment
aka Blue Posted August 13, 2015 Author Share Posted August 13, 2015 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. Link to comment
UserToDelete Posted August 13, 2015 Share Posted August 13, 2015 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 Link to comment
aka Blue Posted August 13, 2015 Author Share Posted August 13, 2015 Se me olvidó ponerlo en el post, ya me va todo perfectamente, gracias a Tomas por el código Link to comment
Sasu Posted August 13, 2015 Share Posted August 13, 2015 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 Link to comment
Tomas Posted August 13, 2015 Share Posted August 13, 2015 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ó Link to comment
aka Blue Posted August 13, 2015 Author Share Posted August 13, 2015 Voy a cambiarlo. En fin, ya puse que la paga sea diferente para cada rango, gracias Tomas. Link to comment
Sasu Posted August 14, 2015 Share Posted August 14, 2015 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ó 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. Link to comment
aka Blue Posted August 14, 2015 Author Share Posted August 14, 2015 Todo funciona perfectamente. Lo que hice fue asignar un sueldo a cada rango Link to comment
Recommended Posts