Ir para conteúdo
Close

REFORMULAMOS A SEÇÃO DE CLASSIFICADOS! - Crie grátis os seus anúncios de procura e oferta de serviços e produtos relacionados ao OTServ! - Acesse através do nosso menu ou clique aqui e confira já!

Pesquisar na Comunidade

Mostrando resultados para as tags ''Sistema''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • Comunidade
    • Regras
    • Portal
    • Recursos
    • Comércio
    • Clubes
  • OTServers
    • Discussão
    • Suporte
    • Tutorial
    • Download
    • Desenvolvimento de Códigos
    • Concursos e Eventos
    • Formação de Equipe
    • Anuncie seu Servidor
  • Tibia Bots
    • Discussão
  • League of Legends's Geral
  • League of Legends's Suporte
  • Jogos Gerais's Geral
  • Nto New Season's Tópicos
  • Fakes's Fakes
  • Tibia Geral's Geral
  • Tibia Geral's Notícias
  • Tibia Geral's Media
  • Tibia Geral's Life Thread
  • Gráficos's Geral
  • Gráficos's Tutoriais
  • Gráficos's Recursos
  • Gráficos's Aprendizagem & Recursos
  • Gráficos's Galeria
  • Gráficos's Duelos & Batalhas
  • Gráficos's Suporte
  • Desenvolvimento e Programação's Geral
  • Desenvolvimento e Programação's Tutoriais
  • Desenvolvimento e Programação's Trabalhos
  • Desenvolvimento e Programação's Suporte
  • Computação's Geral
  • Computação's Dicas e Tutoriais
  • Computação's Suporte
  • Roleplaying's Roleplaying
  • Playground's Playground (Off-topic)
  • Divulgações's Divulgações

Calendários

  • Calendário Oficial
  • Calendário de OTServs
  • Calendários Diversos

Product Groups

  • Anúncios no Topo
  • Anúncios nas Assinaturas
  • Anúncios nos Tópicos
  • Outros Anúncios

Categorias

  • Seção de Vendas
    • Vendas de Scripts
    • Vendas de Códigos
    • Vendas de Mapas
    • Vendas de Websites
    • Vendas de Design/Sprites
    • Vendas de Bots
  • Procura-se Jobs
  • Procura-se Freelancers
  • Formação de Equipe

Encontrar resultados em...

Encontrar resultados que...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Localização


Meu personagem


OTServ favorito


Bot preferido


Interesses

