Jump to content
  • 0

Dúvida Guild Frags System - Sistema Do Vodkart


Leoxtibia

Question

Aí galera, eu utilizo esse sistema do vodkart. É o guildfrags system, ele consiste basicamente em uma disputa entre as guilds a alcançar certa quantidade de frags. A guild vencedora ganhará acesso a um local e pontos para trocar por itens.

Mas minha dúvida é como faço para demorar mais para o sistema limpar os frags? Depois de 1 ou 2 dias os frags que estavam sendo contabilizados são limpos e volta tudo do zero, sem dar tempo para as guilds completarem a quantidade de frags desejada.

 

Aí vai o link do sistema: http://www.xtibia.com/forum/topic/184311-gfs-guild-frag-system/

 

Obs: O sistema funciona perfeitamente, só gostaria de saber como fazer os frags resetarem em um período maior de tempo.

 

Vlw aí, desde já. Quem souber, REP +

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

ai no seu caso é só fazer um globalevents que remova os frag depois de alguns dias usando storage pra checar os dias ou algo pré definido, por exemplo:

as quartas e sabados os frag são limpos

 

tal :C

Link to comment
Share on other sites

  • 0

O melhor seria com dias pré definidos, mas só uma dúvida: depois que a guild conquistar o acesso os frags serão limpos e começará tudo automaticamente certo? mesmo que esse não seja o dia definido? vlw por ta ajudando..

Link to comment
Share on other sites

  • 0

O melhor seria com dias pré definidos, mas só uma dúvida: depois que a guild conquistar o acesso os frags serão limpos e começará tudo automaticamente certo? mesmo que esse não seja o dia definido? vlw por ta ajudando..

 

Então cara, você como ninguém conhece o sistema, ele está para resetar os frags depois que uma guild conseguir o acesso, com esse pedido acho que teria que checar se já tem uma guild com acesso, imagine a guild "X" com acesso e a guild "Y" consegue determinada quantia de frag tbm, ai seriam duas guilds com acess no servidor, e acho que não é isso que vc quer né?

Link to comment
Share on other sites

  • 0

Não, não quero isso. Quero que somente uma tenha o acesso, foi por isso que perguntei se iria limpar os frags quando a guild ganhasse o acesso ^^. Então com dias pré definidos teria esse problema das duas guilds possuirem o acesso?

Link to comment
Share on other sites

  • 0

não não, tranquilo então bro, chegando em casa eu altero o sistema pra vc e te mando

sem problema, vou editar nesse msm post!

vlw

Link to comment
Share on other sites

  • 0

