Ir para conteúdo
  • Cadastre-se

tutorial [MAGIAS] Como adicionar-las no seu servidor


Posts Recomendados

O que você transmitiu realmente não existe no fórum, a formatação está boa. Embora hajam algumas informações não muito aprofundadas, está bom para quem tem dificuldade nisso; irá ajudar muitos.
O seu tópico foi aprovado e agora movido para a seção correta, você também recebeu um ponto de reputação positiva por trazer este conteúdo ao TibiaKing.
Continue assim ^^

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

O que você transmitiu realmente não existe no fórum, a formatação está boa. Embora hajam algumas informações não muito aprofundadas, está bom para quem tem dificuldade nisso; irá ajudar muitos.

O seu tópico foi aprovado e agora movido para a seção correta, você também recebeu um ponto de reputação positiva por trazer este conteúdo ao TibiaKing.

Continue assim ^^

 

Obrigado

Não queria me aprofundar mesmo, é só o básicão para o cara que pediu isso no meu tópico.

 

 

Editado:

 

Agora vou tentar atualizar o meu tópico  ;D

Editado por Caronte (veja o histórico de edições)

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

esse tutorial server pra poketibia ^^'?

 

 

Serve, eu acho.

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites
  • 3 months later...

No meu ainda da erro na distro, e tenho script feito. Foi o programa que eu usei "mws", segui todos os seus passos e deu Erro ao carregar as magias :( tópica da xml que usei.

 

 

 

 

<!-- Suas spells -->
<instant name="Druid attack" words="exori mort" lvl="100" mana="2000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="8000" needlearn="0" event="script" value="attack/druid attack.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="5"/>
<vocation id="6"/>
</instant> 
<instant name="Druid attack" words="water splash" lvl="100" mana="2000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="8000" needlearn="0" event="script" value="attack/druid attack.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="5"/>
<vocation id="6"/>
</instant> 
</spells>
Editado por Joaovettor (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Joaovettor, qual seria o erro ?

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

vc poderia fazer 1 tutorial como criar ataques para poketibia ajudaria muito

Depois eu baixo um poketibia e vejo como funciona para trazer um conteúdo de como fazer..

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites
  • 1 month later...

O que você transmitiu realmente não existe no fórum, a formatação está boa. Embora hajam algumas informações não muito aprofundadas, está bom para quem tem dificuldade nisso; irá ajudar muitos.

O seu tópico foi aprovado e agora movido para a seção correta, você também recebeu um ponto de reputação positiva por trazer este conteúdo ao TibiaKing.

Continue assim ^^

na verdade o tutorial nao explico nada mais confundiu doque explico. se alguem souber como poe as scripts criadas no spell creator dentro do poketibia agradeceria bastante.

Link para o post
Compartilhar em outros sites

na verdade o tutorial nao explico nada mais confundiu doque explico. se alguem souber como poe as scripts criadas no spell creator dentro do poketibia agradeceria bastante.

 

Esse tutorial não foi feito destinado a servidores derivados, infelizmente, não posso lhe ajuda quanto a isso...

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

Esse tutorial não foi feito destinado a servidores derivados, infelizmente, não posso lhe ajuda quanto a isso...

tipo talves vc possa ajudar mais gente a duvida geral e essa , quando a magia e criada com o spell creator geram 2 partes. sao essas>

essa parte e no xml. ae blz

 

<instant name="teste" words="default" lvl="100" maglv="0" mana="0" exhaustion="30" prem="0" needlearn="0" blockwalls="0" aggressive="1" event="script" value="teste.lua">

</instant>

 

e essa e a magia criada que nao da pra saber como add no server.

-- SpellCreator generated.

-- =============== COMBAT VARS ===============

-- Areas/Combat for 0ms

local combat0_Brush = createCombatObject()

setCombatParam(combat0_Brush, COMBAT_PARAM_EFFECT, 226)

setCombatParam(combat0_Brush, COMBAT_PARAM_TYPE, COMBAT_UNDEFINEDDAMAGE)

setCombatArea(combat0_Brush,createCombatArea({{0, 0, 0, 0, 1, 0, 0, 0},

{0, 0, 0, 0, 1, 0, 0, 0},

{0, 0, 0, 0, 1, 0, 0, 0},

{0, 0, 0, 0, 0, 0, 0, 0},

{1, 1, 1, 0, 2, 1, 1, 1},

{0, 0, 0, 0, 0, 0, 0, 0},

{0, 0, 0, 0, 1, 0, 0, 0},

{0, 0, 0, 0, 1, 0, 0, 0},

{0, 0, 0, 0, 1, 0, 0, 0}}))

function getDmg_Brush(cid, level, maglevel)

    return (200)*-1,(1000)*-1

end

setCombatCallback(combat0_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush")

local con___combat0_Brush = createConditionObject(0+CONDITION_PARALYZE)

addDamageCondition(con___combat0_Brush, 3, 1000, -400)

setCombatCondition(combat0_Brush, con___combat0_Brush)

-- Areas/Combat for 900ms

local combat9_Brush_2 = createCombatObject()

setCombatParam(combat9_Brush_2, COMBAT_PARAM_EFFECT, 91)

setCombatParam(combat9_Brush_2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

setCombatArea(combat9_Brush_2,createCombatArea({{0, 0, 0, 0, 1, 0, 1, 0, 0, 0},

{0, 0, 0, 1, 0, 0, 0, 0, 0, 0},

{0, 0, 0, 1, 0, 0, 1, 0, 0, 0},

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, 1, 0, 1, 0, 0, 0, 1, 0, 1},

{1, 0, 0, 0, 0, 2, 0, 0, 0, 0},

{0, 1, 0, 1, 0, 0, 0, 1, 0, 1},

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, 0, 0, 1, 0, 0, 0, 1, 0, 0},

{0, 0, 0, 1, 0, 0, 0, 1, 0, 0}}))

function getDmg_Brush_2(cid, level, maglevel)

    return (500)*-1,(1000)*-1

end

setCombatCallback(combat9_Brush_2, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush_2")

-- Areas/Combat for 1600ms

local combat16_Brush_3 = createCombatObject()

setCombatParam(combat16_Brush_3, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)

setCombatParam(combat16_Brush_3, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)

setCombatArea(combat16_Brush_3,createCombatArea({{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},

{1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},

{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}}))

function getDmg_Brush_3(cid, level, maglevel)

    return (200)*-1,(400)*-1

end

setCombatCallback(combat16_Brush_3, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush_3")

-- Areas/Combat for 2500ms

local combat25_Brush_4 = createCombatObject()

setCombatParam(combat25_Brush_4, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK)

setCombatParam(combat25_Brush_4, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

setCombatArea(combat25_Brush_4,createCombatArea({{1, 1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 2, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1, 1}}))

function getDmg_Brush_4(cid, level, maglevel)

    return (10)*-1,(20)*-1

end

setCombatCallback(combat25_Brush_4, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush_4")

-- =============== CORE FUNCTIONS ===============

local function RunPart(c,cid,var,dirList,dirEmitPos) -- Part

    if (isCreature(cid)) then

        doCombat(cid, c, var)

        if (dirList ~= nil) then -- Emit distance effects

            local i = 2;

            while (i < #dirList) do

                doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList,y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])

                i = i + 2

            end        

        end

    end

end

function onCastSpell(cid, var)

    local startPos = getCreaturePosition(cid)

    RunPart(combat0_Brush,cid,var)

    addEvent(RunPart,900,combat9_Brush_2,cid,var)

    addEvent(RunPart,1600,combat16_Brush_3,cid,var)

    addEvent(RunPart,2500,combat25_Brush_4,cid,var)

    return true

end

 

a galera precisa saber como adicionala no server oq precisa fazer mais ou se precisa dividila pra por nas scripts. qquer ajuda serve se precisar de minhas script pode me add skype e ajudamos a todos do forum que tem a mesma duvida. vlw

Link para o post
Compartilhar em outros sites
  • 4 months later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Underewar
      Tutorial: Criando um Sistema de Enviar efeito com OTClient.


       
      Neste tutorial, vamos criar um sistema simples de Enviar efeito no OTClient.
      Este sistema permitirá que os jogadores ativem um efeito especial e vejam uma janela ao clicar em um botão específico.
      Pré-requisitos:
      Ambiente de Desenvolvimento:
      Certifique-se de ter um ambiente de desenvolvimento configurado com OTClient Edubart. Conhecimento Básico em Lua:
      Familiaridade com a linguagem de script Lua.
       
      Passo 1: Estrutura do projeto
       
      Organize seu projeto conforme abaixo:

      OTC / MODS



      Passo 2: Criando a Interface Gráfica (OTUI)

      game_pass.otui
      Repare que em nossa interface nossos botões de ação entram no caminho do module e iniciam uma função que esta disponivel em nosso game_pass.lua (Client-Side)

       



      Passo 3: Criando funções Client-Side

      Agora com as funções criada podemos chamar elas de acordo com a necessidade em nosso arquivo de interface.
      Por exemplo a função effect() que foi chamada em nosso arquivo de interface.otui agora é criada aqui para mostrar o efeito ao jogador.

      game_pass.lua
       
       
      Passo 4: Registrando o novo Mod

      Agora podemos registrar e iniciar nosso modulo usando o arquivo de configuração

      game_pass.otmod
       

      Feito isso ja podemos ver nosso module no client e enviar opcodes através do gameprotocol e também receber o buffer para manipular os dados podemos utilizar :
      protocolGame:sendExtendedOpcode(14, "1")
      Basicamente oque estamos fazendo é armazenando o valor 1 na variaval 14 do ExtendedOpcode e futuramente podemos recuperar esse valor.

      Recuperamos esse valor em nosso server side data/creatuerscript/otc/game_pass.lua

      Verificando se o opcode é 14 se for 14 então fazemos x ação.

      Show, tendo isso em mente para que o nosso client-side consiga receber com sucesso o efeito enviado ao jogador então utilizamos 

      Passo 5: Criando o Server-side responsavel por enviar o efeito correto ao jogador dependendo do opcode selecionado no nosso cliente.

      data/creaturescripts/otc/game_pass.lua
       
      Passo 6: Registrando o evento para evitar erros futuros!
      Para que tudo funcione corretamente sem erros é  necessário registrar o evento no creaturescript.xml / login.lua

      creaturescript.xml
      <event type="extendedopcode" name="GamePass" script="otc/game_pass.lua" />
      login.lua
          player:registerEvent("GamePass")  


      Ótimo agora ao selecionar o menu recompensa o jogador recebera um efeito.

      Espero que tenha ficado claro como usar Opcodes/ExetendedOpcodes.

      Arquivos usados no tutorrial:
      OTC MODULE
      game_pass.rar
      Creaturescript
      game_pass.lua

      Vi muitos tutoriais desatualizado então resolvi trazer esse!
      Reparem que nesse caso passamos creature como parametro do buffer isso porque precisamos enviar um efeito no player.

      Melhorando a formatação com JSON Encoder

       
       
    • Por L3K0T
      SUMMON SPELLS
       
       
      Como o nome diz é uma spell que sumona até 4 monstros ou podendo adicionar mais, legal pra naruto etc... Então para não perder ou ficar em vão, irei deixar pra vocês e já com as correções.
       
       
      DEMONSTRAÇÃO

      2022-09-01 00-08-30.mp4  
       
      INSTALANDO
      1: primeiro vá em data/spells/scripts e crie um arquivo.lua e adicione isso abaixo dentro dele e em seguida salve.
      function onCastSpell(cid, var) local from,to = {x=962, y=885, z=7},{x=973, y=892, z=7} local from2,to2 = {x=979, y=901, z=7},{x=991, y=905, z=7} local dir = getPlayerLookDir(cid) local ppos = getPlayerPosition(cid) if(dir==1)then ppos.x = ppos.x + 1 elseif(dir==2)then ppos.y = ppos.y + 1 elseif(dir==3)then ppos.x = ppos.x - 1 elseif(dir==0)then ppos.y = ppos.y - 1 end local summon = getCreatureSummons(cid) local MaximoSummon = 0 if isInRange(getCreaturePosition(cid), from, to) or isInRange(getCreaturePosition(cid), from2, to2) then doPlayerSendCancel(cid, "Você não pode usar Summons Aqui!") return false end if (table.maxn(summon) > MaximoSummon) then doPlayerSendTextMessage(cid, 22, "Voce ainda tem summons em batalha!") return false end local clone1 = doConvinceCreature(cid, doCreateMonster("Morgaroth", ppos)) local clone2 = doConvinceCreature(cid, doCreateMonster("Demon", ppos)) local clone3 = doConvinceCreature(cid, doCreateMonster("Terror Bird", ppos)) local clone4 = doConvinceCreature(cid, doCreateMonster("Giant Spider", ppos)) doPlayerSendTextMessage(cid, 22, "Voce summonou 4 criaturas!") end  
       
      2: agora vá em data/spells/ e abra o arquivo spells.xml e coloca isso dentro e salve
       
      <instant name="Sumonar" words="!help" lvl="0" mana="0" aggressive="0" params="1" exhaustion="1000" needlearn="0" event="script" value="arquivo.lua"> </instant>  

      2022-09-01 00-28-08.mp4 Pronto! agora é só usar a imaginação, pode adicionar monstro diferente ou do mesmo quantas vezes quiser.
       
      créditos fonte: @Lenilson e L3K0T
       
       
       
       
       
    • Por Mateus Robeerto
      este é um tutorial de como usar um cliente com spr/dat estendido e protegido pelo CAB.
       
      fiz um video mostrando como usar um client com spr/dat estendido sem o error, basta seguir passo a passo o que eu fiz, em resumo voce precisara copiar seu dat estendido pra outro local para poder editar ele, salvando ele como não estendido e dps renomeando para poder usar junto com o original e compilando tudo com o programa cab...
       
      A DLL ajuda o cliente a ler as 2 dat (compilada pelo programa cab) , sem ela o cliente não abre, caso o teu cliente tenha o bug do ctrl+n ou alguns outros bugs que eu vi em alguns casos, a DLL tem a função de arrumar a maioria deles.
       
       
       
       
       
      LINK DOWNLOAD
       
       
      https://www.mediafire.com/file/kxqkywxeijk8hn2/programa_para_oldclient.rar/file
      ou
      creator cab
      https://drive.google.com/file/d/19b-EqpS-RmOQ_1o7ubb2a7j6RKcijjUa/view?usp=sharing
      scan https://www.virustotal.com/gui/file/4398e414d680ac26addbedc1f20bd59a82b546a1633abbb02b13d2f7150e950e/detection
      DLL
      https://drive.google.com/file/d/1T8XgwgHJAO9sgw5WR809GjMfej2NvP3n/view?usp=sharing
      SCAN https://www.virustotal.com/gui/file/539f0f7187c668457a14d87603e075ab5d1b6f6ac6a17aabf2b591fc3c177741/detection
       stup-pe hoohar o client
      https://drive.google.com/file/d/1cwR1wj3M8IsvxmIt5pQhZ4-DlFSMQVal/view?usp=sharing
      scan https://www.virustotal.com/gui/file/d06889d61474ee9480947956e52916fb997a3717e9f59d3ed830b5c780e81340/detection
       
       
       
    • Por oclipper
      Nesse video eu ensino como encontrar os Address e Offsets basicos para OTClient, eu usei meu bot como exemplo, com essses dados voce pode atualizar e conseguir utilizar bastantes funçoes do bot (heal, mana train, auto utamo/hur, etc)

      tipos de variaveis pra cada offset:
      name = string
      hp = double
      mana = double
      light = 1 byte
      color = 1 byte
      flags = 4 byte
      speed = 4 byte
      pos x = 4 byte
      pos y = 4 byte
      pos z = 1 byte
      id = 4 byte 
      hp% = 1 byte
      direcao = 4 byte
      skull = 1 byte
    • Por EddyHavoc
      Resumo
      A maneira atual para implementar Modal Window é um pouco complicada. Atualmente precisamos cria-la em algum lugar, registrar o evento, adicionar os botões em uma ordem específica, definir o ID da janela, dos botões e da escolha. Isso não é o ideal, então esta biblioteca foi criada pelo Non Sequitur para ajudar nisso. E eu estou trazendo para a OtServBrasil.

      Exemplo/ Tutorial Usando Modal Window
       
      Instalando
      Adicionar em data/lib/lib.lua dofile('data/lib/modalwindow.lua') Crie o arquivo modalwindow.lua com o seguinte conteúdo em data/lib if not modalWindows then modalWindows = { modalWindowConstructor = ModalWindow, nextFreeId = 500, windows = {} } end local MT = {} MT.__index = MT function ModalWindow(...) local args = {...} if type(args[1]) == 'table' then local self = setmetatable(args[1], MT) local id = modalWindows.nextFreeId self.id = id self.buttons = {} self.choices = {} self.players = {} self.created = false modalWindows.nextFreeId = id + 1 table.insert(modalWindows.windows, self) return self end return modalWindows.modalWindowConstructor(...) end function MT:setDefaultCallback(callback) self.defaultCallback = callback end function MT:addButton(text, callback) local button = {text = tostring(text), callback = callback} table.insert(self.buttons, button) return button end function MT:addButtons(...) for _, text in ipairs({...}) do table.insert(self.buttons, {text = tostring(text)}) end end function MT:addChoice(text) local choice = {text = tostring(text)} table.insert(self.choices, choice) return choice end function MT:addChoices(...) for _, text in ipairs({...}) do table.insert(self.choices, {text = tostring(text)}) end end function MT:setDefaultEnterButton(text) self.defaultEnterButton = text end function MT:setDefaultEscapeButton(text) self.defaultEscapeButton = text end function MT:setTitle(title) self.title = tostring(title) end function MT:setMessage(message) self.message = tostring(message) end local buttonOrder = { [4] = {3, 4, 2, 1}, [3] = {2, 3, 1}, [2] = {1, 2}, [1] = {1} } function MT:create() local modalWindow = modalWindows.modalWindowConstructor(self.id, self.title, self.message) local order = buttonOrder[math.min(#self.buttons, 4)] if order then for _, i in ipairs(order) do local button = self.buttons[i] modalWindow:addButton(i, button.text) button.id = i if button.text == self.defaultEnterButton then modalWindow:setDefaultEnterButton(i) elseif button.text == self.defaultEscapeButton then modalWindow:setDefaultEscapeButton(i) end end end for _, choice in ipairs(self.choices) do modalWindow:addChoice(_, choice.text) choice.id = _ end self.modalWindow = modalWindow end function MT:sendToPlayer(player) if not self.modalWindow then self:create() end player:registerEvent('ModalWindowHelper') self.players[player:getId()] = true return self.modalWindow:sendToPlayer(player) end Adicionar em data/creaturescripts/craturescripts.xml <event type="modalwindow" name="ModalWindowHelper" script="modalwindowhelper.lua" /> Crie o arquivo modalwindowhelper.lua com o seguinte conteúdo em data/creaturescripts/scripts/ function onModalWindow(player, modalWindowId, buttonId, choiceId) local modalWindow for _, window in ipairs(modalWindows.windows) do if window.id == modalWindowId then modalWindow = window break end end if not modalWindow then return true end local playerId = player:getId() if not modalWindow.players[playerId] then return true end modalWindow.players[playerId] = nil local choice = modalWindow.choices[choiceId] for _, button in ipairs(modalWindow.buttons) do if button.id == buttonId then local callback = button.callback or modalWindow.defaultCallback if callback then callback(button, choice) break end end end return true end  
      Pronto!
       
      Espero que gostem. Posteriormente irei postar um tutorial de como usar/ aplicar e alguns scripts utilizando a Biblioteca.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo