Jump to content

Search the Community

Showing results for tags 'Action'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Tibia King
    • Rules
    • Portal
    • FeedBack
  • Open Tibia
    • Otserv
    • Tools
    • Codes
    • Clients
    • Maps
    • Websites
  • Management of Ot Servers
    • Otserv Discussions & Research
    • Support and Requests
    • Otserv Tutorials
  • Tibia and Bots
    • Tibia
    • Bots
  • Others
    • Announcements
    • Other Programming Languages
    • Graphics and Design
    • Playground (Off-topic)

Calendars

  • Official Calendar
  • OTServs Calendar
  • Several Calendars

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Localization


My character


Favorite OTServ


Bot preferred


Interests

Found 126 results

  1. Muito boa tarde a todos, há um tempo atrás dei uma pausa com um projeto meu e resolvi voltar agora que estou com um tempinho livre. Gostaria de pedir uma ajuda dos especialistas, pois sou bem leigo quando o assunto é scripts. Estou há um bom tempo procurando nas comunidades um script de teleport por alavanca, onde 4 jogadores em posições determinadas acionam uma alavanca e são transportados para uma posição determinada. Mas para isso, os quatro jogadores devem ser exatamente level 100, qualquer level abaixo ou acima disso não é permitida a entrada e todos os 4 devem possuir x item para poder ir para a quest. Ao serem teleportados o item é removido. Se possível, o script possuir as seguintes funções: caso já tenha um grupo na quest, outros não poderão entrar somente quando o grupo atual finalizar. E Para evitar jogadores "Espertinhos" que tentem bloquear a quest de alguma forma, um limite de tempo para terminar a quest e ao termino o time todo é teleportado de volta para a saida (posição determinada por mim). Sei que pode ser muita coisa, mas peço que me ajudem pois, por mais simples que seja o script, já procurei muito e não encontro nenhum que funcione na minha versão do servidor. Todos os que eu achei foram pra versões anteriores do TFS e não consegui por pra rodar no meu. Versão do meu servidor: 11.00 TFS: 1.3
  2. Existe a possibilidade de você baixar um mapa com algumas "manhas", e alguns players sabendo disso podem se beneficiar em seu servidor. Por exemplo, uma bag com crystal coins, uma action numa parede que te teleporte até a sala de recompensas da POI, etc. Abaixo mostrarei como encontrar itens e códigos escondidos no mapa: No menu superior, Edit - Find Item (CTRL + F). No quadro de pesquisa CTRL + F (Search for item), selecione o item clique em OK, você será teleportado até a posição em que o item está e poderá removê-lo. Se ele estiver atrás de uma árvore por exemplo, você pode usar a tecla de atalho G (ghost loose items), que deixa as sprites transparentes. No menu superior, Edit - Find Unique / Action. Também é possível cadastrar action/unique ids e criar quests escondidas no mapa. Essa opção te mostra todos os uniqueids e actionids que existem. Clique nas opções da lista para ir até a posição. No menu superior, Edit - Find Containers Esta opção mostra os containers que existem no mapa. Chests e bookcases, bags e backpacks, corpses e coffins, boxes, barrels e tudo que da pra clicar, abrir e pegar um item dentro. Clique nas opções da lista para ser teleportado até o item. ______________________________________________________
  3. Bom galera antes de tudo, pesquisei e não encontrei desse que dá a roupa se tiver o tal level pedido na script. Tou deixando bem explicado para melhor compreensão de todos. O script é simples e já foi testado, estando o mesmo 100% na minha base 8.54 Vamos lá! Vá em data/actions/scripts e crie um arquivo Lua chamado > Outfitquest Feito isso dentro adicione esse código v Em actions.xml você adiciona v Explicação: if item.uid == 12154 then 12154 é a unique id que você vai colocar no baú. Lembrando que vc pode mudar os valores. Obs: Mudando esse valor vc terá que deixar igual na da tag da actions.xml if getPlayerLevel(cid) >= 30 then 30 é o level que o player precisa ter para concluir a quest. Mude ao seu gosto! questOut = getPlayerStorageValue(cid, 31503) 31503 é a storage da quest, recomendo não mudar/caso mude, deixe todos eles iguais pois eles se repetem no script. setPlayerStorageValue(cid, 181655, 1) 181655 é a storage da quest da roupa que vc vai querer que ele ganhe, mas vc me pergunta Ayron/Sepultura onde eu acho essa storage de roupa? Simples, vá em data/XML e abra o outfits.xml Lá vc encontrará algo assim v <outfit id = "59" quest = "181655"> <list gender = "0" lookType = "1498" name = "Christmas" /> <!-- 0 mulher, 1 homem --> <list gender = "1" lookType = "1497" name = "Christmas" /> </ outfit> Note que o valor 181655 é o valor da quest que lista as roupas que deseja dar no baú Atenção aqui ( o script dá a roupa automático de acordo com o sexo do player) ^ ^ Bom se vc já fez tudo deixou as coisas OK falta a ultima parte. Abra o seu (rme map editor) e lá escolha o baú, feito isso aperte com o botão direito do mouse sobre ele e vá em propriedades, abrirá uma janelinha, na parte da Unique ID coloque o valor da unique da script que é o mesmo da tag na actions.xml = 12154 ficando assim v Pronto! salve o mapa e vá testar. ^ ^ Espero ajudar alguém, e se ajudei deixa o Rep! aí para fortalecer a amizade É isso, abraços!
  4. Vim disponibilizar esse código de chest que eu tava precisando e não achei em lugar algum. Agradecimento ao @Sttorm que me ajudou a entender a estrutura do código. Comprar mesmo item com 2 moedas diferentes! (Chest Action) 23:31 Sao necessarios 50 gold coin e 50 crystal coin para realizar esta compra. 23:32 Voce comprou crown backpack por 50 gold coin e 50 crystal coin data/actions/actions.xml: (mude baus/bau01.lua se o seu esquema for diferente) <action actionid="6012" event="script" value="baus/bau01.lua"/> data/actions/scripts/baus/bau01.lua: ( " ) local coin = 2148 -- id da primeira moeda local coin2 = 2160 -- id da segunda moeda local eff = 28 -- efeito mágico ao comprar o item local lever = { [7017] = {50, 50, 10522} -- [actionid] = {quantidade da moeda 1, quantidade da moeda 2, id do item a comprar} } function onUse(cid,item,fromPosition,itemEx,toPosition) if getPlayerItemCount(cid, coin) >= (lever[item.actionid][1]) and getPlayerItemCount(cid, coin2) >= (lever[item.actionid][2]) then doPlayerRemoveItem(cid,coin,lever[item.actionid][1]) doPlayerRemoveItem(cid,coin2,lever[item.actionid][2]) doPlayerAddItem(cid,lever[item.actionid][3], isItemStackable(lever[item.actionid][3]) and 1) doPlayerSendTextMessage(cid,22,"Voce comprou " .. getItemNameById(lever[item.actionid][3]) .." por "..lever[item.actionid][1].." " ..getItemNameById(coin).. " e "..lever[item.actionid][2].." " ..getItemNameById(coin2)) doSendMagicEffect(getCreaturePosition(cid), config.eff) else return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Sao necessarios "..lever[item.actionid][1].." " ..getItemNameById(coin).. " e "..lever[item.actionid][2].." " ..getItemNameById(coin2).. " para realizar esta compra.") end end
  5. Pokekflute (Deixa Seu Pokemon Feliz) Blizardflute (Tira o Status De Gelo) Hungreflute (Deixa Seu Pokemon Sem Fome, Mas Porem Com Raiva) Dragonflute (Deixa o Status De Burn Dos Pokemon Em Zero.) Pokekflute (Deixa Seu Pokemon Feliz) Blizardflute (Tira o Status De Gelo) Hungreflute (Deixa Seu Pokemon Sem Fome, Mas Porem Com Raiva) Dragonflute (Deixa o Status De Burn Dos Pokemon Em Zero.) Tag: <action itemid="id da sua flauta" script="nome do arquivo.lua" />
  6. Só avisando não foi eu quem fiz! Mas achei interessante passar para todos, pois é difícil encontrar um script desses que é da época do Epa. Testado em: Servidor Styller Yourots Premium versão 1.1.2 Nome: Scroll que multiplica exp por um determinado tempo. Instalação: Action Vamos ao script. Na pasta scripts, em actions, crie um arquivo lua com esse script. XXXXX.lua (Escolha um nome para seu script). Ex: Scrollexp.lua function onUse(cid, item, frompos, item2, topos) local pausa = 30*60*1000 -- "1000 = 1 segundo" Tempo que durará a exp multiplicada! "a adicionada dura 15min" local texto = "Voce Recebeu, 3x de exp por, 15min" -- Texto que aparece ao utilizar o Scroll. Pode mudar como quizer, Ex: "Utilizando o Scroll, agora você receberá 5x a mais de exp...." textofinal = "Seu tempo acabou." -- Texto que finaliza o scroll, avisando que o tempo terminou. Igual ao de cima! local exp = 3 -- Por quanto X será multiplicada a experiencia do jogador quando der use no item. Exp de 20x - usando multiplicará para 60x por 15min. expfinal = 1 -- A exp que retornará ao player, que utilizar, caso coloque 2 ou mais o personagem ganhará Eterno xp multiplicada. Isso serve para exp voltar ao normal. if item.itemid == XXXX then -- Id do Item que servirá como Sua Scroll. Mude o XXXX por o ID de sua escolha. doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid,exp) doSendMagicEffect(frompos,13) doPlayerSendTextMessage(cid,22,texto) addEvent(potion,pausa,cid) end end function potion(pos, cid) doPlayerSetExperienceRate(pos,expfinal) doPlayerSendTextMessage(pos,22,textofinal) end Em actions.xml (faça isso junto com o nome que você criou seu script.) <action itemid="XXXX" event="script" value="XXXX.lua" /> Escreva em XXXX.lua o nome que você criou para sua script. E em ItemID="Coloque ID escolhido na citação anterior." Há o outro script feito por @vankk, podem estar utilizando-o pois já é mais atualizado que este de cima! local config = { rate = 3.0, -- Rate que vai ficar o Scroll. time = 24, -- Tempo dado pelo Scroll. storage = 20011 } local function endExpRate(cid) if not isPlayer(cid) then return end doPlayerSetRate(cid, SKILL__LEVEL, 6.0) setPlayerStorageValue(cid, config.storage, -1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Your extra experience time has ended.") end function onUse(cid, item, fromPosition, itemEx, toPosition) local timeLeft = getPlayerStorageValue(cid, 20011) if timeLeft > os.time() then local timeTable = os.date('*t', timeLeft - (os.time() + 3600)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.format("You still have %d %s %d %s %d %s left of extra experience.", timeTable.hour, timeTable.hour > 1 and "hours" or "hour", timeTable.min, timeTable.min > 1 and "minutes" or "minute", timeTable.sec, timeTable.sec > 1 and "seconds" or "second")) return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, string.format("Your extra experience rate is now: %d. It will last for %d hours.", config.rate, config.time)) doPlayerSetRate(cid, SKILL__LEVEL, config.rate) setPlayerStorageValue(cid, config.storage, os.time() + config.time * 3600 * 1000) addEvent(endExpRate, config.time * 3600 * 1000, cid) doRemoveItem(item.uid, 1) return true end Pelo que entendi do Script, corrijam se eu estiver Errado, você deverá adicionar a action ID na tag e adicionar isto no item! Relembrando esse script, não é meu era um script que tinha guardado a anos, e não o vi na internet e gostaria de mostrar para vocês. Não fui o criador dele, mesmo que seja tão simples. Créditos ao verdadeiro dono seja ele quem for!
  7. Esse script funciona da seguinte maneira, é um scroll, que ao usa-lo você recebe avança um lvl, você pode coloca-lo como recompensa de uma quest ou sei lá, basta usar a imaginação. Scroll de experiência Vá até data > actions > actions.xml e adicione a tag: <action itemid="6119" event="script" value="Exp_Scroll.lua"/> crie um arquivo "Exp_Scroll.lua" e coloque na pasta data > actions > scripts -- Scripted By Perfection -- local itemID = 6119 local lvl = 1 function onUse(cid, item, frompos, item2, topos) if item.itemid == itemID then doPlayerAddLevel(cid, lvl) doPlayerSendTextMessage(cid,22,"You Recieved 1 Level !") doRemoveItem(cid, item.uid, 1) end return 1 end Crétidos: perfection.
  8. Olá pessoal da comunidade de Tibia! Bom, hoje trouxe um pequeno e simples script, mas que pode ajudar muita gente. Vi alguns posts referindo aos NPCs que trocam determinados itens por outros, então tive a ideia de fazer algo que possa ter uma função semelhante e que funcione de uma maneira rápida. Fique à vontade em utilizá-la da maneira que quiser. Como funciona? O usuário vai usar a alavanca e irá adicionar um item em troca de outra item que você configurou no script. Em outras palavras, o usuário irá ganhar uma determinada quantidade de um item em troca de outra quantidade de um item diferente. (Tudo configurável) VERSÃO TESTADA: 8.60 - OTX --> Começando... Crie um arquivo com nome de changeItem.lua no diretório data/actions/scripts/ Logo após, adicione esse código dentro do arquivo criado: -- Script por Lordzetros para o forum Tibia King. local config = { itemNec = 2160, -- ID do item que necessita para efetuar a troca qtNec = 50, -- Quantidade do item que necessita para efetuar a troca itemNovo = 10137, -- ID do item que sera adicionado ao efetuar a troca qtNova = 1, -- Quantidade do item que sera adicionado ao efetuar a troca stor = 25869, -- Storage, ou seja, a numeracao que identificara se o usuario fez ou nao fez a quest ainda } function onUse(cid, item, fromPosition, itemEx, toPosition) pos = getPlayerPosition(cid) if getPlayerStorageValue(cid,config.stor) ~= -1 then doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"So eh permitido fazer a troca de itens apenas uma vez!") doSendMagicEffect(pos, CONST_ME_POFF) elseif getPlayerStorageValue(cid,config.stor) == -1 then if item.itemid == 1945 then if getPlayerItemCount(cid,config.itemNec) >= config.qtNec then doPlayerAddItem(cid, config.itemNovo,config.qtNova) doPlayerRemoveItem(cid,config.itemNec,config.qtNec) doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Voce acabou de trocar "..config.qtNec.." "..getItemNameById(config.itemNec).." por "..config.qtNova.." "..getItemNameById(config.itemNovo)..".") doSendMagicEffect(pos, CONST_ME_HOLYAREA) setPlayerStorageValue(cid, config.stor, 1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR, "Voce nao tem "..config.qtNec.." "..getItemNameById(config.itemNec).." para trocar por "..config.qtNova.." "..getItemNameById(config.itemNovo)..".") doSendMagicEffect(pos, CONST_ME_POFF) end end end end Em seguida, abra o arquivo com nome actions.xml que está localizada em data/actions/ E adicione essa linha de código no mesmo: <action actionid="9139" event="script" value="changeItem.lua"/> Preste atenção, pois o actionid será o número que irá colocar na alavanca em seu editor de mapa, ou seja, no caso acima está como 9139, logo, na alavanca terá que está como a seguinte imagem: Obs1.: Reparem que na imagem tem outro número destacado, que é o ID 1945, CERTIFIQUE-SE que a alavanca que irá utilizar no seu OT tenha esse mesmo ID, caso não tenha, basta mudar o número no código do script para o que irá utilizar no seu servidor. Obs2.: O código está configurado para que o usuário efetue a troca APENAS 1 VEZ, caso queira que ele troque quantas vezes quiser, apenas remova o seguinte comando do código: setPlayerStorageValue(cid, config.stor, 1) Obs3.: O resto que tinha que explicar está no próprio código, apenas faça um esforço de ler, agradeço. É isso, pessoal, espero que goste e aproveite. Como falei antes, é um código simples, pois comecei agora com Script, pretendo avançar no nível e funções que os mesmos desempenham, isso é só o começo, leve isso como uma prática de uma atividade para iniciante em scripts.
  9. Sobre* OBS: ISSO É UM INCREMENTO PARA QUEST/TASK. Acabei desenvolvendo esse sisteminha(se é que da pra chamar de sistema euheu) quando fui ajudar um membro do fórum, o Npc dele setava(dava) ao player a mesma storage com valores diferentes, ai eu pensei um pouco e saiu isso aqui, achei legal e estou trazendo aqui O sistema ocorre da seguinte maneira: Você deve procurar por itens no mapa e dar use neles, ao dar use você recebe um fragmento e depois usa esses fragmentos para outra função a qual você desejar, como liberar a entrada de uma quest por exemplo ou até mesmo trocar por outros itens. Ex: Ao falar com um npc, ele te da a seguinte task. Procure este item pelo mapa ao encontrar recolha o item escondido dentro dele. Escolha o item que quiser, coloque mais de um item próximos assim a dificuldade aumenta (apenas um item terá a actionid, os demais seriam para confundir o jogador). Exemplo da localização dos itens. Lembrando que você pode dificultar um pouco a procura por esses itens colocando eles em cidades diferentes, assim o player demora um tempinho até reunir todos os fragmentos. Instalando* Em data/actions/scripts, crie um arquivo .lua com o nome que desejar e em seguida adicione o script abaixo dentro. Agora em data/actions, abra o arquivo actions.xml e adicione a seguinte tag nele. ( Coloque os ActionID's dos itens espalhados pelo mapa em sequência. Ex: 2001, 2002, 2003, 2004.... Assim fica mais facíl para registrar o script, pois basta colocar: fromaid = 2001, toaid = 2010) Mais e menos itens* Eu criei o script para 10 itens, ou seja, terá 10 itens espalhados pelo mapa. Para aumentar ou diminuir o número de itens, olhe explicações abaixo. Mais itens* Menos itens* Edit: Modifiquei algumas coisas no tópico, também arrumei o script para ficar melhor de compreender, e adicionei a ele o que o @Vodkart falou .
  10. Trago a vocês esse sistema, originalmente produzido para um servidor custom 8.60. (testado em 0.4 - firelement). Acredito que será mais útil pra vocês do que pra mim nesse momento. Se alguém puder acrescentar informações a respeito do uso em diferentes tfs agradeço. 💪 INFORMAÇÕES P = Posso mineirar vários itens nesse sistema? R = Sim, existem quatro elementos e quatro categorias, possibilitando gerar até 16 produtos finais nas minas. Essa configuração pode ser editada facilmente. Caso queira usar da maneira como o script está feito, ao mineirar você poderá coletar as seguintes pedras: P = Mas as pedras caem aleatoriamente? R = Não, esse mining possui um SKILL, conforme você mineira o skill aumenta e consecutivamente o seu LEVEL. Inicia com pedras Light, depois pure, rare e massive. Você pode editar facilmente o modo como a exp sobe, os leveis necessários para executar cada ação e as pedras. P = Qual a utilidade das pedras elementares? R = Na ideia original, projetei o sistema para que as pedras fossem gastas ao comprar itens em baús, mas fica a seu critério como utilizá-las. Por exemplo, um colar de proteção earth/ice precisaria ser pago com pedras de earth e ice. Incluirei no tópico o script utilizado no baú e o script para trocar as pedras quando atingir 100 unidades cada. Veja o exemplo: INSTALAÇÃO Em data/actions/script crie um arquivo .lua chamado elementalmining e cole o código dentro: local config = { maxmininglevel = 100, storagemining = 10000, expperlevel = 1000, experiencemining = 10001 } local stone = { blue = {8637, 8633, 9798, 1354}, green = {8640, 8636, 9791, 1353}, lightblue = {8638, 8634, 9790, 12344}, red = {8639, 8635, 9788, 1355}, } local stones = { crystal = {stone.blue[1], stone.green[1], stone.lightblue[1], stone.red[1]}, lcrystal = {stone.blue[2], stone.green[2], stone.lightblue[2], stone.red[2]}, pcrystal = {stone.blue[3], stone.green[3], stone.lightblue[3], stone.red[3]}, scrystal = {stone.blue[4], stone.green[4], stone.lightblue[4], stone.red[4]}, } local ore = { blue = {2146, 7759, 5905, 8302}, green = {2149, 7761, 12396 ,8298}, lightblue = {2150, 7762, 12575, 8303}, red = {2147, 7760, 5906, 8299}, } local ores = { ore.blue[1], ore.blue[2], ore.blue[3], ore.blue[4], ore.green[1], ore.green[2], ore.green[3], ore.green[4], ore.lightblue[1], ore.lightblue[2], ore.lightblue[3], ore.lightblue[4], ore.red[1], ore.red[2], ore.red[3], ore.red[4]} local levels = { { level = {0,19}, stone = {stones.crystal[1], stones.crystal[2], stones.crystal[3], stones.crystal[4]}, items = {ores[1],ores[5], ores[9], ores[13]}, iselect = 0, bstart = 1, gstart = 2, lbstart = 3, rstart = 4, chance = 10, -- 30 qtdmax = 1, expgainmin = 1, --15 expgainmax = 1 --50 }, { level = {20,49}, stone = {stones.crystal[1], stones.crystal[2], stones.crystal[3], stones.crystal[4], stones.lcrystal[1], stones.lcrystal[2], stones.lcrystal[3], stones.lcrystal[4]}, items = {ores[1],ores[2], ores[5], ores[6], ores[9],ores[10], ores[13], ores[14]}, iselect = 1, bstart = 1, gstart = 3, lbstart = 5, rstart = 7, chance = 10, qtdmax = 1, expgainmin = 1, expgainmax = 1 }, { level = {50,69}, stone = {stones.crystal[1], stones.crystal[2], stones.crystal[3], stones.crystal[4], stones.lcrystal[1], stones.lcrystal[2], stones.lcrystal[3], stones.lcrystal[4], stones.pcrystal[1], stones.pcrystal[2], stones.pcrystal[3], stones.pcrystal[4]}, items = {ores[1],ores[2], ores[3], ores[5], ores[6], ores[7], ores[9],ores[10], ores[11], ores[13], ores[14], ores[15]}, iselect = 2, bstart = 1, gstart = 4, lbstart = 7, rstart = 10, chance = 10, qtdmax = 1, expgainmin = 1, expgainmax = 1 }, { level = {70,89}, stone = {stones.crystal[1], stones.crystal[2], stones.crystal[3], stones.crystal[4], stones.lcrystal[1], stones.lcrystal[2], stones.lcrystal[3], stones.lcrystal[4], stones.pcrystal[1], stones.pcrystal[2], stones.pcrystal[3], stones.pcrystal[4], stones.scrystal[1], stones.scrystal[2], stones.scrystal[3], stones.scrystal[4]}, items = {ores[1],ores[2], ores[3], ores[4], ores[5], ores[6], ores[7], ores[8], ores[9],ores[10], ores[11], ores[12], ores[13], ores[14], ores[15], ores[16]}, iselect = 3, bstart = 1, gstart = 5, lbstart = 9, rstart = 13, chance = 10, qtdmax = 1, expgainmin = 1, expgainmax = 1 }, { level = {90,100}, stone = {stones.crystal[1], stones.crystal[2], stones.crystal[3], stones.crystal[4], stones.lcrystal[1], stones.lcrystal[2], stones.lcrystal[3], stones.lcrystal[4], stones.pcrystal[1], stones.pcrystal[2], stones.pcrystal[3], stones.pcrystal[4], stones.scrystal[1], stones.scrystal[2], stones.scrystal[3], stones.scrystal[4]}, items = {ores[1],ores[2], ores[3], ores[4], ores[5], ores[6], ores[7], ores[8], ores[9],ores[10], ores[11], ores[12], ores[13], ores[14], ores[15], ores[16]}, iselect = 3, bstart = 1, gstart = 5, lbstart = 9, rstart = 13, chance = 10, qtdmax = 1, expgainmin = 1, expgainmax = 1 } } function onUse(cid, item, fromPosition, itemEx, toPosition) local getMiningLevel = getPlayerStorageValue(cid, config.storagemining) local getMiningExp = getPlayerStorageValue(cid, config.experiencemining) if getMiningLevel == -1 then setPlayerStorageValue(cid, config.storagemining, 0) end if getMiningExp < 0 then setPlayerStorageValue(cid, config.experiencemining, 0) end if (isInArray(stones.crystal, itemEx.itemid) or isInArray(stones.lcrystal, itemEx.itemid) or isInArray(stones.pcrystal, itemEx.itemid) or isInArray(stones.scrystal, itemEx.itemid)) then for a = 1, #levels do min = levels[a].level[1]; max = levels[a].level[2] if (getMiningLevel >= min and getMiningLevel <= max) then if isInArray(levels[a].stone, itemEx.itemid) then if (math.random(1, 100) <= levels[a].chance) then quantity = math.random(1, levels[a].qtdmax) experience = math.random(levels[a].expgainmin, levels[a].expgainmax) if isInArray(stone.blue, itemEx.itemid) then iselection = math.random(levels[a].bstart, levels[a].bstart + levels[a].iselect) collect = levels[a].items[iselection] end if isInArray(stone.green, itemEx.itemid) then iselection = math.random(levels[a].gstart, levels[a].gstart + levels[a].iselect) collect = levels[a].items[iselection] end if isInArray(stone.lightblue, itemEx.itemid) then iselection = math.random(levels[a].lbstart, levels[a].lbstart + levels[a].iselect) collect = levels[a].items[iselection] end if isInArray(stone.red, itemEx.itemid) then iselection = math.random(levels[a].rstart, levels[a].rstart + levels[a].iselect) collect = levels[a].items[iselection] end if getMiningLevel == 100 then doSendMagicEffect(toPosition, 9) doPlayerSendTextMessage(cid, 22, text) doPlayerAddItem(cid, collect, quantity) elseif getMiningLevel <= 99 then if getMiningExp >= config.expperlevel then doSendMagicEffect(getCreaturePosition(cid), 49) setPlayerStorageValue(cid, config.storagemining, getMiningLevel + 1) setPlayerStorageValue(cid, config.experiencemining, getMiningExp - config.expperlevel) text = "You collected " ..quantity.. " matter" ..(quantity > 1 and "s" or "").. ". \n You have gained " ..experience.. " experience points in Mining. \n You advanced from mining skill level " ..getMiningLevel.. " to mining skill level " ..(getMiningLevel + 1).. "." else setPlayerStorageValue(cid, config.experiencemining, getMiningExp + experience) text = "You collected " ..quantity.. " matter" ..(quantity > 1 and "s" or "").. ". \n You have gained " ..experience.. " experience points in Mining. \n" ..(config.expperlevel - getMiningExp - experience).. " experience points left to next level. \nCurrent Mining Skill: " ..getMiningLevel.. "." end doSendMagicEffect(toPosition, 9) doPlayerSendTextMessage(cid, 22, text) doPlayerAddItem(cid, collect, quantity) end else doSendMagicEffect(toPosition, 3) doSendAnimatedText(getCreaturePosition(cid), "Working!", COLOR_WHITE) end else doPlayerSendTextMessage(cid, 22, "You need to get better in Mining to mining this.") end end end else doSendMagicEffect(getCreaturePosition(cid), 2) doPlayerSendTextMessage(cid, 22, "You can't mining this.") end end Em data/actions/actions.xml use: <!-- MINING --> <action itemid="2553" event="script" value="elementalmining.lua"/> Se tiver dúvidas a respeito de como configurar pergunte no tópico. As partes editáveis são: Local config, local Stone, local Ore, local Levels. Note que local Levels indica que algumas pedras só podeerão ser mineiradas ao ter mining level superior. Configurações das pedras: Em data/items/items.xml troque os nomes de cada pedra (os nomes ficam a seu critério ;p) <item id="2149" article="a" name="light earth substance" plural="light earth substance"> <attribute key="weight" value="1000" /> </item> <item id="2146" article="a" name="light ice substance" plural="light ice substance"> <attribute key="weight" value="1000" /> </item> <item id="2147" article="a" name="light fire substance" plural="light fire substance"> <attribute key="weight" value="1000" /> </item> <item id="2150" article="a" name="light energy substance" plural="light energy substance"> <attribute key="weight" value="1000" /> </item> <item id="7761" article="a" name="pure earth substance" plural="pure earth substance"> <attribute key="weight" value="1000" /> </item> <item id="7759" article="a" name="pure ice substance" plural="pure ice substance"> <attribute key="weight" value="1000" /> </item> <item id="7760" article="a" name="pure fire substance" plural="pure fire substance"> <attribute key="weight" value="1000" /> </item> <item id="7762" article="a" name="pure energy substance" plural="pure energy substance"> <attribute key="weight" value="1000" /> </item> <item id="12396" article="a" name="rare earth matter" plural="rare earth substance"> <attribute key="weight" value="1000" /> </item> <item id="6551" article="a" name="rare ice substance" plural="rare ice substance"> <attribute key="weight" value="1000" /> </item> <item id="6550" article="a" name="rare fire substance" plural="rare fire substance"> <attribute key="weight" value="1000" /> </item> <item id="12575" article="a" name="rare energy substance" plural="rare energy substance"> <attribute key="weight" value="1000" /> </item> <item id="8298" name="massive earth substance" plural="massive earth substance"> <attribute key="weight" value="1000" /> </item> item id="8302" name="massive ice substance" plural="massive ice substance"> <attribute key="weight" value="1000" /> </item> <item id="8303" name="massive energy substance" plural="massive energy substance"> <attribute key="weight" value="1000" /> </item> <item id="8299" name="massive fire substance" plural="massive fire substance"> <attribute key="weight" value="1000" /> </item> TRANSFORMAR PEDRAS EM MOEDAS Em data/actions/scripts/tools crie um arquivo .lua e nomeie como changecoin: local COINS = { LIGHT = { EARTH_SUBSTANCE = 2149, ICE_SUBSTANCE = 2146, ENERGY_SUBSTANCE = 2150, FIRE_SUBSTANCE = 2147 }, PURE = { EARTH_SUBSTANCE = 7761, ICE_SUBSTANCE = 7759, ENERGY_SUBSTANCE = 7762, FIRE_SUBSTANCE = 7760 }, RARE = { EARTH_SUBSTANCE = 12396, ICE_SUBSTANCE = 6551, ENERGY_SUBSTANCE = 12575, FIRE_SUBSTANCE = 6550 }, MASSIVE = { EARTH_SUBSTANCE = 8298, ICE_SUBSTANCE = 8302, ENERGY_SUBSTANCE = 8303, FIRE_SUBSTANCE = 8299 } } local TRANSFORM = { [COINS.LIGHT.EARTH_SUBSTANCE] = { TO = COINS.PURE.EARTH_SUBSTANCE }, [COINS.LIGHT.ICE_SUBSTANCE] = { TO = COINS.PURE.ICE_SUBSTANCE }, [COINS.LIGHT.ENERGY_SUBSTANCE] = { TO = COINS.PURE.ENERGY_SUBSTANCE }, [COINS.LIGHT.FIRE_SUBSTANCE] = { TO = COINS.PURE.FIRE_SUBSTANCE }, [COINS.PURE.EARTH_SUBSTANCE] = { FROM = COINS.LIGHT.EARTH_SUBSTANCE, TO = COINS.RARE.EARTH_SUBSTANCE }, [COINS.PURE.ICE_SUBSTANCE] = { FROM = COINS.LIGHT.ICE_SUBSTANCE, TO = COINS.RARE.ICE_SUBSTANCE }, [COINS.PURE.ENERGY_SUBSTANCE] = { FROM = COINS.LIGHT.ENERGY_SUBSTANCE, TO = COINS.RARE.ENERGY_SUBSTANCE }, [COINS.PURE.FIRE_SUBSTANCE] = { FROM = COINS.LIGHT.FIRE_SUBSTANCE, TO = COINS.RARE.FIRE_SUBSTANCE }, [COINS.RARE.EARTH_SUBSTANCE] = { FROM = COINS.PURE.EARTH_SUBSTANCE, TO = COINS.MASSIVE.EARTH_SUBSTANCE }, [COINS.RARE.ICE_SUBSTANCE] = { FROM = COINS.PURE.ICE_SUBSTANCE, TO = COINS.MASSIVE.ICE_SUBSTANCE }, [COINS.RARE.ENERGY_SUBSTANCE] = { FROM = COINS.PURE.ENERGY_SUBSTANCE, TO = COINS.MASSIVE.ENERGY_SUBSTANCE }, [COINS.RARE.FIRE_SUBSTANCE] = { FROM = COINS.PURE.FIRE_SUBSTANCE, TO = COINS.MASSIVE.FIRE_SUBSTANCE }, [COINS.MASSIVE.EARTH_SUBSTANCE] = { FROM = COINS.RARE.EARTH_SUBSTANCE }, [COINS.MASSIVE.ICE_SUBSTANCE] = { FROM = COINS.RARE.ICE_SUBSTANCE }, [COINS.MASSIVE.ENERGY_SUBSTANCE] = { FROM = COINS.RARE.ENERGY_SUBSTANCE }, [COINS.MASSIVE.FIRE_SUBSTANCE] = { FROM = COINS.RARE.FIRE_SUBSTANCE } } function onUse(cid, item, fromPosition, itemEx, toPosition) if(getPlayerFlagValue(cid, PLAYERFLAG_CANNOTPICKUPITEM)) then return false end local COIN = TRANSFORM[item.itemid] if(not COIN) then return false end if(COIN.TO ~= nil and item.type == ITEMCOUNT_MAX) then doChangeTypeItem(item.uid, item.type - item.type) doPlayerAddItem(cid, COIN.TO, 1) elseif(COIN.FROM ~= nil) then doChangeTypeItem(item.uid, item.type - 1) doPlayerAddItem(cid, COIN.FROM, ITEMCOUNT_MAX) end return true end Em data/actions/actions.xml acrescente: <action itemid="2149" event="script" value="tools/changecoin.lua"/> <action itemid="2146" event="script" value="tools/changecoin.lua"/> <action itemid="2150" event="script" value="tools/changecoin.lua"/> <action itemid="2147" event="script" value="tools/changecoin.lua"/> <action itemid="7761" event="script" value="tools/changecoin.lua"/> <action itemid="7759" event="script" value="tools/changecoin.lua"/> <action itemid="7762" event="script" value="tools/changecoin.lua"/> <action itemid="7760" event="script" value="tools/changecoin.lua"/> <action itemid="12396" event="script" value="tools/changecoin.lua"/> <action itemid="6551" event="script" value="tools/changecoin.lua"/> <action itemid="12575" event="script" value="tools/changecoin.lua"/> <action itemid="6550" event="script" value="tools/changecoin.lua"/> <action itemid="8298" event="script" value="tools/changecoin.lua"/> <action itemid="8302" event="script" value="tools/changecoin.lua"/> <action itemid="8303" event="script" value="tools/changecoin.lua"/> <action itemid="8299" event="script" value="tools/changecoin.lua"/> Script adicional: Bau/Chest - Comprar mesmo item com duas moedas diferentes Isso é tudo, façam bom uso!
  11. Salve galera bom eu achei um script de lenhar antigo fui atrás tentei editar deu fail então recebi ajuda de alguns membros e enfim consegui trazer isso para vocês para muitos pode ser um simples sistema de cortar arvore mas com ele da para usar a criatividade e usar para muitas outras coisas como por exemplo mina para minerar minérios/ arvores com frutos para colher e por ai vai. Bom o script faz o seguinte você usa o machado em uma arvore configurável e você fica com a roupa de lenhador corta a arvore fica o toco dela e depois de um tempo a arvore volta ao normal para ser cortada novamente e assim você ganha itens configuráveis. Membros que ajudaram no script @JoviM @lordzetros Criador do script original @PsyMcKenzie Corrigido por @Storm Testado na versão 0.3.6 / 8.54 Outfit de lenhador 8.54 V outfit obd 854_1248.obd = Homem outfit obd 854_1249.obd = Mulher 8.60 V outfit obd 860_1248.obd = Homem outfit obd 860_1249.obd = Mulher Action.xml <action itemid="ID DO MACHADO" event="script" value="NOME DO SCRIPT.lua"/> Script V Vídeo demonstrativo Espero que gostem do script
  12. Eu ocupo um tipo de cassino ao mesmo da imagem ou semelhante para tibia 8.6
  13. Buenas, TK! Um mano gringo aí pediu algo do tipo, e eu precisava me familiarizar melhor com a orientação a objetos usada em Lua do TFS 1.3, então fiz esse action, onde o player que possui um scroll pode fazer um portal para seu templo, que é usado dando USE mesmo, e sua party inteira pode ir junto para seus respectivos templos se não estiverem pz locked ou com battle, e caso o player não esteja em uma party, apenas o mesmo pode entrar no portal. Tags XML: <action itemid="PORTALID HERE" script="townportalsystem.lua"/> <action itemid="SCROLLID HERE" script="townportalsystem.lua"/> Arquivo townportalsystem.lua em actions/scripts/: -- Town Portal Scroll System based in Dota 2 -- by Nazo (tibiaking.com) local config = { portalId = 1231, -- change to portal item id portalTime = 30, -- portal duration in seconds scrollId = 1232, -- change to scroll item id effect = CONST_ME_POFF -- effect id or CONST that appears at the end of time } local function removePortal(portal) if(portal) portal:remove() portal:getPosition():sendMagicEffect(config.effect) else print("Admin excluiu o portal, parabéns") end end function onUse(player, item, fromPosition, target, toPosition, isHotkey) if(item:getId()==config.scrollId) then portal = Game.createItem(config.portalId, 1, player:getPosition()) if(player:getParty()) then portal:setCustomAttribute("party", player:getParty()) else portal:setCustomAttribute("owner", player:getName()) end addEvent(removePortal, config.portalTime * 1000, portal) item:remove() else if(not player:isPzLocked() and not player:getCondition(CONDITION_INFIGHT, CONDITIONID_DEFAULT)) then if(item:getCustomAttribute("party")) then if(player:getParty()==item:getCustomAttribute("party")) then player:teleportTo(player:getTown():getTemplePosition(), true) else player:popupFYI("You do not participate in the portal creator's party.") end elseif(item:getCustomAttribute("name") and player:getName() == item:getCustomAttribute("name")) then player:teleportTo(player:getTown():getTemplePosition(), true) else player:popupFYI("You isn't the owner.") end else player:popupFYI("You are PZ locked or in battle.") end end return true end
  14. Olá pessoal, para quem não sabe esse script funciona da seguinte maneira, você escolhe um X item, ao dar use neste X item, a Stamina do player enche X tempo que você determinar. Crie um arquivo com o nome stamina_refuel.lua em actions/scripts e coloque isso dentro: local stamina_full = 42 -- horas (stamina full) function onUse(player, item, fromPosition, target, toPosition, isHotkey) if player:getStamina() >= (stamina_full * 60) then player:sendCancelMessage("Your stamina is already full.") else player:setStamina(stamina_full * 60) player:sendTextMessage(MESSAGE_INFO_DESCR, "Your stamina has been refilled.") player:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED) item:remove(1) end return true end E em actions.xml adcione a tag: <action itemid="ITEMID" script="stamina_refuel.lua"/> Para editar é fácil, nesta parte: local stamina_full = 42 -- horas (stamina full) Acima você escolhe o tempo (em horas) que encherá ao usar o stamina refuel. Bem simples né pessoal ?! Espero ter ajudado, abraços!
  15. Perfect Vip system 2.2 Versão Testada:TFS 0.3.6 - 8.54 - 8.60 Creditos pelas modificações: Kydrai,Nicekid e Marcryzius e EddyHavoc Creditos pelas publicações: EddyHavoc e Vodkart Oque Contém no Sistema vip 2.2? Quote - Compra Vip pela talkaction ( Comando !buyvip ) -- ou sem o comando. - Tile para somente Players Vip passarem ( conta também com funçâo os.time ) - verifica quantos dias de Vip o character ainda possui. - Administradores(GOD) podem adicionar e remover dias de Vip para characters. -- Administradores(GOD) podem checkar dias de Vip dos Players. -- É adicionado [VIP] ao nome e retirado quando a vip Acabar. GOD Adicionando e Removendo dias de Vip Comprando VIP e Checkando dia da sua VIP Quote Comando: comprar vip: !buyvip checkar dias de vip: !vipdays God checkar dias de vip do character: /checkvip Nick exemplo: /checkvip Nicekid God adionar dias ao character: /addvip Nick,dias exemplo: /addvip Nicekid,5 aqui adicionei 5 dias de vip. God Retirar dias de Vip do character: /delvip Nick,dias exemplo: /delvip Nicekid,5 aqui retirei 5 dias de vip. Primeiro passo vá até talkactions/scripts Crie um arquivo.lua e renomeie para systemvip.lua dentro coloque: -- Script System Vip 2.2 -- function onSay(cid, words, param) if(words == "!buyvip") then local price = 5000000 if doPlayerRemoveMoney(cid, price) == TRUE then local days = 30 local daysvalue = days * 24 * 60 * 60 local storageplayer = getPlayerStorageValue(cid, 13540) local timenow = os.time() if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then time = timenow + daysvalue else time = storageplayer + daysvalue end if string.find(tostring(getCreatureName(cid)),"[[Vip]]") then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.") setPlayerStorageValue(cid, 13540, time) local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.") setPlayerStorageValue(cid, 13540, time) local name = getCreatureName(cid) db.executeQuery("UPDATE `players` SET `name` = '[Vip] "..name.."' WHERE `id` = "..getPlayerGUID(cid)..";") doRemoveCreature(cid) end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa de "..price.." gp's para colocar vip.") end elseif(words == "!vipdays") then local timenow = os.time() local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. (quantity < 0 and 0 or quantity) .." dias de VIP no seu character.") elseif(words == "/checkvip") then if getPlayerAccess(cid) == 5 then if not param then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end local player = getPlayerByName(param) if not isPlayer(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player "..player.." not found.") end local timenow = os.time() local quantity = math.floor((getPlayerStorageValue(player, 13540) - timenow)/(24 * 60 * 60)) doPlayerPopupFYI(cid, "O jogador tem ".. (quantity < 0 and 0 or quantity) .." dias de VIP no character.") return TRUE end elseif(words == "/addvip") then if getPlayerAccess(cid) == 5 then local t = string.explode(param, ",") if not t[2] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end local player = getPlayerByName(t[1]) local name = getCreatureName(player) local days = t[2] local pid = getPlayerByNameWildcard(t[1]) if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player with this name doesn\'t exist or is offline.") return TRUE end local daysvalue = days*3600*24 local storageplayer = getPlayerStorageValue(player, 13540) local timenow = os.time() local time = storageplayer <= 0 and (timenow + daysvalue) or (storageplayer + daysvalue) if string.find(tostring(getCreatureName(pid)),"[[Vip]]") then doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Foram adicionados "..days.." dias de VIP no seu character.") setPlayerStorageValue(player, 13540, time) local quantity = math.floor((getPlayerStorageValue(player,13540) - timenow)/(3600*24)) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você tem "..quantity.." dias de VIP restantes.") else setPlayerStorageValue(player, 13540, time) db.executeQuery("UPDATE `players` SET `name` = '[Vip] "..name.."' WHERE `id` = "..getPlayerGUID(player)..";") doRemoveCreature(player) end end elseif(words == "/delvip") then if getPlayerAccess(cid) == 5 then local dec = MESSAGE_INFO_DESCR if(param == "") then return TRUE,doPlayerSendTextMessage(cid,18,"Command param required.")end local C,t = {},string.explode(param, ",") C.pos = getPlayerPosition(cid) C.uid = getCreatureByName(t[1]) C.time = ((tonumber(t[2]) == nil) and 1 or tonumber(t[2]))*3600*24 --Tempo da vip por dia. C.days = (tonumber(t[2]) == nil) and 1 or tonumber(t[2]) --Dias de vip. if(getPlayerStorageValue(C.uid,13540) < C.time)then doPlayerSendTextMessage(cid,dec,'O jogador '..t[1]..' não possui '..C.days..' dias de vip.') else doPlayerSendTextMessage(cid,dec,'Você removeu '..C.days..' dias de vip do player '..t[1]..'.') setPlayerStorageValue(C.uid,13540,getPlayerStorageValue(C.uid,13540)-C.time) end doSendMagicEffect(C.pos, math.random(28,30)) end end return TRUE end price = é o quanto a vip vai custar em gps days = quantos dias de vip serão adicionados ao player em talkactions.xml adicione a tag: <talkaction words="!vipdays;!buyvip;/checkvip;/addvip;/delvip" script="systemvip.lua"/> Pronto primeiro passo terminado. Sistema vip sem o !buyvip abra a spoiler Spoiler ---------------------------------------------------------------------------------------------------------------------------- Tile VIP Segundo passo. vá até movements/scripts crie um arquivo.lua e renomeie para vipe.lua dentro coloque: -- Script Vip Sytem 1.0 -- function onStepIn(cid, item, position, fromPosition) local config = { msgDenied = "Você não e vip ,fale com Administrador do Server.", msgWelcome = "Seja Bem Vindo a Area vip." } if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgDenied) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return TRUE end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgWelcome) return TRUE end Em movements.xml adicione a tag: <movevent type="StepIn" uniqueid="13700" event="script" value="vipe.lua"/> FIM DA VIP creaturescript/script crie um arquivo.lua e renomeie para endvip.lua e cole isso dentro dele: --[[ by EddyHavoc Tibiaking.com ]]-- function onLogin(cid) if getPlayerStorageValue(cid, 13540) - os.time() > 0 then setPlayerStorageValue(cid, 9898, 1) end local pos = {x = 157, y = 50, z = 7} -- posiçao do templo. function EddyHavoc(cid) if isPlayer(cid) then db.executeQuery("UPDATE `players` SET `name` = '"..string.sub(getCreatureName(cid), 7).."' WHERE `id` = "..getPlayerGUID(cid)..";") doRemoveCreature(cid) end end if getPlayerStorageValue(cid, 9898) == 1 and getPlayerStorageValue(cid, 13540) - os.time() < 1 or getPlayerStorageValue(cid, 13540) - os.time() == 0 then doTeleportThing(cid, pos) doPlayerPopupFYI(cid, "Sua vip Account acabou.") setPlayerStorageValue(cid, 9898, -1) if string.find(tostring(getCreatureName(cid)),"[[Vip]]") then addEvent(EddyHavoc, 3*1000, cid) end end return TRUE end em creaturescript.xml adicione a tag: <event type="login" name="CheckVip" script="endvip.lua"/>[i] Pronto Seu sistema Vip está terminado.
  16. Versão do Servidor: TFS - 0.3.4 (DxP) Pedido feito: Solução desenvolvida por mim: Substitua a função doFish no arquivo: "DxP-Server-V3\data\actions\scripts\Basic\pesca.lua" local function doFish(cid, pos, ppos, interval) if not isCreature(cid) then return false end if getThingPos(cid).x ~= ppos.x or getThingPos(cid).y ~= ppos.y then return false end doSendMagicEffect(pos, CONST_ME_LOSEENERGY) if interval > 0 then addEvent(doFish, 1000, cid, pos, ppos, interval-1) return true end local peixe = 0 local playerpos = getClosestFreeTile(cid, getThingPos(cid)) local fishes = fishing[getPlayerStorageValue(cid, sto_iscas)] local random = {} if getPlayerSkillLevel(cid, 6) < limite then doPlayerAddSkillTry(cid, 6, bonus * 5) end --[[if math.random(1, 100) <= chance then if getPlayerSkillLevel(cid, 6) < limite then doPlayerAddSkillTry(cid, 6, bonus * 5) end]] random = fishes.pokes[math.random(#fishes.pokes)] for i = 1, math.random(random[2]) do if #getCreatureSummons(cid) >= 1 -- se o jogador tiver sumonado algum pokemon,pegará a posição do pokemon then peixe = doSummonCreature(random[1], getClosestFreeTile(cid, getThingPos(getCreatureSummons(cid)[1]))) -- se não pegará a do jogador else peixe = doSummonCreature(random[1],playerpos) end if not isCreature(peixe) then setPlayerStorageValue(cid, storageP, -1) doRemoveCondition(cid, CONDITION_OUTFIT) return true end setPokemonPassive(peixe, true) doSetPokemonAgressiveToPlayer(peixe, cid) setPlayerStorageValue(peixe, storageP, 1) if #getCreatureSummons(cid) >= 1 then doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 0) doChallengeCreature(getCreatureSummons(cid)[1], peixe) else doSendMagicEffect(getThingPos(cid), 0) doChallengeCreature(cid, peixe) end end setPlayerStorageValue(cid, storageP, -1) doRemoveCondition(cid, CONDITION_OUTFIT) return true end Como funciona? Se o jogador tiver invocado um pokemon,ele vai sumonar os pokemons pescados próximo ao pokemon do jogador,caso contrario,será próximo ao jogador. Resultado:
  17. Olá pessoal, essa é a primeira versão do "Exercise Weapons", Sinta-se livre para sugerir modificações e ajudar a melhorá-lo! Caso você não tenha as sprites, pode usar outras, como a "Training Dummy" e outros items correspondentes. Crie o arquivo exercise_training.lua local skills = { [26397] = {id=SKILL_SWORD,voc=4}, [26398] = {id=SKILL_AXE,voc=4}, [26399] = {id=SKILL_CLUB,voc=4}, [26400] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW}, [26401] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_ENERGY}, [26402] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE}, } ------- CONFIG -----// local dummies = {26403,26404} local skill_gain = 1 -- per hit local gain_stamina = 60 local function start_train(pid,start_pos,itemid,fpos) local player = Player(pid) if player ~= nil then local pos_n = player:getPosition() if start_pos:getDistance(pos_n) == 0 and getTilePzInfo(pos_n) then if player:getItemCount(itemid) >= 1 then local exercise = player:getItemById(itemid,true) if exercise:isItem() then if exercise:hasAttribute(ITEM_ATTRIBUTE_CHARGES) then local charges_n = exercise:getAttribute(ITEM_ATTRIBUTE_CHARGES) if charges_n >= 1 then exercise:setAttribute(ITEM_ATTRIBUTE_CHARGES, (charges_n-1)) local required = 0 local currently = 0 local voc = player:getVocation() if skills[itemid].id == SKILL_MAGLEVEL then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)/skill_gain currently = player:getManaSpent() player:addManaSpent(required - currently) else required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)/skill_gain currently = player:getSkillTries(skills[itemid].id) player:addSkillTries(skills[itemid].id, (required - currently)) end fpos:sendMagicEffect(CONST_ME_HITAREA) if skills[itemid].range then pos_n:sendDistanceEffect(fpos, skills[itemid].range) end player:setStamina(player:getStamina() + 60) if charges_n == 1 then exercise:remove(1) return true end local training = addEvent(start_train, voc:getAttackSpeed(), pid,start_pos,itemid,fpos) else exercise:remove(1) stopEvent(training) end end end end else stopEvent(training) end else stopEvent(training) end return true end function onUse(player, item, fromPosition, target, toPosition, isHotkey) local start_pos = player:getPosition() if target:isItem() then if isInArray(dummies,target:getId()) then if not skills[item.itemid].range and (start_pos:getDistance(target:getPosition()) > 1) then stopEvent(training) return false end if not player:getVocation():getId() == skills[item.itemid].voc or not player:getVocation():getId() == (skills[item.itemid].voc+4) then stopEvent(training) return false end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You started training.") start_train(player:getId(),start_pos,item.itemid,target:getPosition()) end end return true end Adicione essa linha em actions.xml <!-- Training --> <action fromid="26397" toid="26402" script="exercise_training.lua" allowfaruse="1"/> Em events.xml - Você vai alterar a parte (enable="0" para "1") <event class="Player" method="onTradeRequest" enabled="1" /> Em /events/scripts/player.luaAdicione essa linha no início do arquivo local exercise_ids = {26397,26398,26399,26400,26401,26402} - Agora vá até a função function PlayerMoveItem e adicione abaixo: -- Exercise Weapons if isInArray(exercise_ids,item.itemid) then self:sendCancelMessage('You cannot move this item outside this container.') return false end - Na função function PlayerOnTradeRequest adicione essa linha abaixo: if isInArray(exercise_ids,item.itemid) then return false end Espero que gostem e seja útil.
  18. Salga galera demorou mas consegui hoje vou estar trazendo ai para vocês um script bem bacana da quest tipo anihi porém editado por mim espero que gostem Atenção!! O script foi otimizado com uma ajuda do @movie agora esta 100% liso testado em 0.3.6 8.54 ✔️ Bom vamos ao script tentei deixar a maior parte das configurações tudo em uma tabela só Funções Configurar Level para fazer a quest Configurar a actionid e adicione a uniqueid com o mesmo valor tempo para fazer a quest storage para fazer apenas uma vez esta desativado porém para ativar só retirar os comentários efeitos em determinadas ações esta tudo explicado no script tem configurado 3 posições ou seja você pode configurar três andares ou três partes diferentes do mapa mantendo como uma mesma quest fail = posição que o 4 jogadores vão caso não completar a quest a tempo limit = não mexer (seria a verificação se tiver 1 player dentro da área vai enviar a mensagem que tem gente na quest) Créditos @Vodkart (algumas funções) @Jamison (função de remover monstros) @Brunds caso tiver mais alguém só enviar pm que eu coloco os créditos
  19. Olá,participo do tibiaking faz muito tempo e nunca tive vontade de aprender LUA até alguns dias atrás. começei a estudar 2 - 4 horas,assisto videos, leio artigos do lua.org, leio tutoriais aqui do tibiaking, em outros lugarem também. porém fico com bastante duvidas, até tenho uma amigo muito bom mesmo com os LUA e outros estilos de linguagem,porém nem toda hora ele pode me ajudar. se alguém puder me ajudar com as duvidas que tenho ficarei muito muito grato mesmo!! 1 - como posso últilizar tabelas? vejo muitos script aqui no tibiaking que possuem tabelas mas não últilizam da função table.insert, ou de outra função table alguém poderia me dar exemplos explicando? não precisa ser muito grande,só preciso saber o basico,o resto corro atrás; 2 - como últilizar o return true / return false vejo bastante script usando essas funçoes, e apenas sei que essas funções true e false são para boolean, mas quando eu sei que retorne boolean? pode me dar um exemplo dessas duas funções? e da função sozinha (return) 3 - funções or e and eu sei um pouco dessas funções, sei seu principio teórico mas não sei aplica-los. irei tentar aplicar logo abaixo. if level <= 99 and level <= 149 or level == 151 then doSendTextMessage(cid, 21, "você é level menor que 100") doSendTextMessage(cid, 21, "você é level menor que 150") doSendTextMessage(cid, 21, "você é level 151,pode passar") end ---------- alguém pode me explicar se isso está certo,ou se dá para deixar o code mais curto? Obrigado pela ajuda!
  20. Ola pessoal tudo bem. primeiramente agradeço a todos que ajudam aqui no fórum, estou muito satisfeito com o conteúdo. bom a minha duvida é o seguinte: Eu criei um food que ao dar use nele você treina skill mele, como se tivesse atacando bixos, eu queria fazer o mesmo com o magic level, mas to com dificuldade em fazer funcionar essa funçao :doPlayerAddManaSpent.. acredito que seja essa, eu quero que suba Magic level em poca % como se tivese usando magia e nao que suba de 1 em 1. muito obrigado!! segue o código da script que to tentando usar a baixo: local itemID = 7158 -- O ID do item que quando usado ira dar a quantidade de EXP desejada local exp = 1 -- A quantidade de EXP desejada, essa scrip era de xp eu auterei pra skill, gabiarra local mensagem = "Uhul! EXP" -- A mensagem q ira aparecer quando for usado o item --- Configs Principais: local vocs = 1 -- Os ID´s das vocações que podem usar este item, no caso 1 = Sorcerer e 5 = Master Sorcerer local voca = "Sorcerer, Master Sorcerer" -- Nome das vocações 1 e 5 local level = 8 -- O level necessario para poder usar o item ----Estrutura function onUse(cid, item, frompos, item2, topos) playerpos = getPlayerPosition(cid) if item.itemid == itemID and getPlayerLevel(cid) >= level then doPlayerAddManaSpent(cid, 400) doSendMagicEffect(playerpos,30) doCreatureSay(cid, mensagem, 3) doRemoveItem(cid, item.uid, 1) doPlayerSendTextMessage(cid,20, "Você ganhou " ..exp.. " de experiência.") else doPlayerSendCancel(cid, "Desculpe, mais apenas " ..voca.. " com level " ..level.."+ pode usar este item.") end return 1 end
  21. Olá segundo tópico que crio com o mesmo intuito. aprendi muito oque foi me ensinado pelo Lyu pelo tópico passado, porém estou com problemas sem setar storage. Sim, sou iniciante em lua pelo modo que estou fazendo é um modo que ira ter muitos codigos e sei que possui modo mais facil de ser feito. porém é um modo que estou aprendendo, logo mais tento trazer algo mais profissional. então o problema desse script é que não sei setar a a storage no player, minha duvida basicamente é sobre toda a função getPlayerStorageValue(cid) e SetPlayerStorageValue(cid). alguém pode me dar uma ajuda?
  22. Olá pessoal, como to mexendo em um servidor "baiak" tive a ideia de fazer esse sistema de alavanca (pedi ajuda para o MaXwEllDeN, que foi quem fez praticamente o script inteiro), o script é formado por 2 alavancas., onde uma é para life e outra para mana, e essas alavancas vendem potions em cargas de 100x, a diferença dela é que ela verifica a vocation e o level do player, e vendi o potion em função disso. Por exemplo: Knight com level inferior a 50 só pode usar health potion, então se ele clicar na alavanca de life, ele irá receber o health potion, mas se este knight estiver em um level supior a 50 e inferior a 80 irá receber um strong potion, e assim sucessivamente. Faça pelo seu RME algo parecido com isso: Agora coloque a actionid 20001 na alavanca de life e 20002 na alavanca de mana ... Depois vá em actions/actions.xml e add a tag: <!-- Alavanca Potions --> <action actionid="20001" script="alavanca_potions.lua"/> <action actionid="20002" script="alavanca_potions.lua"/> E por fim, em actions/scripts/ crie um arquivo chamado alavanca_potions.lua e adicione isso dentro: É isso pessoal, os créditos são todos do MaXwEllDeN. Até mais!
  23. Boa Tarde TibiaKing!! Estou a um tempo procurando e não achei nada parecido ou igual... T.T E estou precisando muito dele para o meu servidor!! Caso alguém poder me ajudar agradeço muito +Rep Bom o script Funcionaria assim! eu tenho um item XXXX < Ex Pergaminho Item quebra após o uso. eu usaria esse pergaminho em uma criatura que esta dentro desta lista Creature List {(Ciclope, 2160) (Wolf, 2160)} Ex > Nome da criatura, id do item que ganha apos selar a Creature só pode ser selada com a vida baixa > Ex Vida Red Msg de erro > essa criatura está com a vida muito alta ela não pode ser selada tire mais vida dela Creature teria % chance de falhar no selamento e sumir logo em seguida. Cada criatura daria um item diferente Ex > Jogador Selou um Ciclope e recebeu um Ciclope Pergaminho! Bom é isso... Obrigado
  24. Sistema simples de abrir uma box com algum objeto (No caso uma chave) e ter chance de ganhar outfits, items , montarias ou perder a chave. key_loot_crate.lua (Actions) local config = { key_break = 30, -- Porcentagem de chave quebrar crate_itemid = 1739, -- ItemID da Crate rewards = { [1] = { item = "addon", chance = 10, lookType = { [0] = 142, -- lookType Female [1] = 134, -- lookType Male }, addon = 2, name = "Warrior Sword", }, [2] = { item = "mount", chance = 20, mountId = 40, name = "Noble Lion", }, [3] = { item = {2160, 2}, chance = 30, }, [4] = { item = {2390, 1}, chance = 40, }, [5] = { item = {2195, 1}, chance = 50, }, [6] = { item = {2471, 2}, chance = 60, }, [7] = { item = {2469, 1}, chance = 70, }, [8] = { item = {2492, 2}, chance = 80, }, } } local function broadcast(message) for _, targetPlayer in ipairs(Game.getPlayers()) do targetPlayer:sendTextMessage(MESSAGE_STATUS_WARNING, message) end return true end function onUse(cid, item, fromPosition, itemEx, toPosition) local player = Player(cid) if (itemEx.itemid ~= config.crate_itemid) then return false end if (math.random(100) <= config.key_break) then toPosition:sendMagicEffect(3) player:sendTextMessage(MESSAGE_EVENT_ORANGE, "Na tentativa de abrir a crate, sua chave quebrou!") else local random = math.random(100) local i = 1 while (i <= #config.rewards) do local v = config.rewards[i] if (random <= v.chance) then if (v.item == "addon") then local lookType = v.lookType[player:getSex()] if (not player:hasOutfit(lookType, v.addon)) then player:addOutfitAddon(lookType, v.addon) broadcast(player:getName() .. " abriu uma loot crate e ganhou o addon ".. v.name .. ".") i = 9999 break else random = math.random(100) end elseif(v.item == "mount") then if (not player:hasMount(v.mountId)) then player:addMount(v.mountId) broadcast(player:getName() .. " abriu uma loot crate e ganhou a montaria ".. v.name .. ".") i = 9999 break else random = math.random(100) end else local new_item = player:addItem(v.item[1], v.item[2]) if (type(new_item) == "table") then new_item = new_item[1] end broadcast(player:getName() .. " abriu uma loot crate e ganhou ".. v.item[2] .. " ".. new_item:getName() .. ".") i = 9999 break end end i = i + 1 end if (i == 9999) then toPosition:sendMagicEffect(14) player:sendTextMessage(MESSAGE_EVENT_ORANGE, "Eh uma pena, mas a loot crate estava vazia.") else toPosition:sendMagicEffect(15) end end itemEx:remove() item:remove() return true end actions.xml <action itemid="22607" script="key_loot_crate.lua" /> <!-- Loot Crate Key --> HAVE FUN !
  25. Alguém poderia me ajudar em como fazer o personagem com 2 armas em deves de 1 Alguém pode me ajudar

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...