Encontrado 109 registros

  1. galakus

    Scripting particle aura

    olá, presciso muuito da ajuda de vcs, estou procurando por um system de Particle aura, minha base e DXP nao axo nada a respeito, sera que alguem poderia me dar uma ajuda? sei que 50% ja esta no client, mas gostaria de saber como ativa-la
  2. TFS 1.3 - TESTADO EM VERSÃO 10.98 * Introdução * Bom, estive navegando no Fórum e vi que o usuário @Cleiton Felipi pediu um script que ao player entrasse no teleport de um X monstro, um Demon por exemplo, listasse qual hunt o jogador queria entrar. Achei interessante, e resolvi desenvolver e postar no TK, já que não tinha ainda, :). * Sobre o sistema * Você utiliza diversas hunts com vários tps criados no mapa no seu servidor do mesmo monstro? Bom, este script será muito útil para você! Pois ele permitirá que você habilite ao jogador em qual hunt ele quer caçar, por exemplo, se tiver Demon 01, Demon 02, Demon 03, Demon X, basta apenas você criar um tp indicando o monstro e que uma janela irá aparecer com a lista de opções de hunts, prático, né? Segue imagens de demonstração: OBS¹.: Você pode colocar TODOS OS MONSTROS neste script, contando que tenha o actionID que ficará no teleporte, não é de uma quantidade limitada, em outras palavras, você pode adicionar as hunts de Demon, Frost Dragon, Dragon, ..., tudo aqui, apenas mudando o actionID (tudo configurável, não se preocupe). * Instalação * Em data/movements/scripts/ crie um arquivo chamado mov_janela_hunts.lua e adicione dentro: --[[ Script - Lordzetros Fórum Tibia King ]] local config = { titulo = "BEM VINDO(A) A JANELA DE HUNTS!", -- Título da Janela mensagem = "Selecione qual hunt voce deseja ir:", -- Mensagem abaixo do título da janela } CONFIG_TPS_JANELA = { [19090] = { -- ID do action que ficará no portal da hunt {nome = "Demon 01", pos = {x = 98, y = 139, z = 7}}, -- Segue padrão, nome da cave e posição que o player será teleportado {nome = "Demon 02", pos = {x = 93, y = 144, z = 7}}, {nome = "Demon 03", pos = {x = 91, y = 140, z = 7}}, {nome = "Demon 04", pos = {x = 94, y = 138, z = 7}}, {nome = "Demon 05", pos = {x = 95, y = 136, z = 7}}, }, [19091] = { {nome = "Frost 01", pos = {x = 98, y = 140, z = 7}}, {nome = "Frost 02", pos = {x = 93, y = 145, z = 7}}, {nome = "Frost 03", pos = {x = 91, y = 141, z = 7}}, {nome = "Frost 04", pos = {x = 94, y = 139, z = 7}}, {nome = "Frost 05", pos = {x = 95, y = 137, z = 7}}, }, } local function getActions(tabela) t = {} for c, v in pairs(tabela) do table.insert(t, c) end return t end function onStepIn(creature, item, pos, fromPosition) local t_actions = getActions(CONFIG_TPS_JANELA) if (isInArray(t_actions, item:getActionId()) and creature:isPlayer()) then local i_action = item:getActionId() creature:teleportTo(fromPosition, true) creature:registerEvent("janela hunts") local janela = ModalWindow(1000, config.titulo, config.mensagem) for i, v in ipairs(CONFIG_TPS_JANELA[i_action]) do janela:addChoice(i, v.nome) end janela:addButton(100, "Confirmar") janela:addButton(101, "Fechar") janela:setDefaultEnterButton(100) janela:setDefaultEscapeButton(101) JANELA_TP_ACTION = i_action janela:sendToPlayer(creature) end return true end Em data/movements/movements.xml adicione o seguinte código abaixo de um semelhante: <movevent event="StepIn" itemid="5023" script="mov_janela_hunts.lua" /> Agora em data/creaturescripts/scripts/ crie um arquivo chamado creature_janela_hunts.lua e adicione dentro: function onModalWindow(player, modalWindowId, buttonId, choiceId) player:unregisterEvent("janela hunts") if (modalWindowId == 1000) then if (buttonId == 100) then local tele_pos = CONFIG_TPS_JANELA[JANELA_TP_ACTION][choiceId].pos player:teleportTo(tele_pos) local pos_t = Position(tele_pos) pos_t:sendMagicEffect(CONST_ME_MAGIC_BLUE) end end return true end Em data/creaturescripts/creaturescripts.xml adicione o seguinte código abaixo de um semelhante: <event type="ModalWindow" name="janela hunts" script="creature_janela_hunts.lua"/> * Configuração * Bom, apesar de que não seja difícil de configurar, é necessário uma explicação, vamos lá... 1 - [19090] = { -- ID do action que ficará no portal da hunt {nome = "Demon 01", pos = {x = 98, y = 139, z = 7}}, -- Segue padrão, nome da cave e posição que o player será teleportado {nome = "Demon 02", pos = {x = 93, y = 144, z = 7}}, {nome = "Demon 03", pos = {x = 91, y = 140, z = 7}}, {nome = "Demon 04", pos = {x = 94, y = 138, z = 7}}, {nome = "Demon 05", pos = {x = 95, y = 136, z = 7}}, }, Em [19090] este número de dentro é o actionID que ficará no portal. Com ele será identificado de qual monstro se trata, bastando apenas configurar este número e o nome das opções de monstros que você quer aparecendo na janela, em seguida, a posição na qual o jogador será teleportado, seguindo a ordem. Segue imagem de como deve ficar o seu portal: OBS²: VOCÊ EDITA O ACTIONID NO SEU EDITOR DE MAPA COLOCANDO NO ID DO ITEM DE TELEPORTE. OBS³: PARA ADICIONAR NOVAS HUNTS NO SCRIPT, BASTA SEGUIR O PADRÃO QUE ESTÁ NO CÓDIGO, DO 19090 PARA O 19091. 2 - (por fim) Em data/movements/movements.xml <movevent event="StepIn" itemid="5023" script="mov_janela_hunts.lua" /> itemID = Id do item que o player andará para abrir a janela de hunt Está como 5023 por conta que o magic forcefield é 5023, no qual utilizei para teste, aconselho você deixar da mesma forma (caso seja o mesmo id no seu servidor), ou mude, mas cuidado para não cometer algum erro. Enfim, algo simples, porém não encontrei no TK. Abraços.
  3. Vodkart

    Sistema [8.6] Labia System

    Descrição do Arquivo *Sobre o Sistema* Labia System é um sistema que proporciona ao jogador a capacidade de aprimorar sua habilidade de venda, aumentando assim sua Labia Skill e obtendo maiores lucros em futuras vendas de itens. O Skill de Labia, pode ser upado enquanto Free ou Premmy Account em qualquer level que você queira! Basta vender itens no NPC Soya Master. Lembrando que sendo free, sua lábia pode ser upada apenas até skill 90. Já sendo premmium até a lábia 120. Se o player for premmy account, de repente ficar free... sua lábia cai para 90, e todos os itens serão vendidos com preços avaliados dentro dessa lábia! Quanto mais caro for, o item vendido, maior será a porcentagem de lábia upada. *Exclusividade* O Sistema também conta com uma configuração exclusiva, tendo a possibilidade de jogadores Premmy account possam upar mais rapído a sua Skill de Labia! Sem falar no comando inovador: !labia info -- Ensinando ao jogador como usar o sistema !labia level -- Mostrando ao jogador quanto de skill Try falta para o próximo level!! *Benefícios da Lábia* Quanto maior for sua Labia Skill, maior será o valor pago pelas NPC Soya Master em troca do seu item ! Lembrando que, este é um benefício apenas, para premiuns!, Desta maneira, jogadores premiuns com labia skill alta, conseguem maiores lucros ao vender seus itens! O valor do item varia de acordo com a Labia upada! Quanto mais skill, mais lucro na venda! A maior Labia alcançada é você que decide nas suas configurações! por exemplo no RPG Brasil a é Skill 120. *exemplo da fórmula para cálculos do valor do item de acordo com uma Lábia desejada* P = PI + PI * 0,025 * (L / 2) Onde: P ~ Preço que o item será vendido na lábia L. PI ~ Preço Inicial do item, preço do item para um lábia 0. L ~ Labia em que o item será vendido! Vale lembrar que se L for um nº ímpar, deve-se reduzir uma unidade deste número, ou seja, 13 vira 12, 27 vira 26, 91 vira 90, nesse esquema, apenas se L for í­mpar! Exemplo: Preço de uma Golden Legs na lábia 95: P = PI + PI * 0,025 * (L / 2) Como L é í­mpar (95), reduzimos uma unidade, 95 vira 94: P = 48000 + 48000 * 0,025 * (94 / 2) P = 48000 + 48000 * 0,025 * 47 P = 48000 + 56400 P = 104400 GP's ou 104,4 k Sistema Labia.rar
  4. Pro Jota

    Sistema Erro evento zumb

    [Error - GlobalEvent Interface] In a timer event called from: data/globalevents/scripts/events/zombie.lua:onTime Description: data/globalevents/scripts/events/zombie.lua:32: attempt to call global 'isWalkable' (a nil value) stack traceback: data/globalevents/scripts/events/zombie.lua:32: in function <data/globalevents/scripts/events/zombie.lua:27> Meu script local c = { teleportPosition = {x = 141, y = 54, z = 7, stackpos = 1}, -- Where the teleport will be created teleportToPosition = {x = 1699, y = 1683, z = 7}, -- Where the teleport will take you fromPosition = {x = 1667, y = 1654, z = 7}, -- top left cornor of the playground toPosition = {x = 1737, y = 1721, z = 7}, -- bottom right cornor of the playground availablePos = {}, } function onTime () doItemSetAttribute(doCreateTeleport(1387, c.teleportToPosition, c.teleportPosition), "aid", 1742) doBroadcastMessage("Zombie event starting in 3 minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING) setGlobalStorageValue(3, 0) addEvent(startEvent, 3 * 60 * 1000) return true end function startEvent() doRemoveItem(getTileItemById(c.teleportPosition, 1387).uid, 1) if getGlobalStorageValue(3) > 0 then addEvent(spawnZombie, 10 * 1000) doBroadcastMessage("Good luck in the zombie event people! The teleport has closed!", MESSAGE_STATUS_WARNING) else doBroadcastMessage('Zombie Event hasn\'t started beacuse there were not enough players.') end end function spawnZombie() if getGlobalStorageValue(3) > 0 then if #c.availablePos == 0 then for xin = c.fromPosition.x, c.toPosition.x do for yin = c.fromPosition.y, c.toPosition.y do if isWalkable({x = xin, y = yin, z = c.fromPosition.z}, true, false, false) then table.insert(c.availablePos, #c.availablePos + 1, {x = xin, y = yin, z = c.fromPosition.z}) -- Note que não é mais de 1 andar end end end end pos = c.availablePos[math.random(1, #c.availablePos)] doCreateMonster("Event Zombie", pos) doSendMagicEffect(pos, CONST_ME_MORTAREA) addEvent(spawnZombie, 10 * 1000) end end
  5. Pra quem conhece o PokeMiw ou Pokexgames, ja sabe que lá se pode soltar um lendario ajudante ( Queria esse system ), que voce clica em um card ( Ou Algo do tipo ) e sai um pokémon que target as coisas só! E também soltam skills sozinhos, lembro que ja teve algo assim, mais foi removido! Obrigado! +++ REP!
  6. World Of Shinobi Latin America. Otx 2,9, 10,35 Olá Amigos do TibiaKing especialmente Tibia Creator and FanTibia Hoje eu venho para pedir um script baseado em um sistema semelhante ao sistema de guerra por guild mas isso tem vários requisitos como: Guild By Storage atribuído por um Npc, eu preciso 7 Guild seria 7 storages diferentes, em Name of Clan Monstro que não ataca o armazenamento daquela guilda, por exemplo que ao passar não ataca aquele jogador mas ao perseguidor Proteção do membro da guilda Acesso secreto apenas para esse armazenamento, você só pode ver Tarefa que só de um Npc para aqueles Storage mas ninguém Área onde somente aqueles desse armazenamento podem Isso é tudo que eu espero que você possa me ajudar com isso, vou ser muito atencioso, obrigado antecipadamente Site Facebook : WoSLA
  7. INFORMAÇÕES: TFS : 0.4 Olá galera, venho aqui na esperança de encontrar alguém que possa desenvolver esse sistema de torneio um pouco complexo pra min, creio que irá ajudar a muitos outros também, irei explicar detalhe por detalhe: LEVEL PARA ENTRAR NO TORNEIO : O torneio será dividido em leveis, tais como: 100 ao 199, 200 ao 399, 400 ao 599, 600 ao 800. Exemplos: (Torneio 1x1 de level 100 ao 199 irá começar 17:00) (Torneio 1x1 de level 200 ao 399 irá começar 17:30) (Torneio 1x1 de level 400 ao 599 irá começar 18:00) (Torneio 1x1 de level 600 ao 801 irá começar 18:30) Mínimo de participantes: 10 Máximo de participantes: 50 COMANDOS : O torneio poderá ser aberto com o comando : /torneio open Fechado com o comando: /torneio close. Para o player se registrar ele devera falar !torneio AUTOMÁTICO : Ele será automático abrindo, no dia e horário programado SALA DE ESPERA : Vai ter uma sala de espera onde os player iram esperar. INFORMAÇÕES : Ao torneio ser aberto os jogadores poderão participar dizendo o comando !torneio (precisam estar em área pz) ou cancelar a participação dizendo !torneio leave. Quando o jogador participar do evento após dizer o comando, o player permanecerá parado, aguardando o início do evento que terá duração de 5 minutos de espera. Após passar os 5 minutos de cadastramento o evento é fechado e os jogadores serão teleportados para uma sala de espera. Assim, iniciando o sorteio, pegando 2 jogadores aleatórios dentro da sala e colocado em uma arena de combate. Após um dos dois morrer, é posto outra pessoa de dentro da sala de espera pra lutar com o vencedor, e assim vai... Ao se manter o último participante na arena, ou seja, o ganhador, ele será o vencedor. ENTREGA DE PREMIO : 1 º LUGAR 2 º LUGAR 3 º LUGAR e mais os 2 últimos que morreram receberão uma recompensa. Recompensa de primeiro, segundo e terceiro lugar. Com tudo isso o ganhador é teleportado pro templo e a seguinte broadcast é ativada: [Torneio LvL 100 ao 199]: [Primeiro Lugar/Recompensa] - Fulano, Nome Do Premio ||| [segundo Lugar/Recompensa] - Ciclano, Nome Do Premio ||| [Terceiro Lugar/Recompensa] - Beltrano, Nome Do Premio. ESPERO A COLABORAÇÃO DE VOCÊS TIBIAKING-ANOS, para me ajudar nesse projeto estarei sempre ATUALIZANDO o tópico, caso eu ache scripts que sejam compatíveis para essa ideia. por favor espero a ajuda de vocês. e sei que juntos vamos conseguir..
  8. Functions.lua Poderá ser usado em scripts simples para alterar o townid
  9. é igual poke lute, são vários efeitos, é tipo uma aura mas não é vendida por npc, por exemplo, se o poke for +100 ia ter um tal efeito nele, se fosse +500 ia sair esse efeito e mais um sabe acho q só o lute tem isso dá pra colocar no held tmbm, tmbm serve alguem pode me ajudar?
  10. Emooooo

    NPC Sistema de lábia

    iai pessoal , gostaria de saber se existe como criar um "sistema de lábia" . tipo quanto mas o player vende itens aos npc , com mas valor o mesmo item vai ficando , para ser vendido para o npc . o sistema e parecido com o que existe no rpg brasil . vlw e obrigado.
  11. adicione a source ami server dbko mas quando eu uso algum spell, command, etc o cliente me debuga mas quando eu uso o velho tfs se ele funcionar corretamente SOURCE QUE EU USEU
  12. Olá, passei um tempo procurando este script até que um amigo do TK disponibilizou (credito no fim do post) Edit1: O evento funciona assim, o evento começa as 14:00:00 para inscrições realizando as inscrições você é levado para sala de espera (coloque no-logout e protection) onde você tera de esperar 5 minutos passado os 5 minutos todos na sala de espera serão teleportados para uma arena que você pode fazer facilmente e configurar conforme explicado na script --> apenas lembre de colocar o no-logout e pvp tool na arena. (As 13:59:00 vai aparecer um broadcast dizendo que o Npc PvP irá aparecer em 1 minutos que você terá então 5 minutos para se inscrever com o custo de 10k (configurável na script do actions) a área onde o npc nasce é configurável, o npc sumirá após 6 minutos (1 minuto depois do inicio da matança)-) O ultimo vivo na arena terá de clicar na alavanca e será teleportado para o templo (coordenadas configuráveis) ganhando o devido premio do evento (configuravel na script do actions). Vamos lá: data/lib adicione um arquivo .lua e renomeie para Torneio.lua e coloque dentro vai em Globalevents adicione Torneio.lua e dentro dele coloque (se sua versão é em millisegundos então mude para) Adicione a tag em globalevents.xml se seu servidor for em millisegundos: vai em Actions adicione Torneio.lua e dentro: Atenção: Voce faz uma area do Torneio no Map editor e Coloca PVP-Zone e no-logout no Mapa editor e coloca uma Alavanca com a uniqueid "18279" e actionid "18279" antes verifique se não tem a action e unique id no seu servidor com o mesmo numero (18279) [ a alavanca serve para quando o ultimo player vivo no evento volte para o templo e receba os premios] Em Actions.xml adcione a tag Agora o NPC TORNEIO em data/NPC adicione um xml, renomeie para o nome torneio.xml (pode mudar mais tarde, se não souber oque esta fazendo não mexa) em NPC/SCRIPTS/torneio.lua LEIA: --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- aqui um script que achei no TK que você pode usar no seu evento, ele faz o npc aparecer 1 minuto depois do horario marcado na posição que você quiser, com um broadcast dizendo que ele esta chegando. (é bom para dizer que o evento esta começando) vá em globalevents.xml e adicione a tag Dica: Coloque 1 minuto antes do inicio do evento (configuravel no lib/torneio.lua) no meu caso seria as 12:00:00 hrs (meio dia) se o seu servidor não for millisegundos use va em globalevents/scripts e crie um arquivo .lua com o nome de npcpvp se o seu servidor não for em millisegundos use assim: Creditos: @J.L por disponibilizar os script do Evento PvP. @Stigal por disponibilizar o script do Npc que aparece sozinho na hr marcada. @King Laker por editar e mesclar os scripts.
  13. Olá, gostaria de um sistema igual a este poderiam me ajudar? ja procurei em todos os lugares (detalhes do sistema na descrição do video, o video não é meu)
  14. pepsimano

    Sistema Mana Rune System

    Hi, com esse simple system vc vai pode ter tudas os mana runes pra seus vocs em so um file, easy pra configure O script foi feito pra servers 1.X peço desculpas, meu pt n e mt bom 😁 data/lib/manaRuneSys.lua data/actions/scripts/manaRune.lua Como configurar? index pra sorcs/druid e 1 index para paladins = 2 index pra kinas e = 3 [1] = --sorc/druids << tem index 1 { runeId = 2306, --item id do rune health = {min = 0, max = 0}, --min/max hp pra fazer o random value mana = {min = 200, max = 310}, --min/max mana pra fazer o random value effect = CONST_ME_YELLOWENERGY, --effect }, lembra adicionar os ids que precisar no actions.xml <action itemid="2306" script="manaRune.lua" /> <action itemid="2307" script="manaRune.lua" /> <action itemid="2309" script="manaRune.lua" /> E tudo, se tiver duvida so precisa escrever 😄
  15. boa grl venho pedir a voces o castle war tfs 1.x não achei no forum e entao venho aqui pedir a voces esse sistema. obg rep+
  16. Ola gente tudo bom? Eu estava pensando em algo para se fazer em relação a sistemas, e não achei nada de interessante... Até que encontrei 4 Sprite's de umas Wand's, cujo autor eu não tenho conhecimento ! Dai eu pensei... Porque não fazer uma Wand que possui diversos elementos? Pois então cá estou eu kk Explicando como funcionará o sistema: dasdsa.mp4 OBS: Desculpe por essa msg no meio do vídeo, é que só consegui gravar assim... Sem mais delongas vamos ao sistema: data/actions/scripts/wand_elements.lua local config = { id1 = 32050, id2 = 32049, id3 = 32048, id4 = 32047, } function onUse(player, item, fromPosition, itemEx, toPosition, isHotkey) player:registerEvent("Wand_Elements") local title = "Select your element!" local message = "Here you can select the element of your wand, however, you must wait 3 seconds, between one exchange and another." local window = ModalWindow(1000, title, message) window:addButton(100, "Confirm") window:addButton(101, "Cancel") window:addChoice(1, "Wand Energy") window:addChoice(2, "Wand Ice") window:addChoice(3, "Wand Earth") window:addChoice(4, "Wand Fire") window:setDefaultEnterButton(100) window:setDefaultEscapeButton(101) local Item = player:getSlotItem(CONST_SLOT_LEFT) if Item.itemid == config.id1 or Item.itemid == config.id2 or Item.itemid == config.id3 or Item.itemid == config.id4 then window:sendToPlayer(player) end return true end Adicione a tag em Actions: <!-- Wand Elements --> <action fromid="32047" toid="32050" script="wand_elements.lua" /> data/creaturescripts/scripts/wand_elements.lua function onModalWindow(player, modalWindowId, buttonId, choiceId) player:unregisterEvent("Wand_Elements") local config = { [1] = {32047,'Energy Wand'}, -- {ID do item, 'nome do item'} [2] = {32048,'Ice Wand'}, [3] = {32049,'Earth Wand'}, [4] = {32050,'Fire Wand'}, } if modalWindowId == 1000 then if buttonId == 100 then player:removeItem(player:getSlotItem(CONST_SLOT_LEFT).itemid, 1) player:addItem(config[choiceId][1], 1) player:sendTextMessage(MESSAGE_INFO_DESCR, "You have changed the element of your wand to: {"..config[choiceId][2].."}.") end end end Adicione a tag em Creaturescripts: <!-- Wand Elements --> <event type="modalwindow" name="Wand_Elements" script="wand_elements.lua"/> Pronto, feito isso o sistema está utilizável já: Download das Sprites utilizadas: Explicando o que você deve modificar: Em actions: local config = { id1 = 32050, -- ID DO ITEM id2 = 32049, id3 = 32048, id4 = 32047, } Tag do action <action fromid="32047" toid="32050" script="wand_elements.lua" /> Em creaturescripts: local config = { [1] = {32047,'Energy Wand'}, [2] = {32048,'Ice Wand'}, [3] = {32049,'Earth Wand'}, [4] = {32050,'Fire Wand'}, } { ID do item, 'nome do item' } *Creditos: EUZINHOO E o cara que crio as SPR
  17. Olá pessoal, vi que muitos estavam tentando resolver o problema de um "CityWar Anti-Entrosa".de tal Empresa... "O script só roda uma vez a war e depois ele TRAVA, ." Estava olhando o script aonde ocorria o problema e consegui resolver fiz vários testes e está rodando 100% sem erros! No arquivo tem o tutorial que ensina a instalar, se ajudei deixa um rep+ File:Link Scan: Link -- EDIT--- Summon que matava os player na war fazia cair o servidor, agora está 100% estável o script. Substituir o arquivo diretório talkactions/lib/war.lua @Way20 Créditos pela ajuda.
  18. Olá galerinha, gostaria de pedir ajuda com um código do meu servidor de poketibia. Eu não consigo fazer funcionar a máquina de helds e o autoloot juntos, ou um funciona ou o outro, o cod esta meio que no msm script. Servidor\data\creaturescripts\scripts\opcodes Esse script funciona o autoloot 100%, mas o resto não funciona local op_crea = { OPCODE_SKILL_BAR = opcodes.OPCODE_SKILL_BAR, OPCODE_POKEMON_HEALTH = opcodes.OPCODE_POKEMON_HEALTH, OPCODE_BATTLE_POKEMON = opcodes.OPCODE_BATTLE_POKEMON, OPCODE_FIGHT_MODE = opcodes.OPCODE_FIGHT_MODE, OPCODE_WILD_POKEMON_STATS = opcodes.OPCODE_WILD_POKEMON_STATS, OPCODE_REQUEST_DUEL = opcodes.OPCODE_REQUEST_DUEL, OPCODE_ACCEPT_DUEL = opcodes.OPCODE_ACCEPT_DUEL, OPCODE_YOU_ARE_DEAD = opcodes.OPCODE_YOU_ARE_DEAD, OPCODE_DITTO_MEMORY = opcodes.OPCODE_DITTO_MEMORY, } function onExtendedOpcode(cid, opcode, buffer) if opcode == op_crea.OPCODE_SKILL_BAR then if buffer == "refresh" then doOTCSendPlayerSkills(cid) end elseif opcode == op_crea.OPCODE_POKEMON_HEALTH then if buffer == "refresh" then doOTCSendPokemonHealth(cid) end elseif opcode == op_crea.OPCODE_BATTLE_POKEMON then if buffer == "refresh" then if #getCreatureSummons(cid) >= 1 then doSendPlayerExtendedOpcode(cid, op_crea.OPCODE_BATTLE_POKEMON, tostring(getCreatureSummons(cid)[1])) end end elseif opcode == op_crea.OPCODE_FIGHT_MODE then setPlayerStorageValue(cid, storages.fightMode, tonumber(buffer)) elseif opcode == op_crea.OPCODE_WILD_POKEMON_STATS then doSendPlayerExtendedOpcode(cid, op_crea.OPCODE_WILD_POKEMON_STATS, pokeStatus.getVity(tonumber(buffer)).."|"..pokeStatus.getAtk(tonumber(buffer)).."|"..pokeStatus.getSpAtk(tonumber(buffer)).."|"..pokeStatus.getDef(tonumber(buffer)).."|"..pokeStatus.getSpDef(tonumber(buffer)).."|"..pokeStatus.getSpeed(tonumber(buffer))) --//Duel elseif opcode == opcodes.OPCODE_REQUEST_DUEL then --legenda: cid = player, sid = player convidado local cut = string.explode(buffer, "/") local pokeballsCount, sid = tonumber(cut[1]), getCreatureByName(cut[2]) if isCreature(sid) then doIniteDuel(cid, sid, pokeballsCount) end elseif opcode == opcodes.OPCODE_ACCEPT_DUEL then local p2 = getCreatureByName(buffer) if isInvitedDuel(p2, cid) then doPantinNoDuel(cid, p2, getPlayerStorageValue(p2, duelTable.infoBalls), 5) end elseif opcode == opcodes.OPCODE_DITTO_MEMORY then local item = getPlayerSlotItem(cid, 8) if item.uid == 0 then doSendMsg(cid, "Coloque seu shiny ditto no slot correto.") return true end local pokeName = getItemAttribute(item.uid, "poke") if pokeName ~= "Shiny Ditto" then return true end if isInArray({"saveMemory1", "saveMemory2", "saveMemory3"}, buffer) then local copyName = getItemAttribute(item.uid, "copyName") if pokeName == copyName then doSendMsg(cid, "Transforme seu ditto primeiro.") return true end if isPokeInSlots(getItemAttribute(item.uid, "memoryDitto"), doCorrectString(copyName)) then doSendMsg(cid, "Esta copia já está salva em um slot.") return true end if buffer == "saveMemory1" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 1, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) -- getPortraitClientID(doCorrectString(copyName)))) elseif buffer == "saveMemory2" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 2, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) elseif buffer == "saveMemory3" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 3, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) end elseif isInArray({"clearSlot1", "clearSlot2", "clearSlot3"}, buffer) then if buffer == "clearSlot1" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 1, "?")) elseif buffer == "clearSlot2" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 2, "?")) elseif buffer == "clearSlot3" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 3, "?")) end elseif isInArray({"use1", "use2", "use3"}, buffer) then local summons = getCreatureSummons(cid) if #summons < 1 then doSendMsg(cid, "Coloque seu ditto para fora da pokeball.") return true end local pokeToTransform = getSlot(getItemAttribute(item.uid, "memoryDitto"), tonumber(buffer:explode("use")[1])) doCopyPokemon(summons[1], pokeToTransform, true) end local memory = getItemAttribute(item.uid, "memoryDitto") if not memory or memory == nil then doItemSetAttribute(item.uid, "memoryDitto", "?|?|?") memory = getItemAttribute(item.uid, "memoryDitto") end local memoryOne, memoryTwo, memoryTree = memory:explode("|")[1], memory:explode("|")[2], memory:explode("|")[3] local str = memoryOne .. "-".. memoryTwo .."-" .. memoryTree doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_DITTO_MEMORY, str) elseif opcode == opcodes.OPCODE_TV_CAM then -- TVCam --doCreatePrivateChannel(cid) --doInviteToPrivateChannel(cid, playerName) --doRemoveIntoPrivateChannel(cid, playerName) if getGlobalStorageValue(globalsTV) == -1 then -- iniciar sistema setGlobalStorageValue(globalsTV, "") end local action = buffer:explode("/")[1] if action == "create" then createChannel(cid, buffer) elseif action == "close" then closeInClientChannmel(cid) elseif action == "watch" then local playerToWatch = getCreatureByName(buffer:explode("/")[2]) if isCreature(playerToWatch) then if getPlayerStorageValue(playerToWatch, storages.playerTVPass) ~= "" and getPlayerStorageValue(playerToWatch, storages.playerTVPass) ~= "notASSenha" then doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_TV_CAM, "requestPass|" .. getPlayerStorageValue(playerToWatch, storages.playerTVPass) .. "|" .. buffer:explode("/")[2]) else doWatch(cid, playerToWatch) end else doSendMsg(cid, "Este player não está mais gravando.") end elseif action == "watchWithPass" then local playerToWatch = getCreatureByName(buffer:explode("/")[2]) if isCreature(playerToWatch) then doWatch(cid, playerToWatch) else doSendMsg(cid, "Este player não está mais gravando.") end elseif action == "errou" then doSendMsg(cid, "Senha do digitada incorreta.") end elseif opcode == opcodes.OPCODE_PLAYER_SHOW_AUTOLOOT then -- Autoloot if buffer:find("load/") then local itens = getAllItensAutoLoot() doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_PLAYER_SHOW_AUTOLOOT, (isCollectAll(cid) and "yes" or "no") .. "|" .. itens .. "|" .. getAllItensInMyListToClient(cid)) elseif buffer:find("all") then doCollectAll(cid, true) doSendMsg(cid, "AutoLoot: Coletar tudo foi ativado.") elseif buffer:find("no") then doCollectAll(cid, false) doSendMsg(cid, "AutoLoot: Coletar tudo foi desativado.") else doSaveItems(cid, buffer) end elseif opcode == opcodes.OPCODE_PLAYER_SHOW_ONLINE then -- Janela de onlines do ADM doGetPlayersOnToADM(cid) end end function getSlot(strings, slot) local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] local ret, flag = "", false for a, b in pairs(fotos) do if getItemInfo(fotos[a]).clientId == tonumber(slot1) and slot == 1 then ret = doCorrectString(a) flag = true elseif getItemInfo(fotos[a]).clientId == tonumber(slot2) and slot == 2 then ret = doCorrectString(a) flag = true elseif getItemInfo(fotos[a]).clientId == tonumber(slot3) and slot == 3 then ret = doCorrectString(a) flag = true end if flag then break end end return ret end function saveSlot(strings, slot, poke) local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] local finalSlots = (slot == 1 and poke .. "|" or slot1 .. "|") .. (slot == 2 and poke .. "|" or slot2 .. "|") .. (slot == 3 and poke .. "|" or slot3) return finalSlots end function isPokeInSlots(strings, poke) poke = getItemInfo(fotos[poke]).clientId local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] if tonumber(slot1) == poke then return true elseif tonumber(slot2) == poke then return true elseif tonumber(slot3) == poke then return true end return false end E esse outro aqui funciona a máquina de helds, mas não funciona o resto. local op_crea = { OPCODE_SKILL_BAR = opcodes.OPCODE_SKILL_BAR, OPCODE_POKEMON_HEALTH = opcodes.OPCODE_POKEMON_HEALTH, OPCODE_BATTLE_POKEMON = opcodes.OPCODE_BATTLE_POKEMON, OPCODE_FIGHT_MODE = opcodes.OPCODE_FIGHT_MODE, OPCODE_WILD_POKEMON_STATS = opcodes.OPCODE_WILD_POKEMON_STATS, OPCODE_REQUEST_DUEL = opcodes.OPCODE_REQUEST_DUEL, OPCODE_ACCEPT_DUEL = opcodes.OPCODE_ACCEPT_DUEL, OPCODE_YOU_ARE_DEAD = opcodes.OPCODE_YOU_ARE_DEAD, OPCODE_DITTO_MEMORY = opcodes.OPCODE_DITTO_MEMORY, } function onExtendedOpcode(cid, opcode, buffer) if opcode == op_crea.OPCODE_SKILL_BAR then if buffer == "refresh" then doOTCSendPlayerSkills(cid) end elseif opcode == op_crea.OPCODE_POKEMON_HEALTH then if buffer == "refresh" then doOTCSendPokemonHealth(cid) end elseif opcode == op_crea.OPCODE_BATTLE_POKEMON then if buffer == "refresh" then if #getCreatureSummons(cid) >= 1 then doSendPlayerExtendedOpcode(cid, op_crea.OPCODE_BATTLE_POKEMON, tostring(getCreatureSummons(cid)[1])) end end elseif opcode == op_crea.OPCODE_FIGHT_MODE then setPlayerStorageValue(cid, storages.fightMode, tonumber(buffer)) elseif opcode == op_crea.OPCODE_WILD_POKEMON_STATS then doSendPlayerExtendedOpcode(cid, op_crea.OPCODE_WILD_POKEMON_STATS, pokeStatus.getVity(tonumber(buffer)).."|"..pokeStatus.getAtk(tonumber(buffer)).."|"..pokeStatus.getSpAtk(tonumber(buffer)).."|"..pokeStatus.getDef(tonumber(buffer)).."|"..pokeStatus.getSpDef(tonumber(buffer)).."|"..pokeStatus.getSpeed(tonumber(buffer))) --//Duel elseif opcode == opcodes.OPCODE_REQUEST_DUEL then --legenda: cid = player, sid = player convidado local cut = string.explode(buffer, "/") local pokeballsCount, sid = tonumber(cut[1]), getCreatureByName(cut[2]) if isCreature(sid) then doIniteDuel(cid, sid, pokeballsCount) end elseif opcode == opcodes.OPCODE_ACCEPT_DUEL then local p2 = getCreatureByName(buffer) if isInvitedDuel(p2, cid) then doPantinNoDuel(cid, p2, getPlayerStorageValue(p2, duelTable.infoBalls), 5) end elseif opcode == opcodes.OPCODE_DITTO_MEMORY then local item = getPlayerSlotItem(cid, 8) if item.uid == 0 then doSendMsg(cid, "Coloque seu shiny ditto no slot correto.") return true end local pokeName = getItemAttribute(item.uid, "poke") if pokeName ~= "Shiny Ditto" then return true end if isInArray({"saveMemory1", "saveMemory2", "saveMemory3"}, buffer) then local copyName = getItemAttribute(item.uid, "copyName") if pokeName == copyName then doSendMsg(cid, "Transforme seu ditto primeiro.") return true end if not fotos[doCorrectString(copyName)] then return true end if isPokeInSlots(getItemAttribute(item.uid, "memoryDitto"), doCorrectString(copyName)) then doSendMsg(cid, "Esta copia já está salva em um slot.") return true end if buffer == "saveMemory1" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 1, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) -- getPortraitClientID(doCorrectString(copyName)))) elseif buffer == "saveMemory2" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 2, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) elseif buffer == "saveMemory3" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 3, getItemInfo(fotos[doCorrectString(copyName)]).clientId)) end elseif isInArray({"clearSlot1", "clearSlot2", "clearSlot3"}, buffer) then if buffer == "clearSlot1" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 1, "?")) elseif buffer == "clearSlot2" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 2, "?")) elseif buffer == "clearSlot3" then doItemSetAttribute(item.uid, "memoryDitto", saveSlot(getItemAttribute(item.uid, "memoryDitto"), 3, "?")) end elseif isInArray({"use1", "use2", "use3"}, buffer) then local summons = getCreatureSummons(cid) if #summons < 1 then doSendMsg(cid, "Coloque seu ditto para fora da pokeball.") return true end local pokeToTransform = getSlot(getItemAttribute(item.uid, "memoryDitto"), tonumber(buffer:explode("use")[1])) doCopyPokemon(summons[1], pokeToTransform, true) end local memory = getItemAttribute(item.uid, "memoryDitto") if not memory or memory == nil then doItemSetAttribute(item.uid, "memoryDitto", "?|?|?") memory = getItemAttribute(item.uid, "memoryDitto") end local memoryOne, memoryTwo, memoryTree = memory:explode("|")[1], memory:explode("|")[2], memory:explode("|")[3] local str = memoryOne .. "-".. memoryTwo .."-" .. memoryTree doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_DITTO_MEMORY, str) elseif opcode == opcodes.OPCODE_TV_CAM then -- TVCam --doCreatePrivateChannel(cid) --doInviteToPrivateChannel(cid, playerName) --doRemoveIntoPrivateChannel(cid, playerName) if getGlobalStorageValue(globalsTV) == -1 then -- iniciar sistema setGlobalStorageValue(globalsTV, "") end local action = buffer:explode("/")[1] if action == "create" then createChannel(cid, buffer) elseif action == "close" then closeInClientChannmel(cid) elseif action == "watch" then local playerToWatch = getCreatureByName(buffer:explode("/")[2]) if isCreature(playerToWatch) then if getPlayerStorageValue(playerToWatch, storages.playerTVPass) ~= "" and getPlayerStorageValue(playerToWatch, storages.playerTVPass) ~= "notASSenha" then doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_TV_CAM, "requestPass|" .. getPlayerStorageValue(playerToWatch, storages.playerTVPass) .. "|" .. buffer:explode("/")[2]) else doWatch(cid, playerToWatch) end else doSendMsg(cid, "Este player não está mais gravando.") end elseif action == "watchWithPass" then local playerToWatch = getCreatureByName(buffer:explode("/")[2]) if isCreature(playerToWatch) then doWatch(cid, playerToWatch) else doSendMsg(cid, "Este player não está mais gravando.") end elseif action == "errou" then doSendMsg(cid, "Senha do digitada incorreta.") end elseif opcode == opcodes.OPCODE_PLAYER_SHOW_ONLINE then -- Janela de onlines do ADM doGetPlayersOnToADM(cid) elseif opcode == opcodes.OPCODE_PLAYER_SHOW_TRADE_HELD then local op = tonumber(buffer:explode("-")[2]) local posP = getThingPos(cid) local posMachine = {{x = 222, y = 430, z = 7}, {x = 221, y = 430, z = 7}} if not doComparePositions(posMachine[1], posP) and not doComparePositions(posMachine[2], posP) then doSendMsg(cid, "Tienes que estar en frente de la maquina.") return true end if op == 1 then if doPlayerRemoveItem(cid, 15645, 15) then local tier = math.random(1, 2) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 15 Devoted Tokens.") end return true elseif op == 2 then if doPlayerRemoveItem(cid, 15644, 50) then local tier = math.random(1, 3) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 50 Mighty Tokens.") end return true elseif op == 3 then if doPlayerRemoveItem(cid, 15644, 80) then local tier = math.random(2, 4) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 80 Mighty Tokens.") end return true elseif op == 4 then if doPlayerRemoveItem(cid, 15644, 150) then local tier = math.random(4, 6) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 150 Mighty Tokens.") end return true elseif op == 5 then if doPlayerRemoveItem(cid, 15646, 10) then local tier = math.random(3, 3) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 10 Hornored Tokens.") end return true elseif op == 6 then if doPlayerRemoveItem(cid, 15646, 30) then local tier = math.random(3, 5) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 30 Hornored Tokens.") end return true elseif op == 7 then if doPlayerRemoveItem(cid, 15646, 300) then local tier = math.random(5, 7) doPlayerAddRandomHeld(cid, tier) else doSendMsg(cid, "Necesitas de 300 Hornored Tokens.") end return true elseif op == 8 then if doPlayerRemoveItem(cid, 15646, 100) then doPlayerAddItem(cid, 14188, 1) else doSendMsg(cid, "Necesitas de 100 Hornored Tokens.") end return true elseif op == 9 then if doPlayerRemoveItem(cid, 15644, 10) then doPlayerAddItem(cid, 12832, 1) else doSendMsg(cid, "Necesitas de 10 Mighty Tokens.") end return true elseif op == 10 then if doPlayerRemoveItem(cid, 15644, 1) then doPlayerAddItem(cid, 15677, 10) doPlayerAddItem(cid, 15676, 10) doPlayerAddItem(cid, 15678, 10) doPlayerAddItem(cid, 15680, 10) doPlayerAddItem(cid, 15673, 10) doPlayerAddItem(cid, 15674, 10) doPlayerAddItem(cid, 15675, 10) doPlayerAddItem(cid, 15679, 10) doPlayerAddItem(cid, 15681, 10) else doSendMsg(cid, "Necesitas de 1 Mighty Tokens.") end return true elseif op == 11 then if doPlayerRemoveItem(cid, 15644, 10) then doPlayerAddItem(cid, 15130, 1) else doSendMsg(cid, "Necesitas de 10 Mighty Tokens.") end return true elseif op == 12 then if doPlayerRemoveItem(cid, 15644, 120) then doPlayerAddItem(cid, 12227, 1) else doSendMsg(cid, "Necesitas de 120 Mighty Tokens.") end return true elseif op == 13 then if doPlayerRemoveItem(cid, 15644, 50) then setPlayerStorageValue(cid, 99990, 1) else doSendMsg(cid, "Necesitas de 50 Mighty Tokens.") end return true elseif op == 14 then if doPlayerRemoveItem(cid, 15644, 10) then doPlayerAddItem(cid, 11641, 1) else doSendMsg(cid, "Necesitas de 10 Mighty Tokens.") end return true elseif op == 15 then if doPlayerRemoveItem(cid, 15644, 1) then doPlayerAddItem(cid, 6569, 1) else doSendMsg(cid, "Necesitas de 1 Mighty Token.") end return true end end end function getSlot(strings, slot) local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] local ret, flag = "", false for a, b in pairs(fotos) do if getItemInfo(fotos[a]).clientId == tonumber(slot1) and slot == 1 then ret = doCorrectString(a) flag = true elseif getItemInfo(fotos[a]).clientId == tonumber(slot2) and slot == 2 then ret = doCorrectString(a) flag = true elseif getItemInfo(fotos[a]).clientId == tonumber(slot3) and slot == 3 then ret = doCorrectString(a) flag = true end if flag then break end end return ret end function saveSlot(strings, slot, poke) local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] local finalSlots = (slot == 1 and poke .. "|" or slot1 .. "|") .. (slot == 2 and poke .. "|" or slot2 .. "|") .. (slot == 3 and poke .. "|" or slot3) return finalSlots end function isPokeInSlots(strings, poke) if not fotos[poke] then return false end poke = getItemInfo(fotos[poke]).clientId local slot1, slot2, slot3 = strings:explode("|")[1], strings:explode("|")[2], strings:explode("|")[3] if tonumber(slot1) == poke then return true elseif tonumber(slot2) == poke then return true elseif tonumber(slot3) == poke then return true end return false end Tenho certeza que se alguém conseguir resolver isso vai ajudar muitas outras pessoas, o serv eu baixei aqui no Tibia King e era um dos mais baixados tbm.
  19. Apresentação: Olá galera do Tibia King, este é meu primeiro tutorial que desenvolvo após anos apenas sugando da comunidade, chegou a hora de compartilhar um pouco de conhecimento, rsrs... Após ver que muitos usuários tinham interesse em um sistema de Trade de Points in-game resolvi trazer um sistema totalmente completo para vocês. Funcionamento: Player 1 após adquirir os Points, pode iniciar uma negociação com o Player 2 através do comando /tradepoints Player 2, Quantidade. Será aberto uma Janela de Trade com o item referente aos Points. Após ambos aceitarem a negociação será realizado a troca de Points pelo item requisitado. Observações: Necessário ter acesso às Sources de sua Distro. Testado em servidor 8.6 (The Forgotten Server 0.4). Antes que venham falar que possui sistemas parecidos, veja o diferencial (Item não aparece em nenhum inventário, e não é necessário usar/comprar qualquer item). Algumas Imagens: Instalação: Sources > Luascript.cpp Sources > Luascript.cpp Sources > Luascript.h Server > Data > Lib > 050-function Server > Data > Creaturescripts > Scripts >Trade_Orbs.lua Server > Data > Creaturescripts > Creaturescripts.xml Server > Data > Creaturescripts > Scripts > Login.lua Server > Data > Talkactions > Scripts > Points_Trade.lua Server > Data > Talkactions > Talkactions.xml Créditos: Todo o sistema foi feito completamente por mim: Vítor Subhi. The Forgotten Server (Pelas Sources) Vodkart, White Wolf, Natanael Beckman, e a todos os demais membros do TK que não lembro o nome, que contribuíram indiretamente através de seus tutoriais.
  20. Talkactions -- <talkaction words="!antired" event="script" value="antired.lua"/> function onSay(cid, words, param) local storage = 43686 if (param == '') then doSendMagicEffect(getCreaturePosition(cid), 2) return doPlayerSendTextMessage(cid, 25, "Digite !PVP ON ou OFF") end if (param == 'OFF') then doSendMagicEffect(getCreaturePosition(cid), 2) setPlayerStorageValue(cid, storage, 1) return doPlayerSendTextMessage(cid, 25, "Você desabilitou o PVP") end if (param == 'ON') then doSendMagicEffect(getCreaturePosition(cid), 2) setPlayerStorageValue(cid, storage, -1) return doPlayerSendTextMessage(cid, 25, "Você habilitou o PVP") end end CreatureScripts -- XML = <event type="combat" name="PvPOff" event="script" value="PvPOff.lua"/> -- registerCreatureEvent(cid, "PvPOff") local storage = 43686 -- Storage function onCombat(cid, target) if isPlayer(cid) and isPlayer(target) and getCreatureStorage(cid, storage) == 1 then return false end return true end
  21. Eae gente, venho disponibilizar o meu primeiro sistema DUNGEON, testei apenas no tfs 1.2 O sistema é o seguinte o player precisa de gold para puxar a alavanca e o item que da acesso a entrada da dungeon. ele sera teleportado para o mapa da dungeon onde vai ter monstros e bosses da dungeon no caso este script contem o boss do horestis. Essa dungeon seria do horestis mas vocês podem editar! Para ficar 100% preciso da ajuda de vocês. Adicionar um sistema de tempo no script exemplo 30 minutos, o player que ficar la mais de 30 minutos seria teleportado para o templo. Adicionar um sistema onde de 1 ate 4 players possam ir, pois neste sistema é obrigatório ir 4 players. Seque abaixo o script do sistema PARTE 1 Abra actions.xml e coloque isto o id 17367 seria a alavanca para puxar. Na pasta data/actions/scripts crie um arquivo horestishardcore.lua Essa parte é onde configura os monstros EXEMPLO PARTE 2 Abra movements.xml e coloque isto o uniqueid 17362 seria o teleporte que ele passa para ter acesso a dungeon, isto ira tirar o item da entrada da dungeon do player Na pasta data/movements/scripts crie um arquivo entradahorestis.lua 26382 = id do item da entrada. playerPositions = onde os players estão antes de puxar a alavanca newPositions = para onde os players irão após puxar a alavanca horestisPositions = Ultimo boss da dungeon horestisePositions = seria os mini boss (nesta dungeon fiz todos iguais) gravePositions = monstros da dungeon scarabPositions = monstros da dungeon skeletonPositions = monstros da dungeon ghoulPositions = monstros da dungeon mummyPositions = monstros da dungeon Todas as coordenadas são de onde os monstros vão nascer após puxar a alavanca, por isso não adianta eu postar o mapa aqui pois irão ter que mudar todas as coordenadas. Qualquer duvida é só perguntar! Espero que gostem!
  22. Fala galera, pra quem não sabe eu fiz um novo task system pro meu servidor pessoal Empire e por isso decidi publicar a versão antiga dele já que não temos nenhuma intenção de usá-la mais. ele é muito similar a um sistema que eu já havia compartilhado aqui, só que pras versões 0.X. O que é: um npc que te dá pequenas missões de matar monstros, qnd você terminar ele te paga uma recompensa pré definida. O que ele tem de melhor comparado com a versão 0.4: Basicamente ele permite vc definir qualquer hierarquia entre as tasks, permite que tasks deem diversas formas de recompensas (isso era bem engessado no modelo antigo) porém ele não aceita tasks de coletar itens, nem tem dificuldades diferentes com premiações multiplicadas (ao menos não explicitamente). Aqui tá a hierarquia que ele segue atualmente. Ou seja, para fazer task de Tarantula você precisa fazer Rat, depois Spider e por fim Tarantula. O sistema é muito completo e eu vou postá-lo da exata forma que usávamos então prestem bastante atenção nos detalhes. Já aviso de antemão que eu não darei muito suporte aqui e que não irei explicar muita coisa, o sistema funciona e foi usado por uns 2 anos sem nenhum problema com o tfs original. crie um arquivo em data/lib chamado tasklib.lua e coloque isso dentro dele: Aqui temos todas as tasks e storages. Se você quiser adicionar recompensas novas vc só precisa fazer um elseif na função de getRewards. Siga o exemplo dos comentários para as rewards e se quiser todas as tasks liberadas sem precisar seguir uma ordem é só colocar needed = 0 para todas. Agora crie um arquivo em creaturescripts/scripts chamado killtasksystem.lua e coloque isso dentro dele: Tirando as mensagens, não acho que tenha nada que você possa editar aqui. Essa tabela racetypes eu coloquei pq queria fazer task de criaturas de um mesmo tipo: fire, undead, poison. Ele puxa esse valor de dentro do race definido no xml do monstro. (Veja a undead monsters como exemplo.) em creaturescripts.xml coloque: <event type="kill" name="tasksystem" script="killtasksystem.lua"/> E em creaturescripts/scripts/login.lua antes do ultimo return true: player:registerEvent("tasksystem") Agora criaremos o npc chamado tasksystem.xml na pasta data/npcs: E o script dele em data/npcs/scripts chamado tasksystem.lua: (sim, eu não sou criativo com nomes) Por fim insira essa talkaction aqui no seu server, ela serve para gerar um arquivo chamado orderedtask.html na pasta do seu servidor (a mesma do executavel) com o código html do sistema de task (sim, eu tenho preguiça de escrever as coisas no site) Coloque o nome que vc quiser e depois coloque a tag em talkactions.xml: <talkaction words="/generatehtml" script="nome que vc quiser.lua" /> Note que o arquivo pode levar um tempinho para aparecer, até pq ele tá percorrendo toda a tabela pegando todas as informações e criando um arquivo html disso, é um processo que pode levar alguns segundos. Se você quiser ser hackudo e pegar o html direto do meu site, seja livre: https://www.empirebr.com/tasks Bom uso, se tiver qualquer dúvida ou comentário ou sugestão diz aí.
  23. Faaala galera , hoje vou trazer pra vocês o sistema do Edo tensei do nto Ultimate , para saber como o sistema funciona , basta ir ao SITE do nto ultimate Crie um novo item com essa linha ; <item id="4856" article="an" name="edo pergaminho"> <attribute key="description" value="Neste pergaminho foi selado um [VAZIO]" /> <attribute key="weight" value="7000" /> </item> Agora vamos a spell para criar o pergaminho ; XML ; <instant name="Edo Tensei" words="edo tensen no jutsu" lvl="55" mana="770" prem="1" exhaustion="2000" needlearn="0" event="script" value="edopergaminho"> </instant> 2. Script ; local id = 4856 -- Id do edo pergaminho local count = 1 -- Quantos pergaminhos serão adiciondos ao usar o comando function onCastSpell(cid, var) doPlayerAddItem(cid, id, count) doPlayerSendTextMessage(cid, 18, "Voce recebeu um pergaminho EDO") end Agora , em ACTIONS, adicione essas 2 scripts Em seguida , adicione os XML <action itemid="4856" event="script" value="vai.lua"/> <action itemid="4856" event="script" value="pega.lua"/> Não se esqueça que são dois itens diferentes Não se esqueça de criar os monstros com os respectivos nomes ao Edo Tensei Créditos BananaFight LuckOake MaXwElldEn Gears PsyMcKenzie ManoTobira NtoUltimate PedroSTT -- Correção de bugs , magia do pergaminho edo e reestruturação dos códigos
  24. Estou com um problema que já tentei de diversas maneiras corrigir, antes de tudo é bom dizer que no ot que estou desenvolvendo possuo uma classe que usa apenas itens de fist fighting, as garras, e quando tento refinar alguns itens ele refina alguns itens e outros não. O grande problema é que ele não retorna o valor do atributo attack de itens como espadas ou machados, e as proprias garras eu consigo refinar algumas e outras não, por exemplo tenho uma garra que foi refinada, mas se eu tentar refinar o mesmo modelo de garra o script retorna o valor do attack como nil, gostaria de saber onde posso estar errando para melhorar, fora que ainda esta no inicio o script ainda nao fiz o reforço de itens de defesa nem itens magicos. Grato desde já. Obs.: para refinar um item é necessário usar uma anvil(bigorna) e colocar o item a ser melhorado no lado direito dela. function onUse(cid, item, frompos, item2, topos) if getPlayerItemCount(cid, 2160) < 5 then doPlayerSendTextMessage(cid, 25, "Para que seja possivel o refinamento e necessario 5 cristal coins") doSendMagicEffect(getCreaturePosition(cid), 2) return true end local itemRefine = getThingFromPos({x=4928, y=4957, z=7, stackpos=2}) chance = math.random(0,100) local tipo = getItemWeaponType(itemRefine.uid) if getPlayerItemCount(cid, 2155) >= 1 then chance = chance+25 doPlayerRemoveItem(cid, 2155, 1) end local function isWeapon(uid) uid = uid or 0 if tipo == 1 or tipo == 2 or tipo == 3 or tipo == 8 then return true end return false end function setItemAttack(uid,name) return doItemSetAttribute(uid,'attack',name) end function getItemAttack(uid) return getItemAttribute(uid,'attack') end function getItemArmor(uid) return getItemAttribute(uid,'attack') end function doItemAddAttack(uid, count) if uid > 0 and tonumber(count) > 0 then return doItemSetAttribute(uid, "attack", getItemAttack(uid) + count) end return false end function doItemRemoveAttack(uid, count) if uid > 0 and tonumber(count) > 0 then return doItemSetAttribute(uid, "attack", getItemAttack(uid) - count) end return false end function getItemLevel(uid) if uid > 0 then return getItemAttribute(uid, "lvl") or 0 end return false end function doItemAddLevel(uid, count) if uid > 0 and tonumber(count) > 0 then return doItemSetAttribute(uid, "lvl", getItemLevel(uid) + count) end return false end function doItemRemoveLevel(uid, count) if uid > 0 and tonumber(count) >= 0 then return doItemSetAttribute(uid, "lvl", getItemLevel(uid) - count) end return false end function setItemLevel(uid) if uid > 0 and tonumber(count) >= 0 then return doItemSetAttribute(uid, "lvl",count) end return false end function setItemDesc(uid, lvl) if uid > 0 then return doItemSetAttribute(uid, "description", lvl) end end if isWeapon(itemRefine.uid) then if chance > 75 then doPlayerRemoveItem(cid, 2160, 5) doSendMagicEffect(getCreaturePosition(cid), 12) doItemAddAttack(itemRefine.uid, 1) doItemAddLevel(itemRefine.uid, 1) setItemDesc(itemRefine.uid,"Upgraded +"..getItemLevel(itemRefine.uid)) doPlayerSendTextMessage(cid, 25, "Parabens, seu item foi melhorado com sucesso para o nivel: +"..getItemLevel(itemRefine.uid)) return true end if chance > 25 and chance <=75 then --doPlayerRemoveItem(cid, 2160, 5) doPlayerSendTextMessage(cid, 25, "Que pena, o refinamento nao obteve sucesso +"..getItemLevel(itemRefine.uid)) doSendMagicEffect(getCreaturePosition(cid), 2) return true end if chance <=25 then --doPlayerRemoveItem(cid, 2160, 5) doSendMagicEffect(getCreaturePosition(cid), 2) doItemRemoveAttack(itemRefine.uid, 1) doItemRemoveLevel(itemRefine.uid, 1) doPlayerSendTextMessage(cid, 25, "Que pena, seu refinamento falhou! Retornou ao nivel +"..getItemLevel(itemRefine.uid)) return true end end end
  25. Nazo

    Sistema IP Storage System

    Buenas, TK! Um usuário pediu ajuda em um script, onde queria limitar para a quest ser feita apenas uma vez por IP, mesmo que ainda seja possível mudá-lo, resolvi postar aqui xd Execute esse código SQL no seu banco de dados MySQL, para a criação da tabela onde ficarão as storages e o IP armazenado do player: CREATE TABLE player_ip_storage( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, player_id INT NOT NULL, ip CHAR(15) NOT NULL, storage INT NOT NULL ); ALTER TABLE player_ip_storage ADD CONSTRAINT FK_PLAYER_ID FOREIGN KEY (player_id) REFERENCES players(id); Ou caso seja SQLITE, utilize esse código: CREATE TABLE player_ip_storage( player_id INT NOT NULL, ip CHAR(15) NOT NULL, storage INT NOT NULL ); ALTER TABLE player_ip_storage ADD CONSTRAINT FK_PLAYER_ID FOREIGN KEY (player_id) REFERENCES players(id); Crie um arquivo chamado nazo-functions.lua em data/lib e adicione o seguinte conteúdo: -- by Nazo (tibiaking.com) -- IP Storage System function getIpQuestStatus(cid, storage) storages = db.getResult("SELECT * FROM `player_ip_storage` WHERE `ip` = \"" .. doConvertIntegerToIp(getPlayerIp(cid)) .. "\" and `storage` = "..storage..";") if(storages:getID() ~= -1) then return false end return true end function setIpQuestStatus(cid, storage) db.executeQuery("INSERT INTO player_ip_storage(player_id, ip, storage) VALUES("..getPlayerGUID(cid)..",\""..doConvertIntegerToIp(getPlayerIp(cid)).."\","..storage..")") return true end Agora, quando você tiver uma quest, adicione na verificação a função getIpQuestStatus na checagem junto, e quando finalizar a quest utilize o setIpQuestStatus, com os parâmetros cid e número da storage, porém a função só armazena que essa storage tem algo no banco de dados, ou seja, a quest já foi feita, você não armazena o valor da storage junto (como a função normal que geralmente adiciona "1" na storage). Exemplo de quest abaixo: -- by Nazo (tibiaking.com) config = { storage = 123123, -- storage da quest premio = {2160, 1} -- {itemid, quantia} } function onUse(cid, item, frompos, item2, toPosition) queststatus = getPlayerStorageValue(cid,config.storage) if(queststatus == -1 and getIpQuestStatus(cid, config.storage)) then -- note que eu só adicionei a função, nenhuma comparação, explicarei abaixo do código doPlayerSendTextMessage(cid,22,"Tome seu prêmio.") doPlayerAddItem(cid,config.premio[1],config.premio[2]) setPlayerStorageValue(cid,config.storage,1) setIpQuestStatus(cid,config.storage) -- função que adiciona a storage no banco de dados else doPlayerSendTextMessage(cid,22,"Você já fez esta quest.") end end Explicação básica do motivo da função não possuir comparação na verificação e ficar como a seguir: if(getIpQuestStatus(cid, config.storage)) then Quando você faz um if, com uma função dentro sem comparações, ela continuará o bloco de comando apenas se o retorno da mesma for verdadeiro, assim quando você fizer a quest, e tentar novamente, o get retorna falso, e isso cancela a condição e vai para o bloco de comando do "else".

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 partindo do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer publicidade 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! A publicação do seu anuncio é instantânea!

×