Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 05/25/10 em todas áreas
-
PokeBall System! Ola Xtibianos, Vim hoje postar um Famoso Script de Pokeball System feito pelo Genioso Nahruto, claro pedi a autorização dele para postar. A Todos que forem pegar Scripts de outras Pessoas, lembre-se de sempre pedir autorização e claro colocar os creditos. Para Tfs: 0.34 , 0.35 e 0.36 Essas Forao Testadas E Funfo. Versoes: 8.42 - 8.50 - 8.52 - 8.54 - 8.6. Ots Testados: Snowz Yurots - Alissow Server - Styller Yurots Primeiramente Vamos Fuçar em Function.lua, se voce nao Sabe onde fica vá em: Data>Lib>Function.lua Abra e Coloque Isto: _warpzone = 2147483648 -- start storing strings here (THIS IS THE ABSOLUTE MAXIMUM VALUE FOR THIS) _maxlength = 1024 -- multiply by 3 to get the true length. setPlayerStorageInteger = setPlayerStorageValue getPlayerStorageInteger = getPlayerStorageValue function setPlayerStorageString(cid, key, value) if #value > (_maxlength-1) * 3 - 1 then -- Last word is reserved for 0 termination of the string. error("Storage string is too long") end if key > _warpzone / _maxlength then error("Storage string key is too large (" .. key .. ")") end key = _warpzone + key * _maxlength local word = 0 local wordwrap = 0 local wordcount = 0 local i = 1 while i <= #value do local byte = string.byte(string.sub(value, i, i)) word = bit.bor(word, bit.lshift(byte, wordwrap)) wordwrap = wordwrap + 8 if wordwrap == 24 then --[[ In the ideal world we would be able to store 4 characters per word, however, as the default return value for getPlayerStorageValue is -1, we cant use the last bit. ]]-- setPlayerStorageInteger(cid, key + wordcount, word) word = 0 wordwrap = 0 wordcount = wordcount + 1 end i = i + 1 end -- store the last word setPlayerStorageInteger(cid, key + wordcount, word) end function getPlayerStorageString(cid, key) if key > _warpzone / _maxlength then error("Storage string key is too large (" .. key .. ")") end key = _warpzone + key * _maxlength local wordcount = 0 local str = "" while true do if wordcount >= _maxlength then break end local word = getPlayerStorageInteger(cid, key + wordcount) if word == -1 then -- end of string break else -- Extract the 3 characters from the value byte = bit.band(word, 255) if byte == 0 then break else str = str .. string.char(byte) end byte = bit.rshift(bit.band(word, 65280), 8) if byte == 0 then break else str = str .. string.char(byte) end byte = bit.rshift(bit.band(word, 16711680), 16) if byte == 0 then break else str = str .. string.char(byte) end end wordcount = wordcount + 1 end return str end E Isso! function doConvinceSummon(cid, creature, amount, pos) summonplayerpos = {x=pos.x, y=pos.y, z=pos.z, stackpos=253} summonplayer = getThingfromPos(summonplayerpos) if(summonplayer ~= nil and summonplayer.itemid > 0) then doPlayerSendCancel(cid,"There is not enough room to summon here.") ret = 0 else convince = doSummonCreature(creature, pos) doConvinceCreature(cid, convince) ret = 1 end return ret end Agora Vamos Fazer o Script Vá em Pasta do Seu Ot > Data > Actions > Scripts Crie uma Pasta chamada pokeball.lua e bote isso dentro local notAllowed = {"Ferumbras", "Demon"} local storage = { status = 25650, pokeName = 25651 } local actionid_used = 7510 function onUse(cid, item, fromPos, item2, toPos) local pokeballStatus = getPlayerStorageValue(cid, storage.status) local pokeName = getPlayerStorageString(cid, storage.pokeName) pos = getPlayerPosition(cid) pos.stackpos = 0 if pokeballStatus == -1 then toPos.stackpos = 253 local pokeThing = getThingfromPos(toPos) if isCreature(pokeThing.uid) == TRUE then if isPlayer(pokeThing.uid) == FALSE then local pokename_ = getCreatureName(pokeThing.uid) if item.actionid ~= actionid_used then -- local maxHealth = 400 -- local creatureHealth = getCreatureHealth(pokeThing.uid) -- local divNum = (string.len(maxHealth)-1)^2 -- local result = math.floor((creatureHealth/divNum)/10) -- local chance = math.random(1, math.random(4, math.random(7, math.max(result, 7)))) -- if chance == result then if isInTable(notAllowed, pokename_) == TRUE then doPlayerSendCancel(cid, "You cannot catch this creature") else setPlayerStorageString(cid, storage.pokeName, pokename_) doRemoveCreature(pokeThing.uid) doSendDistanceShoot(fromPos, toPos, 37) setPlayerStorageValue(cid, storage.status, 1) doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".") doSetItemActionId(item.uid, actionid_used) end -- else -- doSendMagicEffect(fromPos, 2) -- doPlayerSendCancel(cid, "The Pokemom Escaped") -- end elseif item.actionid == actionid_used and pokename_ == pokeName then doPlayerSay(cid, pokeName .. " Back!!", TALKTYPE_SAY) doRemoveCreature(pokeThing.uid) doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".") setPlayerStorageValue(cid, storage.status, 1) doSendDistanceShoot(fromPos, toPos, 37) else doSendMagicEffect(fromPos, 2) doPlayerSendCancel(cid, "This pokeball is already used") end else doPlayerSendCancel(cid, "You cannot catch this creature") end else doPlayerSendCancel(cid, "Creature not found") end elseif pokeballStatus == 1 then summons = getCreatureSummons(cid) -- if #summons >= 2 then -- doPlayerSendCancel(cid, "You cannot call more pokemons") -- else doConvinceSummon(cid, pokeName, 0, toPos) doSendDistanceShoot(fromPos, toPos, 37) doPlayerSay(cid, pokeName .. " Go!!", TALKTYPE_SAY) setPlayerStorageValue(cid, storage.status, -1) doSetItemSpecialDescription(item.uid, "it is empty.") -- end end else return 1 end function isInTable(t, val) for _, v in pairs(t) do if v == val then return TRUE end end return LUA_ERROR end para TFS local notAllowed = {"Ferumbras", "Demon"} local storage = { status = 15244, pokeName = 15212 } local actionid_used = 7510 function onUse(cid, item, fromPos, item2, toPos) local pokeballStatus = getPlayerStorageValue(cid, storage.status) local pokeName = getPlayerStorageString(cid, storage.pokeName) pos = getPlayerPosition(cid) pos.stackpos = 0 if pokeballStatus <= 0 then toPos.stackpos = 253 local pokeThing = getThingfromPos(toPos) if isCreature(pokeThing.uid) == TRUE then if isPlayer(pokeThing.uid) == FALSE then local pokename_ = getCreatureName(pokeThing.uid) if item.actionid ~= actionid_used then -- local maxHealth = 400 -- local creatureHealth = getCreatureHealth(pokeThing.uid) -- local divNum = (string.len(maxHealth)-1)^2 -- local result = math.floor((creatureHealth/divNum)/10) -- local chance = math.random(1, math.random(4, math.random(7, math.max(result, 7)))) -- if chance == result then if isInTable(notAllowed, pokename_) == TRUE then doPlayerSendCancel(cid, "You cannot catch this creature") else setPlayerStorageString(cid, storage.pokeName, pokename_) doRemoveCreature(pokeThing.uid) doSendDistanceShoot(fromPos, toPos, 37) setPlayerStorageValue(cid, storage.status, 1) doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".") doSetItemActionId(item.uid, actionid_used) end -- else -- doSendMagicEffect(fromPos, 2) -- doPlayerSendCancel(cid, "The Pokemom Escaped") -- end elseif item.actionid == actionid_used and pokename_ == pokeName then doCreatureSay(cid, pokeName .. " Back!!", TALKTYPE_SAY) doRemoveCreature(pokeThing.uid) doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".") setPlayerStorageValue(cid, storage.status, 1) doSendDistanceShoot(fromPos, toPos, 37) else doSendMagicEffect(fromPos, 2) doPlayerSendCancel(cid, "This pokeball is already used") end else doPlayerSendCancel(cid, "You cannot catch this creature") end else doPlayerSendCancel(cid, "Creature not found") end elseif pokeballStatus == 1 then -- summons = doCreatureSummons(cid) -- if #summons >= 2 then -- doPlayerSendCancel(cid, "You cannot call more pokemons") -- else doConvinceSummon(cid, pokeName, 0, toPos) doSendDistanceShoot(fromPos, toPos, 37) doCreatureSay(cid, pokeName .. " Go!!", TALKTYPE_SAY) setPlayerStorageValue(cid, storage.status, 0) doSetItemSpecialDescription(item.uid, "it is empty.") -- end end return 1 end function isInTable(t, val) for _, v in pairs(t) do if v == val then return TRUE end end return LUA_ERROR end Agora Vamos Adicionar as Tags, vá em Data>Actions.xml e Adicione as Tags Corretas´ <action itemid="xxxx" script="pokeball.lua" allowfaruse="1" blockwalls="1" /> [font-"Georgia"]em <action itemid="xxxx" nos 4 X voce coloca o Number Id Do seu Item que Será como uma "Pokeball"[/font] Oque o Script Faz Realmente: - Guarda monstros dentro de objetos e salva seu status, você pode colocar pra salvar em qlqr objeto.. seria ótimo para projetos pokemons.. Creditos: Nahruto Print Screen's: Snorlax Saindo da Pokeball: Snorlax Voltando para a Pokeball Look da Pokeball ( o Player so Ve assim You See a Pokeball , Have Snorlax )] Lembrando que eu nao Adicionei o Efeito da Pokeball Abrindo e Jogando o Monstro. Para fazer este Tipo de efeito voce vai ter que saber direitinho o LookType da Pokeball Fechando e Saindo, e transformar para um efeito e depois modificar no Script, aqui no xtibia Existe varios Tutoriais explicando isto, é so procurar! Gostou? Clica no Ali em Baicho para me Ajudar! Abraços..2 pontos
-
[Fechado]
helinholima e um outro reagiu a Kydrai por um tópico no fórum
Creio que assim funcione: <globalevent name="checkpremmy" interval="1000" event="script" value="checkpremmy.lua"/> function onThink(interval, lastExecution, thinkInterval) local config = { frompos = {x=000,y=00,z=0}, topos = {x=000,y=00,z=0}, teleportto = {x=000,y=00,z=0} } for i, cid in pairs(getPlayersOnline()) do if isPlayer(cid) and not isPremium(cid) and isInArea(getPlayerPosition(cid), config.frompos, config.topos) then doTeleportThing(cid, config.teleportto) end end return TRUE end2 pontos -
New Subwat 8.54-8.57 [V.10]8.60 Link.
DaviBrunelli reagiu a Subwat por um tópico no fórum
VERSÃO 8.60 V.10! Novidades:!virardruid,!virarknight,!virarpaladin,!virarsorcrer !buyexp,!manarune, novo design do templo e novas Hunts. UPDATE 8.54/8.57! TEMPLO TOTALMENTE NOVO... NOVAS AREAS... ANIHI VIP DANDO ITENS FOX! Vários bugs corrigidos de tps e novo design do templo e algumas areas vips. NOVOS MONSTROS: Demona(free),Putinha Do Serv(vip). ADDON SISTEM:POR DEMONIC ESSENCES. ADICIONADO NPC:Demonic Man,Ceifeiro Addoner. aqui vai algumas infos do servidor: MONSTROS: EXP BOSS SUBWAT BOSS MASTER SUBWAT BOSS BOSS HYDRA MEGA VIP BEGIN MONSTER Sacred Assassin Verminor LORD VAMPIRE LORD DRACULa DEMON HUNTER FROST MORGAROTH GOLD DEMON GUARDIAN DEVIL BEAST spells: EXEVO MAS DEAD EXEVO GRAN MAS ICE EXEVO SONG PALLY EXEVO SONG SORC EXEVO SONG DRUID EXORI MAS GRAN UTANI SONIC HUR UTANI FRESNO HUR EXEVO GRAN MAS MORT EXURA KINA HEAL EDITEDS MANA EDITEDS SOBEMANA EXURA MANASPELLS: ENTRE OUTROS.... COMANDOS: !SUBWATAXE !SUBWATCLUB !SUBWATBOW !SUBWATBLADE !SUBWATWAND !SUBWATARROW !ULTRAWAND !RESET !RANK !TOP !BLACKTEAM !WHITETEAM UNICOS DO SUBWAT: !BUYVIDA !BUYMANA VERSÃO 8.54-8.57 SUBWAT V.9! ATUALIZADO DIA 30/06/2010 novidades:COMPRA DE DISTANCE E MELEE!!!! !distance,!melee Rebalanceamento De Vocações! Distro Atualizado agora com 4 Versões de Tibia! 8.54/8.55/8.56/8.57! DOWNLOAD:SUBWAT 8.54/.857 V.9.6 CREDITOS>:Gean Riot(mapa spells itens e tudo mais) Kydrai(pelo !buyvida,!buymana) TEMPLO: TELEPORT ROOM: MINIMAP: att Gean Riot1 ponto -
Como criar um cliente próprio? Eis uma pergunta que eu vejo muito. E também já ví vários tutoriais em relação a isto, mas todos que eu seguia, não funcionava, eu precisava ir juntando informações de pelo menos 3 tópicos para fazer dar certo. Mas agora, eu mesmo vou fazer meu próprio tutorial, e todos vocês farão seus clientes! 1° Passo: bom, eu uso o programa mais util e simples do mundo! O "Cliente Creator" Download: Aqui <--- O Scan vou ter que colocar depois, porque o vírus total não está abrindo aqui. Certo, após ter baixado o Cliente Creator abra o .exe Ele é bem facil de manusear. Primeiro aperte o botão "arquivo" e selecione o Tibia.exe do diretório (C:/Arquivos de programas/Tibia/Tibia.exe) Em "Seu IP" coloque um IP de 19 caracteres (19 letras) e Clique em "Alterar"------ Pronto, seu cliente está criado, para abri-lo vá em C:/Arquivos de Programas/Tibia e abre o Tibia.exe Mas agora que tem seu cliente em mãos, você não acha que fica meio feio com a foto do Tibia normal? Então Vamos mudar! Para isso vamos precisar do Pic Editor Download: Aqui <--- Como já dito o Vírus total não está abrindo aqui, então, temporáriamente sem Scan. Ok, agora, tendo o Pic Editor em mãos copie o PicEditor v2.5 by Isaac.EXE para seu diretório de Tibia (O mesmo que está seu cliente). Abra o PicEditor que está dentro da pasta do seu cliente e clique em "Arquivo" e selecione o Tibia.pic que está nessa mesma pasta. Após ter selecionado o arquivo Tibia.pic clique em "Extract". Vão aparecer 8 arquivos Bitmap, do 0.bmp ao 7.bmp. Você só irá mecher no 0.bmp, pois ele é a imagem de fundo. Para alterar, simplesmente clique com o botão direito editar. Apague a imagem que tem e cole a que você quer. LEMBRE-SE QUE A IMAGEM NÃO PODE SER MAIOR NEM MENOR QUE A DO TIBIA.Salve e clique em "Compilar" Pronto! Mais fácil do que parecia neh? Mas pode haver um pequeno probleminha.... Fiquem calmos, pois esse problema é perfeitamente comum e bem fácil de resolver! Caso suas letras fiquem assim: Você terá que seguir este meu outro tutorial: Letras Embaralhadas? Créditos 100% meus, postem ai, isso é muito importante pra mim (:1 ponto
-
Tutorial Montanhas Vermelhas
anoidperuzzo reagiu a Koddy por um tópico no fórum
Outro dia, jogando o Kingdom Age, perguntei se o Castiello gostaria de algum tutorial de mapping em especial. A gente tava na área dos Trolls, e ele me pediu para criar um sobre as Montanhas Vermelhas. Agora, vejo a dúvida do Senat, que é igual. Então, vamos lá. Colocando Auto Border para sua Montanha Vermelha 1º Passo: Esqueça o RME por em quanto. Abra apenas a pasta dele. Dentro da pasta do RME, vá em data, e selecione a versão do seu mapa, que você gostaria de construir este tipo de montanhas (se quiser em mais de uma versão, siga o procedimento duas vezes) C:\...\Remere's Map Editor\data\(versão). Após abrir a pasta da versão escolhida por você, iremos utilizar três arquivos: o "borders", o "grounds" e o "tilesets". Começando pelo mais fácil, abra o arquivo tilesets no Bloco de Notas. Se ao clicar duas vezes não abrir no bloco de notas, clique com o botão direito, vá em "Abrir com", e selecione o programa desejado, o Bloco de Notas, que é o mais simples e o mais comum. Você encontrará algo parecido com isso: <materials> <!-- TILESETS --> <tileset name="Grounds"> <raw> Desça mais um pouco a barra lateral até encontrar o próximo título, parecido com isso: </raw> </tileset> <tileset name="Nature"> <terrain> Para facilitar a procura na hora da criação da montanha vermelha, entre: <brush name="mountain"/> <brush name="red mountain"/> (adicione esta linha) <brush name="ramp"/> Após adicionar a linha "<brush name="red mountain"/>", salve o arquivo e feche. 2º Passo: 1/3 do trabalho está feito. Está na hora de dizer para o RME qual é o nome do piso que você quer adicionar, como ele aparecerá no Map Editor, e quais bordas ele deve seguir. Abra o arquivo grounds, que é encontrado no mesmo local que o arquivo anterior. A Ordem do que deve ser adicionado agora não altera em nada. Eu coloquei no final, para saber o que veio com o programa na hora do download, e o que eu modifiquei. Não tenho certeza das duas ultimas linhas. Acredito que apenas uma poderia ser utilizada, mas como deu certo com as duas, é melhor deixá-las. Após qualquer </brush>, adicione: <brush name="red mountain" type="ground" server_lookid="7975" z-order="9900"> <item id="8133" chance="1"/> <border align="inner" to="icy mountain" id="53"/> <border align="inner" to="snowy mountain" id="53"/> <border align="outer" to="none" id="51"/> <border align="outer" id="999"/> <optional id="999"/> </brush> Salve, e feche o arquivo. Agora está quase pronto. 3º Passo: Depois de configurar o tile que aparecerá no Map Editor, e criá-lo, está na hora de colocar o auto border em ação. Abra o arquivo borders, dentro da pasta data. Também não há preferência de lugar para se colocar, coloque em qualquer lugar, após qualquer </border>. Basta adicionar o seguinte trecho: <border id="999" group="1"> -- red mountain border (by koddy)-- <borderitem edge="n" item="7989"/> <borderitem edge="w" item="7988"/> <borderitem edge="s" item="8169"/> <borderitem edge="e" item="8168"/> <borderitem edge="cnw" item="7995"/> <borderitem edge="cne" item="7996"/> <borderitem edge="csw" item="7994"/> <borderitem edge="cse" item="8371"/> <borderitem edge="dnw" item="8135"/> <borderitem edge="dne" item="8137"/> <borderitem edge="dsw" item="8136"/> <borderitem edge="dse" item="8138"/> </border> É isso. Salve e feche o arquivo. Agora você já pode abrir o RME e finalmente criar sua montanha de cor alternativa. OBS: O número 999 que aparece foi porquê não conheço como está as configurações dos borders ID's de vocês, mas caso já exista esse valor, mude para um qualquer, fazendo as modificações necessárias. Lembrando que se você quiser juntar os dois tipos diferentes, não testei ainda, mas acredito que terá de modificar as bordas manualmente na hora da divisão, mas já é um trabalhão a menos que levará Essa é uma pequena demonstração de como você pode modificar o programa, e alterar as bordas que você nunca gostou de utilizar, por outras mais agradáveis. Segue agora uma foto bem simples, dessa montanha que você agora pode criar com muito mais facilidade. Espero ter ajudado, e peço que continue acompanhando os próximos Tutoriais de Mapping. Não esqueça de pedir o seu! Abraços, Koddy PS: Não fiz no Layout do XTibia pois dificultaria a cópia e cola de vocês na hora de atualizar o arquivo. Preferem desse jeito? Não esqueçam de comentar!1 ponto -
Introdução À Programação Lua
MichelHelmer reagiu a joaohd por um tópico no fórum
Introdução à programação LUA e lógica de programação Assim como todas as linguagens de programação, LUA tem suas particularidades e sua estrutura lógica própria, a qual envolve suas funções, operadores e engines. Para começarmos a programação em LUA, devemos conhecer sua lógica, para que possamos aplicá-la em nossos códigos. Abaixo, você encontra os operadores da linguagem e sua explicação: • “Local” = É usado para a definição de variáveis. Pode ser encontrado também destacando uma função. Neste último caso, seu uso pode ser dispensado quando a função não se encontra embutida na função principal. Exemplo de uso: ► local a = 1 ► function onUse(cid, item, fromPosition, itemEx, toPosition) local function helloWorld() print("Hello World") return TRUE end return helloWorld() end ► function helloWorld() print("Hello World") return TRUE end function onUse(cid, item, fromPosition, itemEx, toPosition) return helloWorld() end Note a diferença entre o segundo e o terceiro exemplos. Em ambos, a função principal é a “onUse”, porém, em um dos casos foi usado o operador “local” destacando a função secundária, que se encontrava embutida na função principal, ou seja, “abaixo” da função principal. • “If” = É usado para definir condições. Ele é bastante usado para tornar o script restrito ao uso não programado. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) > 10 then print("O jogador possui level maior que 10") end return TRUE end Neste exemplo, o código só poderá ser usado para jogadores com level maior que 10 e retornará a mensagem “O jogador possui level maior que 10”. • “Elseif” = Assim como o “if”, é usado para definir condições, porém, seu uso deve estar obrigatoriamente associado ao “if”. Este operador define outras condições para que o código entre em vigor. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) > 10 then print("O jogador possui level maior que 10") elseif getPlayerLevel(cid) == 10 then print("O jogador possui level 10") end return TRUE end Neste exemplo, caso o jogador tenha level maior que 10, o código retornará a mensagem “O jogador possui level maior que 10”, mas se o jogador tiver level 10, o código retornará a mensagem “O jogador possui level 10”. Note que para usar o “elseif”, antes tive de usar um “if”. • “For” = É usado para fazer loops no código, executando várias ações ao mesmo tempo. Seu uso é indicado para encurtamento de scripts, fazendo com que leve menos tempo para o código ser processado e economizando memória. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) local pos = { {x=1, y=2, z=3}, {x=4, y=5, z=6} } for a = 1,2 do doSummonCreature("rat", pos[a]) end return TRUE end Neste exemplo, uma tabela indica as posições onde serão sumonados os monstros. O “for” foi usado para indicar que deveriam ser sumonados 1 rat em cada uma das posições especificadas na tabela. • “While” = É usado para fazer loops no código, porém, diferente do “for”, este executa a ação até ser interrompido. Não é muito usado em OpenTibia pelo fato de usar muita memória para ser executado. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) local i = 0 while i < 10 do print (i) i = i + 1 end return TRUE end No caso acima, a variável “i” foi definida inicialmente como sendo zero. Quando o código é executado, os valores assumidos por “i” são retornados até que “i” chegue ao valor nove, que é quando o código se encerra. • “Else” = É usado para definir o que será feito caso a condição definida anteriormente seja falsa ou verdadeira, de acordo com o código e com o que se deseja. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) >= 10 then print("O jogador possui level 10 ou mais") else print("O jogador possui level 9 ou menos") end return TRUE end Note que foi usado anteriormente um “if” para a definição da condição. Neste exemplo, caso o jogador tenha level 10 ou mais, será retornada a mensagem “O jogador possui level 10 ou mais”. Mas se o jogador não tiver atingido level 10, será retornado “O jogador possui level 9 ou menos”. Operadores matemáticos em LUA Após entender a função de cada operador de linguagem acima, podemos passar aos operadores matemáticos ou “Operadores relacionais”. São usados para fazer a comparação numérica ou de uma string. Veja abaixo: • “<” = É usado para dizer que algo é “menor que” outro. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) < 8 then print("O jogador não possui vocação, pois seu level é menor que oito") end return TRUE end A comparação feita mostra se o jogador possui vocação de acordo com seu level, mostrando se ele tem level mínimo para ter vocação, visto que no Tíbia, jogadores abaixo do level 8 não possuem vocação. • “>” = O inverso de seu antecessor. É usado para dizer que algo é “maior que” outro. Exemplo de uso: ►function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) > 8 then print("O jogador pode posuir vocação") end return TRUE end Neste caso, o código retornará que o jogador pode possuir alguma vocação pois possui level maior que 8. •“<=” = Este operador faz a comparação que algo é “menor ou igual” que/a outro. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) <= 8 then print("O jogador não pode usar exura") end return TRUE end Neste exemplo, o código verifica se o jogador possui level 8 ou menos para dizer se ele pode ou não usar exura, visto que no Tíbia o jogador só pode usar exura se tiver level 9 ou maior. • “>=” = Este operador faz a comparação que algo é “maior ou igual” que/a outro. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) >= 9 then print("O jogador pode usar exura") end return TRUE end Neste caso, o código verifica se o jogador possui level 9 ou mais para dizer se ele pode ou não usar exura. • “==” = Este operador faz a comparação de igualdade. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) == 8 then print("O jogador já pode abandonar rookgaard") end return TRUE end A comparação feita mostra se o level do jogador é ou não 8. Se for 8, o código retorna a mensagem “O jogador já pode abandonar rookgaard”. • “~=” = Este operador faz a comparação de diferença. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) ~= 10 then print("Somente jogadores com level 10 podem usar") end return TRUE end O exemplo restringe o uso apenas a jogadores com level 10. Se o jogador não possuir level 10, o código retorna a mensagem “Somente jogadores com level 10 podem usar”. _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._. Bom, é isso. Tentei fazer um tutorial completo e que ajudasse quem quisesse aprender a linguagem. Tutorial feito totalmente por mim. Espero que esteja bom e espero comentários também. @Editado Editado a fim de corrigir alguns erros de ortografia e nos scripts. Será que ganho um ponto de reputação?1 ponto -
Primeiramente, este tuto eu estou recuperando do XTibia, ele deu problema, e muita gente usa, então só estou botando denovo, ele é totalemente do King CPI, eu só mudei as fontes, arrumei erros gramaticais, tirei coisas desnecessárias, deixei cores mais visíveis, etc.. Vamos lá: Apartir de agora é ele que fala: Sistema de Mineração By KingCPI v0.1 Como funciona?? Você precisa de uma dwarven pickaxe(id:4874). (Clique na pick e clique na parede da caverna.) As paredes são os item2.itemid. Ao conseguir 1 item ele fala um som diferente de quando não consegue nada. Pro exhausted funcionar nessecita do OtScript.lib 0.1 ou superior. 1º passo: Crie um arquivo na pasta data/actions/scripts com o nome de minerando.lua Vá até o arquivo actions.xml e adicione isto:[/size] Obs: em vermelho é o id da dwarven pickaxe. Depois de: [/color] 2º passo: Volte ao arquivo mineracao.lua. Abra-o, delete TUDO que tem dentro e coloque isto: *Altere como quiser* Em azul: dificuldade Em rosa: o storage value do skill Em vermelho: itens que serão dados como prêmio Em roxo: chance de dar os referidos itens.[/color] Gostaram??? Espero que sim!! Lembrando que esta é apenas a 1ª versão da mineração, qualquer dúvida, sugestão, ou critica POSTEM! Até + :hi: Agora sou eu XJhoow Eu gostei do script, espero que gostem também.. valeu1 ponto
-
Olá XTibianos, eu tinha um ot antigamente e nele eu tinha criado um monster qe parecia muito com player, claro qe eu editei scripts para fazer isso pqe nao intendo muito. Hoje eu resolvi compartilhar ele com vcs, garanto qe vcs irao gostar, pois os players do meu ot ficavam se perguntando se era player ou moster, hehe. Qdo meu ot tava on eu fiz um video dele, ta ai pra qem qiser ver: http://www.youtube.com/watch?v=X60wUZqpZpA Obs: Meu ot era xp 999x Vamos ao script do monster e ao script da magia qe faz ele falar magias e se curar. Na pasta data/monster crie um arquivo em formato XML chamado Curandeiro. Dentro dele adicione isso: <?xml version="1.0" encoding="UTF-8"?> <monster name="Curandeiro" nameDescription="Curandeiro (Level 2598). He is a Elder Druid" race="blood" experience="150000" speed="850" manacost="0"> <health now="90000" max="90000"/> <look type="133" head="116" body="94" legs="114" feet="114" addons="3" corpse="3058"/> <targetchange interval="20000" chance="0"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="1"/> <flag canpushitems="1"/> <flag staticattack="100"/> <flag lightlevel="233"/> <flag lightcolor="35"/> <flag targetdistance="3"/> <flag runonhealth="500"/> <flag skull="4" /> </flags> <attacks> <attack name="deathmage" interval="1200" chance="100000" range="6" min="-2300" max="-2900"> </attack> </attacks> <defenses armor="27" defense="52" /> <immunities> <immunity physical="0"/> <immunity energy="0"/> <immunity fire="0"/> <immunity poison="0"/> <immunity lifedrain="0"/> <immunity paralyze="1"/> <immunity outfit="0"/> <immunity drunk="0"/> <immunity invisible="1"/> </immunities> <loot> <item id="2183" countmax="1" chance1="100000" chancemax="0"/> <item id="2656" countmax="1" chance1="100000" chancemax="0"/> <item id="2640" countmax="1" chance1="100000" chancemax="0"/> <item id="2470" countmax="1" chance1="100000" chancemax="0"/> <item id="2506" countmax="1" chance1="100000" chancemax="0"/> <item id="2514" countmax="1" chance1="100000" chancemax="0"/> <item id="2173" countmax="1" chance1="100000" chancemax="0"/> <item id="10518" chance="100000"> <inside> <item id="7590" chance="100000"/> <item id="2268" chance="100000"/> <item id="2160" countmax="100" chance="100000"/> </inside> </item> </loot> </monster> Agora abra o arquivo monster.xml e adicione isto: <monster name="Curandeiro" file="curandeiro.xml"/> Agora o monster esta adicionado. Iremos agora adicionar a spell qe faz ele se parecer com player, falar magias, usar exura, etc... Dentro da pasta data/spells abra o arquivo spells.xml e coloqe isso: <instant name="deathmage" words="deathmage" lvl="100000" mana="5000000" prem="1" aggressive="0" needtarget="1" params="0" exhaustion="100" soul="3500" script="deathmage.lua" /> Obs: level 100000 para nenhum player usar. Agora abra a pasta scripts e crie um arquivo chamado deathmage.lua, dentro dele coloqe isto: -- haste local combatHaste = createCombatObject() setCombatParam(combatHaste, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combatHaste, COMBAT_PARAM_AGGRESSIVE, 0) setCombatParam(combatHaste, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) local condition = createConditionObject(CONDITION_HASTE) setConditionParam(condition, CONDITION_PARAM_TICKS, 14000) setConditionFormula(condition, 0, 350, 0, 350) setCombatCondition(combatHaste, condition) -- outfit local outCombat = createCombatObject() setCombatParam(outCombat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN) local condition = createConditionObject(CONDITION_OUTFIT) setConditionParam(condition, CONDITION_PARAM_TICKS, 3 * 24 * 3600 * 1000) -- here time in miliseconds, default 3 days addOutfitCondition(condition, 0, 12, 114, 114, 94, 94) addOutfitCondition(condition, 0, 35, 114, 114, 94, 94) addOutfitCondition(condition, 0, 300, 114, 114, 94, 94) addOutfitCondition(condition, 0, 287, 114, 114, 94, 94) addOutfitCondition(condition, 0, 303, 114, 114, 94, 94) addOutfitCondition(condition, 0, 231, 114, 114, 94, 94) addOutfitCondition(condition, 0, 243, 114, 114, 94, 94) addOutfitCondition(condition, 0, 244, 114, 114, 94, 94) addOutfitCondition(condition, 0, 246, 114, 114, 94, 94) addOutfitCondition(condition, 0, 240, 114, 114, 94, 94) addOutfitCondition(condition, 0, 326, 114, 114, 94, 94) addOutfitCondition(condition, 0, 307, 114, 114, 94, 94) addOutfitCondition(condition, 0, 55, 114, 114, 94, 94) setCombatCondition(outCombat, condition) -- exevo san local sanCombat = createCombatObject() setCombatParam(sanCombat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(sanCombat, COMBAT_PARAM_EFFECT, CONST_ME_FIREDAMAGE) setCombatParam(sanCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLFIRE) function onGetDmg1(cid, level, maglevel) return -60, -200 end setCombatCallback(sanCombat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetDmg1") -- SD local sdCombat = createCombatObject() setCombatParam(sdCombat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(sdCombat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(sdCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH) function onGetDmg2(cid, level, maglevel) return 250, 500 end setCombatCallback(sdCombat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetDmg2") function onCastSpell(cid, var) if(isCreature(variantToNumber(var)) == TRUE) then if(getCreatureCondition(cid, CONDITION_OUTFIT) == 0) then -- random outfit doCombat(0, outCombat, numberToVariant(cid)) end if(getCreatureHealth(cid) < 500 and getCreatureCondition(cid, CONDITION_HASTE) == 0) then doCombat(0, combatHaste, numberToVariant(cid)) doCreatureSay(cid,"Speed",TALKTYPE_SAY) else if(math.random(0,99) > 80 and (getCreatureMaxHealth(cid) - getCreatureHealth(cid) > 450)) then -- 20% percent chance to heal when hp lose higher then 450 doTargetCombatHealth(0, cid, COMBAT_HEALING, 25000, 35000, CONST_ME_MAGIC_BLUE) doCreatureSay(cid,"Exura Vita",TALKTYPE_ORANGE_1) elseif(math.random(0,99) > 60 and (getCreatureMaxHealth(cid) - getCreatureHealth(cid) > 750)) then -- 40% percent chance to heal when hp lose higher then 750 doTargetCombatHealth(0, cid, COMBAT_HEALING, 25000, 35000, CONST_ME_MAGIC_BLUE) doCreatureSay(cid,"Exura Vita",TALKTYPE_ORANGE_1) elseif(math.random(0,99) > 20 and (getCreatureMaxHealth(cid) - getCreatureHealth(cid) > 950)) then -- 80% percent chance to heal when hp lose higher then 950 doTargetCombatHealth(0, cid, COMBAT_HEALING, 25000, 35000, CONST_ME_MAGIC_BLUE) doCreatureSay(cid,"Exura Vita",TALKTYPE_ORANGE_1) elseif(getCreatureMaxHealth(cid) - getCreatureHealth(cid) > 300) then -- 100% to drink great spirit potion if hp lose higher then 100 doTargetCombatHealth(0, cid, COMBAT_HEALING, 600, 700, CONST_ME_MAGIC_BLUE) doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1) end end if(math.random(0,99) > 60) then -- 40% to shot sd doCombat(cid, sdCombat, var) doTargetCombatHealth(cid, variantToNumber(var), COMBAT_DEATHDAMAGE, -10000, -20500, CONST_ME_NONE) elseif(math.random(0,99) > 60) then -- 70% to shot exori san doCombat(cid, sdCombat, var) doTargetCombatHealth(cid, variantToNumber(var), COMBAT_DEATHDAMAGE, -4000, -5500, CONST_ME_NONE) doCreatureSay(cid,"Exori Mort",TALKTYPE_ORANGE_1) elseif(math.random(0,99) > 60) then -- 70% to shot exori san doCombat(cid, sdCombat, var) doTargetCombatHealth(cid, variantToNumber(var), COMBAT_DEATHDAMAGE, -4000, -5500, CONST_ME_NONE) doCreatureSay(cid,"Exori Mort",TALKTYPE_ORANGE_1) end end end Pronto! Agora é só colocar ele no seu servidor, espero qe tenham gostado. Não copiem, exclusividade XTibia ! Abraços.1 ponto
-
ot atualizado hoje!1 ponto
-
[Duvida]Montain
Marcelinhosk3 reagiu a caverna por um tópico no fórum
Só usar o optional border tool que tem em terrain pallete.1 ponto -
Otmapeditor Excluindo Npc's !
redmax1596 reagiu a safra por um tópico no fórum
Talvez o seu map editor não seja compatível com seu sistema operacional! Tente usar o melhor map editor :] Site Official ~> Clique_Aqui1 ponto -
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> flw1 ponto
-
Boa Tarde Galera, Então eu estou trabalhando em uma empresa de Hospedagem de: * Sites ** Domínios (.com, .net, .com.br ,.org, .info)... *** Rádios (Streaming) **** Servidores Dedicados (Todos os jogos). Então como que funciona o Servidores Dedicados: Vocês montam o seu computador: * HD ** Memória Ram *** Internet **** Windowns ou Linux... Custo: Vocês terão que montar o computador para que nós vejamos o preço certinho. Como funciona a Rádio: *30 Dias Grátis (64Kbps) - 50 Ouvintes - Apenas R$ 8,00. - Após os 30 Dias se não for efetuado o pagamento a Streaming será cancelada! Como funciona o Domínio: *.Com - R$ 15,00 - **.Com.Br - R$ 30,00 - ***.Net - R$ 15,00 - ****.Org - R$ 20,00 - *****.Info - R$ 20,00 Como funciona a Hospedagem: * 30 Dias Grátis - Apenas R$ 8,00 - Após os 30 Dias se não for efetuado o pagamento a Streaming será cancelada! Se vocês se interessarem entrem em contato comigo só no e-mail: felipe@casehost.com.br skype - felipecasehost skype - casehost www.casehost.com.br1 ponto
-
1 ponto
-
[Encerrado] Atualizar Serv De 8.54 Para 8.57
vitimdumau reagiu a luisfe23 por um tópico no fórum
Seguinte, vc precisa fazer o download de algum servidor qe contenha o distro com estas versões, entao vc pegaria o distro e colocaria no lugar do seu, quando for ligar talvez ele peça algumas atualizações como o arquivo items.otb entao vc atualiza tbm. No distro eu recomendo o do meu sv qe eu postei no xtibia para download, o distro funciona nas versoes 8.54 até 8.57. Download: http://www.xtibia.com/forum/topic/131744-snowz-thyrania-v10-854/ Abraços.1 ponto -
Tópico Fechado
ciappabrother reagiu a etanois por um tópico no fórum
Tipo em um jogo multiplayer massive player killing online como o tibia, musgo numa parede eh estiloso. Fica mais estilo naturezxa do q paredes lisas. Pense assim, eh como se a natureza estivesse tomando conta do lugar, como se estivesse abandonado faz tempo (oq eh exatamente a ideia nesse caso).1 ponto -
bom eu não posso agradar a todos né. e com relação ao map se tiver algum que você tenha feito que seja melhor me mostre. xD1 ponto
-
1 ponto
-
tpw axei melhor nao coloka pra baxa tah ai vcs vao gosta :icon1:1 ponto
-
-1 pontos