Amei o sistema.
- Fórum
- OTServ
- Recursos
- Scripting
- Mods, funções e outros
- [Gfs] Guild Frag System
Gostaria de pegar apenas a opção de !guildfrags rank pra por no meu ot,
o que eu tenho que adicionar?
info
Grupo: Campones
Registrado: 11/11/12
Posts: 7
Reputação: 0
Char no Tibia: Death Styller

[ Ja Conssegui ] Mto Bom Reputado.
Editado Março 20 por Guizin55
info
Grupo: Conde
Registrado: 20/03/13
Posts: 507
Reputação: +16
Char no Tibia: Sherpy

Como executa as coisas pelo mods ou e a mesma coisa?
info
Grupo: Cavaleiro
Registrado: 17/07/09
Posts: 153
Reputação: +3
Char no Tibia: Victorseksi

Olá, é, botei esse sistema como Mod e tals, mas tipo, não aparece as guilds no !guildfrags rank, e para ganhar as frags, tem que matar o lider da guild? porque os players se matam, sendo de guilds diferentes, e não acumula as frags no rank, ou demora para atualizar o rank?
OouVodkart
adicionei tudo certo, dai, quando a guild chega no tanto de kill, n manda a msg em vermelho, e quando vizualiza o !guildfrags rank n tem nenhuma guild ! tem como me ajudar pf ? obg
Editado Agosto 10 por kurazin
Como funciona:
A guild vai acumulando frags que são como pontos toda vez que matar um jogador da outra guild, ao chegar numa certa quantidade de frags, essa guild recebe alguns dias de acesso para áreas exclusivas, dá para fazer algumas door,tiles,etc...
Quando alguma guild domina o server automaticamente a contagem de frags de todas as guilds são zeradas e durante o dominio da guild o acumulo de frags das guild não é acumulado.
Estarei falando mais sobre o sistema pelas SS.
Obs:
Se alguém tiver alguma sugestão de idéia para implementar o sistema, por exemplo magias especiais, outfits só postar no tópico que estaremos discutindo sobre o código
Nota do Autor:
Poderei estar implementando o sistema ou modificando algumas partes para remover linhas desnecessárias ou adicionando algumas outras funções, então fique atento.
Update 14/04/12
Adicionado Honor Points + NPC que vende items por Honor Points(pelo trade)
Honor points é dado aos players da guild que dominarem o server, todos os players da guild receberam uma quantidade "X" de honor points mesmo se ele tiver offline.
SS's
- Quando o jogador de uma guild matar outro player de uma outra guild, todos da guild desse jogador que matou recebem uma mensagem.
- talk confere se já tem alguma guild dominante no server, nessa screen nenhuma guild ainda é dominante
se tiver guild dominante irá dizer o nick é que dia acaba o domínio.
- Mostrando o rank de frags das guilds do server
Uma mensagem em broadcast quando alguma guild atinge "X" Frags
Depois que acaba o domínio da guild, todos os jogadores da guild que perdeu o domínio são teleportados de volta para o templo.
Npc que troca os pontos de honra por items
comando !myhonor que explica como funciona e quantos pontos de honra vc tem
Antes de mais nada execute essas querys no seu banco de dados
ALTER TABLE `guilds` ADD `frags` INT(11) NOT NULL DEFAULT 0; ALTER TABLE `guilds` ADD `acesstime` INT(15) NOT NULL DEFAULT 0;Não sabe executar a query? abra o spoiler e aprenda!
1° Abra o programa Sqlite
2° Selecione a database do seu server, o arquivo é esse ".s3db", por exemplo o "forgottenserver.s3db"
3° na parte superior do programa tem a aba "Tools",clica nela e seleciona "Open SQL query editor" ou (ALT + E) se preferir
4° Vai abrir uma janela branca,nela você coloca isso:
ALTER TABLE `guilds` ADD `frags` INT(11) NOT NULL DEFAULT 0; ALTER TABLE `guilds` ADD `acesstime` INT(15) NOT NULL DEFAULT 0;5° Depois clica no ícone do raio ali na parte de cima ou aperta o botão F9 que vai fazer com que a query seja executada.
Sistema
Lib/function
FragGuildSystem.lua
frag_guild = { start_frags = 120155, -- dont edit FragsToWinAcess = 100, -- to win guild acess FragsPerKill = 1, AcessTimeDays = 2, MoreExpToGuild = true, 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 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 removeAcessGuildServer() return db.executeQuery("UPDATE guilds SET acesstime = 0;") 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
Actions
FragSystemDoor.lua
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 endTag:<action actionid="84005" script="FragSystemDoor.lua"/>
Creaturescript
GuildFragsKill.lua
function onKill(cid, target, lastHit) local 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 and getGlobalStorageValue(frag_guild.start_frags) <= 0 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 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)) cleanGuildFrags() 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 endGuildFragsLogin.luafunction 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) if getGlobalStorageValue(frag_guild.start_frags) >= 1 then setGlobalStorageValue(frag_guild.start_frags, 0) end end end return TRUE endTag<event type="login" name="FragsGuildLogin" script="GuildFragsLogin.lua"/> <event type="kill" name="FragsGuildKill" script="GuildFragsKill.lua"/>
globalevent
GuildFragsInfo.lua
function onThink(interval, lastExecution) if getGuildWinnerName() == "" and getGlobalStorageValue(frag_guild.start_frags) >= 1 then setGlobalStorageValue(frag_guild.start_frags, 0) end 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) endTag<globalevent name="GuildFrags" interval="1800" event="script" value="GuildFragsInfo.lua"/>
talkactions
GuildFragsRank.lua
function onSay(cid, words, param) 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 endTag<talkaction words="!guildfrags;/guildfrags;!myhonor;/myhonor" event="script" value="GuildFragsRank.lua"/>
Por Mod
Caso você queira usar o sistema por Mod aqui está:
Guild Frag System.xml
<?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) if getGlobalStorageValue(frag_guild.start_frags) >= 1 then setGlobalStorageValue(frag_guild.start_frags, 0) end 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 and getGlobalStorageValue(frag_guild.start_frags) <= 0 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 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)) cleanGuildFrags() 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) if getGuildWinnerName() == "" and getGlobalStorageValue(frag_guild.start_frags) >= 1 then setGlobalStorageValue(frag_guild.start_frags, 0) end 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> </mod>
Npc (obs: o NPC funciona caso você use MOD tbm)
Leia com atenção:
O jogador deverá ter gps na sua bag para comprar o item, porém os gps são serão removidos, somente os Honor Points.
Major Ancient.xml
<?xml version="1.0"?> <npc name="Major Ancient" script="data/npc/scripts/trade_honor.lua" walkinterval="50000" floorchange="0"> <health now="100" max="100"/> <look type="287" head="78" body="88" legs="0" feet="88" addons="3"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|. I {trade} items for honor points!"/> </parameters> </npc>trade_honor.lualocal keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local Honor_Storage = 215548 function getHonorPoints(cid) local Honor = getPlayerStorageValue(cid, Honor_Storage) return Honor < 0 and 0 or Honor end local shopWindow = {} local t = { [2195] = {price = 5}, -- [id do item] e em price qnto honor points vai custar [2493] = {price = 25}, [2361] = {price = 30}, [8851] = {price = 20}, [8925] = {price = 30}, [2640] = {price = 50}, [2494] = {price = 100}, [9932] = {price = 50}, [2472] = {price = 70}, [8931] = {price = 100} } local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks) if t[item] and getHonorPoints(cid) < t[item].price then selfSay("you do not have "..t[item].price.." Honor Points", cid) else doPlayerAddItem(cid, item) setPlayerStorageValue(cid, Honor_Storage, getPlayerStorageValue(cid, Honor_Storage) - t[item].price) selfSay("Here you item", cid) end return true end if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then for var, ret in pairs(t) do table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = 0, name = getItemNameById(var)}) end openShopWindow(cid, shopWindow, onBuy, onSell) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
Configuração
Para configurar é simples, basta ir na lib e achar está tabela:
frag_guild = {
start_frags = 120155, -- não mexa
FragsToWinAcess = 100, -- qntos a guild tem q matar para ganhar o dominio
FragsPerKill = 1, -- qnto de frag ele ganha ao matar jogador da outra guild
AcessTimeDays = 2, -- qntos dias de acesso ele irá receber
MoreExpToGuild = false, -- se os jogadores receberam bonus de xp
Exp_Rate = 1.1, -- 10%
Honor_Storage = 215548, -- n edite
Honor_Point = 5 -- qntos de honor point players irao ganhar ao dominar
}
e só irá ganhar frag o jogador da guild que:
Matar outro com IP diferente (para não ter abuso)
Matar jogador de uma guild diferente( n ter bug se player da msm guild se matar)
Matar jogador com level de diferença até 50 (configurável)
Vodkar parabéns pelo sistema! Ficou muito bom agora ele tem um bug, ao você atingir a quantidade de frags necessária para dominar você e o resto do server não pega mais frags, para esse sistema, certo? Só que depois que atinge a meta, as vezes não conta e as vezes conta, instalei ele via mod, executei aquela parte na DB.
isso acontece geralmente quando está matando muita gente e como muita gente.
Ah outra coisa que ele conta e, acho que não deveria contar, se você for para uma area PVP, com dois character de guilds diferentes e com IPs diferentes e, claro com a diferença de level, você não pega frags nos frags normais de cada player, mas nesse seu sistema ele contabiliza como frags mesmo sendo em area PVP.
Será que você poderia resolver isso?
Já que você tem grande conhecimento na área você poderia elaborar um tutorial de como fazer MODs, fiz esse pedido, mas ninguém min manda um tutorial.
http://www.xtibia.com/forum/topic/226870-tutorial-criando-mods/
Olá, é, botei esse sistema como Mod e tals, mas tipo, não aparece as guilds no !guildfrags rank, e para ganhar as frags, tem que matar o lider da guild? porque os players se matam, sendo de guilds diferentes, e não acumula as frags no rank, ou demora para atualizar o rank?
Usando em mods não sei te ajuda porem ele em scripts separados você poderá adiconar em creaturescripts uma função que verifica o level do Cid
local config = {MaxDifLevel = 50, MyGuild = getPlayerGuildName(cid), MinLeveL = 400}
if isPlayer(cid) and isPlayer(target) and HaveGuild(cid) and HaveGuild(target) and getPlayerGuildId(cid) ~= getPlayerGuildId(target) and getPlayerIp(target) ~= getPlayerIp(cid) and getPlayerLevel(cid) >= config.MinLeveL and math.abs(getPlayerLevel(cid) - getPlayerLevel(target)) <= config.MaxDifLevel and getGlobalStorageValue(frag_guild.start_frags) <= 0 then
MinLeveL = 400 = Level min para o script funciona.
Resumindo 400-50 só irá contar Frag Acima do lvl 350
Se não me engano i´ra Funcionar ^^ sou iniciante em .lua mais acho que seria isso ^^
















info
Grupo: Campones
Registrado: 10/12/10
Posts: 38
Reputação: 0
Char no Tibia: kitten lady
cara to com um problema os caras estao criando guild fack pra ficar c matando pra dominar mais rapido tem como coloca um limite de frags por dia
tipow 20 frags por guild ?
Editado Novembro 6 por melocom