Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 03/30/14 em %

  1. Obrigatoriamente leia tudo! Atualizado 01/07/2014 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.) Em data/globalevents/scripts crie um arquivo chamado shopguild.lua e adicione o code a seguir: local SHOP_MSG_TYPE = MESSAGE_EVENT_ORANGE local SQL_interval = 30 function onThink(interval, lastExecution) local result_plr = db.getResult("SELECT * FROM z_ots_guildcomunication WHERE `type` = 'login';") if(result_plr:getID() ~= -1) then while(true) do local id = tonumber(result_plr:getDataInt("id")) local action = tostring(result_plr:getDataString("action")) local delete = tonumber(result_plr:getDataInt("delete_it")) local cid = getCreatureByName(tostring(result_plr:getDataString("name"))) if isPlayer(cid) then local itemtogive_id = tonumber(result_plr:getDataInt("param1")) local itemtogive_count = tonumber(result_plr:getDataInt("param2")) local container_id = tonumber(result_plr:getDataInt("param3")) local container_count = tonumber(result_plr:getDataInt("param4")) local add_item_type = tostring(result_plr:getDataString("param5")) local add_item_name = tostring(result_plr:getDataString("param6")) local received_item = 0 local full_weight = 0 if add_item_type == 'container' then container_weight = getItemWeightById(container_id, 1) if isItemRune(itemtogive_id) == TRUE then items_weight = container_count * getItemWeightById(itemtogive_id, 1) else items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count) end full_weight = items_weight + container_weight else full_weight = getItemWeightById(itemtogive_id, itemtogive_count) if isItemRune(itemtogive_id) == TRUE then full_weight = getItemWeightById(itemtogive_id, 1) else full_weight = getItemWeightById(itemtogive_id, itemtogive_count) end end local free_cap = getPlayerFreeCap(cid) if full_weight <= free_cap then if add_item_type == 'container' then local new_container = doCreateItemEx(container_id, 1) local iter = 0 while iter ~= container_count do doAddContainerItem(new_container, itemtogive_id, itemtogive_count) iter = iter + 1 end received_item = doPlayerAddItemEx(cid, new_container) else local new_item = doCreateItemEx(itemtogive_id, itemtogive_count) doItemSetAttribute(new_item, "description", "This item can only be used by the player ".. getPlayerName(cid) .."!") doItemSetAttribute(new_item, "aid", getPlayerGUID(cid)+10000) received_item = doPlayerAddItemEx(cid, new_item) end if received_item == RETURNVALUE_NOERROR then doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS GuildShop.') db.executeQuery("DELETE FROM `z_ots_guildcomunication` WHERE `id` = " .. id .. ";") db.executeQuery("UPDATE `z_shopguild_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";") else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS GuildShop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.') end else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS GuildShop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.') end end if not(result_plr:next()) then break end end result_plr:free() end return true end Em data/globalevents/globalevents.xml adicione a seguinte tag: <globalevent name="shopguild" interval="300" event="script" value="shopguild.lua"/> 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`)) CREATE TABLE IF NOT EXISTS `z_ots_guildcomunication` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `type` varchar(255) NOT NULL, `action` varchar(255) NOT NULL, `param1` varchar(255) NOT NULL, `param2` varchar(255) NOT NULL, `param3` varchar(255) NOT NULL, `param4` varchar(255) NOT NULL, `param5` varchar(255) NOT NULL, `param6` varchar(255) NOT NULL, `param7` varchar(255) NOT NULL, `delete_it` int(2) NOT NULL DEFAULT '1', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13107; 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_system premium_points para guild_points 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 z_ots_comunication para z_ots_guildcomunication 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>"; Em shopsystem.php procure por: elseif($action == 'show_history') { if(!$logged) { $main_content .= 'Please login first.'; } else{ $items_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_history_item').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($items_history_received)) { foreach($items_history_received as $item_received) { if($account_logged->getId() == $item_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $items_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$item_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $item_received['from_account']) $items_received_text .= '<i>Your account</i>'; else $items_received_text .= $item_received['from_nick']; $items_received_text .= '</td><td>'.$item_received['offer_id'].'</td><td>'.$item_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $item_received['trans_start']).'</td>'; if($item_received['trans_real'] > 0) $items_received_text .= '<td>'.date("j F Y, H:i:s",$item_received['trans_real']).'</td>'; else $items_received_text .= '<td><b><font color="red">Not realized yet.</font></b></td>'; $items_received_text .= '</tr>'; } } $paccs_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_history_pacc').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($paccs_history_received)) { foreach($paccs_history_received as $pacc_received) { if($account_logged->getId() == $pacc_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $paccs_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$pacc_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $pacc_received['from_account']) $paccs_received_text .= '<i>Your account</i>'; else $paccs_received_text .= $pacc_received['from_nick']; $paccs_received_text .= '</td><td>'.$pacc_received['pacc_days'].' days</td><td>'.$pacc_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $pacc_received['trans_real']).'</td></tr>'; } } $main_content .= '<center><h1>Transactions History</h1></center>'; if(!empty($items_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="6"><font color="white" size="4"><b>&nbsp;Item Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Offer name</b></td><td><b>Cost</b></td><td><b>Bought on page</b></td><td><b>Received on '.$config['server']['serverName'].'</b></td></tr>'.$items_received_text.'</table><br />'; if(!empty($paccs_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="5"><font color="white" size="4"><b>&nbsp;Pacc Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Duration</b></td><td><b>Cost</b></td><td><b>Added:</b></td></tr>'.$paccs_received_text.'</table><br />'; if(empty($paccs_received_text) && empty($items_received_text)) $main_content .= 'You did not buy/receive any items or PACC.'; } } Troque por: elseif($action == 'show_history') { if(!$logged) { $main_content .= 'Please login first.'; } else{ $items_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_history_item').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($items_history_received)) { foreach($items_history_received as $item_received) { if($account_logged->getId() == $item_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $items_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$item_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $item_received['from_account']) $items_received_text .= '<i>Your account</i>'; else $items_received_text .= $item_received['from_nick']; $items_received_text .= '</td><td>'.$item_received['offer_id'].'</td><td>'.$item_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $item_received['trans_start']).'</td>'; if($item_received['trans_real'] > 0) $items_received_text .= '<td>'.date("j F Y, H:i:s",$item_received['trans_real']).'</td>'; else $items_received_text .= '<td><b><font color="red">Not realized yet.</font></b></td>'; $items_received_text .= '</tr>'; } } $itemsguild_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shopguild_history_item').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($itemsguild_history_received)) { foreach($itemsguild_history_received as $itemguild_received) { if($account_logged->getId() == $itemguild_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $itemsguild_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$itemguild_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $itemguild_received['from_account']) $itemsguild_received_text .= '<i>Your account</i>'; else $itemsguild_received_text .= $itemguild_received['from_nick']; $itemsguild_received_text .= '</td><td>'.$itemguild_received['offer_id'].'</td><td>'.$itemguild_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $itemguild_received['trans_start']).'</td>'; if($itemguild_received['trans_real'] > 0) $itemsguild_received_text .= '<td>'.date("j F Y, H:i:s",$itemguild_received['trans_real']).'</td>'; else $itemsguild_received_text .= '<td><b><font color="red">Not realized yet.</font></b></td>'; $itemsguild_received_text .= '</tr>'; } } $paccs_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_history_pacc').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($paccs_history_received)) { foreach($paccs_history_received as $pacc_received) { if($account_logged->getId() == $pacc_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $paccs_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$pacc_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $pacc_received['from_account']) $paccs_received_text .= '<i>Your account</i>'; else $paccs_received_text .= $pacc_received['from_nick']; $paccs_received_text .= '</td><td>'.$pacc_received['pacc_days'].' days</td><td>'.$pacc_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $pacc_received['trans_real']).'</td></tr>'; } } $paccsguild_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shopguild_history_pacc').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($paccsguild_history_received)) { foreach($paccsguild_history_received as $paccguild_received) { if($account_logged->getId() == $paccguild_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $paccsguild_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$paccguild_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $paccguild_received['from_account']) $paccsguild_received_text .= '<i>Your account</i>'; else $paccsguild_received_text .= $paccguild_received['from_nick']; $paccsguild_received_text .= '</td><td>'.$paccguild_received['pacc_days'].' days</td><td>'.$paccguild_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $paccguild_received['trans_real']).'</td></tr>'; } } $main_content .= '<center><h1>Transactions History</h1></center>'; if(!empty($items_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="6"><font color="white" size="4"><b>&nbsp;ShopServer Item Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Offer name</b></td><td><b>Cost</b></td><td><b>Bought on page</b></td><td><b>Received on '.$config['server']['serverName'].'</b></td></tr>'.$items_received_text.'</table><br />'; if(!empty($itemsguild_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="6"><font color="white" size="4"><b>&nbsp;ShopGuild Item Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Offer name</b></td><td><b>Cost</b></td><td><b>Bought on page</b></td><td><b>Received on '.$config['server']['serverName'].'</b></td></tr>'.$itemsguild_received_text.'</table><br />'; if(!empty($paccs_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="5"><font color="white" size="4"><b>&nbsp;ShopServer VIP Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Duration</b></td><td><b>Cost</b></td><td><b>Added:</b></td></tr>'.$paccs_received_text.'</table><br />'; if(!empty($paccsguild_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="5"><font color="white" size="4"><b>&nbsp;ShopGuild VIP Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Duration</b></td><td><b>Cost</b></td><td><b>Added:</b></td></tr>'.$paccsguild_received_text.'</table><br />'; if(empty($paccs_received_text) && empty($items_received_text)) $main_content .= 'You did not buy/receive any items or PACC.'; if(empty($paccsguild_received_text) && empty($itemsguild_received_text)) $main_content .= 'You did not buy/receive any items or PACC.'; } } 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 conseguir 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 meus erros de português mais o que importa aqui é o script está correto, abraços! Créditos: Natanael Beckman LukeSkywalker (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.
  2. Alissow Ots 5.0 [17/03/2013]

    Kakaux e um outro reagiu a Bruno Carvalho por uma resposta no tópico

    2 pontos
    lissow Server 5.0 Provavelmente vocês estão pensando "mas que diabo de OTS é esse?", afinal, já faz 2 anos desde que a ultima versão foi lançada e desde lá prometemos algo que não foi cumprido - até agora -, uma versão nova. ENFIM, TEMOS AGORA A MAIS NOVA VERSÃO DE UM DOS SERVIDORES MAIS AVACALHADOS JOGADOS DOS ULTIMOS TEMPOS. Mas eu tenho uma má noticia, está incompleto. Sim, o mapa está inacabado. Muitas coisas que eu planejei fazer nele eu não completei. Boa parte Eu ajudei a terminar, adicionando o resto dos caminhos básicos e os monstros. mas mapa inacabado não quer dizer que não está jogável, quer dizer que faltou detalhar (Ex: x:55 y: 137 z: 9, x: 104 y: 140 z: 7, etc). A ultima versão foi baixada mais de 50 mil vezes e esperamos que essa versão faça o mesmo sucesso. By Alissow Comedinha XedeguX Contribuidores: Objetivo do projeto: Criar um servidor com base na versão mais atualizada do tibia com vários sistemas onde o mapa é feito para exploração com um grande nivel de RPG. Sobre o OT/Mapa: Principais quests: -Annihilator -Inquisition Quest -Pits of inferno -Demon Oak -Solar axe quest -HOTA -MPA quest -The Challenger Monstros: -Total monstros: 10749 -Total spawn: 5000+ Cidades: -11 Cidades -200 Houses+- Raids/Invasões: -Rat -Ghazbaran -Giant spider/The old window -Ferumbras -Morgaroth Spells: -Magias balanceadas parecidas com a do tibia global Changelog Alissow OTs 3.5 [bETA] 06/08/2009 Alissow OTs 3.5 [Patch 3.5.1] 07/08/2009 Alissow OTs 3.6 10/08/2009 Alissow OTs 3.7 BETA 18/12/2009 Alissow OTs 3.7.1 18/12/2009 Alissow OTs 3.8 17/01/2010 Alissow OTs 3.8 Minor Patch 1 17/01/2010 Alissow OTs 3.9 06/02/2010 Alissow OTs 4.0 04/06/2010 Alissow OTs 4.11 11/07/2010 Alissow OTs 5.0 17/03/2013 - Atualizado para a versão 9.83 (Comedinhasss, Tfs Team) - Sistemas novos para a nova versão, montaria, war system, etc. (Comedinhasss, Tfs Team) - Rep System e Antbot Removido. (Comedinhasss) - 64 Quests reformuladas. (Comedinhasss/Alissow) - Novo sistema de dicas a cada 15 min. - (Comedinhasss) - Novo sistema de map marks ao entrar no servidor. (Comedinhasss) - Organização geral em Actions e Moveevents. (Comedinhasss) - Nova organização nos monstros agora usando os que não tem no tibia original na pasta monsters em mods. (Comedinhasss) - Npcs sem utilidade removidos (Comedinhasss) - Alavanca de runas e potions reformuladas (Comedinhasss, Alissow) - Bug PZ nas Hydras arrumado (Alissow) - Cidade principal parcialmente reformulada (Alissow) - Cidade de Flam totalmente reformulada (Alissow) - As lojas agora não são mais areas PZ (Alissow) - Corrigido erros em portas que não deveriam abrir, e portas que não deveriam fechar (Alissow) - Continente de Zao removido? (Alissow) - Arrumado bugs onde podia-se pegar items na ferumbras tower e vários outros lugares (Alissow) - Arrumado caminho da "inquisition" (Alissow) - Respawns recolocados em algumas áreas de yalahar, dragons, elfs Hydras, Dark magicians e apprentices (Alissow) - Nova entrada para arena (Svargrond) na cidade principal e funcionando! (Alissow) - Elevado nível de dificuldade da Arena (Svargrond) (Alissow) - Nova localização da Ferumbras Tower (Alissow) - Cidade de Mistyc removida? (Alissow) - Novo sistema premium igual ao global. (Comedinhasss) - Sistema de bless reformulado e agora por items. (Comedinhasss) - Sistema de portais/teleports (Comedinhasss, Alissow) - Sistema offline training (Comedinhasss, TFS) - Sistema de casamento trocado (Comedinhasss, Outros) - Spells (OTX) Imagens Download Servidor: MediaFire Tamanho: 16.09 MB Windowns: Clique Aqui Linux (Debain): Clique Aqui Scan VirusTotal: Clique Aqui Atenção - Acc do God: admin/admin - LEIA o tópico antes de postar qualquer coisa ou duvida - Reportem se houver algum bug - Favor, não use nosso distro sem o nosso consenso, obrigado. - O changelog vai ta 9.6 mais é 9.83 (Falha minha huehue') - Offline Train Level configurado no config.lua em levelToOfflineInBed - As estatuas de offline que ficam no templo não funcionam por serem enfeites - Para tirar o , previwer do nome, no config.lua em serverPreview mude para false - Todos os addons são vendidos menos o demon que eu acabei esquecendo de coloca - Comandos personalizados: /ta - itens pro sv inteiro, /tp - locais do mapa, /p - tem na minha assinatura ensinando, /e - abrir e fechar portal(open, close). - Para usar os portais você primeiro deve explorar a área indo até ela - Tem alguns segredinhos e lugares escondidos muito legais para vocês descobrirem
  3. Pokémon Centurion [8.54] PDA

    samuelandrade45 reagiu a SlowK por uma resposta no tópico

    1 ponto
    Pokémon Centurion (Tópico atualizado apenas para melhorar a aparência, servidor sem atualização desde 19/06/2014). Distro: Pokémon Dash Online Advanced 1.0 (PDA [Baseada na TFS 0.3.6]) (Não tenho source). - Antigo cliente 8.54 - • Informações • - Ataques m1 ao m12 - Sistema de bike - Sistema de boost - Trade Center - Mapa LunusOT - Sistema de profissões - Pokémons com níveis (com evolução) - Vários Shinies dentre eles da nova geração - Rocket (Giovani) e Police - Addons novos - Alguns Pokés com remakes - Várias quests escondidas • Algumas imagens • (Caso não estejam aparecendo, baixe aqui: IMAGENS) Senha do ADM: god/god • Links • Servidor Cliente (Mediafire já fornece scan semelhante ao vírustotal, basta descer a página um pouco). • Créditos • Cacaiu Alexandre Bruno Maciel Patrick Estrela SlowMCZ Obs: Servidor não será mais atualizado, nem darei ajuda, pois faz muito tempo que não mexo com tal server.
  4. Poketibia 9.60 by lazarocp

    ScpEd reagiu a lazarocp por uma resposta no tópico

    1 ponto
    removido
  5. 1 ponto
    FALA GALERA, HJ VOU DISPONIBILIZAR MEU OTSERV DE POKEMON, ESSE É MEU PRIMEIRO OTSERV DE POKEMON QUE EU EDITEI, ERA UM PROJETO AI COMO DEU UM ERRO CHATO, E EU TO SEM TEMPO PRA ARRUMAR VOU DISPONIBILIZAR PRA VOCÊS. • Menu: ├ Informações; ├ Ediçoes; ├ Prints; ├ Oque falta fazer; ├ Erros; ├ Download; └ Creditos. • Informações Basicas • •Senha do god: god/god. •Mapa com hunts kanto. •Server Sem System de level !. •Clan System (PDA Slicer). •Alguns bugs corrigidos. •Pokemons da 1° até a 2° geração. •Taunt System, para todos os clan rank 5, e algumas outfits. •novas paredes, pisos, e itens PxG. •Npc De itens de task de clãns. •Shinys Espalhado pelo mapa. •novos outfits, que nao tem a ver com Pokemon, mas há um bom divertimento com elas. •Duel System. •Golden arena. •Moves system (m1 a m12). •Maximo 6 pokemonsna bag. •Order 100%. • Edições / Ajustes Por Min • •Primeiramente eu nao editei o Mapa, Apenas o Templo. •Adicionado 32 Novos Lendarios (contendo normais e shinys) •Adicionado 2 Novas Stones (Green Stone e Rare Stone) •Adicionado Nova Box (Lendario Box +1) •Todos Os Lendarios tem suas respectivas Corpses e Portrait •Adicionado Black Articuno e Black Celebi •Reformulada a Quest Dos Lendarios (Moltres,Celebi e Suicune) •Segundo Andar Do Templo Expandido. •Adicionado Respawn De Alguns Shiny's. • PrintScreen • •Novos Lendarios • •Novos Lendarios Shiny • • Green Stone • • Rare Stone • • Oque falta fazer • • Falta Arrumar os moves e balanciar os novos lendarios. • Erros Do Servidor • O Unico erro que eu nao consigo arrumar é o que os novos lendarios nao estao atakando. (os lendarios que voce sumona pelo /m , da pokebola ataka normal) Pela minha falta de conhecimento pois este é meu 1 server de poketibia. Entao se voce achar a soluçao me fale que assim na V2.0. ja esta arrumado. • Download's • Server. PokéHouse v1.0 Client. PokéHouse Client v1.0 • Scan • Se Alguem Fizer Agradeço. • Creditos • Eu (Por Adicionar os lendarios e editar) Slicer (pelo servidor) Brun123 (por alguns scripts, e por criar o pda) Stylo Maldoso (pelo mapa) Bolz (por editar) Xtibia (por alguns scripts) • Oque vem pra V2.0 • Quando eu tiver tempo, vou terminar de adicionars os pokemon porque ainda falta • Deoxys,Speed Deoxys,Attack Deoxys e Defense Deoxys (normais e shinys). • Shiny Zekrom e Shiny Renshinran • Novos Respawn's • Pokemons Ancient. Entre Outras Coisas.
  6. Cave Pack #1

    matheus36000 reagiu a Setth por uma resposta no tópico

    1 ponto
    Pack Cave #1 by Obito OBS: O pack contém 3 caves .Está totalmente proibido a divulgação desse pack em outros forum sem a minha aprovação.
  7. [Modern Acc] OTPokemon Template

    GuhCapovila reagiu a TheSource por uma resposta no tópico

    1 ponto
    Esse template é bastante igual ao do otpokemon com uns reparos pequenos ele fica perfeito, aproveitem. Demonstração Scan Créditos: Douglas Wanzzine Download
  8. [Ajuda] Quest Simples, não funciona HELK

    ToissaoO reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    não.. storage não tem nada a ver com o item. É apenas um lugar que você salva um valor e utiliza pra controlar as quests e outras coisas do server. Fez a quest o storage de numero XXXXX passa a valer 1, se não fez a quest o storage de numero XXXXX tem valor -1. O item que vai ganhar é esse daqui doPlayerAddItem(cid,2149,10) esse comando adiciona 10 itens de ID 2149.
  9. O gráfico atual do Tibia

    Farathor reagiu a dezon por uma resposta no tópico

    1 ponto
    Cara, não sofro bullying não, mas ouço umas palhaçadas sim, mas é como já falaram, eu não fico num jogo só porque tem os melhores gráficos não, eu fico porque o jogo é atraente, me prende atenção, me faz pensar nele quando estou longe e etc! E quanto alguém fala "merda" sobre o Tibia eu só dou uma resposta: "...quantos amigos você já fez jogando o jogo x?... Mas estou falando amigos mesmo, você virou a noite jogando, conversando, fazendo corujão e etc, não amigos que você loga, pede ajuda e acabou..." e na maioria das vezes, posso dizer que 99% responde que nunca fizeram, o Tibia consegue trazer a alegria do jogo e a alegria de conhecer amigos que ficam pra sempre! Eu curto o Tibia, jogo como se fosse um jogo de gráficos absurdos e não me deixo levar por asneiras que falam não !
  10. Segunda Promotion

    KillerWatts reagiu a Artur Henrique por uma resposta no tópico

    1 ponto
  11. BUG MAGIC LEVEL

    gutalo reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    global.lua > procura rateMagic = 60 coloca um valor baixo pra diminuir. Se ainda assim não resolver, aí já não sei... no XML\Vocations.xml tem uns multiplicadores de skills por classe mas não tem nada de ML lá, ML é só no config.lua mesmo
  12. Segunda Promotion

    KillerWatts reagiu a Artur Henrique por uma resposta no tópico

    1 ponto
    Só botar isso
  13. [Ajuda] Quest Simples, não funciona HELK

    ToissaoO reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    o problema desse script é que ele checa um storage e dá outro na hora de pegar o item, fazendo assim com que você sempre possa pegar o item function onUse(cid, item, frompos, item2, topos) local queststatus = getPlayerStorageValue(cid,11638) if item.uid == 10000 and queststatus == -1 then if getPlayerLevel(cid) >= 20 then doPlayerSendTextMessage(cid,22,"Você recebeu sua box 1!") doPlayerAddItem(cid,2149,10) setPlayerStorageValue(cid,11638,1) end else doPlayerSendTextMessage(cid,22,"Você já pegou a sua box 1.") end end Isso tem que ter o mesmo storage que isso: local queststatus = getPlayerStorageValue(cid,11638) setPlayerStorageValue(cid,11638,1) Explicando melhor: Quando o player vai abrir o baú ele checa o storage 11638. Caso o queststatus == -1, prossegue o script que o cara faz a quest. Ao fazer a quest o storage passa a valer "1" então se o player tentar fazer de novo essa quest vai retornar o erro porque o questatus não tá mais valendo -1. Mas pra fazer isso os dois storages tem que ser iguais
  14. Segunda Promotion

    KillerWatts reagiu a Artur Henrique por uma resposta no tópico

    1 ponto
    </vocation> <!-- <vocation id="9" name="Zika Master Sorcerer Apaga esse <!-- </vocation> --> </vocations> esse --> também E te recomendo baixar o Notepad++ pra tu mexer com edição, foi olhando scripts com ele que eu aprendi xD e por curiosidade, onde eu boto esse "spoil" que eu nunca consegui por? ='[
  15. Segunda Promotion

    KillerWatts reagiu a Artur Henrique por uma resposta no tópico

    1 ponto
    Ela funciona, me manda seu Vocations.xml ai.
  16. Servidor War em PVP !

    GvDestructor reagiu a Artur Henrique por uma resposta no tópico

    1 ponto
    Se eu entendi direito, só você ir no Config.lua e procurar a linha "worldType" e botar lá "pvp"
  17. Segunda Promotion

    KillerWatts reagiu a Artur Henrique por uma resposta no tópico

    1 ponto
    Eu não sei fazer nada em NPCs, mas fiz esse aqui por item: Actions\Scripts\Promotion.lua function onUse(cid, item) if getPlayerVocation(cid) > 8 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You already was promoted!") else if getPlayerVocation(cid) > 4 and getPlayerVocation(cid) < 9 then doPlayerSetVocation(cid, getPlayerVocation(cid)+4) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have been promoted!") doRemoveItem(item.uid, 1) end if getPlayerVocation(cid) <= 4 then doPlayerSetVocation(cid, getPlayerVocation(cid)+8) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have been promoted!") doRemoveItem(item.uid, 1) end end end Actions.xml <action itemid="XXXX" script="Promotion.lua"/> Só mudar XXXX pelo ID do item.
  18. 1 ponto
    function onUse(cid, item, frompos, item2, topos) local queststatus = getPlayerStorageValue(cid,9000) if item.uid == 10000 and queststatus == -1 then if getPlayerLevel(cid) >= 20 then doPlayerSendTextMessage(cid,22,"Você recebeu sua box 1!") doPlayerAddItem(cid,2149,10) setPlayerStorageValue(cid,11638,1) end else doPlayerSendTextMessage(cid,22,"Você já pegou a sua box 1.") end end Tenta assim, se não der avise
  19. muito bacana cara, obrigado por estar contribuindo, reputado.
  20. [PEDIDO] Item dar efeito de gelo!

    Ribeiro Foda reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    como a função onstatschange é uma coisa das sources, o único jeito é dar upgrade na versão.. Mas eu não sei se 8.4 não tem onstatschange, talvez até tenha e o problema possa ser alguma outra coisa, só não sei te dizer oque porque aqui funcionou perfeitamente, tanto que eu repeti o sistema pra todas as outras elemental armor's
  21. Infesty Galery

    Cat reagiu a Infesty por uma resposta no tópico

    1 ponto
    Projeto antigo q n deu certo Map Editor: ________________-
  22. 1 ponto
    no corpo de um water elemental você diz com ele vivo ou no corpo morto dele após ele morrer? porque se for no corpo é só colocar isso kkkk local config = { waters = {4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825}, fishable = {4608, 4609, 4610, 4611, 4612, 4613, 7236}, spawning = {4614, 4615, 4616, 4617, 4618, 4619}, holes = {7236}, corpses = { -- [corpse] = {[aid] = { {itemid, countmax, chance} }} [10499] = { {7632, 1, 8600}, --giant shimmering pearl {7633, 1, 8600}, --giant shimmering pearl [101] = { {2226, 1, 16000}, --fish bone {2238, 1, 15000}, --leather boots {2148, 1, 15000}, --gold coin {2376, 1, 14000}, --sword {2152, 1, 13000}, --platinum {7589, 1, 13000}, --strong mana potion {7588, 1, 13000}, --strong health potion {2168, 1, 11500}, --life ring {2167, 1, 15000}, --energy ring {9810, 1, 9500}, --rusty armor {9813, 1, 9500}, --rusty legs {7632, 1, 8600}, --giant shimmering pearl {7633, 1, 8600}, --giant shimmering pearl {7158, 1, 3100}, --rainbow trout {7159, 1, 3100}, --green perch {2146, 1, 11500}, --small sapphire {2149, 2, 11500}, --small emerald {10220, 1, 1500} --leviathan's amulet }, [102] = { {2226, 1, 16000}, --fish bone {2238, 1, 15000}, --leather boots {2148, 1, 15000}, --gold coin {2376, 1, 14000}, --sword {2152, 1, 14000}, --platinum {7589, 1, 14000}, --strong mana potion {7588, 1, 14000}, --strong health potion {2168, 1, 15500}, --life ring {2167, 1, 16000}, --energy ring {9810, 1, 11500}, --rusty armor {9813, 1, 11500}, --rusty legs {7632, 1, 9600}, --giant shimmering pearl {7633, 1, 9600}, --giant shimmering pearl {7158, 1, 5100}, --rainbow trout {7159, 1, 5100}, --green perch {2146, 1, 13500}, --small sapphire {2149, 2, 13500}, --small emerald {10220, 1, 2500} --leviathan's amulet } } }, checkCorpseOwner = getConfigValue("checkCorpseOwner"), rateLoot = getConfigValue("rateLoot"), summons = { -- {skill, name, chance, bossName, bossChance} }, rateSpawn = getConfigValue("rateSpawn"), baitFailRemoveChance = 10, allowFromPz = false, useBait = true, baitCount = 1, fishes = 1 } config.checkCorpseOwner = getBooleanFromString(config.checkCorpseOwner) function onUse(cid, item, fromPosition, itemEx, toPosition) if(isInArray(config.waters, itemEx.itemid)) then if(isInArray(config.spawning, itemEx.itemid)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end doSendMagicEffect(toPosition, CONST_ME_LOSEENERGY) return true end local corpse = config.corpses[itemEx.itemid] if(corpse ~= nil and corpse ~= 0) then corpse = corpse[itemEx.actionid] if(corpse ~= nil and corpse ~= 0) then if(config.checkCorpseOwner and not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then local owner = getItemAttribute(itemEx.uid, "corpseowner") if(owner ~= 0 and owner ~= nil and owner ~= getPlayerGUID(cid)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUARENOTTHEOWNER) return true end end local chance, items, default, max = math.random(0, 100000) / config.rateLoot, {}, {}, 0 for _, data in ipairs(corpse) do if(data[3] >= chance) then local tmp = {data[1], math.random(1, data[2])} table.insert(items, tmp) end if(data[3] > max) then default = data max = data[3] end end local itemCount = table.maxn(items) if(itemCount > 0) then local loot = items[math.random(1, itemCount)] doPlayerAddItem(cid, loot[1], loot[2]) else doPlayerAddItem(cid, default[1], default[2]) end doTransformItem(itemEx.uid, getItemInfo(itemEx.itemid).decayTo) doSendMagicEffect(toPosition, CONST_ME_WATERSPLASH) doDecayItem(itemEx.uid) return true end end if(not isInArray(config.fishable, itemEx.itemid)) then return false end local position, formula, tries = getThingPosition(cid), getPlayerSkill(cid, SKILL_FISHING) / 200 + 0.85 * math.random(), 0 config.allowFromPz = config.allowFromPz or not getTileInfo(position).protection if(item.itemid ~= ITEM_MECHANICAL_FISHING_ROD) then if(config.allowFromPz and (not config.useBait or getPlayerItemCount(cid, ITEM_WORM) >= config.baitCount)) then tries = 1 if(isInArray(config.holes, itemEx.itemid)) then if(doPlayerRemoveItem(cid, ITEM_WORM, config.baitCount)) then tries = 2 if(formula > 0.83) then doPlayerAddItem(cid, ITEM_RAINBOW_TROUT, config.fishes) elseif(formula > 0.7) then doPlayerAddItem(cid, ITEM_NORTHERN_PIKE, config.fishes) elseif(formula > 0.5) then doPlayerAddItem(cid, ITEM_GREEN_PERCH, config.fishes) else doPlayerAddItem(cid, ITEM_FISH, config.fishes) end end elseif(formula > 0.7 and doPlayerRemoveItem(cid, ITEM_WORM, config.baitCount)) then tries = 2 if(table.maxn(config.summons) > 0 and getDistanceBetween(position, toPosition) < 2) then local skill, summon = getPlayerSkill(cid, SKILL_FISHING), {name = "", chance = 0, bossName = "", bossChance = 0} for _, data in pairs(config.summons) do if(skill >= data[1]) then summon.name = data[2] summon.chance = data[3] summon.bossName = data[4] summon.bossChance = data[5] end end local random = math.random(1, 100000) / config.rateSpawn if(summon.bossName ~= "" and summon.bossChance >= random) then doCreateMonster(summon.bossName, position) tries = 4 elseif(summon.name ~= "" and summon.chance >= random) then doCreateMonster(summon.name, position) tries = 3 else doPlayerAddItem(cid, ITEM_FISH, config.fishes) end else doPlayerAddItem(cid, ITEM_FISH, config.fishes) end end end elseif(config.allowFromPz and (not config.useBait or getPlayerItemCount(cid, ITEM_NAIL) >= config.baitCount)) then if(formula > 0.7 and doPlayerRemoveItem(cid, ITEM_NAIL, config.baitCount)) then doPlayerAddItem(cid, ITEM_MECHANICAL_FISH, config.fishes) tries = 2 else tries = 1 end end if(tries > 1) then doPlayerAddSkillTry(cid, SKILL_FISHING, tries) if(not isInArray(config.holes, itemEx.itemid)) then doTransformItem(itemEx.uid, itemEx.itemid + 6) else doTransformItem(itemEx.uid, itemEx.itemid + 1) end doDecayItem(itemEx.uid) elseif(tries > 0) then doPlayerAddSkillTry(cid, SKILL_FISHING, 1) if(config.baitFailRemoveChance >= math.random(1, 100)) then if(item.itemid == ITEM_MECHANICAL_FISHING_ROD) then doPlayerRemoveItem(cid, ITEM_NAIL, config.baitCount) else doPlayerRemoveItem(cid, ITEM_FISH, config.baitCount) end end end doSendMagicEffect(toPosition, CONST_ME_LOSEENERGY) return true end se der erro muda essa parte aqui (tira a ultima virgula) [10499] = { {7632, 1, 8600}, --giant shimmering pearl {7633, 1, 8600}, --giant shimmering pearl ficando assim [10499] = { {7632, 1, 8600}, --giant shimmering pearl {7633, 1, 8600} --giant shimmering pearl 10499 é o corpo do water elemental, 7632 e 7633 são os Id's das giant shimmering pearls, 1 é a quantidade que ganha e 8600 é a chance. (essa chance é em 100.000)
  23. [PEDIDO] Item dar efeito de gelo!

    Thiago Virtuoso reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    velho, no meu OT funcionou perfeitamente.. eu ja chequei o script mil vezes e não achei nada que pudesse impedir de rodar na 8.4 e na 8.6. Pra falar a verdade rodou tão bem que eu até fiz umas alterações no script pra caso vc esteja usando o full glacier set ela adicione dano de congelamento ao paralisar --[[Script made 100% by Night Wolf and Nogard do not remove the fucking credits or I may kill you and practice necrofily with your filthy body]] --condição que irá adicionar local gelocondition = createConditionObject(CONDITION_PARALYZE) setConditionParam(gelocondition, CONDITION_PARAM_TICKS, 10000) setConditionFormula(gelocondition, -0.9, 0, -0.9, 0) local frigo = createConditionObject(CONDITION_FREEZING) setConditionParam(frigo, CONDITION_PARAM_DELAYED, 1) addDamageCondition(frigo, 5, 2000, -300) addDamageCondition(frigo, 5, 2000, -200) addDamageCondition(frigo, 5, 2000, -100) ------- local config = { itemid = 7897, --id do item que deverá ser equipado para ativar o gelo place = 4, --posição que o item deve estar para funcionar, cheque na tabela abaixo percent = 5, --se vc quiser 20%, coloque 5 pois 1/5 = 0,2 (20%) valorvida = 300 --quanto deve ser o valor minimo de vida a perder para executar o script } local head = { itemid = 7902, place = 1 } local legs = { itemid = 7896, place = 7 } local boots = { itemid = 7892, place = 8 } local necklace = { itemid = 7888, place = 2 } --[[ Tabela de places possíveis CONST_SLOT_HEAD (1) = helmet CONST_SLOT_NECKLACE (2) = necklace slot (amulet of loss etc.) CONST_SLOT_BACKPACK (3) = backpack, bag CONST_SLOT_ARMOR (4) = armor CONST_SLOT_LEFT (5) = left hand (its really hand placed >> (right page on screen)) CONST_SLOT_RIGHT (6) = right hand (its really hand placed << (left page on screen)) CONST_SLOT_LEGS (7) = legs CONST_SLOT_FEET (8) = boots CONST_SLOT_RING (9) = ring slot CONST_SLOT_AMMO (10) = ammo slot (arrows etc.)]] ----------------------------------------------- function canEffect(pos, pz, proj) -- Night Wolf based on Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTilePzInfo(pos) and not pz then return false end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function onStatsChange(cid, attacker, type, combat, value) if (getPlayerSlotItem(cid, config.place).itemid == config.itemid) then if type == STATSCHANGE_HEALTHLOSS and value >= config.valorvida then if math.random (1,config.percent) == 1 then local pos = getPlayerPosition (cid) local effectPositions = { {x = pos.x, y = pos.y - 2, z = pos.z}, {x = pos.x, y = pos.y + 2, z = pos.z}, {x = pos.x - 2, y = pos.y, z = pos.z}, {x = pos.x + 2, y = pos.y, z = pos.z}, {x = pos.x - 2, y = pos.y - 1, z = pos.z}, {x = pos.x + 2, y = pos.y - 1, z = pos.z}, {x = pos.x + 2, y = pos.y + 1, z = pos.z}, {x = pos.x - 2, y = pos.y + 1, z = pos.z}, {x = pos.x - 1, y = pos.y - 2, z = pos.z}, {x = pos.x + 1, y = pos.y - 2, z = pos.z}, {x = pos.x + 1, y = pos.y + 2, z = pos.z}, {x = pos.x - 1, y = pos.y + 2, z = pos.z} } local conditionPositions = { {x = pos.x, y = pos.y - 2, z = pos.z}, {x = pos.x, y = pos.y + 2, z = pos.z}, {x = pos.x - 2, y = pos.y, z = pos.z}, {x = pos.x + 2, y = pos.y, z = pos.z}, {x = pos.x - 2, y = pos.y - 1, z = pos.z}, {x = pos.x + 2, y = pos.y - 1, z = pos.z}, {x = pos.x + 2, y = pos.y + 1, z = pos.z}, {x = pos.x - 2, y = pos.y + 1, z = pos.z}, {x = pos.x - 1, y = pos.y - 2, z = pos.z}, {x = pos.x + 1, y = pos.y - 2, z = pos.z}, {x = pos.x + 1, y = pos.y + 2, z = pos.z}, ---- {x = pos.x, y = pos.y - 1, z = pos.z}, {x = pos.x, y = pos.y + 1, z = pos.z}, {x = pos.x - 1, y = pos.y, z = pos.z}, {x = pos.x + 1, y = pos.y, z = pos.z}, {x = pos.x - 1, y = pos.y + 1, z = pos.z}, {x = pos.x - 1, y = pos.y - 1, z = pos.z}, {x = pos.x + 1, y = pos.y - 1, z = pos.z}, {x = pos.x + 1, y = pos.y + 1, z = pos.z}, ------ {x = pos.x - 1, y = pos.y + 2, z = pos.z} } if isCreature(cid) == TRUE then for _, cPos in ipairs(conditionPositions) do local mob = getTopCreature(cPos).uid if canEffect (cPos) and mob ~= 0 and isMonster(mob) then doAddCondition(mob, gelocondition) if (getPlayerSlotItem(cid, head.place).itemid == head.itemid) and (getPlayerSlotItem(cid, legs.place).itemid == legs.itemid) and (getPlayerSlotItem(cid, boots.place).itemid == boots.itemid) and (getPlayerSlotItem(cid, necklace.place).itemid == necklace.itemid) then doAddCondition(mob, frigo) end end if (getPlayerSlotItem(cid, head.place).itemid == head.itemid) and (getPlayerSlotItem(cid, legs.place).itemid == legs.itemid) and (getPlayerSlotItem(cid, boots.place).itemid == boots.itemid) and (getPlayerSlotItem(cid, necklace.place).itemid == necklace.itemid) then if canEffect (cPos) then doSendMagicEffect(cPos, 43) end end end for _, ePos in ipairs(effectPositions) do if canEffect(ePos) then doSendMagicEffect(ePos, 41) end end else end else end return true else end return true end return true end mas mesmo assim é estranho, se não tá dando erro no console era pra funcionar (pelo menos se vc colocou tudo certinho no creaturescripts.xml e no login.lua)
  24. PDA Edited

    thata1234 reagiu a frafre por uma resposta no tópico

    1 ponto
    •Senha do god: god/god. •Mapa com hunts kanto. •Server Sem System de level !. •Clan System (PDA Slicer). •Alguns bugs corrigidos. •Pokemons da 1° até a 2° geração. •novas sprites do PxG. •Taunt System, para todos os clan rank 5, e algumas outfits. •Moto system, e boat system. •novas paredes, pisos, e itens PxG. •Npc De itens de task de clãns. •Adicionado Npc Rey,Ricky, Carlos (parte da moto System). •Shinys Espalhado pelo mapa. •novos outfits, que nao tem a ver com Pokemon, mas há um bom divertimento com elas. •Auto-loot system adicionado. •Duel System. •Golden arena. •Moves system (m1 a m12). •Maximo 6 pokemonsna bag. •Order 100%. •Adicionados alguns teleports Link do serv: https://www.4shared.com/rar/wmb574yw/PDA_Edited.html? Scan do serv: https://www.virustotal.com/pt/file/61260e7bd49ab75ca682cea2d761859c678f06cdbe65aed4bdb3f0d3d00f1e33/analysis/1375893470/ Link do client: https://www.4shared.com/rar/DvCylVq6/Client.html? Scan do client:https://www.virustotal.com/pt/file/21f68a388389d14bc39a52e47625e7277215c471eda92c3655d216998246ef02/analysis/1375894052/
  25. 1 ponto
    Aê galerinha do TK, aqui é o Kalvin é o seguinte eu vi que no POKEMON existe apenas um sistema de mute que é /mute e o player é mutado 100 minutos, mais se ele relogar ele volta normal, então criei editei esse script para que nao fica-se esse bug ee o cara pode alterar o tempo que elee vai mutar tipo 10 minutos... em geral, e agora ele pode dar /desmute no cara se ele kiser que nao vá o tempo todo. vamos lá .. LEMBRANDO ESSE SCRIPT FOI EDITADO POR MIM / KALVIN KARL . topicos no #####, é o pobre do caio que me pediu, pedi pra ele nao postar ele postou.. então vai ai o scripter para todos agora ... no talkaction vamos adicionar isso crie um arquivo chamado mute.lua Vamos a tag ... Agora em creaturescript vamos adicionar isso .... mute.lua um novo arquivo e vamos add isso dentro dele.. Vamos a tag agora .... Lembrando quem postou aqui, pegou no forum . ##### e o script foi criado por mim, o pablo viadão postou lá, se alguem já postou nesse forum eu nao achei. Esse script foi criado por não sei quem e editado por mim Kalvin Karl ! naão adiantem falar que não foi ? !
  26. tem uma maneira bemmmmm mais facil, esse script aqui vale ouro, entao lá vai: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1492) local lock = { Position(1206, 240, 6), Position(1213, 247, 6) } local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function onCastSpell(cid, var) if isInRange(getCreaturePosition(cid), lock[1], lock[2]) then doPlayerSendCancel(cid, "Não é permitido usar FireBomb Rune aqui!!") return true end return doCombat(cid, combat, var) end essa é o script fire bomb.lua, já inclui nas posiçoes certas a trava para não usar em certas áreas. Configuração: basta editar as posições do Lock (position) como se fossem o sqm do canto superior esquerdo e a outra do canto inferior direito, fechando assim um quadrado da área que nao deseja que usem essa runa. Além disso, aparece uma mensagem pro player dizendo que ali não se pode usar a runa! Esse script pode ser usado em qualquer outra runa, incluindo até magic wall rune, entao, vai da tua criatividade aonde vc quiser colocá-lo. esse eu sei que merece um REP+ da galera ai, pq é extremamente fácil de configurar e útil! Abcs comunidade TK (não deixem de conhecer meu ot!) Qq dúvida é so avisar
  27. [PHP] - Trabalhando com XML

    kinaofnarutoradbr reagiu a Renato por uma resposta no tópico

    1 ponto
    Boas novas TibiaKing! Vou ensinar vocês a como trabalhar com XML no php, exatamente porque OTServ usa muito xml. (no final vou dar um exemplo de como usar o conteúdo do tutorial em um otserv) Vamos lá! Primeiro crie a pasta xml no seu site, dentro dela cria o arquivo load.xml e o arquivo index.php. Vamos começar com o xml, crie uma estrutura qualquer nela, mas seguindo corretamente a estrutura, abrindo e fechando sem deixar nada aberto etc. Aqui vai o exemplo do que eu fiz: <?xml version="1.0" encoding="uft-8"?> <xml> <item name="Item 1"> <subitem>Sub 1 Item 1</subitem> <subitem>Sub 2 Item 1</subitem> <subitem>Sub 3 Item 1</subitem> </item> <item name="Item 2"> <subitem>Sub 1 Item 2</subitem> <subitem>Sub 2 Item 2</subitem> </item> <item name="Item 3"> <subitem>Sub 1 Item 3</subitem> <subitem>Sub 2 Item 3</subitem> <subitem>Sub 3 Item 3</subitem> <subitem>Sub 4 Item 3</subitem> </item> </xml> Nossa estrutura XML já está montada. Agora vamos para o PHP! Abra o arquivo index.php e cole este código no qual vou explicar linha a linha: <?php if (file_exists('load.xml')){ $XML = simplexml_load_file('load.xml'); echo '<ul>'; foreach ($XML->item as $a){ echo '<li>'.$a['name'].'</li><ul>'; foreach ($a->subitem as $b){ echo '<li>'.$b.'</li>'; } echo '</ul>'; } echo '</ul>'; } ?> Explicando código: <?php - abrindo php if (file_exists('load.xml')){ - verificando se o arquivo load.xml existe (para evitar erros) $XML = simplexml_load_file('load.xml'); - lendo o xml e colocando na variável $XML echo '<ul>'; - escreva <ul> foreach ($XML->item as $a){ - para cada tag <item> echo '<li>'.$a['name'].'</li><ul>'; - escreva um <li>(conteudo do atributo name da tag <item>)</li> foreach ($a->subitem as $b){ - para cada tag <subitem> dentro da tag <item> echo '<li>'.$b.'</li>'; - escreva <li> (conteúdo do subitem) </li> } - fecha segundo foreach echo '</ul>'; - escreva </ul> } - fecha primeiro foreach echo '</ul> - escreva </ul> } - fecha if ?> - fecha php Depois abra no seu site e verás o resultado: Jajá vou criar um tutorial para ler os algum xml de otservers e posto o link aqui, como prometi no começo do tutorial.
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo