Jump to content

Search the Community

Showing results for tags 'Action TFS 0.X'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Tibia King
    • Rules
    • Portal
    • Sobre o Fórum
  • 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 41 results

  1. Nome: Cassino slot machine Autor: CyberM // otland Versão Testada: tfs 0.4 Informações Adicionais: video auto-explicativo. Video: Frutas padrões Ganho padrão de combos Outras infos -Qualquer item jogado nos grounds de slot são deletados, para prevenir bugs e trapaças -Ao player "usar" a alavanca ele não pode se mover até o jogo acabar -Se o player "desaparecer" o jogo renicia Em actions/scripts crie um arquivo .lua chamado cassino e coloque isto dentro: Código: --[[ Advanced Slot Machine by Cybermaster ]]-- --REQUIRED MONEY(gp) TO PLAY SLOT MACHINE local money = 1000 --MILISECONDS TO CHANGE FRUITS local time = 200 --ITERATOR TIME TO STOP CHANGING FRUIT IF PLAYER DOESN'T (30 is like 7 seconds) local limit = 30 --FRUITS THAT WILL RANDOMLY APPEAR AND SWITCH local fruits = {2674,2675,2676,2679,2680,2682,2683,5097,8841} --PRIZES TABLES local win = { -- [{FRUIT.1,FRUIT.2,FRUIT.3} = {PRIZE,#PRIZE}] --MIXED COMBOS [{2679,2683,2679}] = {2160,2}, -- cherry-pumpkin-cherry [{8841,2682,8841}] = {2160,1}, -- lemon-melon-lemon --TRIPLE COMBOS [{2680,2680,2680}] = {2152,80}, -- triple strawberry [{5097,5097,5097}] = {2152,60}, -- triple mango [{2683,2683,2683}] = {2152,80}, -- triple pumpkin [{2682,2682,2682}] = {2152,50}, -- triple melon [{2676,2676,2676}] = {2152,40}, -- triple banana [{8841,8841,8841}] = {2152,25}, -- triple lemon [{2679,2679,2679}] = {2152,20}, -- triple cherry [{2675,2675,2675}] = {2152,30}, -- triple orange [{2674,2674,2674}] = {2152,10}, -- triple apple --ANY COMBOS [{ANY,2683,2683}] = {2152,5}, -- double pumpkin right [{2683,2683,ANY}] = {2152,5}, -- double pumpkin left [{2683,ANY,2683}] = {2152,10}, -- pumpkin sides combo [{ANY,2679,2679}] = {2152,4}, -- double cherry right [{2679,2679,ANY}] = {2152,4}, -- double cherry left [{2679,ANY,2679}] = {2152,8}, -- cherry sides combo [{ANY,8841,8841}] = {2152,5}, -- double lemon right [{8841,8841,ANY}] = {2152,5}, -- double lemon left [{8841,ANY,8841}] = {2152,5}, -- lemon sides combo } --MESSAGES THAT RANDOMLY APPEAR WHEN PLAYER WINS local messages = {'Bingo!','Lucky!','Jackpot!','Win!'} --FRUITS ROWS local p = { --[LEVER.UNIQUEID] [6297] = {},[6298] = {},[6299] = {},[6300] = {}, --[6301] = {}, } --JUST PUT THE INITIAL ROW POS FROM LEFT, SECOND & THIRD WILL BE AUTOM. GENERATED for i = 1,3 do --p, UNIQUEID.LEVER, {POS FROM TILE OF LEFT} table.insert(p[6297],i,{x=91+(i-1),y=145,z=7,stackpos=1}) table.insert(p[6298],i,{x=95+(i-1),y=145,z=7,stackpos=1}) table.insert(p[6299],i,{x=99+(i-1),y=145,z=7,stackpos=1}) table.insert(p[6300],i,{x=103+(i-1),y=145,z=7,stackpos=1}) -- table.insert(p[6301],i,{x=19+(i-1),y=145,z=7,stackpos=1}) end function verifyRow(cid, array, pos) local result, prize = false, '' for a, b in pairs(win) do if getTileItemById(pos[1],a[1]).uid > 1 or a[1] == ANY then if getTileItemById(pos[2],a[2]).uid > 1 or a[2] == ANY then if getTileItemById(pos[3],a[3]).uid > 1 or a[3] == ANY then doPlayerAddItem(cid, b[1], b[2] or 1, true) doSendAnimatedText(getThingPos(cid), messages[math.random(#messages)], math.random(255)) result, prize, amount = true, b[1], b[2] end end end end if prize ~= '' then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, 'Congratulations!! You won '..amount..' '..getItemPluralNameById(prize)..'!') end for i = 1,3 do doSendMagicEffect(pos, result and CONST_ME_GIFT_WRAPS or CONST_ME_EXPLOSIONHIT) doRemoveItem(getTileThingByPos(pos).uid) end return not result and doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, 'You have lost in the Slot Machine Try again') end function onUse(cid, item, fromPosition, itemEx, toPosition) local function doFruit(pos,cid,id,limit) if not isPlayer(cid) then return doItemEraseAttribute(item.uid, 'aid'), getTileThingByPos(pos).uid > 0 and doRemoveItem(getTileThingByPos(pos).uid) end if getTileThingByPos(pos).itemid < 1 then doSendMagicEffect(pos, CONST_ME_POFF) doCreateItem(fruits[math.random(#fruits)], 1, pos) else doTransformItem(getTileThingByPos(pos).uid,fruits[math.random(#fruits)],1) end if limit <= 0 then doSendMagicEffect(pos,math.random(28,30)) doTransformItem(getTileThingByPos(pos).uid,fruits[math.random(#fruits)],1) doItemSetAttribute(getTileThingByPos(fromPosition) .uid, 'aid', getTileThingByPos(fromPosition).actionid+1) doTransformItem(getTileThingByPos(fromPosition).ui d, getTileThingByPos(fromPosition).itemid == 9826 and 9825 or 9826) elseif getTileThingByPos(fromPosition).actionid > id then doSendMagicEffect(pos,math.random(28,30)) doTransformItem(getTileThingByPos(pos).uid,fruits[math.random(#fruits)],1) else addEvent(doFruit,time,pos,cid,id,limit-1) end end if item.actionid == 0 then if not doPlayerRemoveMoney(cid, money) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, 'You need '..money..' gps to play Slot Machine.') end doItemSetAttribute(item.uid, 'aid', 1) doCreatureSetNoMove(cid, true) doTransformItem(item.uid, item.itemid == 9826 and 9825 or 9826) doSendAnimatedText(getThingPos(cid), '-$'..money,COLOR_RED) for i = 1,3 do doFruit(p[item.uid],cid,i,i*limit) end elseif isInArray({1,2,3},item.actionid) then doItemSetAttribute(item.uid, 'aid', item.actionid+1) doTransformItem(item.uid, item.itemid == 9826 and 9825 or 9826) elseif item.actionid == 4 then doCreatureSetNoMove(cid, false) doItemEraseAttribute(item.uid, 'aid') doTransformItem(item.uid, item.itemid == 9826 and 9825 or 9826) verifyRow(cid, win, p[item.uid]) end return true end E em actions.xml adicione esta tag: Código: <action uniqueid="6297-6300" event="script" value="cassino.lua"/> Agora em movements/scripts crie um arquivo .lua chamado cassino e coloque isto dentro: Código: function onAddItem(moveItem, tileItem, position, cid) if isPlayer(cid) then doRemoveItem(moveItem.uid) doSendMagicEffect(position, CONST_ME_EXPLOSIONHIT) end end Agora em movements.xml adicione esta tag: Código: <movevent type="AddItem" tileitem="1" actionid="6577" event="script" value="cassino.lua"/> Mapa Código: --FRUITS ROWS local p = { --[LEVER.UNIQUEID] [6297] = {},[6298] = {},[6299] = {},[6300] = {}, --[6301] = {}, } --JUST PUT THE INITIAL ROW POS FROM LEFT, SECOND & THIRD WILL BE AUTOM. GENERATED for i = 1,3 do --p, UNIQUEID.LEVER, {POS FROM TILE OF LEFT} table.insert(p[6297],i,{x=91+(i-1),y=145,z=7,stackpos=1}) table.insert(p[6298],i,{x=95+(i-1),y=145,z=7,stackpos=1}) table.insert(p[6299],i,{x=99+(i-1),y=145,z=7,stackpos=1}) table.insert(p[6300],i,{x=103+(i-1),y=145,z=7,stackpos=1}) -- table.insert(p[6301],i,{x=19+(i-1),y=145,z=7,stackpos=1}) end NOTA: Coloque o actionid 6577 ao tile embaixo da alavanca Itemid das alavancas usadas: 9825 - 9826 Actionid usado: 6577 Uniqueid usado: 6297, ... etc (para cada alavanca usa-se um diferente uid) Espero que gostem
  2. Gostaria de uma Script que funcione da seguinte forma: Um player chega em um Npc e pede para começar a partida war, 1v1 oque ganhar ganha Pontos e quem perder perde pontos o cara que chega 100 pontos Upa de Patente ex: Jogou umas 3 partidas do ferro 1 foi para Ferro 2! e no look do perssonagem mostrasse o rank dele! TIPO LEAGUE OF LEGENDS alguem sabe fazer?
  3. Olá ! Estou prestes a abrir meu servidor 8.60 com TFS 0.4.0.0, mas tem um bug, acredito que seja em actions, mas talvez eu esteja na seção errada. No meu OT só consigo dar "use" nos objetos a 1 SQM de distância. Por exemplo, abrir um corpo ou door ou cortar grav. Se eu tento clicar em qualquer coisa a 2 SQM de distância, em vez de o boneco ir até o objeto para dar "use", aparece a mensagem abaixo em letras brancas: "You are too far to complete this action" (você está muito longe para completar a ação). Meu OT é o venore enforced Insane War.
  4. Gostaria da ajuda de vocês nisto: usar ("use with") um item e selecionar um jogador em seguida, só que de longe, não a um tile de distância. Vale lembrar que só precisa informar onde faço isso. Abaixo, alguns prints (em anexo) para ajudar a entender. Por favor, movam-no para a área de suporte.
  5. Boa noite tks! Se tiver no lugar errado favor mover para o correto... Procurei em vários lugares porém sem sucesso, gostaria de saber como faço para colocar o no meu cliente, pro char andar nas teclas (asdw) sendo que para isso teria que colocar o chat para ser ativado e desativado no enter. se alguem puder me ajudar ou mandar link de algum tutorial caso já exista, ficaria muito grato...
  6. salve galera, estou colocando um novo gold no servidor special coin, aquele blue eye.... peguei um script aqui no tibiaking, e adicionei no meu certinho, fui fazer o teste comprei 1 item de 5kk pela alavanca, ele está comprando normalmente, remove 5 special coins e pego o item, porem tem um bug, ele está transformando de crystal coin para special coin mas nao esta de special coin para crystal.. alguem pode me ajudar? vou postar tudo aqui em baixo! changegold.lua local coins = { [2148] = { to = 2152, effect = 210 }, [2152] = { from = 2148, to = 2160, effect = 130 }, [2160] = { from = 2152, to = 10559, effect = 65 }, [10559] = { from = 2160, effect = 198 } } function onUse(cid, item, fromPosition, itemEx, toPosition) if(getPlayerFlagValue(cid, PLAYERFLAG_CANNOTPICKUPITEM)) then return false end local coin = coins[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) doSendAnimatedText(fromPosition, "+ $$$", coins[coin.to].effect) elseif(coin.from ~= nil) then doChangeTypeItem(item.uid, item.type - 1) doPlayerAddItem(cid, coin.from, ITEMCOUNT_MAX) doSendAnimatedText(fromPosition, "- $$$", coins[coin.from].effect) end return true end
  7. 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
  8. 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" />
  9. 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!
  10. 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.
  11. 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.
  12. 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 .
  13. 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!
  14. Antes de tudo queria agradecer ao cara do suporte que me pediu pra fazer isso, achei muito legal a idéia. Fala galera do TK, vim trazer um script bem simpleszinho mas que abre um leque de opções de RPG e diversão pro seu OT.. Trata-se do Mining System, um sistema que você pode utilizar a pick normal (ou uma outra pick especial) para minerar a terra e tentar conseguir items que você pode trocar por dinheiro, items ou utilizar para craftar items. São 70 leveis de Mining que vão upando conforme vc minera. Enfim, vamos ao script: actions\scripts\mining.lua: terra = {351,352,353,354,355} levels = { [-1] = 2229, ---- skull [0] = 1294, --- small stone [1] = 3976, --- worm [10] = 2149, -- Small Emerald [12] = 2146, -- Small Sapphire [15] = 2145, -- Small Diamond [17] = 2150, -- Small Amethyst [20] = 2147, -- Small Ruby [25] = 2144, -- Black Pearls [27] = 2143, -- White Pearls [30] = 2157, -- Gold Nuggets [35] = 2156, --- red gem [36] = 2158, -- blue gem [37] = 2155, -- green gem [38] = 2153, -- violet gem [39] = 2154, -- yellow gem [40] = 7761, -- small enchanted emerald [42] = 7759, -- Small Enchanted Sapphiire [45] = 7762, -- Small Enchanted Amethyst [50] = 7760, -- Small Enchanted Ruby [70] = 2177 -- Life Crystal } local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end em terra vc coloca os ids dos chãos em que é possível minerar, levels é o level da skill e o ID do respectivo item que você fica capaz de conseguir após alcançar esse nível. Em outras palavras, no começo vc só consegue minerar skull, no nv 70 vc vai ter a chance de conseguir todos os items anteriores e não só life crystal. O restante das configurações está no meio do script: local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } o storage é onde vai salvar o seu nível chance é a chance de pegar um item cada vez que minera. k é a constante de level, o nivel 10 precisa de 10*10/k de experiencia para ser alcançado (com k sendo 2 dá 50 de experiencia), ou seja, com 50 picaretadas na terra vc pega nivel 10. experience é o storage que fica salvo sua experiencia. Bônus: Ao alcançar level 50 você ganha o Mining Helmet como prêmio, ele não faz nada de especial mas é como se fosse um troféu. No meu server tem uma série de troféus que voce pode colecionar e fica como sendo uma conquista épica para os players. e no actions.xml: <action itemid="2553" script="mining.lua"/> OBS: Sugiro que vcs utilizem uma outra pick pra não dar conflito mas você faz oque quiser. PS: Uma fotinha pra vcs verem Espero que tenham gostado!
  15. Olá pessoas, hoje vim trazer pra vocês um script que inicialmente fiz prum trabalho mas acabei gostando muito dele e decidi postar. To meio que indo dormir porque daqui a pouquinho tenho aula então vai ser tudo bem rapido e se vcs tiverem alguma dúvida comentem aqui. Primeiramente façam uma sala parecida com essa aqui: Não precisa ser necessariamente assim, mas ela deve ter as 3 bolas, uma alavanca e um local pra botar o dinheiro pras apostas. O sistema é baseado naqueles jogos de slot nos cassinos onde você aposta uma quantidade de dinheiro e se tirar 3 peças iguais você recebe o dobro do dinheiro apostado. em actions/scripts crie um arquivo chamado cassino.lua e adicione o seguinte dentro dele: Agora em data/actions/actions.xml adicione: <action actionid="16541" script="cassino.lua"/> Agora só botar a actionid na lever e configurar tudo de acordo com seu sv (as posições ali em pieces são as posições de cada peça, ou cada bola, se preferir.) se quiser fazer várias salas é só copiar o código pra um cassino2.lua e registrar outra tag <action actionid="16542" script="cassino2.lua"/>; Tá tudo comentado no código então acho que dispensa uma explicação formal de como editar, espero que vocês gostem Aqui tem um pequeno gif que o membro @eviltox nos forneceu: Abraços do Lobo!
  16. Mount System - 100% inovador! Olá pessoal, este é um script de montaria inovador, bom, confiram! Vamos ao script: Primeiramente vamos fazer uma pequena alteração no arquivo items.xml, abra-o e procure por "giant eye", mude esse nome para "mysterious pet", assim: <item id="11191" name="mysterious pet"> <attribute key="weight" value="120" /> </item> Agora vamos adicionar as actions, vá até a pasta "Actions" e abra o arquivo "Actions.xml" e adicione esta tag: <action itemid="11191" event="script" value="mount.lua"/> Ok, agora volte a pasta "Actions" e abra a pasta "Scripts", faça uma arquivo chamado "mount.lua" e adicione isto: -- [( Mount System 1.4 created by Matheus for TibiaKing.com )] -- function onUse(cid, item) local outfit = {lookType = 342} -- Outfit da montaria! local exhaust = 60 -- Tempo para player poder usar o item novamente! (tempo em segundos) local time = 60 -- Tempo para ficar na montaria! (tempo em segundos) local speed = 300 -- Velocidade adicionada ao player após usar o item! (300 = velocidade, quanto maior mais rapido...) local mana = 1300 -- Quantidade de mana que o player necessita para usar o sistema! local premium = "yes" -- Apenas players premium accounts "yes" or "no"!? local storage = 9393 -- Não mexa aqui! if premium == "yes" and not isPremium(cid) then return doPlayerSendTextMessage(cid, 23, "Sorry, only premium players.") end if(getCreatureMana(cid) < mana) then return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA) end if (getPlayerStorageValue(cid, storage) <= os.time()) then doCreatureSay(cid, "Yeeeah!!!\nYou went up on his ride.", 19) doSetCreatureOutfit(cid, outfit, time*1000) doChangeSpeed(cid, speed) doSendMagicEffect(getCreaturePosition(cid), 34) setPlayerStorageValue(cid, storage, os.time()+exhaust) doPlayerAddMana(cid, -mana) addEvent(doChangeSpeed, time*1000+40, cid, -speed) addEvent(doPlayerSendTextMessage, time*1000+45, cid, 23, "Mount System is time out!") addEvent(doSendMagicEffect, time*1000+50, getCreaturePosition(cid), 2) doRemoveItem(item.uid, 1) else doPlayerSendCancel(cid, "Sorry, you only can again use this item after "..exhaust.." seconds.") end return TRUE end Pronto agora configure o script da maneira que você quiser! OBS: A inteção do script é algum NPC te vender um item que no caso é o "mysterious pet" e esse item é super raríssimo, ele tem a função de te dar um "PET" misterioso por um certo tempo para você usar ele como montaria! Ajuda do MatheusMkalo e do Vodkart.. Espero que goste do script! Você gostou deste conteúdo!? Este conteúdo te ajudou!? Isso será realmente útil pra você!? Então, se possível, faça uma doação (de qualquer valor) que estará me ajudando também!
  17. Para quem não sabe como funciona o script : O player usa um certo item e se ele for dono de alguma house ele será teleportado para ela. • Adicionando o script • Em "data/actions/scripts/tphouse.lua" : function onUse(cid, item, fromPosition, itemEx, toPosition) if hasCondition(cid, CONDITION_INFIGHT) then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Desculpe,voce esta em batalha.") end if getPlayerLevel(cid) < getConfigInfo("levelToBuyHouse") then return doPlayerSendCancel(cid, "Sorry, not possible.") end if not getHouseByPlayerGUID(getPlayerGUID(cid)) then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Desculpe voce nao tem house.") end doTeleportThing(cid, getHouseEntry(getHouseByPlayerGUID(getPlayerGUID(cid)))) doRemoveItem(item.uid, 1) return true end Em "data/actions/actions.xml" : <action itemid="7722" event="script" value="tphouse.lua"/> Créditos : MaXwEllDeN por ajudar em algumas funções. • Configurando •
  18. Salve TIBIA KING! Hoje trago pra vocês um sistema de skin. Como funciona? ao clicar em um certo item, ele ganhará uma skin. ------------------------------------------------------ vou explicar direitinho tudo. espero que entenda. se não, comente ai que eu poderei da suporte. Então vamos lá. Em actions/scripts Crie um arquvio chamado skin.lua -- ou o nome da skin/personagem. Depois abra, e copie e cole isso aqui dentro da pasta function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == 7379 and (getPlayerStorageValue(cid, 8002) == EMPTY_STORAGE) then doPlayerAddOutfitId(cid, 44, 3) setPlayerStorageValue(cid, 8002, 1) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYDAMAGE) doPlayerSendTextMessage(cid,22,"Parabéns, você recebeu a Outfit!") doRemoveItem(item.uid, 1) else doPlayerSendCancel(cid,"Você já recebeu essa roupa!") end end em item.itemid == 7379 mude para o id para o seu item. Em (getPlayerStorageValue(cid, 8002) -- mude de acordo se você for colocar mais SKINS. tipo tá 8002 ali, coloque 8003 8004 e por ai vai. mude também no setPlayerStorageValue(cid, 8002, 1) -- mude para outras skin também! Feito isso, depois vá em actions.xml e adicione isso lá. <action itemid="13646" script="skin.lua"/> Mude a id do item. Depois de ter feito tudo isso, vamos agora em pasta do servidor/data/XML/outfit.xml abra ele e adicione isso aqui lá: <outfit id="44" premium="no" default="0"> <list gender="0-3" lookType="1250" name="NOME DA SKIN"/> </outfit> Antes disse. der espaço entrem o <outfits> e </outfits> e cole dentro! Mude o looktype para a roupa/skin que você deseja colocar para o personagem ganhar. outfit id="44" > Mude aqui. para 1. 2 3 4 5 6, vai até aonde tu achar bom. em List gender="0-3" mude para 0-1 ou para o que você quiser. Pronto, feito tudo ISSO é sucesso meu bom. se eu errei algo, perdão 😄 Créditos pelo esse sistema: DBOHP Eu (por postar.)
  19. Olá, esse é um dos primeiros scripts que eu consigo fazer, resolvi trazer ao fórum pois talvez em algum momento da história isso sirva para alguém fazer alguma coisa. Eu também gostaria de ceder todos os créditos desse trabalho para o @WooX, pois sem ele eu não teria o conhecimento necessário para fazer o script funcionar, obrigado. local configuration = { positionParedinso1 = {x=1067, y=1071, z=7, stackpos=1}, -- Posição do objeto que ira sumir time = 1*15*1000, -- tempo para o objeto voltar para o seu lugar devido monstrosTime = 1*10*1000, -- tempo até os monstros despertarem guardioes = { [1] = {name = "Hellfire Fighter", pos = {x = 1065, y = 1071, z = 7}}, -- Todas posições onde os monstros seram criados [2] = {name = "Massive Fire Elemental", pos = {x = 1061, y = 1069, z = 7}}, -- Bem como seus nomes e quantidade [3] = {name = "Fury", pos = {x = 1069, y = 1074, z = 7}}, [4] = {name = "Demon", pos = {x = 1069, y = 1071, z = 7}}, [5] = {name = "Diabolic Imp", pos = {x = 1066, y = 1074, z = 7}}, [6] = {name = "Fire Devil", pos = {x = 1064, y = 1075, z = 7}}, [7] = {name = "Fire Elemental", pos = {x = 1062, y = 1069, z = 7}}, [8] = {name = "Massive Fire Elemental", pos = {x = 1067, y = 1068, z = 7}} } } function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == 1945 then -- alavanca doTransformItem(item.uid, 1946) positionParedinso = getThingFromPos(configuration.positionParedinso1) if positionParedinso.itemid ~= 0 then doRemoveItem(positionParedinso.uid, 1) doCreatureSay(cid, "Um som terrível de engrenagens antigas se movendo pode ser ouvido imediatamente após você puxar a alavanca. \z Estrondos, chamas e vozes demoniacas estão vindo na sua direção, são ouvidos cada vez mais altos, corra por sua vida, \z você acaba fezer um mal antigo despertar.", TALKTYPE_ORANGE_1) -- Mensagem que será exibida após você puxar a alavanca addEvent(function() for k, v in pairs(configuration.guardioes) do doCreateMonster(v.name, v.pos) end end, configuration.monstrosTime) addEvent(doCreateItem, configuration.time, 12794, configuration.positionParedinso1) -- "12794" é o ID da parede que você quer criar após puxar a alavanca end else doTransformItem(item.uid, 1945) end end
  20. Ha um tempo atrás eu procurei um Pet System bem simples pro meu servidor, e achei um muito bacana. TFS: 0.4 Tibia: 8.6 O sistema original foi postado pelo @Luquinha no tópico: O script funciona corretamente, eu fiz apenas algumas alterações e queria compartilhar caso vocês tenham as mesmas exigências que eu; * Ao tentar usar o PET em PZ não da mais erro na distro, sobe um efeito FAILED! no player e manda uma mensagem. * Agora cada PET precisa de um storage para ser usado, no meu caso, cada PET tem sua quest individual. O script modificado: function onUse(cid, item, frompos, item2, topos) local dolls = { [11256] = {pet = "Rat"}, [11207] = {pet = "Demon"}, [5791] = {pet = "Dragon"}, } local go = dolls[item.itemid] local summon = getCreatureSummons(cid) --------------------------------------------------- if not (getTilePzInfo(getCreaturePosition(cid))) then if #summon >= 1 then for _, pid in ipairs(summon) do doRemoveCreature(pid) doCreatureSay(cid, ""..go.pet..", Recuar!", TALKTYPE_ORANGE_1) end return true end if item.itemid == 5791 then if getPlayerStorageValue(cid, 6666) == 1 then doConvinceCreature(cid, doSummonCreature(go.pet, getCreaturePosition(cid))) doCreatureSay(cid, ""..go.pet..", GO!", TALKTYPE_ORANGE_1) else doPlayerSendTextMessage(cid, 19, "Voce precisa da quest para usar esse PET!") doSendAnimatedText(getPlayerPosition(cid), "Failed!", 180) end end if item.itemid == 11256 then if getPlayerStorageValue(cid, 4444) == 1 then doConvinceCreature(cid, doSummonCreature(go.pet, getCreaturePosition(cid))) doCreatureSay(cid, ""..go.pet..", GO!", TALKTYPE_ORANGE_1) else doPlayerSendTextMessage(cid, 19, "Voce precisa da quest para usar esse PET!") doSendAnimatedText(getPlayerPosition(cid), "Failed!", 180) end end if item.itemid == 11207 then if getPlayerStorageValue(cid, 4445) == 1 then doConvinceCreature(cid, doSummonCreature(go.pet, getCreaturePosition(cid))) doCreatureSay(cid, ""..go.pet..", GO!", TALKTYPE_ORANGE_1) else doPlayerSendTextMessage(cid, 19, "Voce precisa fazer a quest para usar esse PET!") doSendAnimatedText(getPlayerPosition(cid), "Failed!", 180) end end else doPlayerSendTextMessage(cid, 19, "Voce nao pode sumonar seu PET em Protect Zone!") doSendAnimatedText(getPlayerPosition(cid), "Failed!", 180) return true end end Creditos: @Luquinha @Roksas @Kemmlly
  21. * Sobre o Sistema da Quest * Para quem já assistiu Sword Art Oline vai ficar fácil de entender. Jogadores poderão fazer uma quest simples, porém, diferenciada. Funciona da seguinte forma: 1 - Jogador terá que possuir uma chave para abrir o caminho de uma sala misteriosa e aparentemente cheia de tesouros e recompensas dentro de um baú 2 - Abrindo a passagem, ele vai se deparar com um baú em sua espera, o interesse do ser humano é devastador, ele irá abrir sim! 3 - Ao tentar abrir o baú, monstros serão invocados e a passagem será imediatamente fechada 4 - De todos os monstros que serão invocados, terá um chefe que será responsável por permitir a saída dos jogadores para sala de recompensa e sair daquele lugar, APENAS matando ele, isso será possível 5 - Após a morte do chefe, TODOS players na sala da quest serão teleportados para a área de recompensa configurada no script. Obs.: A quest tá configurada para ser feita em X minutos para TODO servidor, ou seja, se uma guild fez a quest e você configurou para ela ser feita novamente em 10 minutos, então, nenhum outro player poderá fazer a quest nesse intervalo, pois a storage armazenada é a do servidor. * Instalação * VERSÃO TESTADA: 8.6 - TFS 0.4 Para agilizar o processo, deixei como anexo todos os arquivos necessários, devidamente separados e organizados, caso queira baixar, o ViruScan dele está logo abaixo. Em data/actions/scripts/ 1° - Crie um arquivo chamado keySAO.lua e cole o seguinte código dentro: --[[ Script - Lordzetros Tibiaking - Lordzetros ]]-- local config = { parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente tempoFechar = 1, -- MINUTOS para a passagem fechar, caso não entrem APÓS abrirem a passagem } function remover_parede(conf) local parede = getTileItemById(conf.parede.pos, conf.parede.id) if (parede) then doRemoveItem(parede.uid, 1) doSendMagicEffect(conf.parede.pos, 10) end return true end function adicionar_parede(conf) local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end return true end function onUse(cid, item, fromPos, item2, toPos) if (item2.itemid == config.parede.id) then if (getGlobalStorageValue(config.strPassagem.storage) >= os.time()) then return doCreatureSay(cid, 'Precisa esperar ' .. config.strPassagem.tempo .. ' minuto para fazer a quest!', TALKTYPE_ORANGE_1) end doRemoveItem(item2.uid, 1) doSendMagicEffect(config.parede.pos, 10) doCreatureSay(cid, "A passagem foi aberta por "..getPlayerName(cid).."! Peguem a recompensa no bau, depressa!", TALKTYPE_ORANGE_1) doPlayerSendCancel(cid, "A passagem ira fechar em " ..config.tempoFechar.. " minuto!") addEvent(function() adicionar_parede(config) end, config.tempoFechar * 60 * 1000) doRemoveItem(item.uid, 1) end return true end Em seguida, crie outro arquivo no mesmo local com o nome de bauSAO.lua e cole o código dentro: --[[ Script - Lordzetros Tibiaking - Lordzetros ]] local mti = { [1] = {nome = 'Demon', pos = {x=955, y=935, z=6}}, -- [numero] = {nome = 'Nome Monstro', pos = 'POSICAO QUE IRÁ RESPAWNAR O MONSTRO'} [2] = {nome = 'Demon', pos = {x=955, y=936, z=6}}, [3] = {nome = 'Demon', pos = {x=955, y=937, z=6}}, [4] = {nome = 'Demon', pos = {x=955, y=938, z=6}}, [5] = {nome = 'Demon', pos = {x=955, y=939, z=6}}, [6] = {nome = 'Demon', pos = {x=955, y=940, z=6}}, [7] = {nome = 'Demon', pos = {x=964, y=935, z=6}}, [8] = {nome = 'Demon', pos = {x=964, y=936, z=6}}, [9] = {nome = 'Demon', pos = {x=964, y=937, z=6}}, [10] = {nome = 'Demon', pos = {x=964, y=938, z=6}}, [11] = {nome = 'Demon', pos = {x=964, y=939, z=6}}, [12] = {nome = 'Demon', pos = {x=964, y=940, z=6}}, [13] = {nome = 'Loki', pos = {x=959, y=940, z=6}}, } local config = { unique = 17458, -- uniqueID que vai colocar no BAÚ no seu EDITOR DE MAPA! parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente } function adicionar_parede(conf) local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end return true end function onUse(cid, item, fromPos, item2, toPos) if (item.uid == config.unique) then if (getGlobalStorageValue(config.strPassagem.storage) >= os.time()) then return doCreatureSay(cid, 'Precisa esperar ' .. config.strPassagem.tempo .. ' minuto para fazer a quest!', TALKTYPE_ORANGE_1) end doCreatureSay(cid, "Argh!! Sala com armadilha.", TALKTYPE_ORANGE_1) adicionar_parede(config) for _, cf in pairs(mti) do doSummonCreature(cf.nome, cf.pos) end setGlobalStorageValue(config.strPassagem.storage, os.time() + config.strPassagem.tempo * 60) end return true end Adicione as seguintes linhas de código em data/actions/actions.xml <action uniqueid="17458" event="script" value="bauSAO.lua"/> <action itemid="IDdaKEY" event="script" value="keySAO.lua" /> 2° - Agora em data/creaturescripts/scripts Crie um arquivo chamado tpSAO.lua e cole o código dentro: --[[ Script - Lordzetros Tibiaking - Lordzetros ]] local config = { SupEsquerdo = {x=953, y=930, z=6}, -- posicao do canto SUPERIOR ESQUERDO da área que ficará a quest InfDireito = {x=966, y=941, z=6}, -- posicao do canto INFERIOR DIREITO da área que ficará a quest chefe = "Loki", -- Nome do BOSS, responsável por abrir passagem e liberar a recompensa no baú parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- id da parede ||||| posicao dela posPremio = {x = 1263, y = 1128, z = 7}, -- posicao para area de recompensa quando os players matarem o boss msgSucesso = "Parabéns por passarem do desafio! Agora permitirei pegar algumas recompensas como reconhecimento de um otimo guerreiros que es!" -- Mensagem quando os players conseguirem matar o boss da sala } function getAllPlayersInArea(fromPosition, toPosition) local players = {} for _, pid in ipairs(getPlayersOnline()) do local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z} local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z} local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z) for index = 0, math.abs(toPosition.z - fromPosition.z) do f.z = min + index t.z = min + index if (isInRange(getPlayerPosition(pid), f, t)) then table.insert(players, pid) end end end return players end function remover_parede(conf) local parede = getTileItemById(conf.parede.pos, conf.parede.id) if (parede) then doRemoveItem(parede.uid, 1) doSendMagicEffect(conf.parede.pos, 10) end return true end function adicionar_parede(conf) local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end return true end function onDeath(cid) local boss = getCreatureName(cid) == config.chefe if boss then doCreatureSay(cid, config.msgSucesso, TALKTYPE_ORANGE_1) doSendMagicEffect(getCreaturePosition(cid), 49) addEvent(function() local players = getAllPlayersInArea(config.SupEsquerdo, config.InfDireito) for _, jogador in ipairs(players) do doTeleportThing(jogador, config.posPremio) doSendMagicEffect(getPlayerPosition(jogador), 11) end end, 7000) end return true end Adicione a seguinte linha de código em data/creaturescripts/creaturescripts.xml <event type="death" name="tpSao" script="tpSAO.lua"/> Em data/creaturescripts/scripts/login.lua adicione esta linha de código abaixo do último registerCreatureEvent 3° - Por fim, agora escolhe um monstro que será o chefe responsável por permitir que os jogadores saiam do local e que leve-os até a sala de recompensa após o derrotarem. Escolheu? Show, agora vá até o diretório dele em data/monster/pastaDoSeumonstro/arquivoDoSeuMonstro.xml e adicione essas linhas de códigos abaixo de alguma tag, no meu caso, utilizei abaixo da tag flags <script> <event name="tpSao"/> </script> Segue foto para melhor entendimento: * Explicação da configuração * Bom, apesar de está TUDO COMENTADO e AJUSTÁVEL, acho importante dá algumas explicações: 1 - Configurou tudo nas pastas corretamente, colocou todas linhas de códigos necessárias e explicadas? Beleza, você tá quase lá. 2 - Coloque em um baú no seu editor de mapa um UNIQUEID que será responsável por identificar que aquele BAÚ é da quest, segue imagem: Aconselho não modificar o valor, pois é muito improvável que já esteja sendo utilizado em seu servidor. 3 - Agora entrando na parte dos scripts: No arquivo keySAO.lua localizado em data/actions/scripts/ local config = { parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente tempoFechar = 1, -- MINUTOS para a passagem fechar, caso não entrem APÓS abrirem a passagem } Configure o id da parede que impedirá a passagem dos players e o jogador utilizará a chave nela para passar! Não esqueça de configurar a posição dela também, deixe a mesma que você colocou no mapa. Configure o storage que será responsável por permitir ou não jogadores fazerem a quest em X minutos. Configure o tempo que o player terá para passar para dentro da sala antes que a passagem se feche, no script tá 1 minuto. No arquivo bauSAO.lua localizado em data/actions/scripts/ local mti = { [1] = {nome = 'Demon', pos = {x=955, y=935, z=6}}, -- [numero] = {nome = 'Nome Monstro', pos = 'POSICAO QUE IRÁ RESPAWNAR O MONSTRO'} [2] = {nome = 'Demon', pos = {x=955, y=936, z=6}}, [3] = {nome = 'Demon', pos = {x=955, y=937, z=6}}, [4] = {nome = 'Demon', pos = {x=955, y=938, z=6}}, [5] = {nome = 'Demon', pos = {x=955, y=939, z=6}}, [6] = {nome = 'Demon', pos = {x=955, y=940, z=6}}, [7] = {nome = 'Demon', pos = {x=964, y=935, z=6}}, [8] = {nome = 'Demon', pos = {x=964, y=936, z=6}}, [9] = {nome = 'Demon', pos = {x=964, y=937, z=6}}, [10] = {nome = 'Demon', pos = {x=964, y=938, z=6}}, [11] = {nome = 'Demon', pos = {x=964, y=939, z=6}}, [12] = {nome = 'Demon', pos = {x=964, y=940, z=6}}, [13] = {nome = 'Loki', pos = {x=959, y=940, z=6}}, } local config = { unique = 17458, -- uniqueID que vai colocar no BAÚ no seu EDITOR DE MAPA! parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente } Configure os nomes e posições que os monstros irão respawnar, e repare que deixei apenas 1 diferenciado chamado 'Loki', pois foi o monstro que escolhi como CHEFE Configure o uniqueID que será utilizado no baú, recomendo não mexer nessa parte Configure novamente o ID da parede que irá bloquear a passagem e a mesma posição (use a mesma coisa da configuração anterior) Configure novamente o storage e tempo que permitirá os jogadores fazerem a quest em X minutos (use a mesma coisa da configuração anterior) No arquivo tpSAO.lua em data/creaturescripts/scripts/ local config = { SupEsquerdo = {x=953, y=930, z=6}, -- posicao do canto SUPERIOR ESQUERDO da área que ficará a quest InfDireito = {x=966, y=941, z=6}, -- posicao do canto INFERIOR DIREITO da área que ficará a quest chefe = "Loki", -- Nome do BOSS, responsável por abrir passagem e liberar a recompensa no baú parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- id da parede ||||| posicao dela posPremio = {x = 1263, y = 1128, z = 7}, -- posicao para area de recompensa quando os players matarem o boss msgSucesso = "Parabéns por passarem do desafio! Agora permitirei pegar algumas recompensas como reconhecimento de um otimo guerreiros que es!" -- Mensagem quando os players conseguirem matar o boss da sala } Configure o canto superior esquerdo e inferior direito, é de EXTREMA importância isso, pois será responsável por verificar os jogadores na sala da quest e teleportá-los, segue imagem: Coloque as posições corretamente de cada canto. Configure o nome do chefe que você escolheu para completar a quest, o monstro diferenciado que falamos lá em cima, certo? Configure novamente o ID da parede que irá bloquear a passagem e a mesma posição (use a mesma coisa da configuração anterior) Configure a posição do prêmio, isto é, a posição que o player será teleportado quando matar o CHEFE, a posição da SALA DE RECOMPENSAS ou seja lá o que queira fazer após os jogadores matarem o chefe. Configure a mensagem, caso queira, de quando os jogadores matarem o CHEFE da sala. * Observações finais e anexos para download * Digo logo que é um script simples, porém bastante trabalhoso de ser configurado, visto que faz-se necessário a instalação de alguns arquivos, mas não deixa de ser simples! A ideia que tive foi quando estava lembrando do anime, e como estou voltando aos poucos com Tibia (aprendendo bastante), tive a ideia de fazer isso, pois como gostava bastante de jogar em Baiak e modos semelhantes, isso daqui pode ser bastante útil. Ah! E deixe-me alertá-lo, é um sistema simples que não está 100% como eu desejava, portanto, quando tiver tempo estarei atualizando e deixando com mínimo de incoerência possível no funcionamento dele. POR FAVOR, faça o trabalho de ler as configurações do script, está tudo organizadinho para que você configure lá e deixe da maneira mais prática possível. Acredito que isso é tudo, abraços, \o. Download dos arquivos zipados: Arquivos - Quest Baú SAO - Lordzetros.zip Scan do arquivo: https://www.virustotal.com/pt/file/10e6bf2be0ccb33838a75198e5f822c1c8888f4c8652dcfc5235f87260a7582a/analysis/1540133843/
  22. Bom, uns tempo atras ai eu tava fazendo um OT Hunger games e tal e fiz varios sisteminhas, para o OT e um deles era uma faca que cortava peixe, galinha e mato kkkkk que quero o que eu precisava... vou postar aqui porque vai que ajuda alguém no futuro, É isso. GIF Código actions/script/faca.lua
  23. Basicamente são itens do tibia que diz "spider eggs" e você clica e nasce o bixo ou um bat do tronco etc... <action itemid="7537" script="other/spideregg.lua" /> <action itemid="5677" script="other/tortoisegg.lua" /> <action itemid="4189" script="other/bategg.lua" />
  24. Tópico que tirei as fotos: Clique aqui Vim colaborar com o Tk, estava meio sumido... está sempre usando o Tk para tirar minha duvida e achei a resposta para ela em 1 topico que antigo e incompleto pois não terminou Script... Resolvi fazer o script e da suport para quem quiser a Quest. Segue abaixo as fotos , são do topico antigo que peguei use ela como base e fiz o script... Vamos começar com a Tag <action itemid="6524" event="script" value="Quest_skeleton.lua"/> Crie o arquivo Quest_skeleton.lua na pasta Actions e ponha a Tag no action.XML , e action na caveira 20021 Skeleton na lava parte 2 , lembrando de por o actionId = 20020 na lava LavaId = 598 que vai por o skeleton. TAg <action itemid="2843" event="script" value="skeleton_lava.lua"/>
  25. Venho trazer a vocês essa adaptação que eu fiz pra minha datapack. Estava configurando novas door ids e pesquisei alguns tópicos procurando por scripts específicos, e não encontrei. Além disso, notei que muitas pessoas tiveram problemas para adicionar novas portas utilizando o script comum doors ou outros; ou não foram respondidas em vários tópicos. CONFIGURAR NOVAS DOOR IDS! Esse código é para novas portas especiais, duplicadas, de eventos ou quests.. Demonstração: Instalação: Utilizarei os ids: Horizontal: Fechada: 12149 / Aberta: 12151 Vertical: Fechada: 12158 / Aberta: 12160 ------- • ------- PARTE 1 --- • --- • Abra data/itens/itens.xml e altere os dois ids das portas que você quer editar, assim como eu fiz: <item id="12149" article="a" name="closed door"> <attribute key="type" value="door" /> <attribute key="blockprojectile" value="1" /> </item> <item id="12151" article="an" name="open door"> <attribute key="type" value="door" /> </item> <item id="12158" article="a" name="closed door"> <attribute key="type" value="door" /> <attribute key="blockprojectile" value="1" /> </item> <item id="12160" article="an" name="open door"> <attribute key="type" value="door" /> </item> • Em data/movements/scripts crie uma pasta doors - Nessa pasta você poderá adicionar outros ids de portas futuramente e manter organizado. - Dentro de doors, crie dois arquivos: closingdoorH e closingdoorV (.lua) e cole o mesmo código abaixo nos dois: - Se seus ids forem diferentes presta atenção nessa parte, na antepenúltima linha dos dois scripts: --> | doTransformItem(item.uid, item.itemid - 2) | <-- • O que essa linha faz: - Se a minha porta ABERTA é ID12151, ao tirar o pé pra fora dela essa linha vai fazer a porta se transformar em 2 ids anteriores, nesse caso a porta FECHADA ID 12149. (12151 - 12149 = 2) - Então por exemplo, se a sua porta aberta for 12180 e a fechada 12150, é assim que tem que ser: --> | doTransformItem(item.uid, item.itemid - 30) | <-- Código: function onStepOut(cid, item, position, fromPosition) if(getTileInfo(position).creatures > 0) then return true end local newPosition = {x = position.x, y = position.y, z = position.z} if(isInArray(verticalOpenDoors, item.itemid)) then newPosition.x = newPosition.x + 1 else newPosition.y = newPosition.y + 1 end doRelocate(position, newPosition) local tmpPos = position tmpPos.stackpos = -1 local i, tmpItem, tileCount = 1, {uid = 1}, getTileThingByPos(tmpPos) while(tmpItem.uid ~= 0 and i < tileCount) do tmpPos.stackpos = i tmpItem = getTileThingByPos(tmpPos) if(tmpItem.uid ~= item.uid and tmpItem.uid ~= 0 and not isMoveable(tmpItem.uid)) then doRemoveItem(tmpItem.uid) else i = i + 1 end end doTransformItem(item.uid, item.itemid - 2) return true end Se preferir, use a versão configurável pra não se perder nas linhas: Em data/movements/movements.xml <movevent type="StepOut" itemid="12151" event="script" value="doors/closingdoorh.lua"/> <movevent type="StepOut" itemid="12160" event="script" value="doors/closingdoorv.lua"/> ------- • ------- PARTE 2 --- • --- Em data/actions/actions.xml adicionei: <action itemid="12149" event="script" value="doors/door01.lua"/> <action itemid="12158" event="script" value="doors/door02.lua"/> • Em data/actions/scripts crie uma pasta doors - Nessa pasta você poderá adicionar outros ids de portas futuramente e manter organizado. - Dentro de doors, crie dois arquivos: door01 e door02. - No meu caso, como as duas portas tem a mesma diferença de IDS o script fica o mesmo, então vou colar apenas 1 e você configura como quiser. door01.lua/door02.lua function onUse(cid, fromPos, toPos, itemEx) local config = { did = 2, -- Diferença de IDS entre a portas fechada/aberta level = 100, -- level necessario eff = 14, -- efeito ao abrir a porta txt = MESSAGE_EVENT_ADVANCE, -- txt = tipo e cor da mensagem. -- -- ... -- Exemplo: txt = MESSAGE_EVENT_ADVANCE, -- } -- -- MESSAGE_STATUS_CONSOLE_RED -> Texto em vermelho no default chat. -- MESSAGE_STATUS_CONSOLE_ORANGE -> Texto em laranja no default chat. -- MESSAGE_STATUS_CONSOLE_BLUE -> Texto em azul no default chat. -- MESSAGE_EVENT_ADVANCE -> Texto em branco na tela. -- MESSAGE_STATUS_WARNING -> Texto em vermelho na tela. -- MESSAGE_INFO_DESCR -> Texto em verde na tela. -- MESSAGE_EVENT_DEFAULT -> Texto em branco no server log. } local levelcheck = getPlayerLevel(cid) if levelcheck >= config.level then doTeleportThing(cid, toPos) doSendMagicEffect(getCreaturePosition(cid), (config.eff)) doTransformItem(itemEx.uid, itemEx.itemid + config.did) else doPlayerSendTextMessage(cid, config.txt, "Voce precisa ter level " ..config.level.." para entrar aqui") end end Informações no script.

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!

Tibia King Recomenda

DokeHost - Soluções em Hospedagem

VPS Windows
VPS Linux
Servidor VPS
×
×
  • Create New...