Ir para conteúdo
  • 1

[FABRICA]Otclient


caotic

Pergunta

Como o pessoal resolveu fazer algumas fabricas resolvi trazer a #1 fabrica do otclient.

Eu tentarei evitar o uso do opcode vou usar msg e talk para a comunicação do otc~servidor ou o contrario.

 

Segue ai as regrinhas dos pedidos

 

Use um bom português
Não crie a mesma dúvida varias vezes
Especifique seu pedido ao máximo
Se for necessário uso de imagens específicas coloque elas para upload e poste no tópico
Seja direto
Poste apenas duvidas
Editado por caotic
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Pareçe q eu sou o unico q n consegui colocar a scrollbar encima da pokedex ? :/

 

quando eu jogo ela pra esquerda ela some e fica embaixo da dex, como eu arrumo ?

 

no otui você tem que trocar a ordem em que estão os objetos:

os que vem depois vão ficar por cima (por exemplo, se colocar a scrollbar em penultimo, e a tabela dos moves em ultimo, não vai parecer a scrollbar, mas se trocar a ordem, vai)

Link para o comentário
Compartilhar em outros sites

  • 0

Caotic tentei usar a spellbar por voc do pessoal aqui do XTibia,mas nenhuma funcionou corretamente,a spellbar aparece,mas todas as skills,no script usam o getVocation que usam o ID de cada vocação,como meu OT 8.6 nao tem o comando nao funciona,nem com opcodes instalados,vi que no seu script que voce fez pro DarkHeel das imagens das vocaçoes,voce usou o comando getPlayerVocationName e funcionou pra mim,ou seja eu tenho esse codigo nas sources,tem como usar este mesmo comando para identificar cada vocação para que as spells abra referente a cada vocação?

Se tiver tem como fazer a spellbar pra mim? Ou modificar só o script que ja tenho para que utilize esse comando? Tentei modificar mas parece que nao adianta substituir só o comando getVocation pelo getPlayerVocationName porque como ja disse,o 1° usa as IDs e o 2° os nomes,então precisa alterar isso no script e nao faço a minima ideia de como fazer.

local spelllist = {
  ['Death Strike'] =             {id = 87,  words = 'exori mort',            exhaustion = 2000,  premium = true,  type = 'Instant', icon = 'deathstrike',            mana = 20,     level = 16, soul = 0, group = {[1] = 2000},               vocations = {1, 5}},
  ['Flame Strike'] =             {id = 89,  words = 'exori flam',            exhaustion = 2000,  premium = true,  type = 'Instant', icon = 'flamestrike',            mana = 20,     level = 14, soul = 0, group = {[1] = 2000},               vocations = {1, 2, 5, 6}},
  ['Strong Flame Strike'] =      {id = 150, words = 'exori gran flam',       exhaustion = 8000,  premium = true,  type = 'Instant', icon = 'strongflamestrike',      mana = 60,     level = 70, soul = 0, group = {[1] = 2000, [4] = 8000},   vocations = {1, 5}},
}
 
