Líderes
-
-
-
Gabrieltxu
MembroPontos423Total de itens -
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 11/10/12 em todas áreas
-
POO em Lua
7 pontosPOO – Programação Orientada a Objeto (em Lua) Sei que tem muita gente querendo aprender ou com dúvida sobre POO, para quem programa em lua para otservers casualmente vai ser estranho e talvez até desnecessário, mas pra quem quer se tornar um futuro programador ou até mesmo acumular mais conhecimento, é mais do que necessário ! Porque Aprender ? Certo, você aprende o que é POO, sabe aplicar sem dificuldades em lua, mas e ai... onde usar ? Bem, isso depende muito do que você quer, em lua, ao contrário de algumas linguagens, não é necessário saber POO para se programar, mas nada impede de você usá-lo e tornar seu código mais bonito, organizado e de fácil manutenção (Que são algumas das características da POO), resumindo, aprende quem quiser. Nota Importante: A POO em lua não é realmente POO - mas, como assim ? - Lua não é naturalmente Orientada a Objetos, porque se caso fosse você já saberia. Em Lua é feita uma "simulação" usando meta tabelas - Mas, OMG, como assim ? meta tabelas ? - calma, calma, isso eu já explico vamos por partes. Classe Definição: Classe é onde fica armazenado atributos, métodos, é onde tudo acontece na Orientação a Objetos. Pense em classe como se fosse uma receita, algo que armazena todas as informações como se fosse uma ficha técnica, trazendo mais para a realidade, pense em classe como nós, seres humanos ou um computador, uma televisão, uma cama, um instrumento musical, cada um tem suas informações próprias e ações próprias. Exemplo: Código: Classe TV Informações/Atributos: Polegadas: 29 Marca: Philips Canal: 31 Ligada: Sim Volume: 35% Ações/Métodos: Ligar Desligar Mudar de Canal Diminuir Volume Aumentar Volume Entendeu ? Isso seria uma ficha técnica de alguma televisão qualquer, e quais ações essa determinada televisão possui, onde informações é a mesma coisa que atributos na POO e métodos é a mesma coisa que ações. Agora vamos trabalhar nessa classe... Vamos começar a escrevê-la usando Lua: Código: TV = {} function TV:new() return setmetatable({}, { __index = self }) end Nota: Explicarei com mais detalhes sobre a função setmetatable() e seus usos em outro tutorial(eu acho), por enquanto use-a dessa maneira Agora é o momento que você olha isso e pergunta - Mas, porque essa tabela ai no começo ? porque usar dois-pontos ? porque new ? Como dito anteriormente, Lua é uma simulação de POO, ou seja, você não vai programar exatamente dessa maneira caso fosse programar em Java, C++, Ruby ou qualquer outra linguagem OO. Mas explicando o porque de cada um: Código: TV = {} Basicamente, essa tabela é onde irá ficar armazenada as informações da classe. Código: function TV:new() return setmetatable({}, { __index = self }) end Entenda TV:new como sendo Classe:método, onde TV é a nossa classe e new é o nosso método e nosso construtor, esse método é o primeiro a ser chamado, é ele que vai construir nossa classe (por isso que se chama construtor). Atributo Atributo são as características, as informações de um determinado objeto (não pense em objeto como um computador ou uma mesa, mas sim como qualquer coisa, até seres vivos). Exemplo: Como dito anteriormente, nossa classe possui esses atributos: Código: Polegadas: 29 Marca: Philips Canal: 31 Ligada: Sim Volume: 35% Agora vamos tentar passá-las a lua e adicionar na classe: Código: TV = {} function TV:new(marca, polegadas) return setmetatable({ ligada = true, polegadas = polegadas, volume = 5, canal = 31, marca = marca}, { __index = self }) end Certo, definimos os atributos e quais que queremos que possam ser modificados de começo, agora mais uma explicação aprofundada parte-a-parte: Código: function TV:new(marca, polegadas) return setmetatable({ligada = true, polegadas = polegadas, volume = 5, canal = 31, marca = marca}, { __index = self }) end Onde está colorido possui o mesmo valor, ou seja, se você definir posteriormente marca como LG, ficará: Código: marca = "LG" Para adicionar mais atributos, é só adicionar mais um parâmetro na função (se necessário) e adicionar mais um item na tabela, sendo que o "nome" pode ser qualquer coisa, não precisa necessariamente ser o mesmo nome do atributo, por exemplo, poderia ser assim ao invés do exemplo acima: Código: function TV:new(marca, polegadas) return setmetatable({lig = true, poleg = polegadas, vol = 5, cal = 31,mc = marca}, { __index = self }) end Única coisa que mudaria, seria que ao invés de ser "marca" seria "mc". Lembrando que todos os atributos poderão ser chamados depois. Métodos Métodos são as ações (como dito anteriormente) que podem ser feitas pelo objeto e também são os métodos que automatizam algumas coisas na classe. Exemplo: Como dito anteriormente, a classe possui esses métodos: Código: Ligar Desligar Mudar de Canal Diminuir Volume Aumentar Volume Vamos adicioná-las na classe sem colocar instrução dentro por enquanto: Código: TV = {} function TV:new(marca, polegadas) return setmetatable({ligada = true, polegadas = polegadas, volume = 5, canal = 31, marca = marca}, { __index = self }) end function TV:Ligar() -- Ligar a TV end function TV:Desligar() -- Desligar a TV end function TV:setCanal() -- Mudar de Canal end function TV:setVolume() -- Definir Volume end Porque eu coloquei apenas “setVolume()” ao invés de 2 métodos, um para aumentar e outro para abaixar ? Deixando dessa maneira você pode fazer as duas coisas em um método só ! Agora como cada um é um método da classe, é só adicionar a instrução de cada um: Método TV:setCanal() por exemplo: Código: function TV:setCanal(novocanal) -- Mudar de Canal self.canal = novocanal end TV:setCanal é uma função como qualquer outra, ele tem que simplesmente trocar o canal da televisão. Mas ai você pergunta – e esse "self" ai ? Da onde ele vem ? O que ele é ? - Simples, self se refere a nossa classe (self traduzido, seria algo como "eu", "próprio"), o self seria uma forma de se referir a classe, acessar os atributos e usá-los. Lembre-se, como o self se refere a própria classe, você só pode utilizá-lo em métodos de classe ! Simplificando, usando palavras e cores, o que a função vai fazer é acessar o atributo canal da classe e definir seu valor para o mesmo valor de novocanal E Você pode usar o self tanto para acessar atributos quanto para criar novos a partir de métodos, Simples não ? Depois de definir a instrução de todos os métodos, a classe ficou dessa maneira: Código: TV = {} function TV:new(marca, polegadas) return setmetatable({ligada = true, polegadas = polegadas, volume = 5, canal = 31, marca = marca}, { __index = self }) end function TV:Ligar() -- Ligar a TV self.ligada = true end function TV:Desligar() -- Desligar a TV self.ligada = false end function TV:setCanal(novocanal) -- Mudar de Canal self.canal = novocanal end function TV:setVolume(novovolume) -- Definir Volume self.volume = novovolume end Agora vamos testá-la ! Essa parte fica a seu critério de como fazer o teste, a classe pode estar tanto no mesmo arquivo quanto em outro (ai é necessário chamar usando a função dofile()) O teste é simples, vai ser criado uma nova TV e definida a uma variavel, em seguida será exibido as informações da TV depois modificadas e exibidas novamente: Código: TV = {} function TV:new(marca, polegadas) return setmetatable({ligada = true, polegadas = polegadas, volume = 5, canal = 31, marca = marca}, { __index = self }) end function TV:Ligar() -- Ligar a TV self.ligada = true end function TV:Desligar() -- Desligar a TV self.ligada = false end function TV:setCanal(novocanal) -- Mudar de Canal self.canal = novocanal end function TV:setVolume(novovolume) -- Definir Volume self.volume = novovolume end ---- minhatv = TV:new("LG", 29) -- Aqui eu defino que minha marca é LG e polegadas é 29 print("Minha Televisão é da marca " .. minhatv.marca .. ", possui " .. minhatv.polegadas .. " polegadas, está no canal " .. minhatv.canal .. " e volume " .. minhatv.volume .. "%") minhatv:setCanal(73) -- Mudo o canal para 73 minhatv:setVolume(40) -- Mudo o volume para 40 print("Agora minha TV está no canal " .. minhatv.canal .. " e o volume está em " .. minhatv.volume .. "%") minhatv:setVolume(10) -- Mudo o volume para 10 print("Agora minha TV está no canal " .. minhatv.canal .. " e o volume está em " .. minhatv.volume .. "%") minhatv:Desligar() -- Desligo a tv (mesma coisa que minhatv.ligada = false) if (not minhatv.ligada) then -- Se não estiver ligada print("A TV foi desligada") end Muito simples, não ? Qualquer dúvida ou sugestão sobre o tutorial é só dizer Espero ter sido o mais claro possível Creditos Lwkass7 pontos
-
Report Sytem Beta
Report Sytem Beta
Dimaxor e 4 outros reagiu a caotic por uma resposta no tópico
5 pontosOla pessoal do tk. Eu fiz este script para outra fórum mais achei interessante disponibilizar para vocês também. Quando o player encontrar um bug ou uma irregularidade no seu servidor ele poderá usar o comando /report (e a descrição do bug) e as informações sera guardada no log de alertas e se um administrador estiver online a mensagem do bug e mostrada a ele mais se não estiver quando um administrador entra no servidor ele recebera a mensagem de novos alertas. No log de alertas ficara salvo exatamente assim: Vamos instalar o sistema: Primeiro crie um arquivo de texto(.txt) chamado report na sua pasta de seu ot onde fica o seu executavel. Lembre-se que deve ser um arquivo txt e que deve estar na pasta raiz do seu ot. Depois de criar o arquivo vá em talkactions e crie um arquivo LUA chamado de report. E coloque o seguinte script: function onSay(cid, words, param) if exhaustion.check(cid, 2123) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Precisa esperar para reportar novamente") return false end if #param <= 10 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu report precisa ter pelo menos 10 caracters") return false end local file = io.open("./report.txt", "a") file:write("\n "..getPlayerName(cid).." "..os.date("%A").." as "..tostring(os.date("%X")):sub(1, 5).." reportou dizendo ("..param..")") file:close() setGlobalStorageValue(28212, getGlobalStorageValue(28212)+1) exhaustion.set(cid, 2123, 36000) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu report foi enviada com sucesso logo sera atendindo obrigado pela colaboração") for _, id in ipairs(getPlayersOnline()) do if getPlayerGroupId(cid) > 5 then doShowTextDialog(cid, 1952, ""..getPlayerName(cid).." acabou de reportar dizendo ("..param..") este report esta salvo no log") exhaustion.set(cid, 2123, 36000) return true end return true end end Agora vá em talkactions.xml e coloque a seguinte tag: <talkaction words="/report" event="script" value="report.lua"/> Agora vá em creaturescripts e crie um arquivo LUA chamado de alerta. E coloque isto dentro: function onLogin(cid) if getPlayerGroupId(cid) > 5 then if getGlobalStorageValue(28212) == 0 then doShowTextDialog(cid, 1952, "1 player reportaram para ver o report abra o log de reports") setGlobalStorageValue(28212, -1) return true end if getGlobalStorageValue(28212) ~= -1 then doShowTextDialog(cid, 1952, ""..getGlobalStorageValue(28212).." player reportaram para ver o report abra o log de reports") setGlobalStorageValue(28212, -1) return true end return true end return true end Coloque a tag em creaturescripts.xml <event type="login" name="report" event="script" value="alerta.lua"/> Depois registre o evento em login.lua Primeiro va em creaturescripts/scripts e abra o arquivo chamado login.lua antes do ultimo "return" coloque isto: registerCreatureEvent(cid, "report") O.o Seu sistema de report foi instalado Estiver alguma duvida,problemas ou qualquer coisa e queria entrar em contanto comigo basta me enviar um email para: caotic@#####.com5 pontos -
[Modern Acc] Template Pokétibia 8.54
[Modern Acc] Template Pokétibia 8.54
Guilherme e um outro reagiu a Gabrieltxu por uma resposta no tópico
2 pontosEae Galera do TibiaKing Hj estarei Postando mais Um template para a Galera Baixar xD... Espero que Gostem Foi meu Amigo que Fez... Eu achei Super Legal Bom Oq ele Tem de Bom Nele? R= Totalmente Editavel xD... Uma Print Link do Download: http://www.4shared.c...junior001.html? Scan: https://www.virustot...b2c63/analysis/ Ai é Isso e qual quer Duvida Pergunte... Se Gostou ou pelo menos Ajudou de um REP++ Flws xD2 pontos -
Novas Quests
Novas Quests
Lipedr2 e um outro reagiu a Skyforever por uma resposta no tópico
2 pontosTipo: Acho que é um tutorial meio que com scripts seilá, Autor: Eu. Como vocês podem notar os otserv's hoje em dia não investem muito em quest's com rpg são quase todas iguais clique no baú pegue o item então tava entediado e resolvi criar essa quest(criei +/- falta algumas coisas se quiserem editar elas) . @Se consiste. Em falar com o NPC pegar o item ir na statue usar o item que ganhou do NPC ganhar outro item ir em outra statua destruir ela colocar o item no fogo e vocês decidem oque mais só coloquei para soltar efeito. MOVEMENTS: ACTIONS: function onUse(cid, item, fromPosition, itemEx, toPosition) if itemEx.itemid == ID DA ESTATUA then doSendMagicEffect(toPosition, 28) doSendMagicEffect(toPosition, 29) doSendMagicEffect(toPosition, 30) doSendMagicEffect(toPosition, 66) doSendMagicEffect(toPosition, 47) doSendMagicEffect(toPosition, 48) doSendAnimatedText(toPosition, "CHANGED!", 210) doSendAnimatedText(getThingPos(cid), "Wood", 180) doSendMagicEffect(getThingPos(cid), 3) doPlayerAddItem(cid, 5901, 1) doRemoveItem(item.uid, 1) end return true end tag: <action itemid="ID DO ITEM QUE VAI USA NA ESTATUA" script="nome.lua" /> Segunda Estatua(aquela que tu tem que quebrar). function onUse(cid, item, fromPosition, itemEx, toPosition) local idEstatua = ID DA ESTATUA local sec = 5 if itemEx.itemid == idEstatua then doRemoveItem(itemEx.uid) doSendMagicEffect(toPosition, 3) doSendAnimatedText(toPosition, "POW!", 210) addEvent(doCreateItem, sec * 1000, idEstatua, 1, toPosition) doPlayerSendTextMessage(cid, 25, "You have " .. sec .. " seconds to sacrifice.") end return true end tag: <action itemid="ID DO ITEM QUE VAI USA NA ESTATUA" script="nome.lua" /> Gift: espero que tenham gostado e bem simples mais espero que gostem e tenham gostado muito do gosto. ps: POSTEI A ESTATUA SEM UNIQUEID PORQUÊ PODIA BUGAR, DEPOIS POSTO O RESTO. PS2: FOI BASTANTE ÉPICO. PS3: É UM PLAYSTATION BOM MAIS PREFIRO XBOX. espero que tenham gostado e bem simples mais espero que gostem e tenham gostado muito do gosto.2 pontos -
[nv.av] Usando luaSQL
2 pontosLuaSql Apesar de já existir um tutorial sobre luaSql no forum ele é antigo e agora usa outro metodo. O que é? LuaSql é você inserir, alterar, deletar, subistituir valores no bacno de dados MySql ou Sqlite de seu servidor facil e rapido. Como uso? É relativamente simples. caso você ja tenha mexido com MySql não vai ter 1 pingo de duvidas. Bom vamos começar pegando um valor da database. Para pega um valor antigamente tinha uma treta GIGANTESCA usando assert e outras coisas agora é mais facil basta usar a função: db.getResult(query) Essa função ela executa query no servidor Mysql ou sqlite vamos dar um exemplo. vamos criar uma Query que pega o level do player. Código: local Query = "SELECT `level` FROM `otserv`.`players` WHERE `name` = " .. playername .. ";" Vamos palavra pro palavra se você sabe ingles vai entender. SELECT > selecionar level > nivel FORM > em otserv.players > players otserv como nome da database. é a mesma q c poe no configu.lua eu puis otserv mais a sua pode ser diferente. WHERE > onde name = playername > nome = nomedoplayer. Traduzindo: SELECIONAR `level` EM `players` ONDE `name`= nomedoplayer. Resumindo ele vai abrir a DB em players vai pegar o valor level de todos os players que tiverem o nome igual a variavel nomedoplayer Em pratica... Suponhamos que na DB tenha um player chamado Skyen Hasus e queremos pegar o level e o id dele. fazemos assim: Código: local coisas = db.getResult("SELECT `level`,`id` FROM `otserv`.`players` WHERE `name` = 'Skyen Hasus';") player_level = coisas:getDataInt("level") player_id = coisas:getDataInt("id") PRONTO! Lembrese que depois de SELECT vocÊ deve colocar todos os valores entre `` são ascentos invertidos NÃO ASPASA. e separados por VIRGULA. Agora vamos INSERIR um valor... para isso usamos esta função: db.executeQuery(Query) A diferença dessa para a outra que essa ele apenas executa a outra executa e retorna valores. Bom vamos inserir um valor. para isso se usa isso: Código: "INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `altkilled_by`) VALUES (1, " .. os.time() .. ", " .. getPlayerLevel(cid) .. ", 'demon', 'demon');" Esplicando... INSERT INTO > Inserir em `player_deaths` Tabela player_deaths (`player_id`, `time`, `level`, `killed_by`, `altkilled_by`) > os valores player_id time level killed_by altkilled_by. VALUES > significa que os valores acima coresponde a... (1, " .. os.time() .. ", " .. getPlayerLevel(cid) .. ", 'demon', 'demon'); > player_id = 1 time = os.time(), level = Level do player, killed_by = demon, altkilled_by = demon. Resumindo inserir na tablela playerdeaths os valores player_id time level killed_by altkilled_by que correspondem a player_id = 1 time = os.time(), level = Level do player, killed_by = demon, altkilled_by = demon. Entendeu? Vamos a um exemplo de uso: db.executeQuery("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `altkilled_by`) VALUES (" .. getPlayerGUID(cid) .. ", " .. os.time() .. ", " .. getPlayerLevel(cid) .. ", 'Um bixo', 'Um bixo');") siginifica que o player morreu na hora que vc executou isso e ele morreu pra um bicho chamado 'Um bixo' xDDD. O que acontece se eu inserir um valor usand INSERT into e o valor INDEX ja existir como id? ou apenas mudar UM VALOR de algo? Toda tabela tem um valor definido como INDEX como digamos um valor central no caso da tabela players é id, o nome dos players pode até se repetir porem o ID não!!! provavelmente vai dar algum erro indesejado entao no caso deveriamos verificar se o valor ja e xiste e usar a função UPDATE assim: Código: db.executeQuery("UPDATE `otserv`.`players` SET `name` = 'Joao' WHERE `players`.`id` ="..getPlayerGUID(cid).." AND CONVERT( `players`.`name` USING utf8 ) = '"..getPlayerName(cid).."' LIMIT 1 ;") No caso disso eu iria mudar o NOME do player pois e um valor ja existente x.x vamos esplicar. UPDATE > atualizar otserv.players > database oserv na tabela players SET > mudar name = 'joao' WHERE > onde players.id = getPlayerGUID(cid) > tabela players o valor id é igual a getPlayer ID (não cid) AND CONVER > E converter ( `players`.`name` USING utf8 ) = '"..getPlayerName(cid).."' LIMIT 1 ; > converter player.name usando utf8 = "getPlayerName(cid) está dizendo que o nome antigo é getPlayerName pois primeiro ele vai pegar todos os valores e converter para o novo nome. Agora vamos inserir um valor caso exista vamos atualiza-lo! Vamos usar como exemplo minha função: setAccountStorageValue Código: function setAccountStorageValue(accid,value_id,value) dofile("config.lua") if string.len(value) >= 10 then error("[setAccountStorageValue]: value is too long!") return FALSE end local coisa = db.getResult("SELECT * FROM `account_storage` WHERE `account_storage`.`id` = ".. accid .." AND `account_storage`.`value_id` ="..value_id..";") if coisa:getID() == -1 then db.executeQuery("INSERT INTO `"..sqlDatabase.."`.`account_storage` ( `id` ,`value_id`, `value` ) VALUES ( '"..accid.."','"..value_id.."', '"..value.."' ); ") doBroadcastMessage('insert', 22) else doBroadcastMessage('updt'..coisa:getDataInt("value")..'', 22) db.executeQuery("UPDATE `"..sqlDatabase.."`.`account_storage` SET `value` = '"..value.."' WHERE `account_storage`.`id` ="..accid.." AND `account_storage`.`value_id` ="..value_id.." AND CONVERT( `account_storage`.`value` USING utf8 ) = '"..coisa:getDataInt("value").."' LIMIT 1 ;") end end Veja que primeiro eu selecionei o valor e usei: coisa:getID() == -1 para saber se o valor existe. se ele der return em -1 quer dizer que nao existe! entao eu usei INSERT INTO, porem caso o valor ja esteje lá eu usei UPDATE. Repare que usei: "SELECT * FR" um * siginifica que estou pegando TODOS os valores existentes. Viu com é simples? não e tão dificil assim . Caso haja duvidas poste no topico e desfrutem das suas funções! Quase esquecendo... db.getResult > pega um valor db.executeQuery > executa algo no servidor MySql coisa:getDataInt("value") > coisa vc deve definir como coisa = db.getResulte "value" é o valro que vc quer pegar exemplo: getDataInt("level") Essa função SÓ PEGA NUMERO! getDataString("name") >> mesma coisa porem so string. Acho que é isso2 pontos
-
Colocando seu WebSite Online - Linux Ubuntu
Colocando seu WebSite Online - Linux Ubuntu
Hadggar e um outro reagiu a WarW0lf por uma resposta no tópico
2 pontosInstalar um servidor LAMP (Linux, Apache, MySQL e PHP) é uma tarefa fácil. Nesse post vou ensinar a instalar o servidor e algumas coisas a mais. Esse tutorial foi criado utilizando o Ubuntu 11.04, mas também funciona no 11.10, 12.04 e possivelmente funcionará por muito tempo . Instale o PHP, Apache, MySQL e o PHP My Admin executando os comandos a seguir (cada linha é um comando diferente a ser executado): sudo apt-get install lamp-server^ sudo apt-get install phpmyadmin sudo ln -s /usr/share/phpmyadmin /var/www sudo /etc/init.d/apache2 restart O comando para instalar o “lamp-server^” pedirá uma senha para o usuário root do MySQL. Apenas escolha uma senha (não esqueça dela) e pressione enter. O comando para instalar o PhpMyAdmin pedirá que marque a opção do servidor (escolha Apache), a senha do usuário root do MySQL (definida na instalação do lamp-server^” e ainda pedirá para registrar uma senha de acesso ao PhpMyAdmin. Aconselho que execute o comando abaixo para excluir os arquivos desnecessários após a instalação. sudo apt-get autoremove A webroot (pasta onde deve colocar seus arquivos PHP para execução no navegador) é por padrão /var/www. Para ter permissão de acesso a essa pasta, mude o dono para o seu usuário e dê uma permissão apropriada. Para isso, rode os comandos a seguir (lembre-se de mudar seu-username para o seu usuário do Ubuntu): sudo chown -R seu-username /var/www chmod -R 755 /var/www Note que para que possa executar upload de arquivos através de suas aplicações, deverá mudar as permissões da pasta onde os arquivos serão salvos para permitir escrita (permissão 777). Os arquivos de configuração (php.ini, apache2.conf…) se encontram nas pastas: /etc/php5/apache2/ /etc/apache2/ Créditos: WarW0lf e Lukas Kreutz2 pontos -
Global 8.70 Full [Chaito Soft e Otprojects]
Global 8.70 Full [Chaito Soft e Otprojects]
poverelo reagiu a Gustavo Ferreira por uma resposta no tópico
1 pontoGlobal Chaito Soft 8.70 Servidor que está sendo vendido pela chaito soft e otshop Fala galera estou aqui para apresentar Global que a chaito soft vende no seu site, Bom estou disponibilizando grátis para vocês, Otimo servidor testei aqui , Agora de graça para vocês que querem um bom server global, Confira abaixo alguns detalhes do servidor!!!! • Cidades: ├ Carlin ├ Thais ├ Ab'Dendriel ├ Venore ├ Liberty Bay ├ Outlaw Camp ├ Ankrahmun ├ Zao + Razachai! ├ Edron ├ Kazordoon ├ Port Hope ├ Svargrund ├ Yalahar ├ Darashia └ e muitas outras.. • O Que Contêm no Servidor: - War of Emperium (Evento) - Zombie Attack (Evento) - Raids Automáticas (Script) - Bonus 50+ (Script) - Database completa (DB) - Wrath of Emperor (Mapa-quest) - Zao e New Banuta Piece (Mapa) - TFS 0.4 (Distro: Anti-Divulgação, War System e No-otbm check) - Task 100% RL (Script: Com ranking e bonus bosses) - War System com escudos (Script) - VIP System (Script) - 10 Cidades e 15 Ilhas VIPS (Mapa) • Lista Das Principais Quests (Todas Funcionando 100%): The Annihilator Quest ├ Demon Helmet Quest ├ The Elemental Spheres Quest ├ Firewalker Boots Quest ├ The Inquisition Quest ├ Killing in the Name of... Quest ├ The Pits of Inferno Quest ├ Shadows of Yalahar Quest ├ Children of the Revolution Quest ├ The New Frontier Quest ├ The Demon Oak Quest ├ Tomes of Knowledge Quest └ In Service of Yalahar Quest • Proibido postar?: Me manda PM se achar ruim! Ta ae de GRAÇA! Lembrando que o servidor está sem DLLS e Distro Mais vou Disponibilizar uma aqui! DOWNLOADS MAPA http://www.mediafire...qk0yyueloljej9t DISTRO E SOURCES [Distro 0.4] [Executável]1 ponto -
[Modern Acc] Poketibia Unlimited V.1.0
[Modern Acc] Poketibia Unlimited V.1.0
rafaelpoke reagiu a Gabrieltxu por uma resposta no tópico
1 pontoBom Galera Estou Aqui Com um Site para Poketibia do Meu Server e Estarei Postando para vcs Baixarem Contendo: ☻ Guild System ☻ Shop System full ☻ Ultima Mortes Full ☻ E Muito Mais uma Print do Website: Demm REP++ Download: http://www.mediafire.com/?fvuvadb1ez18d6d Bom qual quer Duvida Só ResPonder Ai REP++1 ponto -
Avatar Action Online
Avatar Action Online
tibin reagiu a craigmabbilt por uma resposta no tópico
1 pontoAvatar Action Online é um projeto de Open Tibia Server, garantindo muita diversção e RPG,o servidor será baseado no anime Avatar A lenda de Aang. No servidor não tera Knight, Druid, Sorcerer e Paladin...E sim, EarthBender, AirBender,FireBender e WaterBender.Vamos contar mais do Servidor: Sistemas Missão: Você poderá fazer muitas para ganhar itens, dinheiro, experiencia e até mesmo dobras. Water Bender: Os dobradores de água como no anime, só poderá dobrar água se estiver com um compartimento de água ou estar procimo do mar,rio ou cachoeiras para manipular a água. Dobras Secretas: Cada dobrador terá dobras secretas, terão que desvendar pergaminhos para conseguir. Cometa de Sozin: Como no anime, quando um cometa passar pelo servidor os FireBender's ficarão mais fortes por um tempo. Mestre do Elemento: Cada tipo de elemento terá seu mentor, seu mestre do elemento, com ele você aprenderá como usar as dobras e a melhora-las. Forja: Você poderá forjar seus próprios equipamentos. Lua Cheia: Igual o Cometa Sozin, só que é Lua Cheia, é onde os WaterBender's ficarão mais fortes por um tempo. Avatar: Você poderá se tornar avatar, e dominar os quatro elementos. Combos: Misturando dobras você criara uma nova ou almentará o poder dela. Entre demais sistemas. Cada elemento terá suas qualidades e seus defeitos, Suas vantages e suas desvantagens, Seu poder e sua fraquesa! Uma breve analise dos dobradores: AIR BENDER "Direferentemente das outras dobras, a de ar não é feita para o ataque, sendo basicamente composta de movimentos defensivos. É certamente a mais passiva de todas e muitas de suas técnicas consistem em manobras evasivas e formas de evitar o ataque do oponente." Pode ser também uma das mais divertidas. Esses dobradores podem pular de prédios em prédios, correr como o vento, soprar oponentes pra longe. Porém, sozinhos, não são capazes de fazer muito estrago. Sempre procuram evitar confrontos. EARTH BENDER "A técnica de dobra de terra mantém equilíbrio entre a capacidade ofensiva e defensiva. Estes dobradores podem levantar pedras de diferentes tamanhos, manipular a terra para dar-lhe o formato que desejarem. Podem criar grandes muralhas e qualquer tipo de construção que quiserem somente com a sua dobra." Esses dobradores são estáveis, firmes, determinados e não possuem muitas fraquesas. Podem se tornar realmente fortes se dominarem a terra, porém essa é uma tarefa muito difícil e requer muita habilidade. Dobradores desabilidosos simplesmente não sabem utilizar suas técnicas corretamente e acabam caindo no fracasso. WATER BENDER "Esses dobradores podem manipular a água em todas as suas formas, por isso são muito versáteis. Podem utilizar habilidades de defesa, ataque e suporte. Porém, para fazer esse tipo de dobra é necessário ter uma fonte de água por perto. Por isso em ambientes desérticos há muito pouco que este dobrador possa fazer." Trata-se de uma dobra especial, pois só pode ser usada com água por perto. Seja de cachoeiras, rios, lagos ou o que for. Dobradores experientes costumam carregar Water Pouchs, uma espécie de compartimento que permite levar água para onde quiser. O ruim é que você tem que abastece-lo periódicamente. FIRE BENDER "Esses dobradores são capazes de criar fortes rajadas de fogo, bolas de fogo, paredes de fogo e tudo mais que for possível com esse elemento. Esta é a dobra mais agressiva e destrutiva de todas. E por isso mesmo é necessário que o dobrador tenha muito auto-controle para dominar todo este poder, senão as conseqüências podem ser desastrosas." Ter tanta força tem um custo: o fogo é deficiente na defesa e suporte, o que dá uma grande desvantagem. Se o dobrador não souber lidar com essa situação, nunca conseguirá usar todo seu potêncial e passará por momentos de grande frustração. Preciso de Progaramador Lua e Mapping Maker o servidor ja tem alguns sistemas prontos como a dobra de agua em perto de rios e lago ou com WP "Water Pouch" Sprites alteradas baseada no anime Avatar The Last Airbender. 35% do servidor ja esta OK. quem for querer participar deixe e-mail, idade, nivel de experiencia, quantas horas livres para poder ajudar o servidor. Algumas amostras de Dobras Dobra de Ar: Tornado começa em baixo nivel conforme for usando a area vai almentando até se formar um grande tornado Dobra de Agua: Cria um Dragão que começa a atacar os inimigos. Pequeno bug no distance effect que esqueci de por rs. desculpa Dobra de Terra: Cria uma barreira para prender inimigos ou se defender, tem avanço de nivel até o nivel 5 Dobra de Fogo: Lança uma bola de Fogo no oponente mais uma foto rs, dobra de TERRA faz uma abalo sismico com a terra movimentando o solo e afastando os oponentes1 ponto -
Mortes No Broadcast
1 pontoNome: Mortes no Broadcast Versão: 8.4x Tipo do script: creaturescript Servidor Testado: TFS 0.2 (') Autor: Alguém da equipe criadora do TFS e eu por editar. Comentario: Script editado; Original é o que vem com o tfs. ---------------------------------------------------------------------- Falae; Preview: Como não vi nenhum tópico sobre o assunto por aqui, resolvi criar o script, ou melhor, editar o playerdeath.lua '-' Primeiramente, abra a pasta data/creaturescripts/scripts e crie um arquivo playerdeath.lua Depois salve e pronto, está implantado o sistema de anúncio de mortes no broadcast; é simples, porém algumas pessoas não sabem como fazer. Já que insistem, aí está a TAG: <event type="death" name="PlayerDeath" script="playerdeath.lua"/>1 ponto
-
Scripts
LEVE ROPE E SHOVEL COMUM! Salve-salve galerinha Eu vi que esta seção do Tibia King estava meio parada e resolvi disponibilizar uns scripts LOW-LEVEL e money-maker A média de exp vai ficar em verde e a média de gold em azul 1º: Esse aqui é da primeira cave de Kazz, bom pra low level (não vai nos guards nem nos soldier, só no -2) 2k~5k / 0.6k ~ 1,5k Nivel recomendado: 9 Set recomendado: IOD Set / Plate Set + Serpent Kazordoon Dwarf Cave1.xml 2º: Esse é de Rookgard, aconselho comprar o Leather Set Full antes de descer pra não morrer no level 3 (pega 1,3k +/- até o level 8) 3~6h pra pegar level 8 / 1k~1,5k até o level 8 Rookgard Rats.xml 3º: Esse é um Addon Colector, faz uma Tour por toda Thais por fora, coleta uns itens pra addons bem interessante pra deixar durante a madrugada! 0,5k ~ 1,5k / 500 gp (o lucro vem dos itens) Level Recomendado: o suficiente para aguentar Bear, Wolf e MUITOS Wasps Set recomendado: IOD Set aguenta tranquilamente Thais Addon Colector.xml 4º: Cave de troll só na parte central, 70% afk pois tem várias caixas que o pessoal põe pra barrar bot 3k ~ 5k / 500gps ~ 900gps Level recomendado: 8 Set recomendado: IOD Set / Plate Set + Serpent Thais Troll -1.xml 5º: Esse script é bem interessante pra quem quer uma lucro maior que dos trolls acima Thais North Rotworms.xml 5k~7k / 800gp ~ 1,5k 6º: Esse script é da mesma cave de troll anterior, mas vai em toda ela. (passa por Poison Spider, pode ficar poison) 4k~6k / 700gps ~ 1k Thais Troll East.xml 7º: Melhor script que eu tenho, exp e lucro muito médios durante o dia e a noite, mas durante a tarde fica MAGNIFICO. Por que? por que é justamente quando é madrugada na Polonia e Cia. Dia/Noite: 1k~2k / 4k~7k Tarde: 2k~3,5k / 9k~15k Thais Undead Mount Sternum.xml Todos esse scripts são de Thais, menos o primeiro que é de Kazz1 ponto
-
[Resolvido]Mysql
[Resolvido]Mysql
Markin reagiu a xxxcrimsxxx por uma resposta no tópico
1 pontoOlha eu enchendo o sako novamente \o/ kkk tem uns codigos ake pra eu por na minha database do meu site e eu não sei como faço isso, alguem sabe? tenho que executar uns codigos que ta no bloco de notas aqui se alguem souber '-'1 ponto -
[Resolvido] Problemas com Site!
[Resolvido] Problemas com Site!
xxxcrimsxxx reagiu a Augusto por uma resposta no tópico
1 pontoSim.1 ponto -
Cai Nos OT'S
1 pontoeu quase cheguei a ler, mais quando vi que era o rael, deixei pra la.1 ponto
-
[Resolvido]Bixo ot server Fraco de +
Manin Vai em data/spells/scripts/attack/fierce berserk.lua Nessa parte aqui você vai me chendo ate achar o dano que você quer Quanto ao equilíbrio não sei ao certo uma boa1 ponto
-
Automatização e Simplificação de Scripts
Automatização e Simplificação de Scripts Bem, este é minha segunda "aula", a primeira foi sobre o comando addEvent, esta é um pouco mais complexa, vou demonstrar algumas possibilidades de automatização e simplificação de scripts, algo muito importante pra tornar um script mais simples e prático. Vamos a algumas definições: Automação: é um sistema automático de controle pelo qual os mecanismos verificam seu próprio funcionamento, efetuando medições e introduzindo correções, sem a necessidade da interferência do homem. Simplificar: tornar menos complicado (fiquei com preguiça de procurar mais). Situação 1: Fazendo um cardápio Temos um talkaction de fast food e queremos informar ao player quando ele disser !food cardápio todas as opções, elas estão disponiveis em uma tabela : local comidas = { ["Meat"] = {50, 1291}, ["Ham"] = {90, 1292}, ["Fish"] = {150, 1293}, ["Dragon Ham"] = {200, 1294} } Neste caso o valor literal é a comida, o primeiro valor numérico o preço e o segundo o id (não são reais). Bem, agora pense assim, cada comida que eu colocar eu vou ter que buscar o id dela ? Chato demais isso, e se eu utilizar uma função que já existe? OMG, SÉRIO? Isso mesmo , getItemIdByName(name), este é o primeiro exemplo de simplificação. print("Atendente: Aqui no Fast Food Delivery, vendemos: Meat por 50 golds, Ham por 90 golds, Fish por 150 golds, Dragom Ham por 200 golds.") OMG, tá pronto =D. Sim, mas e se você quiser mudar algo, vai ter que sempre lembrar de digitar isso? E se você tiver 200 scripts, vai lembrar dos detalhes de todos? Por que não utilizamos o comando for (note que agora, já que há apenas um valor não há a necessidade de uma tabela para os valores e ids separados, o que torna o script mais simples) local comidas = { ["Meat"] = 50, ["Ham"] = 90, ["Fish"] = 150, ["Dragon Ham"] = 200 } local cardapio = "Atendente: Aqui no Fast Food Delivery, vendemos:" for k,v in pairs(comidas) do cardapio = cardapio.." "..k.." ("..v..");" end print(cardapio) Bem, assim fica mais fácil não? Já foi então um exemplo de automatização e um de simplificação. Situação 2: Automatizando um NPC Bem, nós temos um NPC que executa três funções, as falas das três funções são as mesmas, vamos simular intao três funções (para utilizar em apenas lua, sendo assim, será apenas teoria, não tente colocar em seu servidor). Vamos supor que a fala é param e o estado da fala é estado, as três funções são comprar uma casa, um carro ou uma vaca (fiz pouco texto pra cada porque é cansativo): local param = "vaca" local estado = 0 local casa = "" local carro = "" local vaca = "" -- Simulação da casa if estado == 0 and param == "casa" then print("Qual casa deseja comprar?") estado = 1 elseif estado == 1 and param == "da esquina" then print("Tem certeza que deseja comprar a casa Da esquina?") estado = 2 casa = "da esquina" elseif estado == 1 and param == "do meio" then print("Tem certeza que deseja comprar a casa Do meio?") casa = "do meio" estado = 2 elseif estado == 2 and param == "sim" then print("Parabens pela aquisição da casa "..casa".") -- Note aqui uma pequena automação estado = 0 end -- Simulação do carro (copiei da casa e mudei o nome, já estava cansando disso) if estado == 0 and param == "carro" then print("Qual carro deseja comprar?") estado = 3 elseif estado == 3 and param == "ford" then print("Tem certeza que deseja comprar o carro Ford?") estado = 4 carro = "Chevrolet" elseif estado == 3 and param == "Chevrolet" then print("Tem certeza que deseja comprar o carro Chevrolet") -- Não sei escrever Chevrolet O.o carro = "Chevrolet" estado = 4 elseif estado == 4 and param == "sim" then print("Parabens pela aquisição da casa "..carro".") -- Note aqui uma pequena automação estado = 0 end -- Simulação da vaca (OMG, de novo, como é mais fácil automatizar :'() if estado == 0 and param == "vaca" then print("Qual vaca deseja comprar?") estado = 5 elseif estado == 5 and param == "Doida" then print("Tem certeza que deseja comprar a vaca Doida?") estado = 6 carro = "Doida" elseif estado == 5 and param == "Louca" then print("Tem certeza que deseja comprar a vaca Louca?") -- Não sei escrever Chevrolet O.o carro = "Louca" estado = 6 elseif estado == 6 and param == "sim" then print("Parabens pela aquisição da casa "..carro".") -- Note aqui uma pequena automação estado = 0 end Bem, agora faça você mesmo um de arroz, veja como é cansativo. Note que as falas são quase as mesmas, porque não fazer então um padrão e apenas uma tabela com alguns valores para cada um? Existe o Jiddo's NPC System para simplificar isto, mas é apenas um tutorial. function math.multiple(value, param) --> Verification of value and param and return TRUE or FALSE if type(value) == "number" and type(param) == "number" then if value % param == 0 then return TRUE else return FALSE end else return nil end end -- Inserir os objetos à venda seguidos pelos seus preços local venda = { {"Carro", "Chevrolet", 1000, "Ford", 1200}, {"Casa", "Da esquina", 3000, "Do meio", 2000}, {"Vaca", "Louca", 100, "Malhada", 200} } -- Valores padrões local param = "sim" local estado = 2 local objeto = 2 local desejo = 3 local custo = 1000 -- Padrão for all = 1, #venda do if estado == 0 and param == venda[all][1] then estado = 1 desejo = all print("Qual "..param.." deseja comprar?") break elseif estado == 1 and param == venda[desejo][all] and math.multiple(all, 2) == TRUE then estado = 2 objeto = all custo = venda[desejo][objeto + 1] print("Tem certeza que deseja comprar: "..venda[desejo][1].." "..param.." por "..custo.."?") break elseif estado == 2 and param == "sim" then estado = 0 print("Você perdeu "..custo.." de dinheiro.\nParabens pela aquisição de "..venda[desejo][1].." "..venda[desejo][objeto]..".") break end end Bem, ainda dá para implantar um "cardápio" hehe, tente, para praticar. Notem que o que fiz foi apenas avaliação de tabelas hehe, aconselho visitarem o setor de LIBs, sempre há funções legais criadas pos outros usuários. Situação 3: Melhor utilização de "ifs" Imaginem a seguinte situação, você precisa construir uma série de ifs, ond caso um não seja verificar o proximo. Vamos ver um modo: local param = "" if param == 1 then print("yes") end if param == 2 then print("no") end if param == 3 then print("faz") end Meio grande não? Por que não utilizamos o elseif? Podemos economizar end e com isso simplificar o script. Olhem: local param = "" if param == 1 then print("yes") elseif param == 2 then print("no") elseif param == 3 then print("faz") end Mais simples agora hehe. Agora vamos supor que temos uma função com dois parametros, param1 e param2, onde param2 é muito raro de ser diferente de nil. Podemos fazer assim: local param = "" local param2 = "" if param == 1 and param2 ~= nil then print("yes") elseif param == 2 and param2 == 2 then print("no") elseif param == 3 and param2 ~= 6 then print("faz") end Pronto UHUL. Pera aí, porque eu verifico primeiro o param1? Se eu verificar param2 primeiro, como é raro de ser diferente de nil, a opção será eliminada com apenas uma avaliação, logo, mais velocidade =D. Agora imagine a seguinte situação: local param = "" local param2 = "" if param2 ~= nil and param == 1 then print("yes") elseif param2 ~= nil and param == 2 then print("no") elseif param2 ~= nil and param == 3 then print("faz") elseif param2 ~= nil and param == 4 then print("faeez") elseif param2 ~= nil and param == 5 then print("faeeeeez") end Muito simples não é? Tente fazer de um jeito mais simples utilizando apenas if e elseif. Se você pensou como abaixo você acertou , se não, fica pra próxima . if param2 ~= nil then if param == 1 then print("yes") elseif param == 2 then print("no") elseif param == 3 then print("faz") elseif param == 4 then print("faeez") elseif param == 5 then print("faeeeeez") end end Bom, acho que assim é mais fácil escrever e mais fácil modificar . Agora temos a seguinte ocasião, param é uma variável local e caso ela seja 1 deve-se dar print em "yes", caso contrário em "no". Podemos escrever assim: local param = 2 if param == 1 then print("yes") else print("no") end Bacana né, já está bem curto, mas e se fizermos assim: local param = 2 print(param == 1 and "yes" or "no") OMG PeJuGe, 2 LINHAS o.O . Mais fácil né. Neste caso é possível economizar ifs e com isso simplificar. Bom pessoal, é isso, espero que tenham gostado, claro que há muitas outras formas de aproveitas os comandos, mas já vão algumas Creditos : Lwkass1 ponto
-
[Resolvido]Bixo ot server Fraco de +
Não sei ao certo mais vai na sua config.lua Nessa parte rateMonsterHealth = 1.0 rateMonsterMana = 1.0 rateMonsterAttack = 1.0 rateMonsterDefense = 1.0 e Veja se resolve1 ponto
-
Xampp
Xampp
xxxcrimsxxx reagiu a Markin por uma resposta no tópico
1 pontoprimeiro você vai em: C:\xampp\apache\conf abra o arquivo: httpd.CONF com o bloco de notas procure por: ServerName localhost:80 e mude para: ServerName localhost:8090 depois procure por: Listen 80 e mude para: Listen 8090 ai só iniciar. -------------------------------------------------------- Se não pegar vá em: C:\xampp\apache\conf\extra abra o arquivo: httpd-ssl.CONF procure por: <VirtualHost _default_:443> mude para: <VirtualHost _default_:4449> depois disso procure por: Listen 443 e mude para: Listen 44491 ponto -
[PEDIDO] Tibia Farm
[PEDIDO] Tibia Farm
Giovanninunes reagiu a Itamarbsl por uma resposta no tópico
1 pontoEae gente To procurando e precisando de um Tibia Farm.. P:Oque é Tibia farm? R: É um serve de tibia de um gênero diferente, tendo um conceito de fazenda onde se planta, cuida de animais, compra terrenos. Se você sabe algum serve-cleint [ÑÃÕ QUERO SÓ CLIENT], por favor coloque para download aqui. Obrigado1 ponto -
[Pedido] Bot auto fish - OT Pokemon
[Pedido] Bot auto fish - OT Pokemon
Giovanninunes reagiu a Enzo Caue por uma resposta no tópico
1 pontoAguardando !1 ponto -
[Resolvido][Pedido] Script alavanca
reiniciar vc diz fechar o server(executável) e abrir novamente? se for isso para remover a alavanca era só usar doRemoveItem(item.uid)1 ponto
-
[Pedido] Bot auto fish - OT Pokemon
[Pedido] Bot auto fish - OT Pokemon
Giovanninunes reagiu a Itamarbsl por uma resposta no tópico
1 pontoSe eu achar algum eu posto aqui no tibiaking .. Vou postar o macro para vocês.. Daki uns dias ;/1 ponto -
Peça Seu Fundo Personalizado
Peça Seu Fundo Personalizado
Avuenja reagiu a Gustavo Ferreira por uma resposta no tópico
1 pontoterminei o seu, espero que goste!! link ~~> http://img12.imageshack.us/img12/561/269771blackangel.jpg1 ponto -
[TalkAction] Sistema de Frags
1 pontoIgnorância, agente vê por aqui.1 ponto
-
Scripts
Scripts
Leandroevil reagiu a Clenwinne por uma resposta no tópico
1 pontoAqui eu vou postar onde fica os mapas das caves acima 1º:(começa só no -2) 2º: começa no dentro do bueiro 3: Não coloquei por ser muito extenso deixando a visualização ruim! 4º: passa por todos os pontos laranjas 5º: Começa no inicio da reta vermelha 6º: dividi em 4 partes segue os links 1 2 3 4 7º: dividi em 3 partes: 1 2 31 ponto -
[Resolvido] Como dexar um ot on
1 pontoColoque seu ip no config.lua , (não pode ser o ip do no-ip.com !) fexe e salve , abra as portas do firewall do windows, se usas internet compartilhada , abra as mesmas no modem, depois abra o server e tente entrar pelo ip que colocaste no config.lua (: ! @Edit - Se seu problema for abrir as portas do modem , firwall , e outras , achei um tópico do Adriano SwaTT .. Ele ensina a liberar no DLink DI524 mas não é muito diferente dos outros moden's ! Aqui1 ponto
-
[Resolvido]Mysql
[Resolvido]Mysql
Markin reagiu a xxxcrimsxxx por uma resposta no tópico
-1 pontosvlw denovo augusto-1 pontos -
BOA NOITE GERAL TIBIA KING
-1 pontosa diferença é que ele trabalha e vc fica vadiando o dia inteiro na minha cama-1 pontos
-
BOA NOITE GERAL TIBIA KING
BOA NOITE GERAL TIBIA KING
Markin reagiu a Skyforever por uma resposta no tópico
-1 pontosANNE OWNED.-1 pontos -
BOA NOITE GERAL TIBIA KING
-1 pontossky alertado, a imagem da assinatura do mesmo foi removida até.-1 pontos