Ir para conteúdo

[Pedido] Cofre Staff


Farathor

Posts Recomendados


<?xml version="1.0" encoding="UTF-8"?>

<globalevents>

<!-- Server Events -->

<globalevent name="save" interval="900000" event="script" value="save.lua"/>

<globalevent name="init" type="startup" event="script" value="init.lua"/>

<globalevent name="globalsave" type="globalsave" event="script" value="init.lua"/>

<globalevent name="record" type="record" event="script" value="record.lua"/>

<!-- <globalevent name="info" interval="700000" script="FaceBook.lua"/> -->

<globalevent name="shop" interval="30000" script="shop.lua"/>

<globalevent name="Event Castle" interval="60000" event="script" value="castle event.lua"/>

<globalevent name="GlobalBattle" interval="60000" event="script" value="BattleGlobal.lua"/>

<globalevent name="GlobalStart" type="start" event="script" value="BattleStart.lua"/>

<globalevent name="staff_salary" time="00:00" event="script" value="StaffCofreGlob.lua"/>

 

 

<!-- Examples -->

<!-- <globalevent name="timer_example" time="21:35:11" event="script" value="my_script.lua"/> -->

</globalevents>

Link para o comentário
Compartilhar em outros sites

Você tem certeza absoluta que não aparece erro algum na distro? Talvez algo tenha passado despercebido.

A tag está instalada corretamente, bem como o evento correspondente existe no seu servidor.

Link para o comentário
Compartilhar em outros sites

Sim, vou postar uma print:

 

6t1khy.jpg

Depois de carregar o creaturescripts era pra ele carregar o globalevents, mas não vai :x

Editado por Farathor
Link para o comentário
Compartilhar em outros sites

Remova a query que está abaixo da função onStartUp()

 

E cole abaixo dessa linha:

db.query("DELETE FROM `guild_wars` WHERE `status` = 0 AND `begin` < " .. (time - 2 * 86400) .. ";")

E troque sua query por essa:

db.query("UPDATE `player_storage` SET `value` = 0 WHERE `key` = "..STAFF_VAULT.." AND `value` < 0")
Editado por Lumus
Link para o comentário
Compartilhar em outros sites

remove aquela do init e coloca essa sua nova ai abaixo da do guild war?

 

@edit se for isso, não funcionou

 

 

 

local config = {
creationTime = 7 * 86400,
checkTime = 7 * 86400,
viceCount = 4,
memberCount = 10
}


function onStartup()
local data, time, result = {}, os.time(), db.getResult("SELECT `id`, `ownerid`, `creationdata`, `checkdata` FROM `guilds` WHERE `world_id` = " .. getConfigValue('worldId') .. ";")
if(result:getID() ~= -1) then
repeat
data[result:getDataInt("id")] = {result:getDataInt("ownerid"), result:getDataInt("creationdata"), result:getDataInt("checkdata")}
until not(result:next())
result:free()
end


for id, v in ipairs(data) do
local owner, created, check = v[1], v[2], v[3]
if(created < (time - config.creationTime)) then
result = db.getResult("SELECT `id`, `level` FROM `guild_ranks` WHERE `guild_id` = " .. id .. ";")
if(result:getID() ~= -1) then
local rank, ranks = 0, {}
repeat
ranks[result:getDataInt("id")] = result:getDataInt("level")
if(result:getDataInt("level") == 1) then
rank = result:getDataInt("id")
end
until not(result:next())
result:free()


local members = {0, 0, 0, 0}
for k, v in ipairs(ranks) do
result = db.getResult("SELECT COUNT(`id`) AS `count` FROM `players` WHERE `rank_id` = " .. k .. ";")
if(result:getID() ~= -1) then
members[v] = members[v] + result:getDataInt("count")
result:free()
end


if(v == 2) then
result = db.getResult("SELECT `p`.`id` FROM `players` p LEFT JOIN `accounts` a ON `p`.`account_id` = `a`.`id` WHERE `p`.`rank_id` = " .. k .. " AND (`a`.`premdays` = 0 OR (`a`.`lastday` + (`a`.`premdays` * 86400) <= 0));")
if(result:getID() ~= -1) then
local demote = ""
repeat
demote = demote .. result:getDataInt("id") .. ","
members[2] = members[2] - 1
members[1] = members[1] + 1
until not(result:next())
result:free()


if(demote ~= "" and rank ~= 0) then
db.query("UPDATE `players` SET `rank_id` = " .. rank .. " WHERE `id` IN (" .. demote:sub(1, -2) .. ");")
end
end
end
end


for i = 1, 3 do
members[4] = members[4] + members[i]
end


if(members[2] < config.viceCount or members[4] < config.memberCount) then
if(check == 0) then
db.query("UPDATE `guilds` SET `checkdata` = " .. (time + config.checkTime) .. " WHERE `id` = " .. id .. ";")
elseif(check < time) then
local tmp = ""
for rank, _ in ipairs(ranks) do
tmp = tmp .. rank .. ","
end


db.query("UPDATE `players` SET `rank_id` = 0, `guildnick` = '', `guildjoin` = 0 WHERE `rank_id` IN (" .. tmp:sub(1, -2) .. ");")
db.query("DELETE FROM `guilds` WHERE `id` = " .. id .. ";")
end
end
end
end
end


db.query("UPDATE `players` SET `online` = 0 WHERE `world_id` = " .. getConfigValue('worldId') .. " AND `online` > 0;")
db.query("UPDATE `bans` SET `active` = 0 WHERE `expires` <= " .. time .. " AND `expires` >= 0 AND `active` = 1")
db.query("DELETE FROM `guild_wars` WHERE `status` = 0 AND `begin` < " .. (time - 2 * 86400) .. ";")
db.query("UPDATE `player_storage` SET `value` = 0 WHERE `key` = "..STAFF_VAULT.." AND `value` < 0")


if(getConfigValue("sqlType") ~= "sqlite") then
db.query("TRUNCATE TABLE `player_statements`;")
else
db.query("DELETE FROM `player_statements`;")
end
local query = db.getResult("SELECT `guild_id` FROM `castle_dono` WHERE `guild_id` > 0")
if query:getID() ~= -1 then
setGlobalStorageValue(1823999, query:getDataInt("guild_id"))
end


return true
end


function onGlobalSave()
if(getGameState() ~= GAMESTATE_CLOSING) then
return onStartup()
end


return true
end

 

 

/\ init.lua
Editado por Farathor
Link para o comentário
Compartilhar em outros sites

A mudança neste código (init.lua) passou a ser desnecessária depois da atualização do globalevent que enviei.

Sobre o servidor crashar, lamento, mas não vejo motivo algum para que isso aconteça. Talvez seja problema da sua distro.

Link para o comentário
Compartilhar em outros sites

Primeiramente, em 000-constant.lua (data/lib), coloque as seguintes variáveis:

STAFF_VAULT = 49391
STAFF_VAULT_LIMITS = 49392

Depois, em data/globalevents/scripts:

local salary = {
    --[group_id] = money,
}
 
