Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Fala galerinha do TK, irei postar para vocês um sistema que ajuda e muito servidores que estão começando.

O SHOP GUILD facilita o acesso dos players a itens que muitas vezes só têm no SHOP ONLINE do site.

Uma coisa muito importante que tenho a dizer a vocês é que esse sistema, é um pouco diferenciado, pois o lider da guild não precisará que todos os players estejam online, basta apenas ele estar online para executar o comando !guildpoints , que todos os membros da guild receberão os pontos.

Não tenho muito o que explicar, a maioria de vocês já conhece esse sistema, só não achou um que funcione 100%, e eu vim aqui trazê-lo para vocês.

 

Deixando a apresentação de lado, vamos direto a ponto:

 

Em talkactions.xml, adicione a tag abaixo:

               

<talkaction words="!guildpoints" event="script" value="guildpoints.lua"/>

 

Na pasta talkactions/scripts cria um arquivo guildpoints.lua e adicione o seguinte script:

 

GuildPointsConfigs =
{
ExecuteIntervalHours = 24,
NeedPlayersOnline = 10,
NeedDiferentIps = 6,
MinLevel = 80,
AddPointsForAcc = 9
}

function getGuildPlayersValidAccIDS(GuildID, MinLevel)
local RanksIDS = {}
local AccsID = {}
local ValidAccsID = {}
Query1 = db.getResult("SELECT `id` FROM `guild_ranks` WHERE guild_id = '".. GuildID .."'")
if(Query1:getID() == -1) then
return ValidAccsID
end
for i = 1, Query1:getRows() do
table.insert(RanksIDS, Query1:getDataInt("id"))
Query1:next()
end
Query2 = db.getResult("SELECT `account_id` FROM `players` WHERE `rank_id` IN (".. table.concat(RanksIDS, ', ') ..") AND `level` >= ".. MinLevel .."")
if(Query2:getID() == -1) then
return ValidAccsID
end
for i = 1, Query2:getRows() do
local AccID = Query2:getDataInt("account_id")
if #AccsID > 0 then
for k = 1, #AccsID do
if AccID == AccsID[k] then
AddAccList = false
break
end
AddAccList = true
end
if AddAccList then
table.insert(AccsID, AccID)
end
else
table.insert(AccsID, AccID)
end
Query2:next()
end
Query3 = db.getResult("SELECT `id` FROM `accounts` WHERE `guild_points_stats` = 0 AND `id` IN (".. table.concat(AccsID, ', ') ..")")
if(Query3:getID() == -1) then
return ValidAccsID
end
for i = 1, Query3:getRows() do
local AccID = Query3:getDataInt("id")
if #ValidAccsID > 0 then
for k = 1, #ValidAccsID do
if AccID == ValidAccsID[k] then
AddAccList = false
break
end
AddAccList = true
end
if AddAccList then
table.insert(ValidAccsID, AccID)
end
else
table.insert(ValidAccsID, AccID)
end
Query3:next()
end
return ValidAccsID
end

function onSay(cid, words, param, channel)
if(getPlayerGuildLevel(cid) == 3) then
local GuildID = getPlayerGuildId(cid)
Query = db.getResult("SELECT `last_execute_points` FROM `guilds` WHERE id = '".. GuildID .."'")
if(Query:getID() == -1) then
return true
end
if Query:getDataInt("last_execute_points") < os.time() then
local GuildMembers = {}
local GuildMembersOnline = {}
local PlayersOnline = getPlayersOnline()
for i, pid in ipairs(PlayersOnline) do
if getPlayerGuildId(pid) == GuildID then
if getPlayerLevel(pid) >= GuildPointsConfigs.MinLevel then
table.insert(GuildMembersOnline, pid)
end
end
end
if #GuildMembersOnline >= GuildPointsConfigs.NeedPlayersOnline then
local IPS = {}
for i, pid in ipairs(GuildMembersOnline) do
local PlayerIP = getPlayerIp(pid)
if #IPS > 0 then
for k = 1, #IPS do
if PlayerIP == IPS[k] then
AddIPList = false
break
end
AddIPList = true
end
if AddIPList then
table.insert(IPS, PlayerIP)
end
else
table.insert(IPS, PlayerIP)
end
end
if #IPS >= GuildPointsConfigs.NeedDiferentIps then
local ValidAccounts = getGuildPlayersValidAccIDS(GuildID, GuildPointsConfigs.MinLevel)
db.executeQuery("UPDATE `guilds` SET `last_execute_points` = ".. os.time() + (GuildPointsConfigs.ExecuteIntervalHours * 3600) .." WHERE `guilds`.`id` = ".. GuildID ..";")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "".. #ValidAccounts .." Players received points")
if #ValidAccounts > 0 then
db.executeQuery("UPDATE `accounts` SET `guild_points` = `guild_points` + " .. GuildPointsConfigs.AddPointsForAcc .. ", `guild_points_stats` = ".. os.time() .." WHERE `id` IN (" .. table.concat(ValidAccounts, ',') .. ");")
for i, pid in ipairs(GuildMembersOnline) do
local PlayerMSGAccID = getPlayerAccountId(pid)
for k = 1, #ValidAccounts do
if PlayerMSGAccID == ValidAccounts[k] then
doPlayerSendTextMessage(pid, MESSAGE_INFO_DESCR, "You received ".. GuildPointsConfigs.AddPointsForAcc .." guild points.")
break
end
end
end
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Only ".. #IPS .." players are valid, you need ".. GuildPointsConfigs.NeedDiferentIps .." players with different ips.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Has only ".. #GuildMembersOnline .." players online you need ".. GuildPointsConfigs.NeedPlayersOnline .." players online at least from level ".. GuildPointsConfigs.MinLevel ..".")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "The command can only be run once every ".. GuildPointsConfigs.ExecuteIntervalHours .." hours.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Only guild leader can request points.")
end
return true
end

 

