Ir para conteúdo

[Gfs] Guild Frag System


Vodkart

Posts Recomendados

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 por melocom
Link para o comentário
Compartilhar em outros sites

  • 1 month later...
  • 2 months later...
  • 1 month later...
  • 4 weeks later...

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?

Link para o comentário
Compartilhar em outros sites

  • 2 months later...

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 por kurazin
Link para o comentário
Compartilhar em outros sites

  • 5 months later...

 

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

 

 

DwYiP.png

- Quando o jogador de uma guild matar outro player de uma outra guild, todos da guild desse jogador que matou recebem uma mensagem.

2KHY4.png

- 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.

mD3p1.png

- Mostrando o rank de frags das guilds do server

lKEeD.png

Uma mensagem em broadcast quando alguma guild atinge "X" Frags

kAbhB.png

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.

jsx4D.jpg

Npc que troca os pontos de honra por items

he3Rt.png

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
end
Tag:

<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
end
GuildFragsLogin.lua

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
Tag

<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)
end
Tag

<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
end
Tag

<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.lua

local 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/

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

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 ^^

Link para o comentário
Compartilhar em outros sites

  • 2 years later...
×
×
  • Criar Novo...