local func = db.executeQuery or db.query
function onTime()
    if os.date("%d") == "1" then
        for group_id, money in pairs(salary) do
            local query = db.getResult("SELECT id FROM players WHERE group_id = "..group_id)
            if query:getID() ~= -1 then
                repeat
                    local verify_query = db.getResult("SELECT * FROM player_storage WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT)
                    if verify_query:getID() ~= -1 then
                        func("UPDATE player_storage SET value = value + "..money.." WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT)
                        func("UPDATE player_storage SET value = 0 WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT_LIMITS)
                        verify_query:free()
                    else
                        func("INSERT INTO player_storage VALUES ("..query:getDataInt("id")..", "..STAFF_VAULT..", "..money..")")
                        func("INSERT INTO player_storage VALUES ("..query:getDataInt("id")..", "..STAFF_VAULT_LIMITS..", 0)")
                    end
                until not query:next()
                query:free()
            end
        end
    end
    return true
end

Tag:

<globalevent name="staff_salary" time="00:00" event="script" value="nome_do_arquivo.lua"/>
data/talkactions/scripts:
function onSay(cid, words, param)
    local balance, wasted_this_month = getPlayerStorageValue(cid, STAFF_VAULT) < 0 and 0 or getPlayerStorageValue(cid, STAFF_VAULT), getPlayerStorageValue(cid, STAFF_VAULT_LIMITS) < 0 and 0 or getPlayerStorageValue(cid, STAFF_VAULT_LIMITS)
    
    if words == "/cofreLimits" then
        local popup_message = [[
            *** Informations about your personal vault ***
            
        You wasted this month: %d gold.
        At the moment, you have %d gold in your personal vault.]]
        
        doPlayerPopupFYI(cid, popup_message:format(wasted_this_month, balance))
    else
        if param == "" then
            return doPlayerSendCancel(cid, "Please, specify the player name and the money you want transfer.")
        end
        
        local info = param:explode(",")
        local player, money = getPlayerByName(info[1]), tonumber(info[2])
        if not isPlayer(player) then
            return doPlayerSendCancel(cid, "This player doesn't exist or is offline.")
        elseif not money then
            return doPlayerSendCancel(cid, "Please, write a valid number.")
        elseif money > balance then
            return doPlayerSendCancel(cid, "You can't transfer this quantity of money.")
        end
        
        local player_balance = getPlayerBalance(player)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You successfully transfered "..money.." gold from your personal vault to "..(player == cid and "yourself" or info[1])..".")
        if player ~= cid then
            doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE, "You received "..money.." gold from "..getCreatureName(cid)..". The money was sent to your bank.")
        end
        doPlayerSetBalance(player, player_balance + money)
        setPlayerStorageValue(cid, STAFF_VAULT, balance - money)
        setPlayerStorageValue(cid, STAFF_VAULT_LIMITS, wasted_this_month + money)
    end
    return true
end
Tag:
<talkaction words="/cofreLimits;/cofreTransfer" access="4" event="script" value="nome_do_arquivo.lua"/>

 

Aqui funcionou, so queria saber se na hora de adicionar o valor do dinheiro e os groups estão certos, pois quando loga fala que n tenho o dinheiro no cofre pessoal..

 

Deixei assiimm:::

 

local salary = {

--[4] = 150000000,
[5] = 200000000,
[6] = 250000000,
}
local func = db.executeQuery or db.query
function onTime()
if os.date("%d") == "1" then
for group_id, money in pairs(salary) do
local query = db.getResult("SELECT id FROM players WHERE group_id = "..group_id)
if query:getID() ~= -1 then
repeat
local verify_query = db.getResult("SELECT * FROM player_storage WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT)
if verify_query:getID() ~= -1 then
func("UPDATE player_storage SET value = value + "..money.." WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT)
func("UPDATE player_storage SET value = 0 WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT_LIMITS)
verify_query:free()
else
func("INSERT INTO player_storage VALUES ("..query:getDataInt("id")..", "..STAFF_VAULT..", "..money..")")
func("INSERT INTO player_storage VALUES ("..query:getDataInt("id")..", "..STAFF_VAULT_LIMITS..", 0)")
end
until not query:next()
query:free()
end
end
end
return true
end
Link para o comentário
Compartilhar em outros sites

gostaria de saber, como eu faço para testar se está adicionando o dinheiro sem ter que esperar até o dia 1?


teria como fazer mais uma alteração no script?

 

Seus limites no cofre são:
Diário: ilimitado, você já usou: 50.000.000gps.
Semanal: 200.000.000gps, você já usou: 50.000.000gps.
Mensal: 400.000.000gps, você já usou: 155.000.000gps.
Editado por Farathor
Link para o comentário
Compartilhar em outros sites

@brendoonh

No seu código, o grupo 4 não receberá o pagamento mensal devido às duas travessões colocadas. Use esta tabela:

local salary = {
    [4] = 150000000,
    [5] = 200000000,
    [6] = 250000000,
}
E, se possível, teste com mais de um personagem.
@Farathor
Simplesmente mude o "1" do globalevent pelo dia de hoje e o horário (na tag) pelo desejado. Entretanto, a database só será atualizada quando o personagem deslogar.
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

@Zipter, eu alterei a coluna como você mencionou, e mudei no globalevents como você passou pro @Farathor e não apareceu a quantia que eu editei, la no cofre pessoal da staff, mudei pra data de hoje 24,reiniciei o server, testei em todos os groups,4,5 e 6..

Continua aparecendo que tenho 0 de gold! (/cofreLimits)

Editado por brendoonh
Link para o comentário
Compartilhar em outros sites

Você relogou os personagens?

De qualquer maneira, use o seguinte código e poste o que for imprimido na distro.

 

local salary = {
    --[group_id] = money,
}
 
local func = db.executeQuery or db.query
function onTime()
    if os.date("%d") == "1" then
        print("Script sendo executado no dia.")
        for group_id, money in pairs(salary) do
            print("*** Agora, no group id "..group_id.." ***")
            local query = db.getResult("SELECT id FROM players WHERE group_id = "..group_id)
            if query:getID() ~= -1 then
                print("Player(s) encontrado(s) do respectivo group id.")
                repeat
                    local verify_query = db.getResult("SELECT * FROM player_storage WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT)
                    print("ID: "..query:getDataInt("id")..", nome: "..getPlayerNameByGUID(query:getDataInt("id")))
                    if verify_query:getID() ~= -1 then
                        func("UPDATE player_storage SET value = value + "..money.." WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT)
                        func("UPDATE player_storage SET value = 0 WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT_LIMITS)
                        verify_query:free()
                    else
                        func("INSERT INTO player_storage VALUES ("..query:getDataInt("id")..", "..STAFF_VAULT..", "..money..")")
                        func("INSERT INTO player_storage VALUES ("..query:getDataInt("id")..", "..STAFF_VAULT_LIMITS..", 0)")
                    end
                until not query:next()
                query:free()
            end
        end
    end
    return true
end
Link para o comentário
Compartilhar em outros sites

 

Você relogou os personagens?

De qualquer maneira, use o seguinte código e poste o que for imprimido na distro.

local salary = {
    --[group_id] = money,
}
 
local func = db.executeQuery or db.query
function onTime()
    if os.date("%d") == "1" then
        print("Script sendo executado no dia.")
        for group_id, money in pairs(salary) do
            print("*** Agora, no group id "..group_id.." ***")
            local query = db.getResult("SELECT id FROM players WHERE group_id = "..group_id)
            if query:getID() ~= -1 then
                print("Player(s) encontrado(s) do respectivo group id.")
                repeat
                    local verify_query = db.getResult("SELECT * FROM player_storage WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT)
                    print("ID: "..query:getDataInt("id")..", nome: "..getPlayerNameByGUID(query:getDataInt("id")))
                    if verify_query:getID() ~= -1 then
                        func("UPDATE player_storage SET value = value + "..money.." WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT)
                        func("UPDATE player_storage SET value = 0 WHERE player_id = "..query:getDataInt("id").." AND key = "..STAFF_VAULT_LIMITS)
                        verify_query:free()
                    else
                        func("INSERT INTO player_storage VALUES ("..query:getDataInt("id")..", "..STAFF_VAULT..", "..money..")")
                        func("INSERT INTO player_storage VALUES ("..query:getDataInt("id")..", "..STAFF_VAULT_LIMITS..", 0)")
                    end
                until not query:next()
                query:free()
            end
        end
    end
    return true
end

@Zipter98, não deu nada na distro. Nada mesmo, nem essa suposta mensagem:

 

"Script sendo executado no dia." (Lembrando que alterei a data para dia 25) [hoje]

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...