Ir para conteúdo
Entre para seguir isso  
GM Cajala

Guild Points 100% add em player offline.

Recommended Posts

GM Cajala    5
GM Cajala

Obrigatoriamente leia tudo!

 

Opa galera mais uma vez eu trazendo o melhor para todos.

Hoje vou postar o sistema de Guild de Points que eu utilizo em meu OTserver, acredito que dificilmente será encontrado por ae um tão completo e sem bugs igual o que será postado logo abaixo, é um sistema completo que é utilizado pelo líder da guild executando um comando que, se tiver de acordo com as regras que seram feitas por você, todos os membros da guild iram receber os pontos uma unica vez, lembrando que quando os pontos são adicionados a um player ele não receberá entrando em outra guild e não receberá criando outro personagem na conta, resumindo ele só receberá uma unica vez na conta e com um player só. E um dos detalhes que me causava dor de cabeça era que quando um líder executava o comando, quem estava online recebia os pontos, mais quem estava offline não recebia, isso acontecia normalmente porque tem guilds que contém 50, 70, 100 players, portanto nem sempre todos estavam online. O comando só pode ser executado uma vez por dia cada guild, para não gerar processamentos desnecessários e assim um mal funcionamento do servidor.

 

Cada administrador pode configurar seu sistema da forma que quiser, por ser um sistema muito simples, você pode bota que todos os players estejam no minimo level x, que a guild só possa executar o comando quando estiver quantidade x de players online, isso é bom porque traz um certa dificuldade para fraldes de pontos, e o sistema só vira bagunça dependendo do que você vai oferecer no seu shop guild, eu particularmente só utilizei esse comando porque muitas guilds grandes pediam pontos, eles me cobravam uma quantidade x de pontos e eu cobrava uma quantidade x de player então pra automatizar o processo e não ter dor de cabeça foi feito todo esse sistema. Se você analisar bem vai ver que tudo isso só gera mais crescimento ao seu servidor.

Bom, vamos ao sistema:

 

Em talkactions.xml, adicione a tag abaixo:

 

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

 

Na pasta talkactions/scripts faça um .lua com o nome guildpoints e dentro dele adicione os coder abaixo:

 

 

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

 

No coder acima bem no inicio tem as linhas seguintes para configurar:

 

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

 

Certo, a parte do servidor é esta, ta feita, vamos adicionar a database o coder a seguir:

 

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`))

 

Olha estamos qualze finalizando tudo, só precisamos terminar a parte de web.

O meu GuildShop eu copiei meu shopsystem.php e fiz umas modificações, simples você pode fazer o mesmo é menos trabalhoso.

Copie o shopsystem.php renomeie para shopguild.php, após abra-o e modifique como manda 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

 

Pronto feito isso, a parte mais complicada da web ta feita agora vamos para as inclusões básicas.

 

Vá em index.php e adicione:

 

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

 

Vá em config.php adicione:

 

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

 

Vá em layouts.php adicione abaixo de buypoints:

 

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

Agora crie um arquivo chamado shopguild.php e adiciona os coder que estão no link abaixo:

shopguild.php

Pediram para adicionar o ShopGuild Admin então segue abaixo:

Em index.php add:

case "shopguildadmin";
$subtopic = "shopguildadmin";
$topic = "Shop System";
include("shopguildadmin.php");
break;

Em layouts.php add depois do shopadmin:

<a href='?subtopic=shopguildadmin'>
 <div id id='submenu_shopguildadmin' 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_shopguildadmin' class='ActiveSubmenuItemIcon' style='background-image:url(".$layout_name."/images/menu/icon-


activesubmenu.gif);'></div>
   <div class='SubmenuitemLabel'><font color=red>! ShopGuild Admin !</font></div>
   <div class='RightChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div>
 </div>
</a>

Agora crie um arquivo chamado shopguildadmin.php e adiciona os coder que estão no link abaixo:

shopguildadmin.php

 

Finalmente terminamos, eu normalmente faço uma database extra e no shopshytem dela adiciono os item que quero que tenha no meu shopguild após a conclusão exporto essa coluna e importo pra minha database correta na coluna z_shopguild_offer.

Bom todo esse processo é feito só para facilitar tudo pra você e seu player e pra diferenciar o Shop System do Shop Guild, porque um sustentar as despesas do server e o outro atrai player, porque pra ter player é preciso ter player.

 

Galera acredito que não esteja faltando nada, espero que gostem e tudo que eu poder fazer para nossas melhoras estarei postando, me desculpem meu erros de português mais o que importa aqui é o script está correto, abraços!

 

 

Créditos:

Natanael Beckman

LukeSkywalker (Raphael Luiz)

Não proíbo ninguém de copia o tópico só peço que onde você adicione inclua os créditos mencionados.

Editado por GM Cajala

Compartilhar este post


Link para o post
Henke Rula    4
Henke Rula

Aprovado e Movido !!

 

Sugestão : Adicionar um Guild Points Admin no Site para que as ofertas de itens sejam adicionadas mais facilmente.

Compartilhar este post


Link para o post
GM Cajala    5
GM Cajala

Sugestão adicionada!

Compartilhar este post


Link para o post
Henke Rula    4
Henke Rula

Natan,

 

Recomendo isso para o layout.php

Procure por ( fica lá no final do código da página)

<b><a href="?subtopic=polls"><b>Manage Polls</b></a><b><br>

e embaixo adicione

<b><a href="?subtopic=shopguildadmin"><b>ShopGuild Admin</b></a><b><br>

 

Isso faz com que somente o adminsitrador do site acesse essa area e que ela apareça no painel de administração do site do lado direito.

Compartilhar este post


Link para o post
GM Cajala    5
GM Cajala

No tutorial eu informo para adicionar depois de shop admin, a pessoa fazendo isso ja vai com a proteção.

Mais de qualquer forma com seu post fica a dica ae né, obrigado.

Compartilhar este post


Link para o post
Henke Rula    4
Henke Rula
No tutorial eu informo para adicionar depois de shop admin, a pessoa fazendo isso ja vai com a proteção.

Mais de qualquer forma com seu post fica a dica ae né, obrigado.

 

Obrigado.

Compartilhar este post


Link para o post
Lyon    3
Lyon

Nossa esse é de qualidade,amanha irei testar,obrigado pela contribuição!

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×