<?xml version="1.0" encoding="UTF-8"?>  
<mod name="Guild Frag System" version="1.0" author="Vodkart" contact="none" enabled="yes">  
<config name="guild_func"><![CDATA[

frag_guild = {
start_frags = 120155,
FragsToWinAcess = 100,
FragsPerKill = 1,
AcessTimeDays = 2,
MoreExpToGuild = false,
Exp_Rate = 1.1, -- 10%
Honor_Storage = 215548,
Honor_Point = 5
}

function getFragsByGuild(GuildName)
local check = db.getResult("SELECT `frags` FROM `guilds` WHERE `id` = " ..getGuildId(GuildName))
return check:getDataInt("frags") <= 0 and 0 or check:getDataInt("frags")
end
function addFragsByGuild(GuildName,amount)
db.executeQuery("UPDATE `guilds` SET `frags` = "..getFragsByGuild(GuildName).."+"..amount.." WHERE `guilds`.`id` = "..getGuildId(GuildName))
end
function removeFragsByGuild(GuildName,amount)
db.executeQuery("UPDATE `guilds` SET `frags` = "..getFragsByGuild(GuildName).."-"..amount.." WHERE `guilds`.`id` = "..getGuildId(GuildName))
end
function setFragsByGuild(GuildName,value)
db.executeQuery("UPDATE `guilds` SET `frags` = "..value.." WHERE `guilds`.`id` = "..getGuildId(GuildName))
end
function cleanGuildFrags()
db.executeQuery("UPDATE guilds SET frags = 0;")
end
function removeAcessGuildServer()
return db.executeQuery("UPDATE guilds SET acesstime = 0;")
end
function getAcessTime(GuildName)
                               local query = db.getResult("SELECT `acesstime` FROM `guilds` WHERE `id` = " ..getGuildId(GuildName))
                               if query:getID() ~= -1 then return query:getDataInt("acesstime") end
end
function HaveGuild(cid)
return getPlayerGuildId(cid) > 0 and TRUE or FALSE
end
function doBroadCastGuild(GuildName,type,msg)
local players = {}
for _, cid in pairs(getPlayersOnline()) do
if getPlayerGuildName(cid) == GuildName then
table.insert(players, cid) end end
for i = 1, #players do doPlayerSendTextMessage(players[i],type,msg) end
return true end
function setAcessTime(GuildName, time)
return db.executeQuery("UPDATE `guilds` SET `acesstime` = "..time.." WHERE `guilds`.`id` = "..getGuildId(GuildName))
end
function getDaysAcess(GuildName)
local acess = math.ceil((getAcessTime(GuildName) - os.time())/(86400))
return acess <= 0 and 0 or acess
end
function HaveAcess(GuildName)
                               return getDaysAcess(GuildName) > 0 and TRUE or FALSE
end
function getGuildWinnerName()
local guildname = ''
local query = db.getResult("SELECT `name` FROM `guilds`;")  
if(query:getID() ~= -1) then  
repeat  
if HaveAcess(query:getDataString("name")) then
guildname = query:getDataString("name")
end
until not query:next()  
query:free()
end
return guildname
end
function addAcess(GuildName, days)
if days > 0 then
local add = days*86400
local time = getDaysAcess(GuildName) == 0 and (os.time() + add) or (getAcessTime(GuildName) + add)
return setAcessTime(GuildName, time) end
return nil end
function doRemoveAcess(GuildName, days)
if days > 0 then
local remove = days*86400
local time = getAcessTime(GuildName) - remove
return setAcessTime(GuildName, (time <= 0 and 1 or time)) end
return nil end
function getAcessDate(GuildName)
if HaveAcess(GuildName) then return os.date("%d/%m/%y %X", getAcessTime(GuildName)) end
return FALSE
end
function getHonorPoints(cid)
local Honor = getPlayerStorageValue(cid, frag_guild.Honor_Storage)
return Honor < 0 and 0 or Honor
end
function addHonorPoints(GuildName, amount)
local PlayersGuild = db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. getGuildId(GuildName) .. ");")  
if (PlayersGuild:getID() ~= -1) then
repeat
local pid,Guid = getPlayerByNameWildcard(PlayersGuild:getDataString("name")),getPlayerGUIDByName(PlayersGuild:getDataString("name"))
if(not pid or isPlayerGhost(pid)) then
local getHonor = db.getResult("SELECT `value` FROM `player_storage` WHERE `player_id` = ".. Guid .." AND `key` = ".. frag_guild.Honor_Storage)
if (getHonor:getID() ~= -1) then
repeat
db.executeQuery("UPDATE `player_storage` SET `value` = ".. (getHonor:getDataInt("value")+amount) .." WHERE `player_id` = ".. Guid .." AND `key` = ".. frag_guild.Honor_Storage)
until not(getHonor:next())
getHonor:free()
end
else
setPlayerStorageValue(getPlayerByName(PlayersGuild:getDataString("name")), frag_guild.Honor_Storage, getHonorPoints(getPlayerByName(PlayersGuild:getDataString("name")))+amount)
end
until not PlayersGuild:next()
PlayersGuild:free()
end
return true
end
]]></config>
<talkaction words="!guildfrags;/guildfrags;!myhonor;/myhonor" event="buffer"><![CDATA[
domodlib('guild_func')
if words == "!myhonor" or  words == "/myhonor" then
return doPlayerPopupFYI(cid,"Honor Points can be exchanged for special items in npc\nAnd each domain, every guild players receive "..frag_guild.Honor_Point.." Honor Points!\n\n\nMy Honor Points: "..getHonorPoints(cid))
elseif words == "!guildfrags" or words == "/guildfrags" then
if param == "rank" then
local max_guild,str = 10,""
str = "--[ Rank Guild Frags ]--\n\n"
                               query = db.getResult("SELECT `name`, `frags` FROM `guilds` WHERE `frags` ORDER BY `frags` DESC, `name` ASC;")
                               if (query:getID() ~= -1) then k = 1 while true do
                               str = str .. "\n " .. k .. ". " .. query:getDataString("name") .. " - [" .. query:getDataInt("frags") .. "]"
                               k = k + 1
                               if not(query:next()) or k > max_guild then break end end query:free()end
                               if str ~= "" then doPlayerPopupFYI(cid, str) end
return true
end
doPlayerPopupFYI(cid,"".. (getGuildWinnerName() == "" and "The server does not have any dominant guild\n\nTo show the rank of frags enter !guildfrags rank" or "Currently guild dominant is ["..getGuildWinnerName().."]\n\nYour domain ends in "..getAcessDate(getGuildWinnerName()).."") .."")
end
return true
]]></talkaction>
<event type="login" name="FragsGuildLogin" event="script"><![CDATA[  
domodlib('guild_func')
function onLogin(cid)
registerCreatureEvent(cid, "FragsGuildLogin")
registerCreatureEvent(cid, "FragsGuildKill")
if getPlayerStorageValue(cid,frag_guild.Honor_Storage) == -1 then
setPlayerStorageValue(cid, frag_guild.Honor_Storage, 0)
end
local MyGuild,StorCheck = getPlayerGuildName(cid),17595
if HaveGuild(cid) then
if HaveAcess(MyGuild) then
setPlayerStorageValue(cid, StorCheck, 1)
if frag_guild.MoreExpToGuild == true then doPlayerSetExperienceRate(cid, frag_guild.Exp_Rate) end
elseif getPlayerStorageValue(cid, StorCheck) == 1 and not HaveAcess(MyGuild) then
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
doPlayerPopupFYI(cid, "[Guild Frag System]\nThe domain of your guild is over and you've been teleported to the temple.")
setPlayerStorageValue(cid, StorCheck, -1)
end
end
return TRUE
end
]]></event>
<action actionid="84005" event="script"><![CDATA[
domodlib('guild_func')
function onUse(cid, item, frompos, item2, topos)
local MyGuild = getPlayerGuildName(cid)
if not HaveGuild(cid) then
return doPlayerSendTextMessage(cid,22,"Sorry, you're not in a guild.")
elseif not HaveAcess(MyGuild) then
return doPlayerSendTextMessage(cid,22,"Your guild no has access to this area.") end
doTransformItem(item.uid, item.itemid + 1)
doTeleportThing(cid, topos, TRUE)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Welcome,The access of your guild in this area ends in "..getAcessDate(getGuildWinnerName()))
return true
end]]></action>
<event type="kill" name="FragsGuildKill" event="script"><![CDATA[
domodlib('guild_func')
function onKill(cid, target, lastHit)
config = {
MaxDifLevel = 50,
MyGuild = getPlayerGuildName(cid)
}
if isPlayer(cid) and isPlayer(target) and HaveGuild(cid) and HaveGuild(target) and getPlayerGuildId(cid) ~= getPlayerGuildId(target) and getPlayerIp(target) ~= getPlayerIp(cid) and math.abs(getPlayerLevel(cid) - getPlayerLevel(target)) <= config.MaxDifLevel then
addFragsByGuild(config.MyGuild,frag_guild.FragsPerKill)
doBroadCastGuild(config.MyGuild,20,'[Guild Frag System] Your guild received '..frag_guild.FragsPerKill..' frag because have killed a player another guild, now your guild have '..getFragsByGuild(config.MyGuild)..' frags')
if getFragsByGuild(config.MyGuild) >= frag_guild.FragsToWinAcess and getGuildWinnerName() == "" then
addAcess(config.MyGuild, frag_guild.AcessTimeDays)
addHonorPoints(config.MyGuild, frag_guild.Honor_Point)
doBroadcastMessage("[Guild Frag System]\nThe guild ["..config.MyGuild.."] is dominant for having achieved "..frag_guild.FragsToWinAcess.." Frags!\nYour domain ends in "..getAcessDate(config.MyGuild))
setGlobalStorageValue(frag_guild.start_frags, 1)
if frag_guild.MoreExpToGuild == true then
                  local players = {}
                               for _, cid in pairs(getPlayersOnline()) do
                                                               if getPlayerGuildName(cid) == config.MyGuild then
                                                                                               table.insert(players, cid)
                                                               end
                  end
                  for i = 1, #players do
                  doPlayerSetExperienceRate(players[i], frag_guild.Exp_Rate)
                  end
end
end
end
return TRUE
end]]></event>
<globalevent name="GuildFrags" interval="1800" event="script"><![CDATA[
domodlib('guild_func')
function onThink(interval, lastExecution)
return doBroadcastMessage("".. (getGuildWinnerName() == "" and "[Guild Frag System]\nThe first guild to reach "..frag_guild.FragsToWinAcess.." frags will gain "..frag_guild.AcessTimeDays.." days of access to exclusive areas, for more information enter !guildfrags" or "[Guild Frag System]\nCurrently guild dominant is ["..getGuildWinnerName().."] and your domain ends in "..getAcessDate(getGuildWinnerName()).."") .."", 22)
end]]></globalevent>
<globalevent name="RemoveFrag" time="18:38" event="script"><![CDATA[
function onTimer()
days = {"Wednesday","Saturday"}
if isInArray(days, os.date("%A")) then
doBroadcastMessage("[Guild Frag System] Clean frags!")
cleanGuildFrags()
end
return true
end]]></globalevent>
</mod>

 

 

nessa parte veja bem

 

<globalevent name="RemoveFrag" time="18:38" event="script"><![CDATA[
function onTimer()
days = {"Wednesday","Saturday"}
if isInArray(days, os.date("%A")) then
doBroadcastMessage("[Guild Frag System] Clean frags!")
cleanGuildFrags()
end
return true
end]]></globalevent>

 

na tag :

 

time="18:38" -- é a hr que vai executar

 

na tabela ali do script tem

 

days = {"Wednesday","Saturday"}

 

são os dias que vão executar o script

Link to comment
Share on other sites

  • 0

Blz, vou testar quando chegar em casa. Vlw mesmo.

 

testei agora, não deu nenhum erro no distro. Os comandos estão funcionando, mas configurei pra um horário e não apareceu a mensagem: ([Guild Frag System] Clean frags!"). Eu testei num ot que não tinha frags nenhum, mas isso não importa né, pq vai mandar a msg broadcast d qlq jeito? ou importa? =s

Edited by Leoxtibia
Link to comment
Share on other sites

  • 0

Blz, vou testar quando chegar em casa. Vlw mesmo.

 

testei agora, não deu nenhum erro no distro. Os comandos estão funcionando, mas configurei pra um horário e não apareceu a mensagem: ([Guild Frag System] Clean frags!"). Eu testei num ot que não tinha frags nenhum, mas isso não importa né, pq vai mandar a msg broadcast d qlq jeito? ou importa? =s

 

Tem que ver se os dias estão configurados certinhos, e não sei se tem problema se o OT é por linux ai talvez precise colocar segundos na tag tbm, mas o bom seria testar um com frags para ver, abraços.

 

Lembrando que os dias tem que ser em inglês e todos começando com a letra maiúscula, ex: Sunday, Monday... coloca os dias q vc quiser

Link to comment
Share on other sites

  • 0

Putz mano, não tinha erro nenhum no script. Depois que desloguei e voltei percebi isso: 20:12 Your last visit was on Fri May 25 19:55:38 2012. A DATA DO MEU PC TAVA ERRADA! Eu tava colocando Thursday, depois modifiquei para Friday e funcionou certinho. Vlw mesmo ^^

 

Dúvida Sanada, podem mover o tópico.

Link to comment
Share on other sites

×
×
  • Create New...