
Tudo que Ryzor postou
-
Foi dada a largada! Acompanhe quanto tempo falta para o fim do mundo
Aham mundo vai acaba ;x , nada vé lek cala boka mesma coisa que eu falar nossa mano mundo vai acabar amanha sabia ?
-
[nv.av] Usando luaSQL
LuaSql 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 é isso
-
POO em Lua
POO – 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 Lwkass
-
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 : Lwkass
-
Missão por experiencia
NPC Mission Servidor testado: TFS Autor: kawon Primeiro crie um arquivo npc_mission.xml dentro da pasta data/npc/. E coloque isso: Em seguida crie um arquivo mission.lua na pasta /data/npc/scripts/ E adicione isso: Transcrições: PLAYER: hi NPC: Hello |PLAYERNAME|. You can started 'quest'? PLAYER: quest NPC: Ok, you can started "first mission"? PLAYER: first mission NPC: Please bring me 10 "meat" PLAYER: meat When player finish this mission NPC: You finished this mission. When player do first once NPC: Thank you! You can started "second mission".. (you received 1000 points of experience) When player don't have 10 meat NPC: You must have more items
-
O final do mundo 2012
Fala merda não no ano 2000 não falarão que ia acabar o mundo também ? e não acabo , e creio que o mundo não acaba e sim as pessoas acaba
-
[Resolvido] Bug do xampp, alguem pode ajudar?
Troque seu xamp . utilize o 1.7.3 é melhor.
-
Tabelas - OpenLua #1
Tabelas - Open Lua #1 Olá galerinha , tudo tranquilo? Agora que passaram-se as comemorações festivas do carnaval, estou de volta com mais uma aula para auxilá-los a criarem seus scripts. Hoje estarei ensinando a criar e manipular tabelas na linguagem LUA. A aula está dividida em 2 partes! Considero no nível: INICIANTE Sem mais delongas, vamos lá! ~ Introdução Bem, vamos aprender a trabalhar com tabelas, mas antes devemos saber: - O que são tabelas? ~ Tabela é uma variável que pode armazenar outras variáveis dentro dela. - Porque eu devo usar tabelas? ~ Ao invés de criar uma infinidade de variáveis, você pode simplesmente criar uma tabela e armazená-las todas as informações necessárias, além de ser muito útil no uso de valores randômicos. Veja como é o formato de uma tabela: Código: local table = {1, 5, 10} Perceba que esta tabela contém apenas valores numéricos. Porém, podemos também adicionar caracteres com o uso das aspas ( " ). Código: local table = {"hello", 10, 5} OBS.: O não uso das aspas faz com que o código seja interpretado como uma variável, por exemplo, se o hello estivesse sem aspas e como não declaramos hello uma variável, o código não seria interpretado. Se quisermos utilizar uma variável, devemos utilizar este modelo: Código: local hello = "Uma variavel normal." local table = {hello, 10, 5} Que seria a mesma coisa do que: Código: local table = {"Uma variavel normal.", 10, 5} ~ Obtendo informações de uma Tabela: Existe uma sintaxe direta para a obtenção de informações de uma tabela. Essa sintaxe é a tableValue. Veja um exemplo: Código: local table = {"hello", 10, 5} local tableValue = table[1]Esse código permite-nos obter o valor do primeiro elemento da tabela table. Ou seja, para obtermos o valor de qualquer elemento, basta trocarmos o valor que vem entre colchetes. De maneira geral: Código: local tableValue = NOME DA TABELA[POSIÇÃO DO ELEMENTO]~ Separando elementos de uma Tabela Código: local table = {"hello", 10, 5} local tableValue = unpack(table, 3)A função unpack serve para separarmos os elementos de uma tabela. No nosso caso, estamos separando o terceiro elemento, pois a sintaxe funciona da seguinte maneira: Código: local tableValue = unpack(NOME DA TABELA, POSIÇÃO DO ELEMENTO)É bem parecido com a função tableValue. ~ Incluindo variáveis numa tabela Bem, como disse no início da aula, podemos colocar diversas variáveis dentro de uma tabela. Vamos utilizar como exemplo uma mini árvore genealógica, veja: Código: local familia = {nome = "Smith", pai = "George", mae = "Catheryn", filho = "Charlie", filha = "Elizabeth"}Perceba que criamos a tabela familia, e dentro delas colocamos várias informações sobre os familiares. Se quisermos obter um valor desta tabela, basta usarmos a seguinte sintaxe: Código: local filha = familia.filhaAgora uma questão que geralmente aparece é: E se eu tiver mais de um filho ou filha? Muito simples, basta declararmos eles, da seguinte maneira: Código: local familia = {nome = "Smith", pai = "George", mae = "Catheryn", filhos = {first = "Paul", last = "Charlie", filhas = {first = "Elizabeth", second = "Marie", last = "Julie"}}E para obter algum valor desta tabela, é só usar: Código: local filha = familia.filhas.lastE obteremos o valor de "Julie" pois é a última filha. Creditos : Tio Gordo
-
Dicas essenciais em Lua
Muita gente andou me pedindo para que eu desse algumas dicas com Lua. Então, resolvi por meio dessa aula, dar dicas gerais de toda a linguagem. Esse tutorial tem como objetivo apenas salientar alguns macetes e dicas legais para Lua tendo em vista que exista um mínimo conhecimento do assunto. Não responderei perguntas que julgo idiotas, portanto, nem tentem poluir esse tópico, se não sabe o que é Lua, procure no Google que é o melhor que você pode fazer. Desde já, desculpo me por minha antipatia por parte dos ignorantes. Comentários Além dos conhecidos comentários de linhas únicas iniciados por "-- comments go here" existem comentários de bloco, isto é, de multi linhas, representados por "--[[ comments go here]]". Variáveis Variáveis como o próprio nome já diz não são constantes, ou seja, o programador pode livremente mudar seus valores Variáveis naturalmente são globais, mas podem se tornar locais colocando se antes do início da declaração "local" O escopo de uma variável é limitada para o escopo atual e seus escopos-filhos Não é recomendado debugar códigos usando variáveis locais pois estas são guardadas no stack e por isso é necessário funções como "assert" e outras Uma variável local com mesmo nome de uma variável global apenas substitui o valor da global temporariamente (geralmente no tempo de sua execução, o que não chega a ser problema na maioria dos casos) Tipos Nil Um valor especial que tem valor vazio e significa nulo (NULL) Variáveis que são declaradas sem valor possuem valor igual a "nil" e podem ser modificadas livremente Na maioria dos casos "nil" é retornado quando uma função falha É possível usar uma alternativa ao "nil" usando "or" já que "nil" leva ao booleano "false": print(tonumber("a"), tonumber("a") or 1) -> prints "nil 1" Boolean Pode ter dois valores, true ou false. "Nil" funciona como false mas o número 0 funciona como true. Isso é bastante confundido por muitos Number Todos os números em Lua são valores "double float" Variáveis podem ser convertidas em números pela função tonumber(var) que retorna "nil" caso falhe Funções de manipulação de números são encontradas na biblioteca de matemática do Lua (math) Strings Strings podem receber os mesmos escapes da linguagem C (\n, \t, \0, etc) Strings são internamente encriptadas pelo Lua, isso quer dizer que existe apenas uma única cópia de uma string em particular não importa quantas variáveis referem a essa string Declarações que contam espaços em branco ou mesmo indicações de pular de linha e uso de tabulação podem ser pegos de forma mais dinâmica usando: string = [[Aqui eu escrevo sem me preocupar com nada e nem mesmo aspas, veja só: ' ""'"''" "]] Strings podem ser concadenadas usando o operador ".." Se existem muitas strings para serem concadenadas, o melhor jeito é inserir estas em uma tabela (usando table.insert()) e concadená-las (usando table.concat()) Variáveis podem ser convertidas em strings usando tostring(var) que retorna "nil" caso falhe Tables Tabelas podem ser indexadas por números, variáveis, funções, outras tabelas, funções, entre outros Atribuindo um valor a um campo da tabela que não existe automaticamente cria esse campo Ao invés de se usar a função table.getn(table) é possível pegar o número de elementos de uma tabela usando #table onde table é o nume da tabela Não confunda table.getn(table) com table.maxn(table). Enquanto a primeira função retorna o número de elementos contido na tabela, o segundo retorna o maior valor numérico contido na tabela e retorna "nil" caso seja uma tabela formada por strings apenas Ao contrário de outras linguagens, o número correspondente ao primeiro valor não é 0 e sim o valor 1 É possível remover valores e elementos de uma função atribuindo-lhes o valor "nil" A tabela global se chama "_G" e você pode vê-la assim como as demais tabelas usando (k = key, v = value): for k, v in pairs(_G) do print(k, v) end Userdatas Userdatas são ponteiros do C/C++ que indicam objetos que não podem ser utilizados em Lua Uma "metatable" pode ser um "userdata" para funcionar como uma tabela ou ser chamada como função, operadores próprios, entre outros Functions Uma função pode retornar múltiplos valores e podem ser atribuídas a várias variáveis Funções podem ser colocadas em tabelas Valores passados por funções são locais a não ser que sejam tabelas ou userdatas. Isso dá a oportunidade de modificar tabelas dentro de funções Funções auxiliares (ou temporárias) podem ser criadas dentro de funções como locais Switch Muita gente me pergunta se existe uma função "switch" para case statements em Lua, a resposta é não. Mas, o uso de tabelas em funções podem simular esse efeito, veja: Código: switch = {} switch[1] = function() print("Olá a todos") end switch[2] = function() print("Meu nome é Yuji") end -- ... if (switch[1]) then switch[1]() -- executa a função que diz "Olá a todos" end Loops No loop "repeat .. until (bool)" não existe o "continue" pois o Lua automaticamente cuida disso. Apesar disso, existe o "break". No loop "for ... do" existe um atribuito após o último valor para poder incrementar a variável assim como no PHP e C++ Mais dicas ainda estão por vir.
-
Metodologia de scripting
Metodologia de um script O que será tratado Organização de um script. Compreensão de um script. Tornando o script fácil para edição. Meu objetivo com este tutorial. Tenho como objetivo facilitar a compreensão de muitos scripts. Sabemos, todos nós, que muita gente apenas copia os scripts para seu próprio servidor e não sabe nem ao menos editar os IDs, ou as posições, conforme sua necessidade e disponibilidade do script. Quero, também, propor que os scripters que nos disponibilizam scripts de sua autoria, organizassem melhor os scripts para que os iniciantes tivessem uma base para começar no mundo de lua scripting. Organizando para melhor compreensão Muitas vezes nos deparamos com scripts horríveis. Não apenas de qualidade ou conteúdo no resultado, mas também de organização do próprio script. Vou pegar um script de tamanho médio, já criado por um usuário da OTNet. Agora, pegaremos esse mesmo script e apenas adicionaremos uns espaços e removeremos quebras de linhas desnecessárias. Apenas com essa pequena organização, o script não ficou um pouco mais fácil de ser compreendido? Compreensão de todas as linhas do script Pegamos, então, o mesmo script como exemplo. Você consegue entender qual a função de cada linha do script? Consegue localizar um erro que impossibilitaria uma das features do script? Pois bem, é o que faremos agora. Foi fácil de entender, não? Se não foi, deveria ter sido, por que esse é um script de fácil compreensão. Agora, vamos localizar os erros. Linha 6: chance = math.random(1,10) Essa variável não foi declarada como local. O correto seria: local chance = math.random(1,10). Linha 12: elseif chence == 2 then A variável chence não foi definida anteriormente, então, não há chance dessa opção acontecer. Certamente um erro de digitação. Linha 16: elseif chance > 3 then O erro é que, se a variável chance resultar 3, não encaixaria em nenhum dos casos do script. O correto seria: elseif chance >= 3 then; ou: elseif chance > 2 then.[*]Tornando o script fácil para futuras edições Esse script abaixo é como ficaria com maior organização, revisado e, feito para facilitar futuras edições: O script estaria pronto para ser postado para outro fanático por OTServer compreender e editar. O resultado é o mesmo, mas o modo de compreensão é outro. Talvez um mais difícil por causa das tabelas. Caso você realmente ache isso, aconselho-lhe a ler um tutorial sobre tabelas. Conclui-se Se todos os scripts que fossem postados tivessem um padrão melhor de organização, o nível de scripting de muitos iniciantes seria maior, pois, desse modo, compreenderiam com uma maior facilidade e rapidez o que as vezes é indecifrável. Creditos : Pivizz
-
Matematica + LUA.
Creditos postados , descupem.
-
Matematica + LUA.
Faaaala galera! Tudo bem? Espero que sim, pois precisarão de muita atenção para entender algumas partes deste tutorial. A matemática é algo que nos acompanha no dia-a-dia, realmente muito importante, principalmente na programação. É indiscutível e concordável entre todos os programadores que um dos fatores de um bom profissional da área é o domínio da matemática! Bom, este tutorial vai ser para mostrar um pouco apenas da importância desta na linguagem LUA, ainda que se você tem experiência, provavelmente já percebeu isto. Sinais matemáticos simples Começando com os sinais matemáticos, o básico de lua e da matemática, são eles: Codigo: + Soma - Subtração * Multiplicação / Divisão ^ Exponenciação % Módulo Onde o módulo é definido como: x % y = x – math.floor(x/y)*y A raiz quadrada pode ser definida como: x^(1/2). Pode-se chegar ao valor da raiz cúbica deste jeito: x^(1/3) . E assim por diante. Os sinais de comparação também são básicos em lua, ainda sim, são bem importantes e são usados para comparar bool, strings e numeros. Código: == significa dizer que é equivalente a tal string, number ou bool. Você está afirmando tal valor é igual a outro valor. ~= quer dizer que é diferente de tal string, number ou bool. Atenção, = não é igual a == Porcentagem Porcentagem é bastante usada em lua, pois é um artifício a ser usado em várias funções que envolvem valores numéricos. A porcentagem não é nada mais que regra de três, exemplo: Código: 100% - 200 25% - x Neste caso, temos o valor de cem por cento e queremos o valor de vinte cinco por cento. Para isso, cruzamos os valores. Então a seguinte conta é feita: Código: 100x = 5000 x = 5000/100 x = 50 Logo, 25% de 200 é 50. tonumber Existe uma função em lua, que tenta fazer a conversão de alguma string para valor numérico, esta função é chamada de tonumber. É uma função clássica de lua, onde ela faz a conversão, de uma string, para um valor numérico, por exemplo: tonumber(“2”), ela converte para 2. Simples, no entanto útil. Vamos usar dando um exemplo de Ot Server. Em um comando de talkaction, os parâmetros são strings, mesmo se forem números, assim, para compará-los com outros números, é necessário esta conversão. Para curiosidade, a função tostring faz o inverso, exemplo: tostring(2), retorna “2”. Biblioteca math Para mostrar a importância da matemática em lua e em outras programações, existem as funções math que são funções matemáticas ou diretamente relacionadas a ela. Sinceramente eu não domino todas, então vou explicar as mais importantes por agora, são elas: Código: Math.ceil math.deg math.exp math.floor math.ldexp math.log math.log10 math.modf math.pi math.pow math.rad math.random Bom, estas serão as bibliotecas explicadas neste tutorial, onde eu não explicarei as funções de seno, cosseno e tangente para não deixar o tutorial uma apostila. Primeiro, antes de começar a explicar estas funções, vou explicar o que seria um logaritmo, explicando como resolver-lo por definição, explicar o Número de Euler e explicar o que é um radiano. Logaritmo: Logaritmo é um conteúdo do ensino médio considerado um tanto complicado. Portanto, ensinarei apenas o método da resolução pela definição, vamos lá: Um logaritmo contém três partes, são elas a base, o expoente e o próprio logaritmo. Dado o logaritmo abaixo: Código: Log100 = x 10 A base é 10, x é o expoente e o logaritmo é log100. A conta deve ser feita deste jeito: Base elevada ao expoente é igual a logaritmo. Ou seja Código: x 10 = 100 x = 2 Pronto, o logaritmo de 100 na base 10 é 2. Esse é o método da definição do logaritmo. Número de Euler: O número de Euler é um número dado em homenagem a um matemático chamado Leonard Euler, suíço, nascido no século XIII. É um número irracional, aproximadamente é 2,718281828459045, ou, às vezes apenas 2,718281828459. O número de Euler é comum ser chamado de e. Também é à base do logaritmo natural. Radiano: Um radiano é a unidade de medida no Sistema Internacional de Unidades de um ângulo plano. Usando um circulo como exemplo, nós teríamos o eixo da circunferência, sendo a circunferência a linha traçada em volta do circulo. A distancia desde o eixo deste circulo até a circunferência é o raio. Quando a distancia entre duas linhas traçadas a partir do eixo até a circunferência for igual ao raio, o ângulo entre estas duas linhas vai ser 1 radiano. É importante saber que 1 radiano é, aproximadamente, 57.295779513082º. math.ceil Explicado como funcionam os logaritmos, um radiano e o número de Euler, vamos começar explicando as funções matemáticas. O math.ceil faz uma abreviação de qualquer número decimal, arredondando este para o próximo numero inteiro maior que ele. Usamos assim: math.ceil(1.5), ele retornará 2. Portanto, o math.ceil retorna o inteiro maior que o número decimal em seu parâmetro. Exemplos: Código: math.ceil(7/2) - 4 math.ceil(16/3) – 6 math.deg O math.deg faz a conversão de um ângulo dado em radianos para grau. Por exemplo, 1 radiano é, aproximadamente, 57.295779513082º. Exemplos: Código: math.deg(2) - 114.59155902616º math.deg(4) - 229.18311805233º math.exp Considerando que o número de Euler é chamado de e, esta função faz o número de Euler elevado a um expoente x. Usando o math.exp(x), ele eleva o e na potencia de x. Por exemplo, math.exp(x) faz a seguinte operação: Código: x e Exemplos: Código: math.exp(2) - 7.3890560989307 math.exp(10) - 22026.465794807 math.floor O math.floor é semelhante ao math.ceil, ele ignora os valores fracionários de números decimais e considera apenas o valor integral. No entanto, esta função arredonda o número para um valor menor, inteiro, que este. Por exemplo: math.floor(1.5), retorna 1. Exemplos: Código: math.floor(20/3) – 6 math.floor(9/2) – 4 math.ldexp Esta função é originada de uma fórmula, contendo dois parâmetros. A função eleva o número 2 a potencia do segundo parâmetro, feito isso, o multiplica pelo primeiro parâmetro. Por exemplo, math.ldexp(5, 3), primeiro é elevado 2 na potencia 3 e depois multiplicado por 5. Código: 2³ = 8 8*5 = 40 math.ldexp(5, 3) = 40 Exemplos: Código: math.ldexp(10, 7) = 1280 math.ldexp(40, 2) = 160 math.log Ao contrário do que o senso comum diz, esta função não lhe permite escolher um logaritmo e retornar o expoente a qual sua base deve ser elevado para ser igual e ele, no entanto, retorna a quanto o número de Euler deve ser elevado para que resulte no seu logaritmo. Por exemplo, math.log(148.41315910258), retornará 5, pois 2,718281828459045 elevado na 5º potencia é igual a 148.41315910258. Definição do logaritmo acima: Código: Log148.41315910258 = x 2,718281828459045 x 2,718281828459045 = 148.41315910258 x = 5 math.log10 Esta função é uma função relativamente simples comparada com a de cima. Pois ao invés de assumir o número de Euler como base do logaritmo, ela assume 10 como esta. Por exemplo: math.log10(100), seria processado assim: Código: Log100 = x 10 x 10 = 100 x = 2 Exemplos: Código: math.log10(1000) – 3 math.log10(0.1) – (-1) math.modf Esta é outra função simples de se compreender, ela retorna dois valores, o primeiro é a parte intregal do parâmetro e o segundo é a parte fracionária. Dado o exemplo: math.modf(1.5), ele retorna primeiro 1 e depois 0,5 pois 1 é a parte integral do número e 0,5 é a parte fracionária. Exemplos: Código: math.modf(7.5) - 7 & 0,5 math.modf(92.8) – 92 & 0,8 math.pi A função retorna o valor de PI é um número como o número de Euler, ou seja, um número importante e único na matemática. É usado para medir várias figuras geométricas. É referente a letra p no alfabeto grego, e tem o valor aproximado de: 3,14159265 math.pow A função representa a seguinte conta: Código: y x Ou seja, x elevado na potencia y, onde x é o primeiro parâmetro e y o segundo. Por exemplo, math.pow(2, 3) resulta 8. Exemplos: Código: math.pow(3, 2) - 9 math.pow(5, 3) – 125 math.rad É a função contrária de math.deg, faz a conversão de um ângulo dado em graus para radianos. Por exemplo, 1º é aproximadamente, 0.01745329 radianos. Exemplos: Código: math.rad(30) - 0.5235987755983 math.rad(360) - 6.2831853071796 math.random Para finalizar, a função math.random escolhe um número inteiro entre o arredondamento do primeiro parâmetro e o arredondamento do segundo. Sendo este arredondamento semelhante ao math.floor. Por exemplo, math.random(1, 5), processaria o seguinte: Código: 20% - 1 20% - 2 20% - 3 20% - 4 20% - 5 É importante ressaltar que lua é uma linguagem semi-randomica. Exemplos: Código: math.random(1, 100) math.random(5, 18) Fontes: Vou colocar aqui as fontes de onde eu recorri para escrever tudo isso acima: Manual Lua Wikipédia Logaritmo Wikipédia Radiano Wikipédia Número de Euler Espero que este tutorial possa ajudar alguem. Creditos : Shoeei
-
[Básico] Formato De Montanhas
Olá pessoal do Tibia King , nosso tutorial de hoje será como formatar a montanha , ou seja deixá-la de uma formato agradável , não muito quadrado . Primeiramente começamos a fazer a base com os seguintes ids : Id's : 877--873--874 Viram a diferença entre a 1° e a 2° imagem ? Agora temos que colocar as bordas. Oque séria bordas? Efeito de borda é uma alteração na estrutura, na composição e/ou na abundância relativa de espécies na parte marginal de um fragmento. Tal efeito seria mais intenso em fragmentos pequenos e isolados. Fonte : Wikipedia Id's : 4474~4468 O legal , é deixar algumas partes sem bordas , para dar um clima de que a montanha ainda está em formação. Ou seja , dar um efeito de que ela está em crescimento , podendo aumentar bruscamente de tamanha ou desmoronar. Viram ? já ta ficando legal , agora para preencher o preto devemos usar o Id: (919) Ficando Assim: Caso você queira fazer nature , ou algo do gênero , faça a escada , olha na seção Ideias de Mapping , lá tem várias ideias que poderam ser usadas(Não se esqueça se você usar ideia do postador dê rep+) Hora de fazer a nossa nature Para se Fazer a nature , aconselho usar as bordas de montanha Fina Motivo : o Relevo fica mais agradável do que a borda de montanha Grossa O Legal da nature é que você pode ver alguns show off e ter uma inspiração Por Exemplo fazer uma cachoeira no meio da montanha Tipo Essa Aqui Começe Colocando small rocks , depois adicione grass tufts Cuidado para não por grass tufts em cima das small rocks. Coloque tufos de gramas , small rock , blueberry bush , tree etc. Small Rock : 3623--3608 Tufos de Grama : 6219--6216 Árvores : 2708--2700 Blueberry Bush : 2785--2786--2768 Depois de adicionar a nature , se quiser , use árvores grande , se não souber fazer , aconselho ler o tutorial de arvores grandes do Left4Dead. Adicione Flowery Wall Id's : 8014
-
Importando MAP com FOTOS!
Bem esta tutorial é bem simples e contém apenas 6 passos que deverão ser seguidos com bastante atenção! ANTENÇÃO A VERSÃO DO MAPA INPORTADO A SEGUIR É 8.60! 1º Abra se remeres map editor e va em: FILE>IMPORT>IMPORT MAP. 2º Após abrir o IMPORT MAP, CLIQUE EM BROWSER PARA SELECIONAR O DIRETORIO DO SEU MAPA. 3º Após selecionado clique em ABRIR. 4º AGORA É A CONFIGURAÇÃO!. Bem... MAP FILE É O DIRETORIO DO SEU MAPA X OFFSET - É A POSIÇÃO DE X ONDE VOCê QUER QUE SEU MAPA SEJA COLOCADO. Y OFFSET - É A POSIÃO DE Y ONDE VOCê QUER QUE SEU MAPA SEJA COLOCADO. HOUSE IMPORT- É A SELEÇÃO QUE INDICA SE VOCÊ QUER QUE AS HOUSES DE SEU MAPA TAMBEM SEJAM INSERIDAS JUNTO DELE. SPAWN IMPORT- É A SELEÇÃO QUE INDICA SE VOCÊ QUER QUE AS SPAWNS DE MONTROS TAMBEM VENHAM JUNTO DE SEU MAPA. 5º Após ter importado o mapa o o seguinte erro procede: SAIRÁ DA ARÉA ONDE VOCê INPORTOU O MAPA! BEM MAIS PARA VOLTAR-MOS BASTA VOCÊ DAR "CTRL+T" E SABER A TOWN E PEGAR AS POSIÇÕES DE ONDE FICOU SUA CITY E DAR "CTRL+G" PARA IR ATÉ LÁ! 6º BEM AGORA É SO IR EM FILE>>SAVE, OU DAR UM CTRL+S PARA SALVAR. ATENÇÃO: SE SEU MAPA NAO FOR DA MESMA VERSÃO DO QUAL VOCê IRA IMPORTAR VOCÊ OCASIONALMENTE NÃO CONSEGUIRÁ IMPORTAR O MAPA POR ISSO ATUALIZIO ANTES!
-
Como tirar as espinhas?
Cara quer uma solução pega uma xilete e passa no rosto , meu amigo fez isso e saiu tudo kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
-
Como tirar as espinhas?
Eu tenho espinha , passo agnase,asepsia e outro bang q nem sei o nome , e esta resolvendo eu tinha muitas agora tenho pokas , e outra nada vé de punheta e causo da idade
-
Top 25 Fraggers
Nome: Top 25 Fraggers no Site Autores: Skeyba(mysql e PHP) / Dreamer/aioriusox(Script) Servidor Testado: TFS 0.3.4 (Cryng Dansom) Gesior Acc Maker Testado: Gesior Acc 0.3.4 O Script.lua Basicamente este script mostra no Site um Rank dos jogadores que mais matam outros Jogadores, a cada jogador Morto é adicionado um valor no banco de dados fazendo a contagen de quantos jogadores cada jogador matou e ele vai ganhando caveirinhas. Screen Shot Vamos Começar a Parte Mysql e PHP: Vá no seu banco de dados em mysql, e execute no banco de dados do seu OT este comando Mysql: Código PHP: ALTER TABLE `players` ADD `frags_all` INT( 11 ) NOT NULL; Agora vamos criar a Pagina do Site em PHP, vá na pasta do seu site, se voce usar xampp vá em c:/xampp/htdocs copie um arquivo PHP e cole na mesma pasta e renomei-o para frags.php e adicione este código la dentro: Salve, e abra o index.php e abaixo disto: case "highscores"; $topic = "Highscores"; $subtopic = "highscores"; include("highscores.php"); break; Adicione Isto: case "frags"; $topic = "Frags"; $subtopic = "frags"; include("frags.php"); break; Salve e vá na pasta Layouts/tibiacom/layout.php e abra como bloco de notas ou arquivo wordpad, e abaixo disto: Adicione isto: Agora Vamos iniciar a Parte dos Scripts Abra a pasta data/creaturescripts/scripts do seu OT, copie qualquer arquivo la dentro e renomei-o de frags.lua e adicione isto: Na mesma pasta abra seu Login.lua e adicione isso: registerCreatureEvent(cid, "Frags") em creaturescripts.xml adicione: <event type="kill" name="Frags" event="script" value="frags.lua" /> Agora va na pasta data/lib e abra o seu function.lua e depois do ultimo end, adicione: Salve, Abra seu OT e Teste!
-
Vida E Ter !
Dahora demais,funk muito bom.esse ae e pika
-
[PEDIDO] OTServ [GTA]
Dificil acha qualquer projeto com cliente , creio que você deveria trabalhar nele cara,programa uma equipe e faça um proprio para vc
-
Eu na RL
Credooo , meu pc começo até trava --
- [Modern ACC] Show Outifit
-
Alguem Joga Samp
alguem joga gta online ae ?
-
sistema de refinamento perfeito 2.0
O refinamente é para você melhora o seu equipamento , vc pega ele da use em algum item seu e melhora veja as imagems no topico.
-
sistema de refinamento perfeito 2.0
Autor : Mock Servidor Testado : TFS 0.3.6 Vamos instalar. Adcione essa tag no actions.xml: <action itemid="8306" event="script" value="upgrade.lua"/> <action itemid="8305" event="script" value="upgrade.lua"/> Bom a segunda é um segundo item que tem 100% a mais de chance de acertou, ou seja esse nunca falha, e o normal com nem uma chance adcional é o itemid 8305. Agora em upgrade.lua coloque isso: Veja ele funcionando: E agora com a possibilidade do slot ssystem conjunto com esse sistema vc pode fazer coisas assim: Código: 12:02 You see a knife +1 [hp.+7%] (Atk:8, Def:6). Creditos Mock ( Por Fazer O Script ) GodMarini ( Por Trazer Ao TK )
-
Ajuda Quero Aprende usa Linux
Bom galera tava com 1 projeto , deu certo 190 players é talz , so que nukarão era WINDOEWS , e muitos me falarão que a solução era o LINUX , pois eu não sei mecher , alguem poderia me manda algum tutorial ou me ensinar a mecher ? fikarei grato e darei rep+