aka Blue Posted September 1, 2015 Share Posted September 1, 2015 (edited) 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 (). ¿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 September 4, 2015 by Guest Link to comment
Sasu Posted September 1, 2015 Share Posted September 1, 2015 (edited) 1- 'onClientResourceStart' es client y por lo que veo ese script es de carácter server. 2- Podrias poner el setTimer con un intervalo de un minuto. Edited September 2, 2015 by Guest Link to comment
aka Blue Posted September 1, 2015 Author Share Posted September 1, 2015 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 ) y meto un setTimer(paga, 60000, 0)? Link to comment
Tomas Posted September 2, 2015 Share Posted September 2, 2015 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 ) 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
aka Blue Posted September 4, 2015 Author Share Posted September 4, 2015 ¿Cómo podría hacer eso? Link to comment
Tomas Posted September 4, 2015 Share Posted September 4, 2015 setTimer( function () if ( getRealTime().hour == 16 and getRealTime().minute == 0 ) then pay() end end, 50000, 0 ) Link to comment
UserToDelete Posted September 4, 2015 Share Posted September 4, 2015 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
aka Blue Posted September 4, 2015 Author Share Posted September 4, 2015 Solucionado. Gracias @Tomas, tiene unos segundos de retraso pero funciona perfectamente Link to comment
Tomas Posted September 4, 2015 Share Posted September 4, 2015 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
Recommended Posts