local VOCID = 1
local spells = {}
local lado = 'vertical'
local sbw -- window widget
local sbb -- button ./\ widget
local spellBarWindow -- UIWindow
local exhsaustionTotal = 1100
local hideLevel = false -- os que nao tem level, vai mostrar? true = nao, false = sim
function init()
  sbb = modules.client_topmenu.addRightGameToggleButton('sbb', 'Spell Bar' , 'SpellBar.png', toggle)
  sbb:setWidth(16)
  sbw = g_ui.displayUI('SpellBar')
  sbw:move(10,50)
  g_mouse.bindPress(sbw, function() createMenu() end, MouseRightButton)
  sbw:hide()
  connect(g_game, 'onTalk', mensagemEnviada)
  connect(g_game, { onGameEnd = function() sbw:hide() sbb:setOn(false) end })
  connect(LocalPlayer, {
    onLevelChange = onLevelChange
  })
  connect(g_game, 'onTextMessage', getVocation)
  for inst,values in pairs(spelllist) do
    if values.type == 'Instant' then -- depois vou fazer mais tipos..
	  if g_game.getProtocolVersion() >= 950 then -- Vocation is only send in newer clients
        if table.find(values.vocations, g_game.getLocalPlayer():getVocation()) then
          local inside = {instantName = inst, words = values.words, lvl = values.level, mana = values.mana, prem = values.premium, groups = values.group,icon = values.icon, vocations = values.vocations,exhaustion = values.exhaustion}
          table.insert(spells,inside)
        end
      else
        local inside = {instantName = inst, words = values.words, lvl = values.level, mana = values.mana, prem = values.premium, groups = values.group,icon = values.icon, vocations = values.vocations,exhaustion = values.exhaustion}
        table.insert(spells,inside)
      end
    end
  end
  table.sort(spells, function(a, b) return (a.lvl < b.lvl) end)
end
 
function onLevelChange(localPlayer, value, percent)
  getSpells(spells)
end
 
function mensagemEnviada(name, level, mode, text, channelId, pos)
if not g_game.isOnline() then return end
if g_game.getLocalPlayer():getName() ~= name then return end
  for i = 1,#spells do
   if spells[i].words:lower() == text:lower() then 
     startDownDelay(i)
     break
   end
  end
end
 
function terminate()
  sbw:destroy()
  sbb:destroy()
  disconnect(g_game, { onGameEnd = function() sbw:hide() sbb:setOn(false) end })
  disconnect(g_game, 'onTalk', mensagemEnviada)
  disconnect(LocalPlayer, {
    onLevelChange = onLevelChange
  })
  disconnect(g_game, 'onTextMessage', getVocation)
end
 
function getVocation(mode, text)
  local t = string.explode(text, " ")
  if not g_game.isOnline() then return end
  if mode == MessageModes.Failure then 
    if text:find("#getVoc#") then
      if tonumber(t[2]) == VOCID then
        sbb:setOn(true)
        sbb:show()
        sbw:show()
        getSpells(spells)
        level = g_game.getLocalPlayer():getLevel()
      else
        sbb:setOn(false)
        sbb:hide()
        sbw:hide()
      end
    end
  end
end
 
function toggle()
  if sbb:isOn() then
    sbw:hide()
    sbb:setOn(false)
  else
    sbw:show()
    getSpells(spells)
    sbb:setOn(true)
    level = g_game.getLocalPlayer():getLevel()
  end
end
 
function createMenu()
  local menu = g_ui.createWidget('PopupMenu')
  if lado == 'horizontal' then
    menu:addOption('Set Vertical', function() lado = 'vertical' getSpells(spells) end)
  else
    menu:addOption('Set Horizontal',function() lado = 'horizontal' getSpells(spells) end)
  end
  if hideLevel == false then
    menu:addOption('No Level Hide',function() hideLevel = true getSpells(spells) end)
  else
    menu:addOption('No Level Show',function() hideLevel = false getSpells(spells) end)
  end
  menu:display()
end
 
function destruirSpells()
  for i = 1,100 do
    if sbw:recursiveGetChildById('spell'..i) == nil then break end
    sbw:recursiveGetChildById('spell'..i):destroy()
    sbw:recursiveGetChildById('progress'..i):destroy()
  end
end
 
