Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/22/10 em todas áreas

  1. Funções dos scripts de Lua #4 Olá Pessoal! Hoje iremos começar outra aula. Agora ainda continuando nas sintaxes de "funções", digamos que essa de hoje não é uma function (Uma ação) mas é uma constante, se é que posso dizer assim, que serve pra ler a variavel cid ou item. O que iremos aprender hoje é o Is. O Is usado do mesmo jeito que o Get, só que ele não retorna o valor (Ela não checa qual o level do jogador, por exemplo, e retorna ao script). Ela apenas tem a função de dizer se aquela condição if é verdadeira ou falsa. Entenderam o que o Is faz ? Ele irá ler a condição. Ele irá dizer ao script se ela é TRUE ou FALSE, VERDADEIRA ou FALSA, SIM ou NÃO. Não vai outra coisa! Só esses. Se ela for Verdadeira o script irá ser executado (lógico). Agora vamos as sintaxes que eu achei importantes e que eu achei. :ras: isPlayer(cid) É jogador? A coisa que tiver na Dp é jogador? Se for Verdadeiro o script será executado e o jogador poderar entrar na protection zone. Obs: Eu tive uma dúvida quando tava aprendendo e creio que alguns também tenham ela. Exemplo: Pra dizer que é um jogador eu uso... Tá certo isso ? NÃO! Prestem atenção! Não se usa TRUE ou FALSE ou nenhuma outra coisa! Só precisa botar assim (reescrevendo o exemplo acima): Já estão entendendo como é que o rumo da prosa? ^^ isCreature(cid) É um bicho? Esse aqui checa se é uma criatura. If isCreature(cid) then -- Se cid for uma criatura então o script será executado. isPlayerGhost(cid) Esta checa se o jogador está invisível. If isPlayerGhost (cid) -- Se cid estiver invisível então o script será executado. isItemRune(itemid) Irá checar se o item (itemid) é uma runa ou não. Se ela for, então o script será executado. If isItemRune (item.id) then -- Se for uma runa, então o script será executado. isItemDoor(itemid) Verifica se o Item é uma porta. Se for, o script será executado então. If isItemDoor (item.id) then -- Se for uma porta, então o script será executado. isItemContainer(itemid) Verifica se o item é um contêiner (uma backpack, uma sacola, uma bag, uma coisa que possa guardar outros itens.. uma caixa). isItemMovable(itemid) Verifica se o Item pode ser movido. Uma cadeira pode ser movida etc. isCorpse(uid) Verifica se é um corpo. Se for, o script será executado. :said: isMovable(uid) Verifica se a "coisa" pode ser empurrada. Aí já generaliza tudo, não é só item agora. Pode ser player e etc. isPlayerPzLocked(cid) Verifica se o jogador ou criatura cid está numa protection zone. Se ele estiver o script será executado. <------------------------------------------> Bem pessoal, é só isso ae, depois eu boto exercícios e tudo mais! Vou colocar agora no sumário mais uma Função dos Scripts de Lua. Espero que vocês tinham entendido direitinho Ah, se alguém sabe se isso existe isPlayerVocation (cid,1) thenpoderia dizer se existe ou não pra eu poder editar aqui.
    2 pontos
  2. gui56

    Rain System Com Ss

    Rain System Entre em data/globalevents/script/, crie um arquivo com nome rain.lua, cole o código abaixo, salve e feche: local rain = Rain:new() function onThink(interval, lastExecution) local minX = 0 local minY = 0 local maxX = 120 local maxY = 150 local frompos = {x=math.random(minX, maxX), y=math.random(minY, maxY), z=7} local topos = {x=math.random(frompos.x, maxX), y=math.random(frompos.y, maxY), z=7} local effects = { snow = { disteffect = CONST_ANI_SNOWBALL, effect = CONST_ME_ICETORNADO }, rain = { disteffect = CONST_ANI_ICE, effect = CONST_ME_LOSEENERGY } } random = math.random(0, 10) if (random == 0) then rain.chance = math.random(10,50) rain:start({fromPos = frompos, toPos = topos}, effects.snow, 300, math.random(100, 500)) else rain.chance = math.random(20,100) rain.createItem = {chance = math.random(0,10), item = {itemid = 2016, type = 1}} rain:start({fromPos = frompos, toPos = topos}, effects.rain, math.random(100, 1000), math.random(100, 350)) end return TRUE end Agora vá em data/globalevents/globalevents.xml e adicione essa TAG: Depois, vá em data/globalevents/lib/, crie um arquivo com nome Rain.lua, cole o código abaixo, salve e feche: -- Features: -- chance = OBJECT.chance = INT -- createItem = OBJECT.createItem = {chance = INT, item = {itemid = INT, type = INT}} Rain = {ignoreIds = {4526}} function Rain:new() local obj = {} setmetatable(obj, self) self.__index = self return obj end function Rain:getPositionInArea(fromPos, toPos) self.positions = {} for Y = fromPos.y, toPos.y do for X = fromPos.x, toPos.x do if (getTileThingByPos({x=X, y=Y, z=7, stackpos=0}).itemid ~= 0) then if not (string.match(string.lower(getItemNameById(getTileThingByPos({x=X, y=Y, z=7, stackpos=0}).itemid)), "water")) then table.insert(self.positions, {x=X, y=Y, z=Z}) end end end end return true end function Rain:doRain(position, disteffect, effect) if (self.duraction ~= self.executed) then local chance = self.chance or 100 if (math.random(0, 1000) <= chance) then for Z = 0, 7 do if (getTileThingByPos(({x = position.x, y = position.y, z = Z})).itemid ~= 0) then doSendDistanceShoot({x = position.x - 7, y = position.y - 5, z = Z}, {x = position.x, y = position.y, z = Z}, disteffect) doSendMagicEffect({x = position.x, y = position.y, z = Z}, effect) if (self.createItem) then if (math.random(0, 1000) <= self.createItem.chance) then if (isInArray(self.ignoreIds, getTileThingByPos({x=X, y=Y, z=Z, stackpos=0}).itemid) == FALSE) then local item = doCreateItem(self.createItem.item.itemid, self.createItem.item.type, {x=position.x, y=position.y, z=Z}) doDecayItem(item) end end end break end end end return true else return false end end function Rain:start(positions, effects, duraction, delay, var) self:getPositionInArea(positions.fromPos, positions.toPos) if not (self.positions[1]) then return false end self.delay = delay self.var = var or self self.effects = effects self.duraction = duraction self.executed = 0 addEvent(doCallback, self.delay, {var=self.var}) return true end function doCallback(p) for _, v in pairs(p.var.positions) do if not (p.var:doRain(v, p.var.effects.disteffect, p.var.effects.effect)) then return true end end addEvent(doCallback, p.var.delay, {var=p.var}) p.var.executed = p.var.executed+1 end Agora vá em data/globalevents/lib/globalevents.lua e adicione essa TAG: Configurando: O script não necessita de muitas configurações, apenas mude as variáveis como seu gosto: local minX = 0 local minY = 0 local maxX = 120 local maxY = 150 Bom essa configuração muda apenas a posição das chuvas se quiser mudar a densidade da chuva mude a linha rain.chance = math.random(20,100), lembrando não ultrapasse muito do valor 100, pois pode deixar a chuva muito feia. Para entender melhor a função rain:start(positions, effects, duraction, delay) postarei o que cada argumento significa. Para tornar a chuva mais intensa diminua o delay e aumente o duraction e a chance, mais fraca o inverso. Para chuvas mais duradouras aumente o delay e o duraction. Também é possível que o script crie "poças de agua" isso é configurado na linha rain.createItem = {chance = math.random(0,10), item = {itemid = 2016, type = 1}}. Para aqueles que sabem mexer em script é possível fazer chover meteoros mudando os efeitos e varias outras coisas a sua imaginação. Para mudar de quanto enquanto tempo a chuva ira acontecer devera mudar a tag do globalevents.xml na parte de interval. Considerações finais: Não é aconselhável usar a snow do jeito que está configurado, pois está bem feio, também há um erro que sempre que ocorre uma nova chuva se uma antiga esta acontecendo, a velha para, e a novo começa. É fácil arrumar, porém eu só não arrumei pois isso pode acarretar novos bugs. Screenshot:
    1 ponto
  3. Lista de Funções de Lua #5 Olá pessoal! Hoje eu irei entrar em um assunto novo. Vamos fazer um resuminho do que a gente já viu até aqui? Vimos os tipos de function, vimos as "constantes" (prefiro chamar elas assim) que são do..get..is (ainda existem outras, mas não quis me aprofundar muito no assunto. Ate aqui da pra fazer scripts legais com elas.) Vimos a function onUse e tals. Hoje iremos usar uma nova function: onSay Ela é usada na talkaction. Talkaction é o seguinte.. O script só será executado quando o jogador falar uma coisa. Se ele falar exura o script do Lighting Heal irá ser executado, porquê ? Por que o jogador cid fez uma ação via sua fala, daí talkaction. Deram pra entender ? :no: Simplificando, o jogador fala uma coisa e o script é executado. Vamos a sintaxe do onSay. function onSay (cid,words,param) Todo mundo conhece o cid e o function e acabaram de conhecer o onSay né ? Então vamos a essas partes: words e param. words é uma palavra do inglês que significa palavras. Ou seja, aqui é o que o jogador irá dizer. A "variavel" que irá receber o que o jogador disse e fazer com que o script reconheça aquela palavra e execute o script. params é tudo que vier depois das "" aspas. Vamos a um exemplo pra vocês poderem compreender melhor o que significa words e param para vocês nunca esquecerem! Se o jogador falar No caso, quem é words e quem é param? Simples, a magia será words, certo ? words = utevo res E depois da "aspa" é o params. Entenderam o "tudo que vier depois das aspas?" params = Crocodile Bem, é isso ae! Agora é só aplicar essa função em seus scripts! Já tio ? É ... Na verdade eu quis mostrar talkactions como introdução e tals, já que vocês viram actions e as sintaxes etc. Vou mostrar um exemplo aqui pra vocês compreenderem melhor (Y) ----------------------------- Script de Promotion function onSay(cid, words, param) -- Olha aqui! Começando o script, significa que é ...... uma talkaction! :w00t: if getPlayerVocation(cid) <= 4 then -- Como é de promotion, o jogador tem que ser sorcerer 1, druid 2, paladin 3, knight 4.. ou seja, PlayerVocation menor ou igual à 4. if doPlayerRemoveMoney(cid,20000) == TRUE then -- O preço da promotion aqui né? Aqui tá como 20000 (20k) alterar ao seu gosto. No caso esse comando vai fazer o que aqui? Quem se lembra da aula #2 ? Isso ae quem disse Remover 20k do jogador Cid! doPlayerSetVocation(cid,getPlayerVocation(cid)+4) -- De sorcerer para master sorcerer é quanto ? 1+4.. certo?! Então aqui ele vai fazer o seguinte, Set significa que ele irá colocar um novo valor, ou seja, adicionar mais "4" fazendo com que a vocação seja promovida. doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have been promoted!") -- Enviar a mensagem para o jogador dizendo, You hav been promoted! Se lembrem do doPlayerSenTextMessage!! doSendMagicEffect(getPlayerPosition(cid), 30) -- E por último vai dar aqueles efeitinhos que você escolhe ao seu gosto. else -- Senão, se o jogador não tiver dinheiro $$... doPlayerSendCancel(cid, "Sorry, you don't have enought money") -- Irá aparecer a mensagem Sorry, you don't have enought money. doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) -- E efeito denovo. [Titiioooooo Lakaaa e esse getPlayerPosition?] O get como eu já falei vai ler a informações do jogador e retornar, no caso ele vai ler a POSIÇÃO do jogador cid e tacar efeito! end -- End do Else. else -- Senão for por causa de dinheiro então vai ser por causa de ... doPlayerSendCancel(cid, "Sorry, you are already promoted") ... que você já está promovido. Se você já estiver promovido e fazer aquela condição if getPlayerVocation(cid) <= 4 then end end E tamrám! Nosso script de promotion foi vista parte por parte e espero que você tenha entendido como é que é o racíocinio e funcionamento de um script simples. Você que viu em todas essas aulas as functions e sintaxes de cada uma não se assustou com isso aqui. Bem.. aqui termina mais um tutorial de .. Senhor Lakinha Tariel Oferecimento: Laka Tariel Ot serv! Até a próxima pessoal! Bons estudos, hoje não vai ter Atividade pra casa Aconselho a vocês irem na pasta do seu Ot e ir em Datas.. Talkaction .. Script e abrir eles lá e ver como é que eles são feitos e comecem a fazer alguns também! Adíos, Comentem! Qualquer erro me avisa que eu corrijo.
    1 ponto
  4. Introdução as funções básicas de Lua #1 Olá! :style: Bem, como eu tinha postado sobre as funções de Lua, eu achei interessante criar uma introdução para quem quisesse pegar o embalo da coisa. Fiz esta introdução com o intuito de que você já tenha uma base pra ir pro próximo tutorial, que é como,onde e por que usar algumas funções de Lua. Vamos lá, Mão a obra. Function Função! A função da function é dizer ao servidor o que iremos fazer, certo? É dentro da function que iremos desenvolver nossos scripts ^^ -- Mas tio, no Ot temos várias funções, por exemplo, clicar em um objeto e sair um negocinho, botar um item em cima de uma pedra e vai aparecer uma coisa, eu pisar em cima de uma pedra e aparecer uma mensagem ou um item!! Como eu faço pra o servidor diferenciar isso? Tipo, Se eu quiser que seja uma ação, um clique? Um movimento?! Boa pergunta. E como eu digo ao script o quê eu quero fazer ? Simples, basta eu seguir esta lista: function onUse (cid,item,frompos,item2,topos) Bem, está function tem a função de dizer ao script que será uma ação, um clique. Exemplo: Se eu quiser puxar uma alavanca, qual function eu uso ? Se eu quiser abrir um baú [caixa de quest] qual function eu uso ? Entenderam pra que serve o function onUse ? Não vou me aprofundar muito nele, mas só vou dá uma explicação de cada item (No próximo tutorial também irei falar dele com mais detalhe (Y)) Pronto, revisãozinha terminada =D function onStepIn(cid, item, frompos, item2, topos) Este aqui é utilizado para fazer que o script só execute quando você pisar em um determinado lugar. Se você pisar em algum canto, você poderá ganhar um item, ou aparecer uma mensagem. É pra isso que serve o onStepIn. function onStepOut(cid, item, frompos, item2, topos) Está em ao contrário da onStepIn.Este script só será executado quando você sair do piso especificado. Se você sair de cima de um piso submarino, você perder 100 de life, entendem ? function onSay(cid, words, param) Este script só será executado quando o jogador cid falar algo. Ou seja, quando cid falar uma palavra chave, este script irá funcionar. Exemplo: O jogador cid diz !Fly o script irá ser executado. function onAddItem(moveitem, tileitem, position) A função deste script é que ele só ira ser executado quando um certo item seja colocado em um lugar específico. Então é isso pessoal! Boa sorte ae nos estudos de scripts, e gogo para o próximo tutorial! "Funções dos scripts de Lua #2"
    1 ponto
  5. MatheusGlad

    Npcs

    Kara para voce fazer com que o npc fale quando voce falar ae voce tem que ir em npc/lib/npcsystem e abrir o arquivo npcsystem.lua e aonde tiver: FOCUS_GREETWORDS = {'hi', 'hello', 'hey'} Voce bota o 'ae' ficando assim FOCUS_GREETWORDS = {'hi', 'hello', 'hey', 'ae'} Ai quando tu falar hi ou hello ou hey ou ae ele vai te responder. Bem como voce nao deu as caracteristicas do npc entao fiz so um negocinho bobo aqui pra te dar exemplo: Script.lua: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end if msgcontains(msg, "english") then selfSay("Humm, good what you mean of bla bla bla?", cid) talkState[cid] = 1 elseif msgcontains(msg, "good") and talkState[cid] == 1 then selfSay("Oh, realy? Thanks", cid) elseif msgcontains(msg, "bad") and talkState[cid] == 1 then selfSay("Grrrr...", cid) end if msgcontains (msg, "portugues") then selfSay("Humm, bom o que voce acha do bla bla bla?", cid) talkState[cid] = 2 elseif msgcontains(msg, "bom") and talkState[cid] == 2 then selfSay("Oh, verdade? Obrigado.", cid) elseif msgcontains(msg, "ruim") and talkState[cid] == 2 then selfSay("Grrrr...", cid) end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Npc.xml: <npc name="NPC" script="data/npc/scripts/npc.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="134" head="78" body="88" legs="0" feet="88" addons="3"/> <parameters> <parameter key="message_greet" value="Hi |PLAYERNAME|. Quer que eu fale {portugues} or want me to speak {English}?." /> <parameter key="message_farewell" value="Bye." /> <parameter key="message_walkaway" value="Bye." /> </parameters> </npc>
    1 ponto
  6. ta ai: abraços. Gostou? Rep+ ;]
    1 ponto
  7. Não tem mais nada para inventar... Muito bom mesmo. +REP
    1 ponto
  8. XJhoow

    Jaqueta Moderna

    Essa podem pegar, mas quem pegar da +REP, e por favor, todos que verem comentem! Jaqueta Se gostarem eu mudo de cor pra vocês, dai posto uma: Azul,verde,vermelha,roxa,roza. Todos comentando, deu maior trabalho Critiquem, avaliem, e agradeçam (se gostarem)!
    1 ponto
  9. DaNDaNrOxX

    Fique Atento Com As Dlls Infectadas.

    Olá usuários XTibia. Estou criando este tópico para avisar para toda a galera que não é muito ativa na comunidade, que últimamente o fórum está sendo invadido por um polonês que sempre posta virus. QUERO PEDIR À TODOS PARA TOMAREM MUITO CUIDADO AO BAIXAR UM OTSERV, PRINCIPALMENTE SE O LINK FOR DO SPEEDYSHARE. Vocês podem descobrir quando o usuário é polonês, NORMALMENTE (isto é, nem sempre, mas muitas vezes) ele usa link do speedyshare, usa textos em português para explicação, mas sempre com alguma falta de concordância ou erro de escrita, pois o texto é traduzido no tradutor do google, tem entre 1 e 10 posts. Precauções: Siga estes passos e evite infectar seu computador! Nós da moderação estamos fazendo tudo para remover os virus o mais rápido possivel, deixando para vocês apenas os OTServers realmente limpos, mas vocês também podem e devem fazer a parte de vocês. É isto galera, tomem cuidado! Abraços
    1 ponto
  10. -1 pontos
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...