-
Total de itens
361 -
Registro em
-
Última visita
-
Dias Ganhos
10
Tudo que joaohd postou
-
Valeu ae gente, to tentando trazer um pouco mais de conhecimento pra galera =D. @Kydrai Não entrei muito em detalhes técnicos até porque, o tutorial é voltado pro pessoal que n sabe nada de LUA. flw
-
Bom, eu venho aqui para pedir nada mais, nada menos que uma sign. Creio que é das bem simples: Tamanho: To por fora de tamanho, pode ser uma tamanho convencional Conteúdo: queria o nome apocarai em letras grossas, cor preta. O fundo não precisa existir. A tipografia, quero com o efeito grunge. A quem fizer, agradeço. flw
-
Olha eu de novo por aqui. Dessa vez, o tutorial é sobre tabelas. Muitas pessoas, por não conhecerem o poder das tabelas, acabam criando scripts enormes e de difícil configuração. Após a leitura deste tutorial, você estará apto a criar scripts com tabelas simples ou intermediárias, possibilitando o encurtamento de scripts e até mesmo uma melhor compreensão de scripts feitos com o uso das mesmas. Para ter uma noção da imensidade e importância das tabelas em LUA, este é o único modo de armazenamento de dados, sejam eles numéricos ou textos (strings). Observe como a tabela é representada em LUA: Quando verificar a existência das chaves “{}” em um script, estamos tratando de uma tabela. Vamos criar agora uma tabelinha simples, somente para explicação: Como pode ver, criei uma tabela de conteúdo misto, contendo strings e números. Cada valor separado por vírgulas pode ser chamado de célula, contendo um endereço único que veremos mais à frente. Caso eu queira o valor da primeira célula, devo conhecer seu endereço, que nada mais é que o nome da tabela seguido de seu índice: Os índices existem mesmo que ocultos. Sempre que você cria uma tabela e não os especifica, subentende-se que cada célula receberá um índice de numero crescente partindo do 1. Caso sejam especificados, estes podem ser escritos assim (existe outra maneira, mais avançada): Logo, para acessarmos qualquer valor da tabela, digitamos o endereço da célula, sendo que agora, o endereço é composto pelo nome da tabela, precedido de um ponto (.) e o índice. Logo, Após entender o básico, podemos passar para as tabelas múltiplas, que apesar de parecerem difíceis, seguem a mesma base das simples. Exemplo de tabela múltipla: Não, não desista ao se deparar com tabelas assim. A interpretação pode ser feita por meio de um organograma: Já a parte dos índices são iguais. Por exemplo, quero pegar o valor 1 dos assuntos do xtibia: Fácil, não? Agora, iremos aprender a obter o “tamanho” de uma tabela. Podemos fazê-lo de duas formas. Criarei uma tabela simples para a explicação: Maneira 1: Usamos a função table.getn(tabela) ou a função table.maxn(tabela). O uso é da seguinte maneira: Maneira 2 (fácil) : Inserimos o caracter “#” seguido do nome da tabela. Assim: Informações adicionais: ► O nome de uma tabela deve ser escrito sem espaços. ► O nome de uma tabela não deve conter caracteres coringas (!@%¨*) ► Tabelas não interpretam um valor vazio (nil) Creio que seja isto por hoje. Vou deixar alguns exercícios simples, para fixação: 1)Crie uma tabela simples com 6 valores, onde cada valor é uma string com o nome de um usuário do xtibia. 2)Crie uma tabela múltipla com 3 valores principais, cada um com o nome de uma área do xtibia, e dentro das áreas, o nome de 2 frequentadores da área correspondente. Respostas (tentem fazer primeiro, postando seus resultados): Materiais de apoio: Funções LUA Introdução à programação LUA + estruturas Começando a "scriptear" Tutorial sugerido por Vodkart. Você também pode pedir o seu aqui flw
-
talkaction [ Talkaction ]Talkaction De Compra De Itens.
tópico respondeu ao MatheusGlad de joaohd em Actions e Talkactions
Isso ae mano. Tabelas encurtam muito o script. Hoje vamo ve se da pra fazer a versão final né ( se eu tiver tempo ). flw -
Valeu ae gente. Acho que hoje sai mais um diretamente do forno. O assunto vai ser tabelas. flw
-
Bom, como me foi sugerido a elaboração de um tutorial que ensine a "scriptear" ( do dicionario brumatt ), aqui está. Espero que façam bom proveito. Para começar com scripts, você deve primeiro ter algumas competências básicas, porém primordiais. São elas: ► Conhecimento de inglês; ► Conhecimento prévio das funções; ► Capacidade de criar sequências de raciocínios. Mas por que desenvolver estas capacidades? Como o nome das funções e estruturas são em inglês, você precisa entender o que elas fazem e te retornam. Na maioria das vezes, somente traduzindo o nome da função você consegue detectar sua serventia. O conhecimento prévio das funções, além de poupar tempo, evita que você cometa erros simples e até mesmo agilize a execução do seu script. A capacidade de criação de sequências lógicas é a parte que a maioria das pessoas tem dificuldades para desenvolver. Sem ela, os scripts podem conter erros (bugs), falhas de segurança e até mesmo a falha total de seu código. Esta parte, você terá de desenvolver sozinho. Ninguém te ensina. Após conhecer as competências básicas para se começar a criar scripts, podemos começar a explicar um pouco mais sobre cada uma, individualmente. → Inglês Aqui explicarei somente o básico, dando ênfase aos prefixos. SET De acordo com o dicionário, “Set” quer dizer Logo, as funções que tenham o prefixo “Set”, servem para estabelecer algo para alguma coisa ou alguém. O que será estabelecido pode ser um texto (string), número ou alguma condição. DO De acordo com o dicionário, “Do” quer dizer Logo, as funções que tenham o prefixo “Do”, servem para realizar alguma ação ou consulta. GET De acordo com o dicionário, “Get” quer dizer Logo, as funções que tenham o prefixo “Get”, servem para fazer uma consulta de alguma coisa à alguém ou alguma coisa. O que será consultado pode ser um número ou um texto (string). IS De acordo com o dicionário, “Is” quer dizer Logo, as funções que tenham o prefixo “Is”, servem para fazer uma verificação se alguma coisa é ou não o que foi proposto. Após ler e entender o básico de inglês para começar com scripts, podemos passar para a parte da lógica.Todos os dias, inconscientemente, você faz uma sequência lógica: Acordar – Ligar o computador – Abrir os olhos – Acessar o Xtibia Logo, esta parte, só precisa ser desenvolvida. Os passos para se criar uma sequência interpretável e executável são a análise prévia do problema, destacando os métodos de resolução; Análise dos métodos de resolução, eliminando os que não podem ser executados, seja por falta de conhecimento ou por falta de ferramentas; Escolha do melhor método de resolução; Destaque dos pontos cruciais da resolução; Criação da lógica. Apesar de parecer complexo, esta parte é bem simples. Para início, tente criar uma sequência para a troca do pneu furado do seu carro. Bom, acho que é isso. Tutorial sugerido por Brumatt. Você também pode pedir o seu aqui Materiais de apoio: Funções LUA Introdução à programação LUA + estruturas flw
-
talkaction [ Talkaction ]Aol's System
tópico respondeu ao matheus1000 de joaohd em Actions e Talkactions
Vodkart, para ser mais exato, a parte do '== 1' está certo (em parte). No arquivo compat.lua, já está especificado que 'TRUE = 1' e 'FALSE = 0'. O erro cometido nesta parte é que nos otServer's mais novos, as funções já retornam 'TRUE' ou 'FALSE', logo, isto é desnecessário. flw -
Ae, até que enfim começaram a ler isso aqui. Seção sem movimento... flw
-
[Encerrado] [ Resolvido ] Não Abre Box, Chests...
tópico respondeu ao Doidin de joaohd em Tópicos Sem Resposta
Bom, creio que possa ser no seu itens.xml. Verifique se estão neste modelo: <item id="1739" article="a" name="crate"> <attribute key="weight" value="8000"/> <attribute key="containerSize" value="15"/> </item> flw -
Como o Vodkart disse, isto não é possível, pelo menos não em LUA. O bloqueio do level é devido ao cliente do tibia pois, como pode perceber, após certa quantia de experiência, os números começam a passar por cima das letras. Se não me engano, até o global tem problemas com isso, uma vez que não era planejado que jogadores atingissem aquele level. flw
-
Tem jeito sim. Observe: selfSay("Assim ele fala no npc channel.", cid) selfSay("Assim ele fala no default channel.") Observe o final da linha. Quando usamos o cid, ele fala no npc channel. Caso contrário, ele fala no default. flw ps: Isso no script lua. Creio que as frases especificadas no xml não seja possível mudança sem alterar algo no distro.
-
Creio que ainda não funcione o do MatheusMkalo ou o do Kydrai. Caso não funcionem, use: function onStepIn(cid, item, position, fromPosition) if isPlayer(cid) then if not isPremium(cid) then doTeleportThing(cid, {x=32360,y=31782,z=7}) doPlayerSendTextMessage(cid, 22, "Only premium players can pass.") else doSendMagicEffect(getCreaturePosition(cid), 12) end end return TRUE end flw
-
Tente usar este: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local moneyTo = {} local playerTo = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local function isValidMoney(cid, money) if isNumber(money) == TRUE and money > 0 and money < 999999999 and money <= getPlayerMoney(cid) then return TRUE end return FALSE end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end if msgcontains(msg, 'ajuda') or msgcontains(msg, 'ofertas') then selfSay("Voce pode checar seu {saldo} da sua conta, {depositar} dinheiro ou {extrair} para retirar. Voce tambem pode {transferir} dinheiro para outros players, tambem pode entrar nas {açoes}, diga {informaçoes} para saber sobre as açoes.", cid) talkState[cid] = 0 ----------------------------------------------------------------- ---------------------------- Balance ---------------------------- ----------------------------------------------------------------- elseif msgcontains(msg, 'saldo') or msgcontains(msg, 'Saldo') then selfSay('Seu saldo é '..getPlayerBalance(cid)..' gold.', cid) talkState[cid] = 0 ----------------------------------------------------------------- ---------------------------- Help ------------------------------- ----------------------------------------------------------------- elseif msgcontains(msg, 'basic functions') then selfSay('Voce pode checar seu {balance} da sua conta, {deposit} dinheiro ou {withdraw} para extrair. Voce tambem pode {transfer} dinheiro para outros players.', cid) talkState[cid] = 0 ----------------------------------------------------------------- ---------------------------- Deposit ---------------------------- ----------------------------------------------------------------- elseif msgcontains(msg, 'depositar tudo') then moneyTo[cid] = getPlayerMoney(cid) if moneyTo[cid] < 1 then selfSay('Voce nao tem dinheiro.', cid) talkState[cid] = 0 else selfSay('Voce realmente quer adicionar '..moneyTo[cid]..' gold?', cid) talkState[cid] = 2 end elseif msgcontains(msg, 'depositar') then selfSay("Porfavor me diga quanto voce quer depositar.", cid) talkState[cid] = 1 elseif talkState[cid] == 1 then moneyTo[cid] = tonumber(msg) if isValidMoney(cid, moneyTo[cid]) == TRUE then selfSay('Voce realmente quer depositar '..moneyTo[cid]..' gold?', cid) talkState[cid] = 2 else selfSay('Nao é uma quantia valida para deposito.', cid) talkState[cid] = 0 end elseif talkState[cid] == 2 then if msgcontains(msg, 'sim') then if doPlayerDepositMoney(cid, moneyTo[cid], 1) ~= TRUE then selfSay('Voce nao tem esse dinheiro.', cid) else selfSay('Tudo bem, nos adicionamos '..moneyTo[cid]..' gold para seu saldo. Voce pode extrair seu dinheiro quando quiser. Seu saldo é ' .. getPlayerBalance(cid) .. '.', cid) end elseif msgcontains(msg, 'nao') then selfSay('Como desejar. Posso fazer mais alguma coisa por voce?', cid) end talkState[cid] = 0 ----------------------------------------------------------------- ---------------------------- Withdraw --------------------------- ----------------------------------------------------------------- elseif msgcontains(msg, 'extrair') then selfSay("Porfavor, diga-me quanto voce deseja extrair.", cid) talkState[cid] = 6 elseif talkState[cid] == 6 then moneyTo[cid] = tonumber(msg) if isValidMoney(cid, moneyTo[cid]) == TRUE then selfSay('Voce esta certo que quer extrair '..moneyTo[cid]..' gold de sua conta de banco?', cid) talkState[cid] = 7 else selfSay('Nao é uma quantia valida para extraçao.', cid) talkState[cid] = 0 end elseif talkState[cid] == 7 then if msgcontains(msg, 'sim') then if doPlayerWithdrawMoney(cid, moneyTo[cid]) ~= TRUE then selfSay('Voce nao tem essa quantia em sua conta. Seu saldo é '..getPlayerBalance(cid)..'. Por favor, diga-me quanto quer extrair.', cid) else selfSay('Aqui esta, ' .. moneyTo[cid] .. ' gold. Porfavor, digame se quizer mais alguma coisa.', cid) talkState[cid] = 0 end elseif msgcontains(msg, 'nao') then selfSay('Como desejar. Posso fazer mais algo?', cid) talkState[cid] = 0 end ----------------------------------------------------------------- ---------------------------- Transfer --------------------------- ----------------------------------------------------------------- elseif msgcontains(msg, 'transferir') then selfSay("Por favor, digame quanto de dinheiro voce quer transferir.", cid) talkState[cid] = 11 elseif talkState[cid] == 11 then moneyTo[cid] = tonumber(msg) if isValidMoney(cid, moneyTo[cid]) == TRUE then selfSay('Voce gostaria de transferir '..moneyTo[cid]..' gold para?', cid) talkState[cid] = 12 else selfSay('Nao é uma quantia valida para deposito.', cid) talkState[cid] = 0 end elseif talkState[cid] == 12 then playerTo[cid] = msg if getCreatureName(cid) == playerTo[cid] then selfSay('Voce deseja transferir dinheiro para voce mesmo? Isto e impossivel!', cid) talkState[cid] = 0 return TRUE end if playerExists(playerTo[cid]) then selfSay('Voce deseja transferir ' .. moneyTo[cid] .. ' gold para "' .. playerTo[cid] .. '" ?', cid) talkState[cid] = 13 else selfSay('O player "' .. playerTo[cid] .. '" nao existe.', cid) talkState[cid] = 0 end elseif talkState[cid] == 13 then if msgcontains(msg, 'sim') then if getPlayerBalance(cid) < moneyTo[cid] then selfSay('Voce nao tem dinheiro em sua conta.', cid) return TRUE end if doPlayerTransferMoneyTo(cid, playerTo[cid], moneyTo[cid]) ~= TRUE then selfSay('Esse player nao existe ou ainda nao tem vocaçao.', cid) else selfSay('Voce transferiu ' .. moneyTo[cid] .. ' gold tpara "' .. playerTo[cid] ..' ".', cid) playerTo[cid] = nil end elseif msgcontains(msg, 'nao') then selfSay('Como deseja. Posso fazer mais alguma coisa para voce?', cid) end talkState[cid] = 0 end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) O script foi retirado do Alissow Server e editado para retirar um possível bug. flw
-
Tente esse script: function onEquip(cid, item, slot) local spellName = "Light Healing" if canPlayerLearnInstantSpell(cid, spellName) then if not getPlayerLearnedInstantSpell(cid, spellName) then doPlayerLearnInstantSpell(cid, spellName) doPlayerSendTextMessage(cid,25,"Now you are able to cast " .. spellName .. ". These words is " .. getInstantSpellWords(spellName) .. ".") else doPlayerSendCancel(cid,"You already have learned the spell " .. spellName .. ".") return FALSE end else doPlayerSendCancel(cid,"You cannot learn the spell " .. spellName .. ".") return FALSE end return TRUE end function onDeEquip(cid, item, slot) local spellName = "Light Healing" if getPlayerLearnedInstantSpell(cid, spellName) then doPlayerUnlearnInstantSpell(cid, spellName) doPlayerSendTextMessage(cid,25,"Now you are not able to cast " .. spellName .. ".") end return TRUE end Não se esqueça de adicionar a tag ao seu movements.xml e editar no script o nome da magia. No caso, está configurada para adicionar o Exura. Outra coisa a fazer é mudar na tag de sua magia, em spells.xml, a parte 'needlearn="0"' para 'needlearn="1"'. flw
-
Opa até meu tuto apareceu ae =D. Ninguem comentou la mas pelo menos ta aqui servindo pra alguma coisa =D flw
-
Adicione as seguintes tags ao seu movements.xml: <movement type="Equip" itemid="7730" slot="legs" event="function" value="onEquipItem"/> <movement type="DeEquip" itemid="7730" slot="legs" event="function" value="onDeEquipItem"/> flw
-
Bom conteúdo rapaz :smile_positivo: É por essas e outras que você merece seu "lugar ao sol". Muitas pessoas jogam tibia e nem sabem sequer a história do surgimento das classes. Continue assim. flw
-
Global functions são as funções globais do seu servidor. Muitas já vem embutidas em seu distro, outras (LUA - made functions) são encontradas em sua pasta lib, no arquivo functions.lua. Para editar as sprites, você precisa extraí-las e editar com algum programa de edição de imagens. flw
-
Em movements.xml: <movement type="StepIn" uniqueid="95895;95896" event="script" value="NOME DO SCRIPT.lua"/> flw
-
Creio que seja isto: function onStepIn(cid,item,pos) local wallPos = {x=10,y=10,z=7,stackpos=1} local wallId = 1355 if item.uid == 95895 then if not getThingfromPos(wallPos).itemid == wallId then doCreateItem(wallPos, 1355, 1) end elseif item.uid == 95896 then if getThingfromPos(wallPos).itemid == wallId then doRemoveItem(getThingfromPos(wallPos).uid,1) end end return TRUE end Não esqueça de editar a wallPos e a wallId. flw
-
Do global é 2000 ms. flw
-
Preciso que mande o id das vocações novas para que consiga terminar o script. Aguardo. flw @edited Teste: function onEquip(cid,item,slot) if not isInArray({9,10,11,12}, getPlayerVocation(cid)) then doPlayerSetVocation(cid,getPlayerVocation(cid)+4) else doPlayerSendCancel(cid,"You are already promoted.") end return TRUE end function onDeEquip(cid,item,slot) if isInArray({9,10,11,12}, getPlayerVocation(cid)) then doPlayerSetVocation(cid,getPlayerVocation(cid)-4) else doPlayerSendCancel(cid,"You are not promoted.") end return TRUE end
-
É nos multiplier do skill. Tente um numero mais baixo como 1.00001. flw
-
Na seção de Tutoriais de scripting você encontra ajuda para fazer suas spells. Um bom tutorial pode ser encontrado aqui. flw
-
Tente isso: function onUse(cid, item, pos) local toPos = {x=pos.x-2,y=pos.y,z=pos.z,stackpos=253} if not isPlayer(getThingfromPos(toPos).uid) then doTeleportThing(cid, toPos) doSendMagicEffect(getCreaturePosition(cid), 13) else doPlayerSendTextMessage(cid,20,"O trainer está ocupado.") end return TRUE end flw
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.