function getSpells(tabela)
  destruirSpells()
  spellBarWindow = sbw:recursiveGetChildById('mainWindow')
  local player = g_game.getLocalPlayer()
  local valor = #tabela
  local width = 38
  local height = 38
  if not player then return end
  for i = 1,#tabela do
    if (tabela[i].lvl > player:getLevel()) and hideLevel == true then
      valor = i - 1
	  break
	end
    if i == #tabela then valor = i end
    icon = g_ui.createWidget('SpellButton',spellBarWindow)
	progress = g_ui.createWidget('SpellProgressSpell',spellBarWindow)
    --icon:
    icon:setId('spell'..i)
	local spicon = Spells.getClientId(tabela[i].instantName)
    icon:setImageSource('/images/game/spells/defaultspells')
    icon:setImageClip((((spicon -1)%12)*32) .. ' ' .. ((math.ceil(spicon/12)-1)*32) .. ' 32 32')
    icon:setVisible(true) 
    icon.words = tabela[i].words
    icon.instantName = tabela[i].instantName
    icon.lvl = tabela[i].lvl
    icon.mana = tabela[i].mana
    icon.exhaustion = tabela[i].exhaustion
    icon.exhaustionNeeded = 0
    icon:setTooltip(tabela[i].words)
    if lado == 'horizontal' then
        icon:setMarginTop(3)
        height = 38
        width = (i) * 32 + 2*(i)
        icon:setMarginLeft((i) * 32 + 2*(i) - 32)
    else
        icon:setMarginLeft(3)
        icon:setMarginTop((i) * 32 + 2*(i) - 32)
        width = 38
        height = (i) * 32 + 2*(i)
    end
    --progress:
    progress:setId('progress'..i)	
    progress:setVisible(true) 
    progress:setPercent(100)
    progress:setMarginLeft(icon:getMarginLeft())
    progress:setMarginTop(icon:getMarginTop())
    if player:getLevel() < icon.lvl then progress:setText('L'..icon.lvl) progress:setColor('red') progress:setPercent(0) end
    if progress:getPercent() == 100 then progress:setText('OK') elseif icon.lvl < player:getLevel() then progress:setText(progress:getPercent()) end
    progress:setPhantom(true)
    icon.onClick = function() useSpell(i) end
  end
  sbw:setHeight(height)
  sbw:setWidth(width)  
  spellBarWindow:setSize(sbw:getSize())
end
 
function useSpell(i)
  local spell = sbw:recursiveGetChildById('spell'..i)
  if not spell then return end
  local progress = sbw:recursiveGetChildById('progress'..i)
  local player = g_game.getLocalPlayer()
  if not player then return end
  if progress:getPercent() < 100 then return modules.game_textmessage.displayFailureMessage('Wait your delay!') end
  g_game.talk(spell.words)
end
 
function startDownDelay(i) -- aqui vai ficar on onTalk, pra descer só realmente quando a spell sair
  local spell = sbw:recursiveGetChildById('spell'..i)
  if not spell then return end
  local progress = sbw:recursiveGetChildById('progress'..i)
  progress:setPercent(0)
  progress:setText('0%')
  progress:setColor('red')
  spell.exhaustionNeeded = 0
  scheduleEvent(function() spellTimeleft(i) end,100) 
end
 
function spellTimeleft(i)
  local spell = sbw:recursiveGetChildById('spell'..i)
  if not spell then return end
  local progress = sbw:recursiveGetChildById('progress'..i)
  spell.exhaustionNeeded = spell.exhaustionNeeded + 100
  if spell.exhaustionNeeded < spell.exhaustion then
    progress:setPercent(math.ceil(((spell.exhaustionNeeded) * 100)/spell.exhaustion))
    progress:setText(progress:getPercent())
    progress:setColor('red')
  else
    progress:setPercent(100)
    progress:setText('OK')
    progress:setColor('green')
    spell.exhaustionNeeded = 0    
    return true
  end
  scheduleEvent(function() spellTimeleft(i) end,100) 
end 
Link para o comentário
Compartilhar em outros sites

  • 0

Caotic explica melhor como por a pokedex nao estou conseguindo por ela me ajuda rep+

 

É só extrair pra pasta modules do seu OTClient, e, ao usar a pokedex, ela já estará funcionando

Link para o comentário
Compartilhar em outros sites

  • 0

Deu certo nao cara coloquei do geito que tu falo mas uso pokedex e ta a normal

Você editou seu pokedexsystem.lua, na pasta lib do servidor, conforme está explicado?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...