Ir para conteúdo
  • Cadastre-se

Posts Recomendados

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.
Link para o post
Compartilhar em outros sites
  • 9 months later...

mano criei e talz mas tipo o no layout ta dando Invalid subtopic. Can't load page.


e tipo no index.php adicionei la no ultimo q imagino q seja o certo

Link para o post
Compartilhar em outros sites
  • 1 year later...

Ótimo script, porém gostaria de uma ajuda, ao usar o comando !guildpoints, simplesmente não acontece nada, sendo que adicionei certinho no talkactions

 

Uso OTX 8.6

Venha para a evolução do mapa HEROSERV -- Versão 8.60 -

Faça parte dessa família: http://kaiakserv.com

 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo