Natanael Beckman 223 Postado Abril 1, 2013 Share Postado Abril 1, 2013 (editado) 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 fraudes 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 é a 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 quase 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_systempremium_points para guild_points premium points para guild pointsz_shop_offer para z_shopguild_offershopsystem para shopguildz_shop_history_pacc para z_shopguild_history_paccz_shop_history_item para z_shopguild_history_item Ou utilize este já pronto: shopguild.php O shopguildadmin.php esté no link abaixo, basta fazer o mesmo procedimento: shopguildadmin.php Em index.php add: case "shopguild"; $topic = "Shop Guild"; $subtopic = "shopguild"; include("shopguild.php"); break; case "shopguildadmin"; $topic = "ShopGuild Admin"; $subtopic = "shopguildadmin"; include("shopguildadmin.php"); break; Vá em config.php adicione: $config['site']['shopguild_system'] = 1; $config['site']['access_adminguild_panel'] = 9; 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(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_shopguild' class='ActiveSubmenuItemIcon'style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'>Shop Guild</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> Em layouts.php add depois do shopadmin: if($group_id_of_acc_logged >= $config['site']['access_adminguild_panel']) echo "<a href='?subtopic=shopadmin'> <div 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>"; Finalmente terminamos!Bom todo esse processo é feito só para facilitar tudo pra você e o player e pra diferenciar o Shop System do Shop Guild, porque um sustenta 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 BeckmanLukeSkywalker (Raphael Luiz) .lua 100%Não proíbo ninguém de copia o tópico só peço que onde você adicione inclua os créditos mencionados. Editado Março 30, 2014 por GM Bekman Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/ Compartilhar em outros sites More sharing options...
Gabrielkss 10 Postado Abril 1, 2013 Share Postado Abril 1, 2013 (editado) Será que isso poderia ser feito in-game com um NPC ? pois meu servidor é Sqlite então não tenho site tem como desenvolver um NPC para esse sistema ? Editado Abril 1, 2013 por gabreilk Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1496690 Compartilhar em outros sites More sharing options...
Lukeskywalker 31 Postado Abril 1, 2013 Share Postado Abril 1, 2013 Será que isso poderia ser feito in-game com um NPC ? pois meu servidor é Sqlite então não tenho site tem como desenvolver um NPC para esse sistema ? Claro que é possivel desenvolver um NPC para esse sistema porem precisa de um scripter que saiba mexer bem com LiveSQL e conheça bem o .LUA, eu ja parei de mexer com a area atualmente estou ocupado com outras coisas então não mexo mais. Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1496867 Compartilhar em outros sites More sharing options...
rime 1 Postado Abril 2, 2013 Share Postado Abril 2, 2013 (editado) essi ta massa manu olha o cara do tempo do sqlite uaauiiaiua mto completo xow Editado Abril 2, 2013 por rime Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1497122 Compartilhar em outros sites More sharing options...
Luquinh4 28 Postado Abril 2, 2013 Share Postado Abril 2, 2013 nossa cara apavorante ninguén nunca tinha postado um funfano, rep + se possivel posta o seu shopguild Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1497147 Compartilhar em outros sites More sharing options...
Natanael Beckman 223 Postado Abril 3, 2013 Autor Share Postado Abril 3, 2013 (editado) Não sei se meu shop vai te ajudar, devido outras alterações feitas por mim, mais testa ae: shopguild.php Editado Abril 4, 2013 por GM Bekman Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1497520 Compartilhar em outros sites More sharing options...
Ballack159 0 Postado Abril 4, 2013 Share Postado Abril 4, 2013 tava presizando vleu veio rep pra tu Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1498189 Compartilhar em outros sites More sharing options...
kaiotp 42 Postado Abril 4, 2013 Share Postado Abril 4, 2013 Muito Bom....Por Mim Aprovado Ass;Kaiotp Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1498197 Compartilhar em outros sites More sharing options...
Luquinh4 28 Postado Abril 6, 2013 Share Postado Abril 6, 2013 Cara aqui deu um erro na página mais eu resolvi executano essa query. ALTER TABLE `accounts` ADD `guild_points` INTEGER NOT NULL DEFAULT 0 quem tiver o mesmo problema me da rep xd Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1499236 Compartilhar em outros sites More sharing options...
Natanael Beckman 223 Postado Abril 8, 2013 Autor Share Postado Abril 8, 2013 Essa tag ja tem no tutorial inclusive ela é a primeira a ser adicionada. Mais de qualquer forma fica a dica ae, obrigado! Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1500084 Compartilhar em outros sites More sharing options...
pedreroxx 2 Postado Maio 6, 2013 Share Postado Maio 6, 2013 Muito BOM!!, Valeu, Já ta reputado Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1516913 Compartilhar em outros sites More sharing options...
Luquinh4 28 Postado Maio 28, 2013 Share Postado Maio 28, 2013 muito bom ExecuteIntervalHours = 24, ( Intervalo para execução do comando, ae está de 24 em 24hrs) se deixar 24h um cara executa dps so 24hr pra outro executa? Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1525580 Compartilhar em outros sites More sharing options...
Natanael Beckman 223 Postado Maio 30, 2013 Autor Share Postado Maio 30, 2013 Esse comando é pra cada guild, guild x usou hj agora só amanha e assim todas as outras. Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1526051 Compartilhar em outros sites More sharing options...
Luquinh4 28 Postado Maio 30, 2013 Share Postado Maio 30, 2013 e se por 1h ? Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1526194 Compartilhar em outros sites More sharing options...
Natanael Beckman 223 Postado Maio 31, 2013 Autor Share Postado Maio 31, 2013 Se por 1hr pode ser tbm. Link para o comentário https://xtibia.com/forum/topic/211142-shopguild-points-100-add-em-player-offline/#findComment-1526693 Compartilhar em outros sites More sharing options...
Posts Recomendados