-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
[Pedido] - Alavanca Que Sumona Monstros E !aol
tópico respondeu ao yurisavio de Oneshot em Lixeira Pública
<action uniqueid="UNIQUEID" event="script" value="nome do arquivo.lua"/> -
Esse é o problema, você havia citado uma 3ª promotion e na verdade, você quis dizer a 2ª. local function pegarNome(name) return string.sub(name, 7) end function onLogin(cid) local name = getCreatureName(cid) local nome = getPlayerGUID(cid) if isVip(cid) then if string.sub(name, 1,6) == "[VIP] " then return true else db.executeQuery("UPDATE `players` SET `name` = '[VIP] "..name.."' WHERE `id`= " .. nome .. ";") doPlayerSendTextMessage(cid,19,"Você vai kikado em 10 segundos para atualizar o nome. ") addEvent(doRemoveCreature,10000,cid) if getPlayerPromotionLevel(cid) ~= 2 then setPlayerPromotionLevel(cid, 2) end end else if string.sub(name, 1,6) == "[VIP] " then db.executeQuery("UPDATE `players` SET `name` = '"..pegarNome(getCreatureName(cid)).."' WHERE `id`= " .. nome .. ";") doPlayerSendTextMessage(cid,19,"Voce ira ser kikado em 10 segundo para por [VIP]. Logue sua conta novament.") addEvent(doRemoveCreature,10000,cid) end end return true end
-
Aula 2 - Lógica, Algoritmo E Operadores
tópico respondeu ao Oneshot de Oneshot em Tutoriais de Programação
Muito boa a sua observação, Eskylo. -
É fake, provavelmente esse cara aí da foto não tem aquele voz esganiçada sua
-
local function pegarNome(name) return string.sub(name, 7) end function onLogin(cid) local name = getCreatureName(cid) local nome = getPlayerGUID(cid) if isVip(cid) then if string.sub(name, 1,6) == "[VIP] " then return true else db.executeQuery("UPDATE `players` SET `name` = '[VIP] "..name.."' WHERE `id`= " .. nome .. ";") doPlayerSendTextMessage(cid,19,"Você vai kikado em 10 segundos para atualizar o nome. ") addEvent(doRemoveCreature,10000,cid) if getPlayerPromotionLevel(cid) ~= 3 then setPlayerPromotionLevel(cid, 3) end end else if string.sub(name, 1,6) == "[VIP] " then db.executeQuery("UPDATE `players` SET `name` = '"..pegarNome(getCreatureName(cid)).."' WHERE `id`= " .. nome .. ";") doPlayerSendTextMessage(cid,19,"Voce ira ser kikado em 10 segundo para por [VIP]. Logue sua conta novament.") addEvent(doRemoveCreature,10000,cid) end end return true end Não testado.
-
Com trade window ou sem?
-
[Pedido] - Alavanca Que Sumona Monstros E !aol
tópico respondeu ao yurisavio de Oneshot em Lixeira Pública
local monster = "Rat" function onUse(cid, item, fromPosition, itemEx, toPosition) return doCreateMonster(monster, fromPosition) and doTransformItem(item.uid, item.itemid+1) end Sua alavanca criadora de monstros. Coloque um uniqueid na alavanca pelo editor de mapas e certifique-se de colocar esse mesmo uniqueid na chave do actions.xml. Um abraço -
local itemReq = 2178 function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) local g = getPlayerItemById(cid, true, itemReq) if g.uid == 0 then doTeleportThing(cid, fromPosition, true) doPlayerSendCancel(cid, "You need ".. getItemNameById(itemReq) .." to pass.") end return true end Coloque qualquer actionid no piso e certifique-se de colocar a mesma actionid na chave do movements.xml Um abraço
-
Pois é, sou eu. Acho que já vi trabalhos do Colex, mas não preciso me basear em algo dele para desenvolver meus scripts. Aliás, me diga uma coisa, o que há de igual no meu script com o do seu venerado scripter? Uma tabela de questões? Se for assim, todos que usam tabelas são rippers de todos os outros que já usaram tabelas antes, né? Sinceramente, falar que eu rippei algo porque as ideias são iguais é tenso, muito tenso. Estudem bem os dois códigos e vejam se as estruturas se assemelham em quaisquer pontos, eu não usei nada do tal script postado pelo Devilmoon. OBS: Obrigado pelo otário, grande Won Helder!
-
É, script bem simples. Você ensinou a adicionar novos itens de prêmio, mas esqueceu de falar para aumentar o valor do math.random. Para evitar isso, coloque os valores que essa função irá aleatorizar em função do comprimento da tabela items. E também se o valor do index sempre aumenta de forma linear, não é necessário declaração dele. local items = { {id = 2160, count = 10}, {id = 2379, count = 1}, {id = 2392, count = 1} } function onUse(cid, item, fromPosition, itemEx, toPosition) local r = math.random(1, #items) doPlayerAddItem(cid, items[r].id, items[r].count) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found ".. items[r].count .." ".. (items[r].count > 1 and getItemInfo(items[r].id).plural or getItemNameById(items[r].id)) ..".") return true end
-
LLol, Depende muito, porque temos vários sistemas de VIP no fórum, sendo que cada um tem suas próprias funções. Edite o seu primeiro post, esclarecendo qual o sistema que você usa, assim eu poderei te ajudar.
-
Aula 2 - Lógica, Algoritmo E Operadores
tópico respondeu ao Oneshot de Oneshot em Tutoriais de Programação
Sim, irei criar uma série de tutoriais. -
AULA II LÓGICA, ALGORITMO E OPERADORES. Na aula passada, você aprendeu qual a linguagem usada nos servidores, onde surgiu a programação Lua, o que é scripting e como se tornar um scripter. Nessa segunda aula, você irá aprenderá a pensar como um programador, irá aprender a transformar seu raciocínio lógico em uma sequência de instruções e finalmente, com a apresentação do que são operadores, você irá montar um script básico, mas eficaz. Lógica e Algoritmo Toda linguagem de programação, inclusive a Lua, segue uma certa lógica para funcionar corretamente. A isso, damos o nome de lógica de programação. Para fazer um script em Open Tibia não é diferente, você precisa criar uma lógica que relacione sua ideia e o script, uma sequência de instruções que, depois, se torne o script em si. Isso é um algoritmo. Pegaremos agora um exemplo bem simples de funcionamento em um servidor - Uma pedra mágica que usada, verifique o sexo do jogador e troque para o sexo oposto. Um algoritmo como esse acima, também pode ser montado na forma de um gráfico, veja abaixo: Algoritmos são uma grande ajuda para os scripters. Eu, por exemplo, sempre monto uma imagem parecida com essa quando o script que vou fazer é um tanto mais elaborado. Agora, com a apresentação dos conceitos abaixo, você irá transformar esse algoritmo em um script funcional. Operadores aritméticos e relacionais. Nessa parte da aula, você irá aprender um pouco mais sobre os operadores aritméticos, aqueles bem conhecidos das suas aulas de Matemática. Os operadores relacionais que comparam coisas (hm...). Os operadores aritméticos, como você deve bem conhecer, fazem operações de cálculo simples. Creio que você os conhece. Você pode testar o funcionamento dos operadores com um comando print() e alguns números, veja abaixo: print(4+7) -- Retorna 11 print(7-4) -- Retorna 3 print(5*4) -- Retorna 20 print(4/4) -- Retorna 1 Os operadores relacionais são muito usados também no âmbito da matemática. Na programação, eles comparam dois tipos de objetos e retornam apenas valores true e false. Os operadores relacionais são listados abaixo: == ~= > < >= <= O operador de igualdade (==) compara o tipo dos argumentos envolvidos, caso o tipo seja diferente, será retornado false. Caso o tipo seja igual, ele compara o valor dos argumentos e novamente, se o valor é diferente, é retornado false, caso os dois valores sejam iguais, será retornado true. O operador de diferença (~=) é simplesmente a negação do operador de igualdade (==). Ou seja, ele retornará true para tipos ou valores diferentes e false para tipos/valores iguais. Os operadores de ordem (>, <, >=, <=) funcionam simples como na matemática. Se os dois operadores são números, então eles são comparados como tais. Eles só irão retornar true, caso a comparação seja realmente verdadeira e false caso não seja. Veja abaixo: Abaixo você irá aprender sobre os operadores de controle, eles criam condições e só executam algo associado a eles caso a condição seja verdadeira. Estou falando de: if, elseif e else. Operadores de Controle A estrutura de um operador de controle pode retornar qualquer valor. Tanto os valores false e nil são considerados como falsos e todos os outros valores diferentes são considerados como verdadeiros. A estrutura de controle criada a partir de um operador, só executa o bloco de código associado se o valor retornado pela condição seja verdadeiro. Existem cinco operadores de controle: if, elseif, else, repeat e until. Os dois últimos não serão explicados nessa aula. O operador if significa 'se', remete a uma estrutura sintática e condicional, você já deve ter visto uma sintaxe do tipo: Vou grifar em vermelho uma parte muito importante dessa frase e em azul seu bloco: Veja que para a parte em azul ocorrer, então a condição tem que "retornar" verdadeiro, ou seja você tem que estudar muito. Na programação Lua não é diferente, não. O bloco azul é simplesmente todo o código que será executado se a condição relacionada ao if retornar verdadeiro: if true then bloco end Pois é, para algo retornar verdadeiro, você deve fazer uma comparação, usando nada mais que os operadores relacionais. Note que: O if precisa de um then, significa então. Ele fecha a estrutura sintática do if, nunca esqueça dele. E também o end que fecha a verificação do if. 1 == 1 2 == 2 3 >= 3 4 <= 4 getPlayerMoney(cid) >= 40 Mas para toda condição, existe uma chance de ocorrer algo contrário, certo? Por exemplo, se o camarada não tivesse estudado, nada ocorreria? Na programação, nós tratamos dessa sintaxe com o else. O else é simplesmente a negação do if, se a construção do operador if retorna falso, então o que estiver atribuído ao else será executado. Vamos completar a frase: E no nosso código ele pode ficar assim: if false then bloco else bloco2 end Note que: O else não precisa de then. Como ele é a negação do if, ele "meio que" se aproveita do then e end do if. E por último, temos o controlador Elseif, ele é bem simples, é usado quando você tem muitos outros blocos para outras várias condições. Mas os blocos ligados ao elseif só irão ser executados quando o bloco do if retornar falso, parecido com o funcionamento do else. Juntando tudo em um código de simples entendimento: if false then bloco elseif true then bloco2 end Note que: O elseif precisa de then igual ao if, mesmo que seja auxiliar ao if, ele é uma condição totalmente diferente. Ele só não precisa do end. Para finalizar a aula, quero apresentar dois operadores lógicos muito usados com operadores de controle, são eles: and e or. Os dois são usados quando você precisa fazer múltiplas verificações em uma estrutura condicional. A diferença é básica: O operador and exige que todas essas condições retornem verdade para executar o bloco, já o operador or exige que uma apenas seja verdade. Eu costumo usar muito o and quando vejo essa situação abaixo: if true then if true then bloco end end if true and true then bloco end E uso o operador or, quando vejo que um elseif foi empregado para executar um mesmo bloco que um if. if false then print(1+1) elseif true then print(1+1) end if false or true then print(1+1) end Finalizamos por aqui Será que vocês conseguem fazer a "pedra do sexo" com os conhecimentos aprendidos aqui? Vou deixar algumas instruções, boa sorte! Só clique na resposta, se você conseguiu fazer. Um abraço, até a próxima aula.
-
AULA I Introdução a Programação LUA INTRODUÇÃO Olá, se você está aqui lendo essa aula, provavelmente é porque abriu aqueles arquivos estranhos da pasta do seu servidor e viu uns escritos místicos que você não conseguiu entender. Primeiro, você tentou mexer naqueles escritos e, BOOM!, as quests do seu servidor começaram a dar erros, as poções do jogo começaram a ficar desequilibradas, magias começaram a ficar "apelonas" e, enfim, seu servidor foi para o espaço. Aqui nesse conjunto de aulas, você aprenderá a milenar arte de programar scripts e sua única ferramenta será a linguagem LUA. No fim delas, você poderá bater no peito e falar, eu sou um scripter. SCRIPTING? SCRIPTS? Antes de mais nada, você precisa entender o que é scripting e o que são scripts. Scripting é, nada mais, o ato de programar em uma certa linguagem. Já scripts são blocos de código escritos nessa linguagem, que, através de um interpretador, são lidos e... bem... interpretados. Essa certa linguagem é a Lua, uma potente ferramenta de programação, que oferece recursos e suporte para orientação a objetos ou dados, como também programação funcional. Por ser de fácil utilização e entendimento, a linguagem LUA foi implementada como uma biblioteca ao código C++ do projeto Open Tibia. O QUE EU PRECISO PARA SER UM SCRIPTER? Muita gente acha dá de cara com os obstáculos e, pronto, desiste. Isso é um dos "defeitos" que você deve abrir mão, se quiser ser um futuro programador. Você deve ter força de vontade e determinação, olhar para a linguagem e falar: "Eu sou foda e vou fazer isso funcionar". Além disso, você precisa ter paciência, nem sempre você vai conseguir entender os mais difíceis conceitos e estruturas, quando isso ocorre, você deve ter garra e tirar suas dúvidas. Nem sempre você vai pegar um bloco vazio, escrevinhar um código e ele vai funcionar do jeito que você queria e, por isso, você não pode desanimar e/ou desistir. Um scripter também precisa ter criatividade e muita vontade, a primeira para ter ideias e a segunda para concluir e tornar essa ideia real. Você acha que vai ter a ideia, olhar para a tela do computador e sem cansar a mão de tanto escrever, a ideia vai surgir pronta? Não mesmo. E, por fim, você precisa de ferramentas, não é? Afinal, o que é um técnico sem suas ferramentas de trabalho. Lua necessita de um interpretador que leia seus scripts e, entendendo, execute as funções programadas nele, para isso você já tem um interpretador e ele é seu próprio servidor. Como disse antes, o código do projeto Open Tibia, tem bibliotecas Lua, o que faz do executável um interpretador. E você irá precisar de uma ferramenta para escrever o código, para isso, recomendo o Notepad++, que possui suporte a Lua. CONCLUSÃO Essa aula termina aqui, ela é curta, pois introduz apenas os conceitos básicos, afinal, você não quer ler um pequeno artigo e se tornar o melhor, melhor do mundo em programar scripts, certo? Na próxima aula, juntos iremos aprender que a programação tem uma certa lógica entre-linhas, criaremos um algoritmo e com a apresentação detalhada de algumas estruturas léxicas, iremos criar nosso primeiro script! Bem-vindo ao mundo do scripting, padawan! Para saber mais: Wikipédia - Lua (linguagem de programação)
-
markiinho10, Não adianta postar um tópico pedindo algo tão abstrato, você mesmo deveria vasculhar a seção de Scripting e procurar scripts que você gostaria de instalar no seu servidor.
-
Desculpe, BravHart, fiquei ausente por um tempo. O problema é que outra função também devia ser adicionada ao npc.lua. Adicione apenas essa linha que o sistema irá reconhecer. lookAtFocus = setFocus Um abraço.
-
Desculpe a demora. Para adicionar os itens que o NPC venderá ou comprará: local itemTable = { {id = 5880, subType = 0, buy = 100, sell = 0, name = "Iron Ore"} } Coloque uma vírgula no final da última linha e adicione outra: local itemTable = { {id = 5880, subType = 0, buy = 100, sell = 0, name = "Iron Ore"}, {id = 3000, subType = 0, buy = 500, sell = 10, name = "EXEMPLO"} } E adicione essas funções no seu arquivo npc.lua, caso contrário o código apresentará erros. function isFocused(cid, t) for i, v in pairs(t) do if(v == cid) then return true end end return false end function addFocus(focus, t) if(not isFocused(focus, t)) then table.insert(t, focus) end end function setFocus(t) for i, v in pairs(t) do if(isPlayer(v)) then doNpcSetCreatureFocus(v) return end end doNpcSetCreatureFocus(0) end function removeFocus(cid, t) for i, v in pairs(t) do if(v == cid) then table.remove(t, i) selfFocus(0) break end end end E configure o storage que o código verificará aqui: local storage = 9999 Sinta-se livre para efetuar quaisquer modificações nas falas do NPC.
-
BravHart, Poste o conteúdo de npc.lua localizado em data/npc/lib. Isso me ajudará a desenvolver seu pedido.
-
guigui825, Acho que sei qual o problema, deve ser a sintaxe do comando que mudou para servidores 9.x Para editar itens, é necessário usar o comando desse jeito, por exemplo: /attr set number attack 100 Você pode mudar o parâmetro "attack" por qualquer um de sua escolha e o número "100" pelo valor que deseja. Teste e reporte a situação. Abraço.
-
wane, Pelo que eu consegui interpretar no código, a posição da "árvore-obstáculo" está dentro de uma certa área que o script verifica. Por meio de um editor de mapa, você deve colocar essa árvore em uma posição que não esteja nessa área de verificação. x = 32705, y = 32342, z = 7, x = 32726, y = 32358, z = 7 Ou seja, no seu editor de mapas, procure uma posição para o obstáculo que o X não esteja entre 32705 e 32726 e o Y, entre 32342 e 32358. Um abraço.
-
Bom, vi que você está precisando do parâmetro toPosition e até esqueci de esclarecer essa dúvida. O ato de declarar um evento "buffer" usando CDATA não te impede de usar funções na composição do código, ou seja: <action itemid="2422" event="buffer"> <![CDATA[ function onUse(cid, item, fromPosition, itemEx, toPosition) return print(toPosition.x) end ]]></action> É totalmente válido. Se você precisar de ajuda com a otimização da sintaxe, só falar
-
Nada mal, ficou bem feito e você soube se utilizar do controlador repeat muito bem. A parte chata é que o script não é "esperto", se eu tenho os itens para fazer uma Scale Armor e os coloco no chão em ordem contrária ao proposto pela configuração no script, a receita não é entendida. :\ Obrigado pela sua contribuição!
-
[Arquivado]Reestruturação Otserv # Veja O Modelo
tópico respondeu ao Henrique Moura de Oneshot em Noticias - Arquivo
Bem legal a reestruturação, Henrique Moura. Recomendo tirar esse "Sistemas e Mod's" e colocar "Mods e Bibliotecas". Esse conceito de sistemas é muito abstrato. -
Para seu primeiro script você está regular. Experimente usar elseif para valores diferentes de param, ao invés de usar vários e vários if.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.