Explicações do script:

 

ExecuteIntervalHours = 24, ( Intervalo para execução do comando, ae está de 24 em 24hrs)
NeedPlayersOnline = 10, (Quantos players é preciso está online para poder executar o comando.)
NeedDiferentIps = 6, (Quantos IPS diferentes são necessários para executar o comando no exemplo ae tem 6.)
MinLevel = 80, (Aqui adicione o level minimo, é necessário que todos os player da guild tenha o level pedido para o lider executar o comando.)
AddPointsForAcc = 9, (Aqui é q quantidade de pontos para adicionar em cada player da guild.)

 

OBS: Não mecha no restante do script!

 

A parte do servidor já está feita, iremos partir para o site, execute as seguintes querys em seu phpmyadmin:

 

 

ALTER TABLE accounts ADD `guild_points` INTEGER(11) NOT NULL DEFAULT 0;

 

 

ALTER TABLE `accounts` ADD `guild_points_stats` INT NOT NULL DEFAULT '0';

 

 

ALTER TABLE `guilds` ADD `last_execute_points` INT NOT NULL DEFAULT '0';

 

 

 

CREATE TABLE `z_shopguild_offer` (

`id` int(11) NOT NULL auto_increment,
`points` int(11) NOT NULL default '0',
`itemid1` int(11) NOT NULL default '0',
`count1` int(11) NOT NULL default '0',
`itemid2` int(11) NOT NULL default '0',
`count2` int(11) NOT NULL default '0',
`offer_type` varchar(255) default NULL,
`offer_description` text NOT NULL,
`offer_name` varchar(255) NOT NULL,
`pid` INT(11) NOT NULL DEFAULT '0',  
PRIMARY KEY  (`id`))

 

 

CREATE TABLE `z_shopguild_history_item` (

`id` int(11) NOT NULL auto_increment,
`to_name` varchar(255) NOT NULL default '0',
`to_account` int(11) NOT NULL default '0',
`from_nick` varchar(255) NOT NULL,
`from_account` int(11) NOT NULL default '0',
`price` int(11) NOT NULL default '0',
`offer_id` int(11) NOT NULL default '0',
`trans_state` varchar(255) NOT NULL,
`trans_start` int(11) NOT NULL default '0',
`trans_real` int(11) NOT NULL default '0',
PRIMARY KEY  (`id`))

 

 

CREATE TABLE `z_shopguild_history_pacc` (

`id` int(11) NOT NULL auto_increment,
`to_name` varchar(255) NOT NULL default '0',
`to_account` int(11) NOT NULL default '0',
`from_nick` varchar(255) NOT NULL,
`from_account` int(11) NOT NULL default '0',
`price` int(11) NOT NULL default '0',
`pacc_days` int(11) NOT NULL default '0',
`trans_state` varchar(255) NOT NULL,
`trans_start` int(11) NOT NULL default '0',
`trans_real` int(11) NOT NULL default '0',
PRIMARY KEY  (`id`))

 

Estamos quase terminando o tutorial.
Para facilitar, duplique o seu shopsystem.php e renomeie para shopguild.php e faça as seguintes modificações nas linhas a seguir:

 

shop_system para shopguild_system

premium_points para guild_points
z_shop_offer para z_shopguild_offer
shopsystem para shopguild
z_shop_history_pacc para z_shopguild_history_pacc
z_shop_history_item para z_shopguild_history_item

 

Feito isso, a parte mais trabalhosa já foi feita, iremos agora, adicionar as linhas na pasta do site para que  TAG do SHOP GUILD apareça no site:

 

Vá em index.php e adicione:

 

case "shopguild";
$topic = "Shop Guild";
$subtopic = "shopguild";
include("shopguild.php");
break;

 

Vá em config.php e adicione:

 

$config['site']['shopguild_system'] = 1;

 

Vá em layouts.php e adicione abaixo de Shopsystem:

 

<a href='?subtopic=shopguild'>
  <div id='submenu_shopguild' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
        <div class='LeftChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div>
        <div id='ActiveSubmenuItemIcon_shopguild' class='ActiveSubmenuItemIcon' style='background-image:url(".$layout_name."/images/menu/icon-activesubmenu.gif);'></div>
        <div class='SubmenuitemLabel'>Shop Guild <blink><font size='0'><font color='yellow'>NEW</font></font></blink></div>
        <div class='RightChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div>
  </div>
</a>

 

É isso pessoal, única coisa que falta é você importar a parte dos itens do shopguild e adicionar o comando em seu phpmyadmin.

 

 

Esse tutorial eu trouxe de outro fórum, então deixarei os devidos créditos dos autores do sistema.

 

Créditos:
Natanael Beckman
LukeSkywalker (Raphael Luiz)

Editado por sear10 (veja o histórico de edições)

 

6cb96129-c6fb-49ca-8267-4cbf4f41578c.gif

  • Respostas 23
  • Visualizações 3.7k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Eu errei, você tem que procurar em Operações e copiar a tabela e dados para o z_shopguild_offer.

Postado
  • Autor

você pode ir na tabela shopsystem do seu servidor pelo phpymadmin , acessar a area de privilégios e copiar ela para  z_shopguild_offer, ai é só você editar os itens que você quer ou não que fique no Shop Guild.

 

6cb96129-c6fb-49ca-8267-4cbf4f41578c.gif

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo