Ir para conteúdo

[OTC] onHover, Mostrar descrição do item ao passar o mouse em cima


Jedediasisme

Posts Recomendados

Sem-t-tulo.png

Essa modificação permite que ao passar o mouse sobre um item, apareça uma descrição do item. Não tem como causar lag no servidor nem no cliente, pois carrega as informações dentro do arquivo na TAG itemsList

 

Vai em otclient/modules/game_interface/widgets e abra o arquivo uiitem.lua

Procure por 

function UIItem:onHoverChange(hovered)
  UIWidget.onHoverChange(self, hovered)

 

Salte uma linha e coloque o código abaixo

Spoiler

  local item = self:getItem()
  if item and not self:getTooltip() then
    local itemsList = {
        [3577] = {name = "Meat", raridade = Normal},
        [3270] = {name = "Porrete", raridade = 10, attack = 20, defense = 0},
    }
    local data = itemsList[item:getId()]
    if data then
        local description = 'This is ' .. item:getCount() .. 'x ' .. data.name .. ', Raridade ' .. data.raridade
        if data.attack then
            description = description .. ' Attack: ' .. data.attack .. '.'
        end
        if data.defense then
            description = description .. ' Defense: ' .. data.defense .. '.'
        end
        self:setTooltip('Description: ' .. description)
    else
        self:setTooltip('No description')
    end
  end

 

Link para o comentário
Compartilhar em outros sites

Sabe que o mesmo id do spr no jogo pode ser diferente ne se quer pegar pelo id do jogo mude.

local data = itemsList[item:getServerId()]

Link para o comentário
Compartilhar em outros sites

Vc poderia fazer algo diferente, ao invés de passar 'No description' no else poderia ser o item:getName() esse 'No description' em tudo e feio.

Editado por nociam
Link para o comentário
Compartilhar em outros sites

36 minutos atrás, nociam disse:

Vc poderia fazer algo diferente, ao invés de passar 'No description' no else poderia ser o item:getName() esse 'No description' em tudo e feio.

Não funciona assim amigo. Pra pegar o nome do item, tem só um jeito, modificando a source pra mandar opcode. Eu ja testei isso, da muito lag e sobrecarrega o servidor, da pra nuckar o servidor só passando o mouse em cima do item sem parar... Ou a própria pessoa pode pegar o número do OPCODE e editar o otclient pra por em alguma função infinita para nuckar o servidor.

 

Esse itemGetName funciona melhor dessa maneira, pegando os itens manualmente.

Por padrão o TFS só manda o ID do item, não manda o nome pro cliente.

 

  local item = self:getItem()
  if item and not self:getTooltip() then
    self:setTooltip('Description. ID: ' .. item:getId())
  end

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Jedediasisme disse:

@FlamesAdmin Voce ta pondo server id ou cliente id? Tem 2 tipos de ID, o ID da sprite no Objectbuilder e o ID do item no ItemEditor...

E qual devo colocar?

 


/game_interface/widgets/uiitem.lua:64: attempt to concatenate field 'raridade' (a nil value)
stack traceback:
    [C]: ?
    /game_interface/widgets/uiitem.lua:64: in function </game_interface/widgets/uiitem.lua:53>
ERROR: protected lua call failed: LUA ERROR:
/game_interface/widgets/uiitem.lua:64: attempt to concatenate field 'raridade' (a nil value)
stack traceback:
    [C]: ?
    /game_interface/widgets/uiitem.lua:64: in function </game_interface/widgets/uiitem.lua:53>
ERROR: protected lua call failed: LUA ERROR:
/game_interface/widgets/uiitem.lua:64: attempt to concatenate field 'raridade' (a nil value)
stack traceback:
    [C]: ?
    /game_interface/widgets/uiitem.lua:64: in function </game_interface/widgets/uiitem.lua:53>
ERROR: protected lua call failed: LUA ERROR:
/game_interface/widgets/uiitem.lua:64: attempt to concatenate field 'raridade' (a nil value)
stack traceback:
    [C]: ?
    /game_interface/widgets/uiitem.lua:64: in function </game_interface/widgets/uiitem.lua:53>
ERROR: protected lua call failed: LUA ERROR:
/game_interface/widgets/uiitem.lua:64: attempt to concatenate field 'raridade' (a nil value)
stack traceback:
    [C]: ?
    /game_interface/widgets/uiitem.lua:64: in function </game_interface/widgets/uiitem.lua:53>
ERROR: protected lua call failed: LUA ERROR:
/game_interface/widgets/uiitem.lua:64: attempt to concatenate field 'raridade' (a nil value)
stack traceback:
    [C]: ?
    /game_interface/widgets/uiitem.lua:64: in function </game_interface/widgets/uiitem.lua:53

 

Editado por FlamesAdmin
Link para o comentário
Compartilhar em outros sites

 

@FlamesAdmin voce tem que usar o Server ID (aquele usado no ItemEditor)

Você deve ter feito algo errado ai cara, funcionou de boa aqui.

 

Baixa o meu uiitem.lua e substitui o seu

https://www.mediafire.com/file/6z9isgsfvjcjjd3/uiitem.lua/file

 

Se não conseguir fazer uma coisa simples dessa funcionar, você não tem inteligência...

 

Cola o seu uiitem.lua aqui se quiser pra eu ver o que você errou...

Editado por Jedediasisme
Link para o comentário
Compartilhar em outros sites

13 minutos atrás, Jedediasisme disse:

você não tem inteligência

e precisa esculachar no bagulho? A pergunta que fiz não pode só ser dúvida minha mas tbm de outros membros já que no tópico não tem a explicação de qual ID deve colocar

Link para o comentário
Compartilhar em outros sites

Antes de editar essas coisas avançadas, tem que saber pelo menos o básico.

 

E eu acho ainda que não precisa ter 1 cerebro pra saber que só precisa editar isso

        [3577] = {name = "Meat", raridade = Normal},
        [3270] = {name = "Porrete", raridade = 10, attack = 20, defense = 0},

Link para o comentário
Compartilhar em outros sites

21 horas atrás, Jedediasisme disse:

ão funciona assim amigo. Pra pegar o nome do item, tem só um jeito, modificando a source pra mandar opcode. Eu ja testei isso, da muito lag e sobrecarrega o servidor, da pra nuckar o servidor só passando o mouse em cima do item sem parar... Ou a própria pessoa pode pegar o número do OPCODE e editar o otclient pra por em alguma função infinita para nuckar o servidor.

 

Não concordo que derruba o servidor, o que pode acontecer e o próprio jogar foder seu próprio cliente, ou então me mostre como derrubou o serve.

 

g_lua.bindClassMemberFunction<Item>("getName", &Item::getName);

Link para o comentário
Compartilhar em outros sites

Quer retornar o getName e o id do servidor do item é simples e pratico.

 

 Na pasta do seu otClient/data/ crie uma pasta chamada items e coloque o seus arquivos items.otb e items.xml.

 Vai até a pasta do seu otClient/modules/game_things abre o arquivo things.lua e procure a função load() e coloque o seguinte:

g_things.loadOtb ('/items/items.otb')
g_things.loadXml('/items/items.xml')

 

Link para o comentário
Compartilhar em outros sites

@Gengo ja testei assim tb, da uma lagadinha em alguns pcs quando abre o cliente, se ele carregar os items.

 

Porém é uma alternativa funcional, ao contrário do que disse o amigo acima, que somente traduziu palavra pra inglês querendo achar defeito onde não tem...

Editado por Jedediasisme
Link para o comentário
Compartilhar em outros sites

Aqui funcionou certinho, obrigado pela contribuição! EU no momento estou tentando setar outras informações como a imagem dos itens, mas ate o momento sem sucesso. Se poder dar uma luz ficaria grato.

Link para o comentário
Compartilhar em outros sites

Em 24/07/2019 em 00:56, Jedediasisme disse:

 

 

Porém é uma alternativa funcional, ao contrário do que disse o amigo acima, que somente traduziu palavra pra inglês querendo achar defeito onde não tem...

A sua arrogância me enoja, ninguém pôs defeito no seu sistema e se realmente é seu sistema não perderei meu tempo com um arrogante que provavelmente e outro que sabe pouco e diminui os outros pelo pouco que sabe, nesses 6,7 anos +- de xtibia aprendendo, errando e muitas duvidas nunca vi alguém tão arrogante e olha que já passou muitos caras foda aqui.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...