Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 05/15/15 em todas áreas
-
*Informações +Edições +Print's +Erros/Bug's +Creditos +Download+Scan QUALQUER ERRO E BUG, COMENTAR NESSE TÓPICO Desculpa pelos erros ortográficos. ah antes que me esqueça ID da vara de pesca 25804 pontos
-
acabei de programa um aqui foi pro otserver de tibia normal mais deve pegar no seu ot data\actions\scripts cria um aquivo nome_do_arquivo.lua -- config by uotl£ local config = { sumonar = "Demon", chave = 187657, efeito = 30, tempo = 5, tempo_limite = 1800 } -- config by uotl£ function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid,config.chave) - os.time() <= 0 then doSummonMonster(cid, config.sumonar) doRemoveItem(item.uid,1) bicho = getCreatureSummons(cid) doSendMagicEffect(getThingPosition(bicho[1]),config.efeito) addEvent(removedor_de_summon,config.tempo*60*1000,cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O Seu "..config.sumonar.." Vai Ser Removido Em "..config.tempo.." Minunto") setPlayerStorageValue(cid,config.chave, os.time() + config.tempo_limite) elseif (getPlayerStorageValue(cid, config.chave) - os.time()) >= 60 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "pra usar de novo falta "..math.ceil(((getPlayerStorageValue(cid, config.chave) - os.time())/61)).." minutos") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "pra usar de novo falta "..(getPlayerStorageValue(cid, config.chave) - os.time()).." segundos") end return true end function removedor_de_summon (cid) if isPlayer(cid) then doRemoveCreature(bicho[1]) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Removendo O "..config.sumonar.." ") return true end end TAG <action itemid="ID_DO_ITEM" script="nome_do_arquivo.lua" /> não esqueça de editar essa parte do script local config = { sumonar = "Demon", efeito = 30,2 pontos
-
Adaptar Script
Gabriel Couto e um outro reagiu a Miinerva por uma questão
Tenho o que voce precisa! Acredito que esteja com projeto RadBr. Estou com projeto 10.76 também, e esta muito bom jah! Se precisa de mais ajuda estou disponivel no PM. Mana function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "\nMana atual: " .. getPlayerMana(cid) .. "\nMana máxima: " .. getPlayerMaxMana(cid) .. "") return true end if isPremium(cid) == TRUE then local pid = getPlayerByNameWildcard(param) if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O jogador com o nome " .. param .. " não esta online ou não existe.") return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "\nMana de [ " .. getCreatureName(pid) .. " ] atual: " .. getPlayerMana(cid) .. "\nMana de [ " .. getCreatureName(pid) .. " ] máxima: " .. getPlayerMaxMana(cid) .. "") return true else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Apenas jogadores VIP podem utilizar este comando para visualizar informações de outros jogadores.") return true end end Vida function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "\nVida atual: " .. getCreatureHealth(cid) .. "\nVida máxima: " .. getCreatureMaxHealth(cid) .. "") return true end if isPremium(cid) == TRUE then local pid = getPlayerByNameWildcard(param) if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O jogador com o nome " .. param .. " não esta online ou não existe.") return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "\nVida de [ " .. getCreatureName(pid) .. " ] atual: " .. getCreatureHealth(pid) .. "\nVida de [ " .. getCreatureName(pid) .. " ] máxima: " .. getCreatureMaxHealth(pid) .. "") return true else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Apenas jogadores VIP podem utilizar este comando para visualizar informações de outros jogadores.") return true end end2 pontos -
Fala galera do xtibia beleza? Hoje estou trazendo aqui um servidor que eu e o Matheus Pacheco fez é um dbo misturado com nto e bleach bom não é um servidor perfeito pois se fosse não estaria compartilhando com vocês, mais o servidor é bacana pra caramba pra quem curte misturas de servidores. Bom galera não entrarei muito em detalhes pois estou meio compresa, mais dentro da pasta do servidor tera um arquivo LEIAME!!!.txt vocês pode ler as informações la... Imagens: Templo TELEPORTES: SITE: Proibido postar esse servidor em outros fórum/sites sem minha permissão. DOWNLOAD DO SERVIDOR: DOWNLOAD SCAN --------------------------------------------------------- DOWNLOAD DO SITE: DOWNLOAD SCAN --------------------------------------------------------- DOWNLOAD DO CLIENT DOWNLOAD SCAN Créditos: Yan Liima Matheus Pacheco1 ponto
-
The Forgotten Server 1.1
epaminombas reagiu a comedinhasss por um tópico no fórum
Olá amigos, venho aqui trazer as compilações oficiais do TFS 1.1 Isso é disponibilizado pelo próprio Mark para os usuários de windows... Link de versões já compiladas para o windows http://nightlies.otland.net/ Source https://github.com/otland/forgottenserver Tutorial de como compilar https://github.com/otland/forgottenserver/wiki/Compiling-on-Windows Para ver se ele é o mais atual você deve comparar o numero da commit com o do publicado, e é só baixar o executável de acordo com sua preferencia (recomendo sempre o mais recente e compilado em Release).1 ponto -
Opa, galerinha do XTibia, resolvi trazer a solução de uns problemas que vejo que ocorrem com uma certa frequência: Os erros da data base. Neste tutorial vou ensinar a resolver os erros do tipo No such table, Insert into, No such column, ... has no column named... etc. 1°) NO SUCH TABLE Bom, para o erro No such table, basta vc visualizar qual table está faltando. Para isso basta ler o erro na distro: No caso da imagem, está faltando a table: player_statements Para resolver este e qualquer outro problema deste tipo, caso sua data base seja sqlite, basta abrir sua data base pelo Sqlite Studio(download: http://sqlitestudio.pl/?act=download) e clicar em Open SQL query editor: Mas caso sua data base seja Mysql abra pelo phpMyadmin, ou por outro editor de sua preferencia. 1.1°) EXECUTANDO OS COMANDOS PARA RESOLVER O PROBLEMA Bom, dependendo da table que estiver faltando, vc irá colocar seu respectivo comando, segue abaixo TODOS os comandos básicos necessários para que sua data base fique Ok! : (VC VAI PEGAR O COMANDO REFERENTE À TABLE QUE VC QUER!!!) account_viplist accounts bans environment_killers global_storage guild_invites guild_kills guild_ranks guild_wars guilds house_auctions house_data house_lists houses killers market_history market_offers player_deaths player_depotitems player_inboxitems player_items player_killers player_namelocks player_skills player_spells player_statements player_storage player_viplist players server_config server_motd server_record server_reports tile_items tile_store tiles announcements pagsegurotransacoes player_advances reports thanks z_bug_logs z_featured_article z_forum z_helpdesk z_monsters z_network_box z_news_tickers z_ots_comunication z_polls z_polls_answers z_poll_votes z_shop_history_item z_shop_history_pacc z_shop_offer z_spells z_news_big 2°) No such column / "NOME DA TABLE" has no column named "NOME DA COLUMN QUE FALTA" / Insert into Bom, para resolver esse problema vc deve identificar em qual TABLE está essa coluna que falta. Para isso, basta ler o erro como na imagem: No caso da imagem, está faltando a column WORLD_ID dentro da table MARKET_OFFERS. Para resolver, vc deve executar excluir a sua table MARKET_OFFERS existante em sua data base, e em seguida, executar o domando da da market_offers, encontrado acima, logicamente isso só se aplica ao caso da imagem, depende do seu caso, vc deve excutar o comando da table que estiver sendo referida no erro. Mas antes de executá-lo vc deve excluir a sua table EXISTENTE, para então executar o comando. ESTA FORMA DE RESOLUÇÃO SE APLICA AOS TRÊS CASOS: NO SUCH COLUMN, ...HAS NO COLUMN NAMED... e INSERT INTO. Bom galera, é isso. SE ENCONTRAREM, OU SE DEPARAREM COM ALGUM ERRO, BASTA ME PEDIR AJUDA QUE EU DAREI TOTAL SUPORTE PARA VOCÊS! SE ESTIVER FALTANDO MAIS ALGUMA TABLE QUE EU NÃO COLOQUEI AQUI, PF ME INFORMEM E EU ATUALIZAREI O TÓPICO!!! Lembrem-se, se eu te ajudei, por favor, deem REP++ pois foi meio trabalhoso fazer este tutorial todo... ^^ ESTOU A DISPOSIÇÃO DE TODOS! Espero ter ajudado!! E isso é tudo, pessoal! ^^ Créditos Eu (@Danihcv) Abraços.1 ponto
-
[Open] Launcher Updater
ivissonx6 reagiu a gabrielbsales por um tópico no fórum
Bom, estava fazendo um launcher pra um servidor que estou, mas acabei deixando de lado e começando outro, e para não ir pra lugar nenhum, vou postar aqui. Deixei um pouco editável. O Launcher: Requisitos: Host(site) Olhos para ler Primeiramente: SCAN! E depois: BAIXE! - Sources inclusas.(Consertado imagem) NEW PATCH GENERATOR Agora, vamos configura-lo, tarefa muito fácil:(mentira!): Bom, é isso, espero que seja útil. Aos interessados: Créditos: Eu(Gabrielbsales) Google que salva a pátria1 ponto -
ShopGuild TFS 1.0
Beeki reagiu a Natanael Beckman por um tópico no fórum
Shop Guild TFS 1.0 Bom, vamos ao sistema: Em talkactions.xml, adicione a tag abaixo: <talkaction words="!guildpoints" separator=" " script="guildpoints.lua"/> Na pasta talkactions/scripts faça um .lua com o nome guildpoints e dentro dele adicione os coder abaixo: local config = { executeInterval = 24, minimumLevel = 80, membersNeeded = 10, minimumDifferentIps = 6, pointAmount = 9 } local function getValidAccounts(guild) local resultId = db.storeQuery('SELECT a.`id` FROM `accounts` a, `guild_membership` m, `players` p WHERE m.`guild_id` = ' ..guild:getId() .. ' AND p.`id` = m.`player_id` AND p.`level` > ' .. config.minimumLevel .. ' and a.`id` = p.`account_id` AND a.`guild_points_stats` = 0 GROUP BY a.`id`;') if resultId == false then return {} end local accounts = {} repeat table.insert(accounts, result.getDataInt(resultId, 'id')) until not result.next(resultId) result.free(resultId) return accounts end function onSay(cid, words, param) local player = Player(cid) local guild = player:getGuild() if not guild or player:getGuildLevel() ~= GUILDLEVEL_LEADER then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, 'Only guild leader can request points.') return false end local resultId = db.storeQuery('SELECT `last_execute_points` FROM `guilds` WHERE id = ' .. guild:getId()) if resultId == false then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendCancelMessage('Error while running database query.') return false end local lastExecution = result.getDataInt(resultId, 'last_execute_points') result.free(resultId) if lastExecution >= os.time() then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, 'The command can only be run once every ' ..config.executeInterval .. ' hours.') return false end local members = guild:getMembersOnline() for i = #members, 1, -1 do if members[i]:getLevel() < config.minimumLevel then table.remove(members, i) end end if #members < config.membersNeeded then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, 'Only ' .. #members .. ' guild members online, you need ' ..config.membersNeeded .. ' guild members with level ' .. config.minimumLevel .. ' or higher.') return false end local ipDictionary, ipCount = {}, 0 for i = 1, #members do local ip = members[i]:getIp() if not ipDictionary[ip] then ipDictionary[ip] = true ipCount = ipCount + 1 end end if ipCount < config.minimumDifferentIps then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, 'Only ' .. ipCount .. ' members are valid, you need ' ..config.minimumDifferentIps .. ' players with different ip addresses.') return false end local validAccounts = getValidAccounts(guild) db.query('UPDATE `guilds` SET `last_execute_points` = ' .. (os.time() + config.executeInterval * 3600) .. ' WHERE `guilds`.`id` = ' .. guild:getId() .. ';') player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, #validAccounts .. ' guild members received points.') if #validAccounts > 0 then db.query('UPDATE `accounts` SET `guild_points` = `guild_points` + ' .. config.pointAmount .. ', `guild_points_stats` = ' .. os.time() .. ' WHERE `id` IN (' .. table.concat(validAccounts, ',') .. ');') for i = 1, #members do local member = members[i] if isInArray(validAccounts, member:getAccountId()) then member:sendTextMessage(MESSAGE_INFO_DESCR, 'You received ' .. config.pointAmount .. ' guild points.') end end end return false end No coder acima bem no inicio tem as linhas seguintes para configurar: executeInterval = 24, ( Intervalo para execução do comando, ae está de 24 em 24hrs) membersNeeded = 10, (Quantos players é preciso está online para poder executar o comando.) minimumDifferentIps = 6, (Quantos IPS diferentes são necessários para executar o comando no exemplo ae tem 6.) minimumLevel = 80, (Aqui adicione o level minimo, é necessário que todos os player da guild tenha o level pedido para o lider executar o comando.) pointAmount = 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: -- ### CONFIG ### -- message send to player by script "type" (types you can check in "global.lua") SHOP_MSG_TYPE = 18 -- time (in seconds) between connections to SQL database by shop script SQL_interval = 30 -- ### END OF CONFIG ### function onThink(interval, lastExecution) local result_plr = db.storeQuery("SELECT * FROM z_ots_guildcomunication") if(result_plr ~= false) then repeat local id = tonumber(result.getDataInt(result_plr, "id")) local action = tostring(result.getDataString(result_plr, "action")) local delete = tonumber(result.getDataInt(result_plr, "delete_it")) local cid = getPlayerByName(tostring(result.getDataString(result_plr, "name"))) if(cid) then local itemtogive_id = tonumber(result.getDataInt(result_plr, "param1")) local itemtogive_count = tonumber(result.getDataInt(result_plr, "param2")) local container_id = tonumber(result.getDataInt(result_plr, "param3")) local container_count = tonumber(result.getDataInt(result_plr, "param4")) local add_item_type = tostring(result.getDataString(result_plr, "param5")) local add_item_name = tostring(result.getDataString(result_plr, "param6")) local received_item = 0 local full_weight = 0 if(add_item_type == 'container') then container_weight = getItemWeight(container_id, 1) if(isItemRune(itemtogive_id)) then items_weight = container_count * getItemWeight(itemtogive_id, 1) else items_weight = container_count * getItemWeight(itemtogive_id, itemtogive_count) end full_weight = items_weight + container_weight else full_weight = getItemWeight(itemtogive_id, itemtogive_count) if(isItemRune(itemtogive_id)) then full_weight = getItemWeight(itemtogive_id, 1) else full_weight = getItemWeight(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) received_item = doPlayerAddItemEx(cid, new_item) end if(type(received_item) == "number" and received_item == RETURNVALUE_NOERROR) then doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop.') db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";") db.query("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";") else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop 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 shop 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 until not result.next(result_plr) result.free(result_plr) 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> 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> 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> 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> 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> 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> 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 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 Não proíbo ninguém de copia o tópico só peço que onde você adicione inclua os créditos mencionados.1 ponto -
Woodcutter System (lenhador)
SkyDangerous reagiu a Krono por um tópico no fórum
Olá galerinha, tudo beleza? bom hoje estou trazendo para vocês um script simples, mais que pode ser util dentro de um contexto. É um sistema de Lenhador, onde ao utilizaro machado em algumas arvores (configuraveis) você poderá conseguir extrair lenha. Segue o script. data/actions.xml <action itemid="2378" event="script" value="woodcutter.lua"/> data/actions/scripts/woodcutter.lua Opção 1 - Sem remover a arvore. --- 15/05/2015-- function onUse(cid, item, fromPosition, itemEx, toPosition) local arvoresid = {2709,2710} --id das arvores que viram madeira local madeiraid = 5901--id da madeira que sera criada local chance = 50 -- 1 a 100 local pposition = getPlayerPosition(cid) for i= 1, #arvoresid do if arvoresid[i] == itemEx.itemid then local valor = math.random(1, 100) if chance >= valor then doCreateItem(madeiraid, 1, pposition) doSendMagicEffect(pposition, CONST_ME_MAGIC_GREEN) doCreatureSay(cid, getCreatureName(cid) .. ' cortou madeira', TALKTYPE_ORANGE_1) else doCreatureSay(cid, 'Ação falhou', TALKTYPE_ORANGE_1) end end end end --- 15/05/2015-- Opção 2 - Removendo a arvore. (sugerido por SkyDangerous) --- 15/05/2015-- function onUse(cid, item, fromPosition, itemEx, toPosition) local arvoresid = {2709,2710} --id das arvores que viram madeira local madeiraid = 5901--id da madeira que sera criada local chance = 50 -- 1 a 100 local pposition = getPlayerPosition(cid) for i= 1, #arvoresid do if arvoresid[i] == itemEx.itemid then local valor = math.random(1, 100) if chance >= valor then doTransformItem(itemEx.uid, madeiraid) doSendMagicEffect(pposition, CONST_ME_MAGIC_GREEN) doCreatureSay(cid, getCreatureName(cid) .. ' cortou madeira', TALKTYPE_ORANGE_1) else doCreatureSay(cid, 'Ação falhou', TALKTYPE_ORANGE_1) end end end end ------ 15/05/2015-- Creditos: krono1 ponto -
Olá XTibianos! Esse tutorial ensina de maneira extremamente simples como bloquear completamente alguns países específicos no seu CSF. Vamos lá? 1. Utilize o nano ou qualquer outro editor de texto para editar o arquivo de configuração do CSF: nano /etc/csf/csf.conf 2. Vá até a linha 721 (aproximadamente) e procure por CC_DENY: CC_DENY = "" 3. Acesse o site IPdeny para pegar o código do país que você deseja bloquear: + Clique aqui para acessar o site. -> Exemplo: Caso você queira bloquear a França: + Procure na página com o CTRL + F o nome do país em inglês. FRANCE (FR) [download zone file] Size: 21.09 KB Copie o código do país entre ( ), neste caso: FR. 4. Cole o código do país na varíavel CC_DENY: + Para mais de um país, utilize a virgula. CC_DENY = "FR,CN" + No exemplo acima, estaríamos bloqueando a França e a China. 5. Reinicie seu CSF. service csf restart Pronto! Você já está bloqueando completamente o acesso dos países configurados! Façam bom proveito (Esse tutorial foi completamente escrito por mim. Qualquer cópia deve ser previamente autorizada e conter os devidos créditos.)1 ponto
-
[EDIÇÃO #1] O Melhor Mapa
Miinerva reagiu a Gabriel Couto por um tópico no fórum
Antes de ler esse tópico e resolver participar, leia atentamente ao tópico das regras: http://www.xtibia.com/forum/topic/233822-regras-o-melhor-mapa-omm/ Loja de Magia: Pode ser tanto uma loja onde um player pode comprar Spells (magias) ou uma loja em que o Player pode comprar runas, poções, etc. A escolha é sua. Início da Edição: 09/05/2015 Fim do Envio dos Mapas: 15/05/2015 as 23:59 Início da Votação: 16/05/2015 as 00:00 Fim da Votação: 17/05/2015 as 12:30 Resultado: 17/05/2015 até as 22:00 Início da Edição #2: 16/05/2015 as 00:00 Você deve enviar o seu mapa .otm com o seguinte título: OMM #1 (Loja de Magia) - SEU NICK O envio deve ser feito por mensagem privada ao Gabriel Couto com o mesmo título do arquivo .otbm e com o seguinte formulário: A(s) imagen(s) do mapa tanto para votação quanto para resultado será(ão) tiradas por mim. Boa sorte a todos, avisem aos seus amigos e convidem o pessoal para participar!1 ponto -
TERMINAL - Comandos SSH basicos Bom, para muitos ao abrir um terminal é como se estivesse abrindo a jaula de um bicho de 7 cabeças. Mais não é bem assim, com um conhecimento basico dá para se ter uma boa utilização, comos e fosse uma interface gráfica, e com a vantagem de uma agilidade, que no modo visual não é possivel. Visando melhorar o relacionamento do Terminal com os usuarios, busquei na internet um conhecimento basico sobre os comandos mais utilizados, juntamente com a explicação. Comandos para Monitoramento do ServidorComando: top Descrição: O comando top é usado para listar todos os processos em execussão no servidor, além de estatísticas de uso da CPU, memória, I/O, load average e etc… No exemplo abaixo, estaremos indicando ao comando top que ele deverá ser atualizado a cada 1 segundo: Exemplo: top d 1 Comando: ps Descrição: Parecido com o comando top, ele serve para listar os processos em execussão no servidor. O exemplo abaixo seguidos das opções aux serve para listar todos os processos e de qualquer usuário. Exemplo: ps aux Comando: kill -9 Descrição: O kill é usado para matar um processo no servidor pelo PID dele. Você pode descobrir o PID de um processo executando o comando pidof -x seguido do nome do processo. Exemplo: kill -9 1234 Comando: free Descrição: Este comando é usado para visualizar os dados da memória física do servidor. Use-o com a opção -m para que os dados sejam exibidos em megabytes. Exemplo: free -m Comando: df Descrição: Este comando é usado para listar as partições do servidor e seus respectivos espaços/pontos de montagem. Use-o seguido das oção -h para que os espaços sejam listados de forma que o usuário possa entender(em kbytes, megabytes, gigabytes, etc…) Exemplo: df -h Comando: w Descrição: Este comando pode ser usado para listar os usuários conectados ao servidor pelo serviço SSH, alem do load average e uptime. Exemplo: w Comandos de Manipulação de ArquivosComando: cd Descrição: Este comando é usado para navegar em diretórios. Use-o sem nenhuma opção para ir para o diretório root, seguido do comando a ser acessado ou ainda seguido de 2 pontos para que volte um nível. Exemplo 1: cd Exemplo 2: cd /usr Exemplo 3: cd .. Comando: cp Descrição: Este comando é usado para copiar diretórios e/ou arquivos. Use-o seguido da opção -R para que sejam copiados todos os subdiretórios de um diretório. Exemplo 1: cp teste.txt teste_final.txt Exemplo 2: cp -R /home/diretorio /root Comando: ls Descrição: Este comando é usado para listar arquivos, diretórios e etc… em um diretório por exemplo. Use-o seguido da opção -l para que os dados sejam listados em uma única linha. Exemplo: ls -l Comando: rm Descrição: Este comando é usado para remover arquivos e diretórios. Use-o seguido da opção -R para que sejam removidos todos os arquivos de um diretório. Exemplo 1: rm teste.txt Exemplo 2: rm -R /home/diretorio Comando: mv Descrição: Este comando é usado para mover arquivos e diretórios para outros locais ou ainda para renomea-los. Exemplo 1: mv teste.txt novo_teste.txt Exemplo 2: mv /home/diretorio /root Comando: mkdir Descrição: Este comando é usado para criar diretórios. Exemplo: mkdir teste Comando: chmod Descrição: Este comando é usado para alterar as permissões de arquivos e pastas. Use-o seguido da permissão desejada. Exemplo: chmod 777 teste.txt Comandos: vi ou pico(ou nano) Descrição: Estes 3 comandos são usados para editar arquivos, eles são editores de texto. Exemplo: vi teste.txt Exemplo: pico teste.txt Exemplo: nano teste.txt Comando: tar Descrição: Este comando é usado para compactar/descompactar arquivos com extensão .tar, .tar.gz Exemplo(compactar): tar -zcvf arquivo.tar.gz teste.txt diretorio1 diretorio2 Exemplo(descompactar): tar -zxvf arquivo.tar.gz Comando: zip Descrição: Este comando é usado para compactar arquivos com extensão .zip Exemplo: zip arquivo.zip teste.txt diretorio1 diretorio2 Comando: unzip Descrição: Este comando é usado para descompactar arquivos com extensão .zip Exemplo: unzip arquivo.zip Comando: du Descrição: Este comando é usado para calcular o espaço total de um diretório ou arquivo. Use-o seguido da opção -h para exibir o espaço em megabyte Exemplo 1: du -h Exemplo 2: du -h teste.txt Comandos de BuscaComando: find Descrição: Este comando é usado para localizar arquivos e diretórios. Exemplo 1: find -name teste.txt Exemplo 2: find /home/diretorio -name \*.txt Comando: locate Descrição: Este comando é usado para localizar arquivos e diretórios. Exemplo: locate teste.txt Comando: grep Descrição: Este comando é usado para buscar uma expressão dentro de um arquivo. Exemplo: grep palavra teste.txt Instalação de Pacotes(programas) Comando: yum Descrição: Este comando é usado para instalar pacotes(programas) no servidor. Use-o seguido da opção install e o do nome do pacote que deseja instalar. Também pode ser usado para atualizar os pacotes já instalados no servidor como kernel e outros. Exemplo(instalar): yum install nome-do-pacote Exemplo(atualizar): yum update nome-do-pacote Exemplo(atualizar tudo): yum update Comandos Diversos Comando: exit Descrição: Este comando é usado para fazer logout do terminal/sessão onde você estiver logado. Exemplo: exit Comando: reboot Descrição: Este comando é usado para reiniciar o servidor. Exemplo: reboot Comando: shutdown Descrição: Este comando é usado para reiniciar/desligar o servidor. Use-o seguido da opção -r now para reiniciar ou -h now para desligar o servidor. Exemplo(reiniciar): shutdown -r now Exemplo(desligar): shutdown -h now Comandos Rápidos Comando: cat /proc/cpuinfo | grep ‘model name’ Descrição: Use-o para descobrir o modelo do processador Comando: echo ‘Uso da Memória’;free -m | grep Mem | awk ‘{print “Total: ” $2 “\nUsado: ” $3 “\nLivre: ” $4}’ Descrição: Use-o para exibir a estatística de uso da memória física. Comando: ps aux | grep nome Descrição: Use-o para listar somente os processos que contiverem o nome que especificar à frente do comando. Comando: service nome-do-servico restart Descrição: Use-o para reiniciar um serviço como o mysql por exemplo. Você pode usar também no lugar do restart o start ou stop para iniciar, parar respectivamente um serviço. Comando: wget http://www.site.com/arquivo.zip Descrição: Use-o para baixar arquivos para dentro do servidor. Comando: wall mensagem Descrição: Use-o para enviar uma mensagem para outro usuário conectado no servidor via SSH. Coloque a mensagem que deseja enviar à frente do comando. Que seja muito util, e que faça do Terminal um amigo e não inimigo dos usuarios. att~~ Krono Creditos: Lxhost1 ponto
-
Olá XTibianos! Dessa vez vou ensinar como fazer um backup do banco de dados do seu servidor de forma automatizada, para caso algo aconteça você tenha um backup recente para dar rollback Vamos lá? Antes de começarmos, recomendo que instalem o editor de texto chamado nano, pois o vim pode dar um pouco de trabalho para os mais leigos. Para instalar o nano basta rodar o comando abaixo: -> CentOS yum install nano ->Ubuntu/Debian apt-get install nano O primeiro passo é instalar o cron, que nada mais é do que um software que executa de tempo em tempo scripts ou outros softwares de forma automatizada da maneira que você programá-lo. Em alguns sistemas operacionais o mesmo já vem instalado, mas caso não esteja no seu servidor, utilize o comando abaixo: -> CentOS yum install cronie ->Ubuntu/Debian apt-get install cron Em seguida vamos alterar o editor de texto padrão para o nano, usando o comando abaixo: export EDITOR=nano Observação: caso sinta facilidade ou prefira utilizar o vim ou qualquer outro editor de texto, basta pular essa etapa e continuar o tutorial normalmente Agora vamos configurar o script de backup. Acesse a pasta em que encontra seu servidor e crie uma nova pasta chamada backup com o comando abaixo: cd /pasta-do-seu-servidor mkdir backup Agora faremos o download do script. Deixarei o código fonte do script abaixo para caso um dia no futuro o link de download do mesmo fique indisponível. Para baixar o script utilize o comando abaixo: wget http://scripts.4youstart.com/backupsql.sh Abaixo segue o código fonte do script. Será necessário editar algumas informações no mesmo antes de utilizá-lo. Utilize o nano para abrir o script: nano backupsql.sh Em vermelho estão as partes que deverão ser editadas para que o script funcione. Explicarei como configurar abaixo do código. #!/bin/bash # ------------------------------------ # Parte de configuração # ------------------------------------ #onde sera salvo o backup CAMINHO="/pasta-do-seu-servidor/backup" #nome que o script salvara o arquivo de backup .sql NOMEBACKUP="ot-backup-do-banco" #usuário mysql - normalmente root USER="root" #senha do mysql - normalmente mesma do phpmyadmin SENHA="suasenha" #banco do servidor BANCO="bancodoservidor" # ------------------------------------ # Execução do script - nao mexer # ------------------------------------ TEMPO="$(date +'%d-%m-%Y-%H-%M')" if [[ -z "$USER" || -z "$SENHA" || -z "$BANCO" ]]; then echo "Por favor preencha o usuário, senha e banco de dados nas configurações." else mysqldump -u$USER -p$SENHA $BANCO > $CAMINHO"/"$NOMEBACKUP"-"$TEMPO".sql" 3 variáveis deverão ser editadas para que o script funcione (em alguns casos 4). Edite sempre o valor entre aspas duplas, por exemplo: CAMINHO="editar_aqui". Abaixo estão as variáveis a serem editadas Linha 8: edite o caminho alterando para /pasta_do_seu_servidor/backup. Linha 11: não há necessidade de editar. Linha 14: por padrão os servidores utilizam o usuário root no banco. Mas caso seu servidor utilize outro usuário para se conectar ao mysql, altere essa variável. Linha 17: insira a senha de conexão ao MySQL (normalmente é a mesma que você usa para se conectar ao phpmyadmin, caso tenha dificuldade de encontrá-la, ela está no config.lua) Linha 20: insira o nome do banco de dados do servidor (caso tenha dificuldade de encontrar o nome do banco, ele está no config.lua) Feito isso, caso esteja utilizando o nano para editar o arquivo, aperte CTRL + X, em seguida aperte Y (ou S caso o sistema operacional esteja em português) e por fim pressione ENTER para salvar o arquivo. Agora, vamos configurar o cron para rodar o script. Vou ensinar como configurá-lo para rodar x vezes ao dia, em um outro tutorial ensino melhor a utilização do cron, caso queiram. Para isso, digite o comando abaixo: crontab -e Seu editor de texto padrão vai abrir um arquivo para editar. Vamos inserir uma linha nesse arquivo para que o cron funcione: 0 0,12 * * * /pasta_do_seu_servidor/backupsql.sh O código acima rodará o backup ás 00:00 e 12:00. Caso queira alterar isso, basta alterar os números em vermelho. Salve o arquivo de texto que abriu e pronto, seu backup automatizado está funcionando! Para se certificar e ter certeza que está tudo funcionando 100%, após 10 minutos do horário configurado para o cron, acesse a pasta em que seu servidor se encontra, em seguida acesse a pasta backup e verifique se há arquivos .sql nela. Cada backup será salvo como "ot-backup-do-banco-data-do-backup.sql". Fim! Espero que seja útil e até a próxima (Esse tutorial foi completamente escrito por mim. Qualquer cópia deve ser previamente autorizada e conter os devidos créditos.)1 ponto
-
Woodcutter System (lenhador)
Krono reagiu a SkyDangerous por um tópico no fórum
faz a árvore ou outro objeto sumirem '-' seria mais interessante1 ponto -
basicão do basicão... Mas é até ótimo, gostei. Já li esse artigo em algum lugar, coloque os créditos.1 ponto
-
Guns Warriors Olá Galera do XTibia! ONLINE! Venho apresentar para vocês meu novo projeto, o Guns Warriors, que se trata de um jogo no estilo MOBA (Multiplayer Online Battle Arena), que visa batalhas rápidas e divertidas. No Guns Online você poderá Lutar com seus amigos em batalhas frenéticas usando as armas mais cobiçadas dos clássicos de F.P.S. e suas fases mais conhecidas. o jogo acabou sua fase de teste e será lançado com os seguintes sistemas sistema de Tiro animado sistema de recarga animada sistema de bomba animada sistema de faca animada sistema de mira sistema de colete e capacete modo Death match modo Zombie Por que jogar o Guns Warriors? 1º É um jogo GRÁTIS do qual vc poderá interagir com seus amigos e fazer novos nas partidas mais divertidas. 2º É o primeiro jogo derivado de tibia com armas de fogo animadas quando atiram e recarregam. 3º existem varias armas a serem conquistadas no jogo. 4º você pode evoluir sua patente para ter novas armas e mostrar sua conquista. 5º ao longo que o jogo for atualizando haverão novos modos de jogo com muito mais diversão. 6º teremos uma fase nova a cada quinzena após no inicio do jogo. 7º É o primeiro jogo derivado de tibia onde você pode multilar e decapitar os zumbis. photos Vídeo Gameplay: crie sua conta e faça download em: http://gunswarriors.com/ para saber mais detalhes fique ligado na pagina do facebook: https://www.facebook.com/pages/Guns-Warriors/1404837573164581?ref=hl1 ponto
-
Item usado, cria creature
Zaroth1 reagiu a Elias Palermo por um tópico no fórum
Eu tenho um parecido com este, mas pra função que você quer do storage e de aparecer outra parede alguém teria que adaptar pra você... Se quiser usar este, ele fará que o player use o item e a parede volte em X tempo(configurável) Vá em Actions e crie um arquivo.lua Em action.xml <action itemid="26782" event="script" value="arquivo.lua"/> Coloque o id do item que será usado na parede.1 ponto -
[RESULTADO] SOTW #2
noobdoxtibia reagiu a Gabriel Couto por um tópico no fórum
Link da votação: http://www.xtibia.com/forum/topic/233851-votacao-sign-of-the-week-2/ Critérios de Pontos: 1º Lugar - 3 Pontos 2º Lugar - 2 Pontos 3º Lugar - 1 Ponto RESULTADO: 1º Lugar - Avuenja 2º Lugar - The Danzing 3º Lugar - Daniel 4º Lugar - Filho do Beeny Os pontos de reputação e demais prêmios serão dados por outros membros da equipe. O resultado já foi informado aos mesmos! Primeiro colocado: 4 REP+ MEDALHA + DESTAQUE DA SIGN NO FORUM Segundo colocado: 3 REP+ Terceiro colocado: 1 REP+1 ponto -
Guns Warriors Olá Galera do XTibia! ONLINE! Venho apresentar para vocês meu novo projeto, o Guns Warriors, que se trata de um jogo no estilo MOBA (Multiplayer Online Battle Arena), que visa batalhas rápidas e divertidas. No Guns Online você poderá Lutar com seus amigos em batalhas frenéticas usando as armas mais cobiçadas dos clássicos de F.P.S. e suas fases mais conhecidas. o jogo acabou sua fase de teste e será lançado com os seguintes sistemas sistema de Tiro animado sistema de recarga animada sistema de bomba animada sistema de faca animada sistema de mira sistema de colete e capacete modo Death match modo Zombie Por que jogar o Guns Warriors? 1º É um jogo GRÁTIS do qual vc poderá interagir com seus amigos e fazer novos nas partidas mais divertidas. 2º É o primeiro jogo derivado de tibia com armas de fogo animadas quando atiram e recarregam. 3º existem varias armas a serem conquistadas no jogo. 4º você pode evoluir sua patente para ter novas armas e mostrar sua conquista. 5º ao longo que o jogo for atualizando haverão novos modos de jogo com muito mais diversão. 6º teremos uma fase nova a cada quinzena após no inicio do jogo. 7º É o primeiro jogo derivado de tibia onde você pode multilar e decapitar os zumbis. photos Vídeo crie sua conta e faça download em: http://gunswarriors.com/ para saber mais detalhes fique ligado na pagina do facebook: https://www.facebook.com/pages/Guns-Warriors/1404837573164581?ref=hl photo da zombie mode - fase dead_slnd. novo zombie nova fase deathmatch pequena (De_Lake). Box podem ser adquiridas participando de partidas deathmatch. Base fechada com item de cura na parede.1 ponto
-
Grav Vita
ScythePhantom reagiu a AdilsonHacker por uma questão
Troca sua tag por esta: <instant name="Wild Growth" words="exevo grav vita" lvl="27" mana="220" prem="1" direction="1" blocktype="all" exhaustion="1150" needlearn="0" event="script" aggressive="1" value="pbot/exevo grav vita.lua"> <vocation id="2"/> <vocation id="6"/> <vocation id="10"/> </instant>1 ponto -
Quanto mais alto o level mais food o player poderá comer
warcraftzz reagiu a Bruno por um tópico no fórum
Gostei da ideia, obrigado por compartilhar conosco!1 ponto -
Bom dia cidadãos! Trago agora um simples script em cmd (linha de comando do Windows) que otimiza seu TCP/IP, melhorando latência e protegendo de pequenos ataques de maneira simples. Entendendo o menu do script: Pressione "y" para otimizar o TCP/IP Pressione "q" para desabilitar o "QoS reserved bandwidth" - liberar 100% da sua rede para uso Pressione "n" para cancelar o script e fechá-lo Instalando o script: + Abra o bloco de notas, insira o conteúdo abaixo e salve como otimizar.cmd. CLS @ECHO OFF ECHO ------------------------------------------ ECHO Type "y" to optimize Vista TCP/IP settings ECHO Type "q" to disable QoS reserved bandwidth ECHO Type "d" to revert to Vista default values ECHO Type "n" to cancell patch and exit ECHO ------------------------------------------ :LOOP SET /P choice1= Type y,n,q, or d, and press ENTER: IF /I "%choice1%"=="Y" GOTO TWEAK IF /I "%choice1%"=="Q" GOTO QOS IF /I "%choice1%"=="D" GOTO DEFAULT IF /I "%choice1%"=="N" GOTO CANCEL ELSE GOTO LOOP :TWEAK @ECHO ON netsh int tcp set global rss=enabled netsh int tcp set global chimney=enabled netsh int tcp set global autotuninglevel=normal netsh int tcp set global congestionprovider=ctcp netsh int tcp set global ecncapability=disabled netsh int tcp set global timestamps=disabled @ECHO OFF cd %temp% ECHO > SG_Vista_TcpIp_Patch.reg Windows Registry Editor Version 5.00 ECHO >> SG_Vista_TcpIp_Patch.reg [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] ECHO >> SG_Vista_TcpIp_Patch.reg "DefaultTTL"=dword:00000040 ECHO >> SG_Vista_TcpIp_Patch.reg "EnableTCPA"=dword:00000001 ECHO >> SG_Vista_TcpIp_Patch.reg "Tcp1323Opts"=dword:00000001 ECHO >> SG_Vista_TcpIp_Patch.reg "TCPMaxDataRetransmissions"=dword:00000007 ECHO >> SG_Vista_TcpIp_Patch.reg "TCPTimedWaitDelay"=dword:0000001e ECHO >> SG_Vista_TcpIp_Patch.reg "SynAttackProtect"=dword:00000001 ECHO >> SG_Vista_TcpIp_Patch.reg [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\ServiceProvider] ECHO >> SG_Vista_TcpIp_Patch.reg "LocalPriority"=dword:00000004 ECHO >> SG_Vista_TcpIp_Patch.reg "HostsPriority"=dword:00000005 ECHO >> SG_Vista_TcpIp_Patch.reg "DnsPriority"=dword:00000006 ECHO >> SG_Vista_TcpIp_Patch.reg "NetbtPriority"=dword:00000007 regedit /s SG_Vista_TcpIp_Patch.reg del SG_Vista_TcpIp_Patch.reg CLS ECHO * PATCH SUCCESFULLY APPLIED - PRESS ANY KEY TO EXIT * GOTO SUCCESS :QOS @ECHO OFF cd %temp% ECHO > SG_Vista_TcpIp_Patch.reg Windows Registry Editor Version 5.00 ECHO >> SG_Vista_TcpIp_Patch.reg [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Psched] ECHO >> SG_Vista_TcpIp_Patch.reg "NonBestEffortLimit"=dword:00000000 regedit /s SG_Vista_TcpIp_Patch.reg del SG_Vista_TcpIp_Patch.reg CLS ECHO * QOS PATCH SUCCESFULLY APPLIED - PRESS ANY KEY TO EXIT * ECHO. ECHO * Visit SpeedGuide.net for more broadband info and tweaks * ECHO. @PAUSE EXIT :DEFAULT @ECHO ON netsh int tcp set global rss=default netsh int tcp set global chimney=default netsh int tcp set global autotuninglevel=normal netsh int tcp set global congestionprovider=default netsh int tcp set global ecncapability=default netsh int tcp set global timestamps=default @ECHO OFF cd %temp% ECHO > SG_Vista_TcpIp_Default.reg Windows Registry Editor Version 5.00 ECHO >> SG_Vista_TcpIp_Default.reg [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] ECHO >> SG_Vista_TcpIp_Default.reg "DefaultTTL"=- ECHO >> SG_Vista_TcpIp_Default.reg "EnableTCPA"=- ECHO >> SG_Vista_TcpIp_Default.reg "Tcp1323Opts"=dword:00000000 ECHO >> SG_Vista_TcpIp_Default.reg "TCPMaxDataRetransmissions"=dword:000000ff ECHO >> SG_Vista_TcpIp_Default.reg "TCPTimedWaitDelay"=dword:ffffffff ECHO >> SG_Vista_TcpIp_Default.reg "SynAttackProtect"=- ECHO >> SG_Vista_TcpIp_Default.reg [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\ServiceProvider] ECHO >> SG_Vista_TcpIp_Default.reg "LocalPriority"=dword:000001f3 ECHO >> SG_Vista_TcpIp_Default.reg "HostsPriority"=dword:000001f4 ECHO >> SG_Vista_TcpIp_Default.reg "DnsPriority"=dword:000007d0 ECHO >> SG_Vista_TcpIp_Default.reg "NetbtPriority"=dword:000007d1 ECHO >> SG_Vista_TcpIp_Default.reg [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Psched] ECHO >> SG_Vista_TcpIp_Default.reg "NonBestEffortLimit"=- regedit /s SG_Vista_TcpIp_Default.reg del SG_Vista_TcpIp_Default.reg CLS ECHO * VISTA DEFAULT VALUES SUCCESFULLY APPLIED - PRESS ANY KEY TO EXIT * GOTO SUCCESS :SUCCESS netsh int tcp show global @PAUSE EXIT :CANCEL CLS ECHO * PATCH CANCELLED BY USER - PRESS ANY KEY TO EXIT * @PAUSE EXIT + Salve o arquivo, feche o bloco de notas e execute o otimizar.cmd (de preferência em modo de administrador). + Pressione "q" para desabilitar o "QoS reserved bandwidth" e logo em seguida pressione "y" para otimizar o TCP/IP. Pronto! Façam bom proveito (Esse tutorial foi completamente escrito por mim. Qualquer cópia deve ser previamente autorizada e conter os devidos créditos.)1 ponto
-
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_STUN) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, 0, 1.0, 0) function onCastSpell(cid, var) local target = variantToNumber(var) doTargetCombatCondition(0, target, exhausted, CONST_ME_MAGIC_RED) local exhausted = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhausted, CONDITION_PARAM_TICKS,4000) doCreatureSetNoMove(target, true) addEvent(doCreatureSetNoMove, 5000, target, false) return doCombat(cid, combat, var) end tente com isso.1 ponto
-
1 ponto
-
Elemental Staff (wand que muda de elemento)
warcraftzz reagiu a 20cm por um tópico no fórum
Olá, amigos. Eu sei que deve ter algo do tipo aqui no xTibia, mas essa versão que eu criei há muito tempo está o mais completo possível. Consiste no item Jester Staff transformado no item Elemental Staff, que ao dar Use, muda o elemento e o projétil que sai do cajado. Pra começar, vamos no items.xml e procuramos o item "Jester Staff" (id 7958) Vocês vão substituir desde isso: <item id="7958" article="a" name="jester staff"> até isso: </item> Por isso: <item id="7958" article="a" name="elemental staff"> <attribute key="description" value="Use this item to change its element." /> <attribute key="weight" value="2300" /> <attribute key="weaponType" value="wand" /> <attribute key="range" value="3" /> </item> Agora, no actions.xml, adicionam a tag: <action itemid="7958" event="script" value="elemental_staff.lua"/> E no arquivo elemental_staff.lua, adicionem o seguinte: function onUse(cid, item, fromPosition, itemEx, toPosition) local st = 2482 local old = getPlayerStorageValue(cid,st) local fromto = {[1] = {15,2},[2] = {46,3},[3] = {47,4},[4] = {41,5},[5] = {39,6},[6] = {17,1} } if getPlayerStorageValue(cid,st) == -1 then setPlayerStorageValue(cid,st,1) old = getPlayerStorageValue(cid,st) end setPlayerStorageValue(cid,st,fromto[getPlayerStorageValue(cid,st)][2]) local gt = getPlayerStorageValue(cid,st) local msgs = {"Fogo","Terra","Energia","Gelo","Sagrado","Escuridão"} doPlayerSendTextMessage(cid,4,"Elemento mudado de \'"..msgs[old].."\' para \'"..msgs[gt].."\'.") doSendMagicEffect(getThingPos(cid),fromto[gt][1]) return true end Ótimo. O último passo é no weapons.xml, adicionar a tag: <wand id="7958" level="70" mana="2" min="0" max="0" type="earth" event="script" value="elemental_staff.lua"> <!-- Elemental Staff --> <vocation id="1"/> <vocation id="2"/> </wand> E no arquivo elemental_staff.lua na pasta scripts adicionar o seguinte: local min = 65 local max = 100 function damage(cid,type,target,effect) doAreaCombatHealth(cid, type, getThingPos(target), 0, -1*(min), -1*(max), effect) function onUseWeapon(cid, var) local st = 2482 local gt = getPlayerStorageValue(cid,st) local types = { [1] = {3,COMBAT_FIREDAMAGE,15}, [2] = {29,COMBAT_EARTHDAMAGE,46}, [3] = {4,COMBAT_ENERGYDAMAGE,47}, [4] = {28,COMBAT_ICEDAMAGE,41}, [5] = {37,COMBAT_HOLYDAMAGE,39}, [6] = {10,COMBAT_DEATHDAMAGE,17} } if gt == -1 then setPlayerStorageValue(cid,st,1) end local distance = types[gt][1] local type = types[gt][2] local effect = types[gt][3] local target = getCreatureTarget(cid) doSendDistanceShoot(getThingPos(cid),getThingPos(target),distance) addEvent(damage,100,cid,type,target,effect) return true end Notem que nas primeiras 2 linhas tem as variáveis min e max, que representam respectivamente o dano mínimo e o dano máximo do cajado. É isso, flw1 ponto -
1 ponto
-
1 ponto
-
callstack overflow é significa que você realizou um loop infinito na mesma função, no caso a stats change, quando a criatura que tem esse evento registrado perde vida, a doTargetCombatHealth faz com que ela perca vida novamente ativando de novo o onstats change, que faz com que a doTargetCombatHealth seja executada de novo e assim vai até o servidor perceber que a mesma função não tem saída e indica o erro. o que o slicer falou está certo, mesmo que você tire esse erro, se deixar o return true, o monstro vai bater o dano normal, digamos que seja 100, mais o valor do doTargetCombatHealth, que seria 130, totalizando 230, colocando return false, você anula o dano de 100 e aí sim você vai ter a aparência de na verdade o monstro estar tirando 130. usa a script assim: local overflow_protection = {} function onStatsChange(cid, attacker, type, combat, value) if isSummon(attacker) and isMonster(cid) and getPlayerStorageValue(getCreatureMaster(attacker), 17823) >= 1 and type == STATSCHANGE_HEALTHLOSS and value >= 1 then if overflow_protection[attacker] then overflow_protection[attacker] = nil return true end local dmg = math.floor(value * 1.3) overflow_protection[attacker] = true doTargetCombatHealth(attacker, cid, COMBAT_PHYSICALDAMAGE, -dmg, -dmg, CONST_ME_NONE) doPlayerSendTextMessage(getCreatureMaster(attacker), MESSAGE_STATUS_CONSOLE_ORANGE, "Your "..getCreatureName(attacker).." deals "..dmg.." damage.") return false end return true end1 ponto