Ir para conteúdo

joaohd

Visconde
  • Total de itens

    361
  • Registro em

  • Última visita

  • Dias Ganhos

    10

Tudo que joaohd postou

  1. joaohd

    Tabelas

    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
  2. 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
  3. joaohd

    Tabelas

    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
  4. 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
  5. Valeu ae gente. Acho que hoje sai mais um diretamente do forno. O assunto vai ser tabelas. flw
  6. 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
  7. 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
  8. Ae, até que enfim começaram a ler isso aqui. Seção sem movimento... flw
  9. 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
  10. joaohd

    [Fechado]

    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
  11. 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.
  12. joaohd

    [Fechado]

    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
  13. 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
  14. 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
  15. Opa até meu tuto apareceu ae =D. Ninguem comentou la mas pelo menos ta aqui servindo pra alguma coisa =D flw
  16. 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
  17. 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
  18. joaohd

    Duvidas

    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
  19. Em movements.xml: <movement type="StepIn" uniqueid="95895;95896" event="script" value="NOME DO SCRIPT.lua"/> flw
  20. 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
  21. Do global é 2000 ms. flw
  22. 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
  23. É nos multiplier do skill. Tente um numero mais baixo como 1.00001. flw
  24. Na seção de Tutoriais de scripting você encontra ajuda para fazer suas spells. Um bom tutorial pode ser encontrado aqui. flw
  25. 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.
×
×
  • Criar Novo...