Jump to content

[Solucionado] PayDay


aka Blue

Recommended Posts

Bueno, hace una semana o así publiqué una duda sobre el PayDay. @Tomas pudo ayudarme y me pasó un código que funciona a la perfección pero el problema que tengo actualmente es el siguiente:

Yo quiero hacer que a la hora indicada por hour y minutes, se ejecute 1 vez el payday para que le envíe el sueldo a los jugadores, Algo como if hour==15 and minutes == 10 then, osea, como lo tengo abajo.

El código que tengo abajo no hace nada, @venadHD me dijo que añadiera un setTimer que no pare pero el problema de eso es que cuando llega la hora indicada, no para de hacer ticks y a enviar el payday. Osea, un desastre ya que se forran en 10 segundos (xD).

¿Hay alguna solución?



function paga ( ) 
local hour, minutes = getTime() 
        for index, value in ipairs ( getElementsByType("player") ) do 
    if hour == 15 and minutes == 18 then 
            if ( exports.players:getCharacterID(value) ) then 
                if ( exports.factions:isPlayerInFaction(value, 5) ) then 
                    if ( getFactionRank(value) == 1 ) then 
                        exports.players:giveMoney(value, 25) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                        outputChatBox ( "Gobierno: #00FF00$25", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 2) then 
                exports.players:giveMoney (value, 50) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Gobierno: #00FF00$50", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 3) then 
                exports.players:giveMoney (value, 100) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Gobierno: #00FF00$100", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 4) then 
                exports.players:giveMoney(value, 150) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Gobierno: #00FF00$150", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 5) then 
                exports.players:giveMoney(value, 200) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Gobierno: #00FF00$200", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 6) then 
                  exports.players:giveMoney(value, 250) 
                  outputChatBox ( "----------------------", value, 0, 255, 120, true) 
               outputChatBox ( "Gobierno: #00FF00$250", value, 255, 193, 37, true) 
               outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                    end 
                end 
            elseif ( exports.factions:isPlayerInFaction(value, 4) ) then 
                   if ( getFactionRank(value) == 1 ) then 
                        exports.players:giveMoney(value, 0) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                        outputChatBox ( "Taller: #00FF00$0", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 2) then 
                exports.players:giveMoney (value, 25) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Taller: #00FF00$25", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 3) then 
                exports.players:giveMoney (value, 50) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Taller: #00FF00$50", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 4) then 
                exports.players:giveMoney(value, 80) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Taller: #00FF00$80", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 5) then 
                exports.players:giveMoney(value, 120) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Taller: #00FF00$120", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 6) then 
                  exports.players:giveMoney(value, 150) 
                  outputChatBox ( "----------------------", value, 0, 255, 120, true) 
               outputChatBox ( "Taller: #00FF00$150", value, 255, 193, 37, true) 
               outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                    end 
                end 
        elseif ( exports.factions:isPlayerInFaction(value, 7) ) then 
                   if ( getFactionRank(value) == 1 ) then 
                        exports.players:giveMoney(value, 59) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                        outputChatBox ( "Concesionario: #00FF00$50", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 2) then 
                exports.players:giveMoney (value, 70) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Concesionario: #00FF00$70", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 3) then 
                exports.players:giveMoney (value, 90) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Concesionario: #00FF00$90", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 4) then 
                exports.players:giveMoney(value, 110) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Concesionario: #00FF00$110", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 5) then 
                exports.players:giveMoney(value, 130) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                outputChatBox ( "Concesionario: #00FF00$130", value, 255, 193, 37, true) 
                outputChatBox ( "----------------------", value, 0, 255, 120, true) 
            elseif (getFactionRank(value) == 6) then 
                  exports.players:giveMoney(value, 150) 
                  outputChatBox ( "----------------------", value, 0, 255, 120, true) 
               outputChatBox ( "Concesionario: #00FF00$150", value, 255, 193, 37, true) 
               outputChatBox ( "----------------------", value, 0, 255, 120, true) 
                    end 
                end 
        end 
end 
addEventHandler("onClientResourceStart", getRootElement(), paga) 
  
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 

Edited by Guest
Link to comment
1- 'onClientResourceStart' es clientes y por lo que veo ese script es de carácter server.

2- Podrias poner el setTimer con un intervalo de un minuto.

Osea, retiro el onClientResourceStart (estúpido por mi parte xD) y meto un setTimer(paga, 60000, 0)?

Haz un timer de un minuto para comparar las horas (usando timestamps), si es la hora que tu deseas, llama a la función de pagar

Link to comment

El payday que hice de mi mano, es algo sencillito, aparte de usar la API de dxBar. Podrias coger algunas nociones viendo el funcionamiento

local lib = {}  
lib.active = false  
lib.players = {} 
lib.min_money = 300  
lib.max_money = 2000  
lib.payday_hour = 22 
lib.payday_minute = 00  
lib.payday_delay = 3  
function lib.payday () 
local h,m = getTime() 
    if h == lib.payday_hour and m == lib.payday_minute then 
    if not lib.active then 
        for k,v in ipairs(getElementsByType('player')) do 
        lib.players[v] = math.random(lib.min_money, lib.max_money) 
        exports.barMessage:outputBarMessage(v, '#FF5000[TrosNos.Payday]#FFFFFF PayDay activo durante '..tostring(lib.payday_delay)..' minutos, escribe /payday para recibir '..tostring(lib.players[v])..'$!', 0,0,0,10000,true) 
        end 
    lib.active = true 
    setTimer( 
        function () 
            for k,v in ipairs(getElementsByType('player')) do 
                if lib.players[v] then 
                exports.barMessage:outputBarMessage(v, '#FF0000[TrosNos.PayDay] #FF5000Ya no esta disponible la paga diaria!', 0,0,0,10000,true) 
                lib.players[v] = nil 
                end 
            end 
        lib.active = false 
        end 
    ,(lib.payday_delay*60)*1000, 1) 
    end 
end end 
setTimer(lib.payday, 999, 0) 
function lib.accepting_payday (source, command) 
    if lib.active then 
        if lib.players[source] ~= nil then 
        exports.barMessage:outputBarMessage(source, "#FF5000[TrosNos.payday] #00FF00Has recibido "..tostring(lib.players[source]).."$ del PayDay", 0,0,0,10000,true) 
            for k,v in ipairs(getElementsByType('player')) do 
                if v ~= source then 
                exports.barMessage:outputBarMessage(v, "#FF5000[TrosNos.payday] #FFFFFF"..getPlayerName(source).."#FFFFFF ha recibido "..tostring(lib.players[source]).."$ del PayDay", 0,0,0,10000,true) 
                end 
            end 
        givePlayerMoney(source, lib.players[source]) 
        lib.players[source] = nil 
        else 
        exports.barMessage:outputBarMessage(source, "#FF5000[TrosNos.payday] #FF0000Ya lo has cogido",0,0,0,10000,true) 
        end 
    else 
    exports.barMessage:outputBarMessage(source,"#FF5000[TrosNos.payday] #FF0000El PayDay no esta activo", 0,0,0,10000,true) 
    end 
end 
addCommandHandler("payday", lib.accepting_payday) 

Lo que hice fue comparar cada segundo el tiempo en el servidor, y al ser el elegido, se ejecuta el payday que posteriormente aceptan por comando, gran utilidad si no quieres dar dinero a los AFKs

Link to comment
Solucionado. Gracias @Tomas, tiene unos segundos de retraso pero funciona perfectamente ;)

Exacto, son aproximadamente 10, se puede arreglar pero podría ser un poco más complejo. Si utilizas 60 segundos y el script no se inició en el segundo 0 todo se podría bugear, por eso es mejor hacerlo con un poco de delay.

Link to comment
  • Recently Browsing   0 members

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