Ir para conteúdo
  • 0

[OTCliente] Atributos


Seagull

Pergunta

Olá galera boa tarde, juro que tentei, tentei mesmo, mas não consegui... Queria fazer isto no OT cliente.

h8hc.jpg

 

 

 

Já consegui fazer a Janelinha ficar lá em cima do lado do inventario, e toda vez que clickar aparecer, mas não consigo adicionar vários botões muito menos escrever um em baixo do outro e principalmente fazer ele retornar quanto de alguma storage que o Player tenha.

 

Os botões eles vão ser basicamente para falar talkactions.

 

Alguma alma bondosa me ajude!

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

Posts Recomendados

  • 0

Cara, isso tudo você faz posicionando no otui.. e a questão do storage, tem que ser com opcode.. eu lembro que fiz uma vez bem simples pro meu projeto que era de naruto, pena que o perdi pois formatei o pc, senão te passava :/

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, isso tudo você faz posicionando no otui.. e a questão do storage, tem que ser com opcode.. eu lembro que fiz uma vez bem simples pro meu projeto que era de naruto, pena que o perdi pois formatei o pc, senão te passava :/

Caio tem como voce dar um exemplo do uso do opcode? Qualquer um que seja,pois sei que o opcode liga o server com cliente,mas nao faço a minima ideia de como funciona esse ligamento. Agradeceria demaaais.

Link para o comentário
Compartilhar em outros sites

  • 0

No Servidor:

No talkactions.xml adicione a tag:

 

<talkaction words="#getPoints#" event="script" value="points.lua"/>

 

Na talkactions/script,copie e cole um arquivo e renomeie para points.lua,apague tudo e cole. modifique ali o

 

local storagepoint = numero da storage -- edit aqui o storage

function onSay(cid, words, param)

if not param then return true end
doPlayerSendCancel(cid, "#getPoints# ".. getPlayerStorageValue(cid, storagepoint))
return true
end

 

No Client:

No arquivo .otui do seu atributo,ali onde está Attributes Points: 0 ,voce tira o text,e só deixa a Label ali.

No arquivo .lua ,na função init(), troque o connect(g_game, seu por este.

 

connect(g_game, {

onGameStart = refresh,
onGameEnd = offline
})
connect(g_game, 'onTextMessage', getPoints)
refresh()

 

Ainda no .lua adicione abaixo de tudo e não esqueça de modificar os nomes do windows e da label,acredito que voce saiba fazer isso né? Caso não,copie e cole o arquivo .lua e poste aqui ,que eu modifico pra você.

 

function autoUpdateTalks()

local player = g_game.getLocalPlayer()
if not player then return end
----------
g_game.talk("#getPoints#")
----------
end
function refresh()
local player = g_game.getLocalPlayer()
if not player then return end
autoUpdateTalks()
end
function getPoints(mode, text)
if not g_game.isOnline() then return end
if mode == MessageModes.Failure then
if string.find(text, "#getPoints#") then
local t = string.explode(text, " ")
local level = AttributesWindow:recursiveGetChildById("Label0")
level:setText('Attributes Points: '.. tonumber(t[2]))
end
end
end

 

Caso o Attributes Points fique -1,é porque no login.lua voce precisa setar para 0 ,ao logar pela primeira vez.

Caso nao saiba fazer isto também,me avise.

Abração!

Link para o comentário
Compartilhar em outros sites

  • 0

OriGM o problema que aquele atribute sistem não é meu? aquilo é um exemplo de como eu quero, eu não sei fazer brother. Queria tudo montado justamente por isso, não saber fazer.

Link para o comentário
Compartilhar em outros sites

  • 0

Ai é meio que pedir demais.

Leve isso como uma dica e não crítica.

Se você se denomina Scripter .LUA e não consegue pegar de mão beijada o que te passei ai em cima e entender como funciona. Acho melhor retirar essa denominação sua.

Eu nunca estudei scripts,na verdade você pode ver minha atividade no forum ,voltei a mexer com servidor de tibia a pouco tempo,pois pensei em um projeto,e estou fazendo ele sozinho,e nunca fui scripter,no máximo eu inventei o primeiro sistema de montaria,digo que foi o primeiro porque foi muitos anos atrás,acredito que a 6 anos +/- e nunca tinha visto nenhum projeto com o sistema.

Mas meu sistema nada mais era que colocar um ring(mudado o sprite para uma cela de cavalo),adicionar uma outfit e mudar o speed. Simples mas que ninguem teve a ideia,pouco tempo depois foram aparecendo alguns derivados.

Pois bem o que eu quero dizer,é que nunca estudei,ou mexi com scripts,por isso não me denominei scripter,mas nem por isso eu deixo de ter a vontade de estuda-lo aqui no fórum ou pelo pai google.

Como voce pode ver em minhas atividades a pouco tempo,eu perguntava como fazia um script,para aparecer um item,ou seja,nao sabia nada.

Fui pegando dicas daqui e dali,pedindo scripts como base para as pessoas,para entender como funcionava,e assim poder criar meus próprios scripts.

Aqui no seu tópico mesmo,ali em cima voce pode ver que perguntei como conectava o servidor com o cliente e vice versa. Não perdi tempo e perguntei ao Noninho como funcionava o sendcancel,ele me respondeu,de uma forma clara e objetiva,um resumo de tudo que te passei ai em cima,olhei e olhei o script diversas vezes,não só esse dos atributos,mas praticamente TODOS do OTClient. Comecei a entender como funcionava,e botei cara a tapa e tentei.

Poucos dias depois,hoje mais precisamente,meu conhecimento está muito mais avançado,pois abriu minha mente de como funciona as coisas,então te peço que tente ler o script que te passei acima e entender como funciona.

Não por falta de vontade de fazer pra você,até porque eu tenho o sistema pronto,e poderia muito bem,te passar em forma de MOD,mas quero que você aprenda da mesma forma que aprendi.

Não quero que me julgue como um cara chato ou ignorante.

Tente fazer esse script,se realmente não conseguir,me avise,e te ajudarei com maior prazer a fazer o que você quer,não irei te passar o sistema pronto,mas te ajudarei a plantar a semente,e sua função vai ser regar,colher os frutos,e replantar isso novamente.

Espero que tenha entendido a mensagem,e antes que pense que eu tenho todo tempo do mundo,eu não tenho,trabalho em 2 lugares,tenho mulher,tenho minhas horas de lazer,e estou construindo minha casa(até pedreiro botei cara a tapa,pra fazer as coisas sozinho). Que te sirva de dica,e não desista cara,e como já disse,estarei aqui se precisar.

 

*Se tiver dúvida de algo,te ajudarei ,não exite em perguntar.

 

---------EDIT---------

Verifiquei que só dá pra ver a atividade de 5 posts atrás só,mas criei essa conta dia 24/09/13 e não sabia nem fazer um script de adicionar um item.

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

  • 0

OriGm agradeço de coração sua ajuda e iniciativa, não é que eu manje de scripts, se quiser posso ate tirar "scripter", e que entendo um pouco de logica de programação e estou aprendendo C++... Mas lua em otservers devido suas varias funções eu não entendo muito bem.

 

Juro que tentei fazer a janelinha, na verdade fiz como mod e até consegui fazer ela porem em branco, depois tentei adicionar os botoes mas não consegui... Tenho dificuldade em adicionar os botoes dentro e fazer aquele label. Mas não é que eu não tente, e que não consigo entender realmente...

Consegui fazer apenas um botão mas ele não fica com aquele simbolo verdinho, fica diferente.

 

P.S: Tambem trabalho e estudo, tenho namorada e compromissos... E estou com o tempo bem curto para conseguir estudar, ou me dedicar a ot servers.

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

  • 0

OriGm agradeço de coração sua ajuda e iniciativa, não é que eu manje de scripts, se quiser posso ate tirar "scripter", e que entendo um pouco de logica de programação e estou aprendendo C++... Mas lua em otservers devido suas varias funções eu não entendo muito bem.

 

Juro que tentei fazer a janelinha, na verdade fiz como mod e até consegui fazer ela porem em branco, depois tentei adicionar os botoes mas não consegui... Tenho dificuldade em adicionar os botoes dentro e fazer aquele label. Mas não é que eu não tente, e que não consigo entender realmente...

Consegui fazer apenas um botão mas ele não fica com aquele simbolo verdinho, fica diferente.

 

P.S: Tambem trabalho e estudo, tenho namorada e compromissos... E estou com o tempo bem curto para conseguir estudar, ou me dedicar a ot servers.

Então exatamente como estou também,muito compromisso,mas pouco do tempo que tenho,tento aprender,pois assim quando me sobrar tempo,eu irei conseguir fazer sem precisar de ajuda.

Bom vamos lá. Você conseguiu fazer a janela abrir e fechar correto? Vamos então adicionar a seguinte coisa,que seria a Label "Attribute" conforme a imagem do post.

Acredito que você saiba colocar a identaçao correta no .otui ou não? Caso não: http://www.xtibia.com/forum/topic/208423-otclient-tutorial-basico-1/

Para isto você vai adicionar a Label dentro da sua janela,conforme mostra no tutorial acima.

 

Label
id: attri
!text: tr('Attribute')
anchors.top: parent.top
anchors.left: parent.left

Eu dei um id para a label,para que fique melhor de posicionar as outras Labels,mas não era necessário você pode fazer uma janela toda dando margin(espaçamento),mas ai daria muito trabalho,use o margin só pra ajeitar ,como pode ver na imagem que voce postou,está tudo fora de linha,como esta Label não vai ter nenhuma mudança pelo .lua(no .lua só reconhece as Label do arquivo .otui pelos ID's) então não precisa de ID.

Fazendo isso vai aparecer o escrito Attribute no canto superior esquerdo da sua janela,mas você não quer que fique colado ali certo,então você vai dar margin-top e margin-left até ficar aonde voce deseja.

Ficando da seguinte forma.

 

Label

id: attri
!text: tr('Attribute')
anchors.top: parent.top
anchors.left: parent.left
margin-top: 7
margin-left: 20

Uma dica que dou,quando for copiar algum código e colar no seu .otui,como por exemplo este acima que te passei.

Clique antes de todas as letras e apague com o backspace,caso apague toda aquela parte vazia,era porque estava com um espaçamento do tipo "Tab",na qual não pode ser ,pois buga tudo,conforme o tutorial acima explica.

Se acontecer isso,utilize a barra de espaço para dar este espaçamento. Espero que tenha entendido ,caso não tenha conseguido me avise.

Você irá colocar nesta janela as skills normais do Tibia? Como Fist,Club,Sword... etc? Ou outras?

Pois para cada caso é um caso.

Se tudo der certo,vai aparecer escrito Attribute. Seu trabalho agora é adicionar a Label "Act." conforme a imagem. Para isto,repita o mesmo processo acima porém ao indicar as ancoras(anchors) ,invez de você colocar anchors.left(lado esquerdo da label) com o parent.left ,você vai colocar anchors.left: attri.right (lado esquerdo da label com o lado direito da label id: attri).

Se voce fez tudo corretamente,vai aparecer escrito Act. colado ao lado da label Attribute,dê o margin-left para afastar. Ou ao invez de colocar anchors.left: attri.right ,você poderia colocar anchors.right: parent.right isso faria a label ficar colada no canto superior direito,ai voce daria as margens.

Bom tente fazer isto,quando conseguir me avise,e passaremos para próxima aula.

Um abraço.

Link para o comentário
Compartilhar em outros sites

  • 0

Abraço, assim que conseguir tempo sigo as instruções eu li por cima, to atrasado pro serviço!



Abração!



Consegui querido!




Foto


Sem_t_tulo.png

 



Código


 




MainWindow

id: testWindow

!text: tr('Atributos')

size: 350 350

@onEscape: hide()


Label

id: attri

!text: tr('Habilidades')

anchors.top: parent.top

anchors.left: parent.left

margin-top: 1

margin-left: 30


Label

id: pontos

!text: tr('Pontos')

anchors.top: parent.top

anchors.right: parent.right

margin-top: 1

margin-right: 30


Label

id: pontos2

!text: tr('Pontos:')

anchors.top: parent.top

anchors.left: parent.left

margin-top: 290

margin-left: 30

 


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

  • 0

Desculpe pelo atraso,é que perdi um ente querido domingo agora,bom mas vamos lá.

 

Existe também outras ancoras que pode ser empregadas.

 

anchors.bottom: parent.bottom

anchors.left: parent.left

Isso faria sua Label pontos2 ficar na parte inferior esquerda da janela sem precisar todo aquele margin-top 290.

 

Vamos ajeitar a Label pontos para que fique próxima a Label attri,para isso trocamos o anchors.right: parent.right por anchors.left: prev.right ,o prev significa que voce quer o lado esquerdo da sua Label colada no lado direito no código anterior(no caso a label attri).

Precisamos fazer isso para que ali onde está a label pontos,fique os botões de adicionar.

 

Feito isso,façamos agora a label que irá conter os pontos que o player tem para ser gasto.

Então adicionamos outra label,colada a label pontos2 e damos um ID a ela,coloque o ID: "pontostorage",não coloque texto,pois todo valor dado a essa label,virá do servidor,através do .lua

 

Agora faça conforme postei no post acima.

 

No Servidor:

No talkactions.xml adicione a tag:

Quote


 

<talkaction words="#getPoints#" event="script" value="points.lua"/>

Na talkactions/script,copie e cole um arquivo e renomeie para points.lua,apague tudo e cole. modifique ali o

Quote


 

local storagepoint = numero da storage -- edit aqui o storage

function onSay(cid, words, param)

if not param then return true end
doPlayerSendCancel(cid, "#getPoints# ".. getPlayerStorageValue(cid, storagepoint))
return true
end

No Client:

No arquivo .lua ,na função init(), troque o connect(g_game, seu por este.

Quote

 

connect(g_game, {

onGameStart = refresh,
onGameEnd = offline
})
connect(g_game, 'onTextMessage', getPoints)
refresh()

Agora abaixo de tudo cole,e modifique o AttributesWindow para o nome de sua janela.

Quote

 

function autoUpdateTalks()

local player = g_game.getLocalPlayer()
if not player then return end
----------
g_game.talk("#getPoints#")
----------
end
function refresh()
local player = g_game.getLocalPlayer()
if not player then return end
autoUpdateTalks()
end
function getPoints(mode, text)
if not g_game.isOnline() then return end
if mode == MessageModes.Failure then
if string.find(text, "#getPoints#") then
local t = string.explode(text, " ")
local level = AttributesWindow:recursiveGetChildById("storagepoints")
level:setText(tonumber(t[2]))
end
end
end

 

Caso o Attributes Points fique -1,é porque no login.lua voce precisa setar para 0 ,ao logar pela primeira vez.

Caso nao saiba fazer isso me avise.

Como voce pode ver o servidor manda um sendCancel com um código e logo após o valor que queremos pegar,no caso a storage.

No Client,fazemos um script que quando ele receber uma mensagem que falhou(sendcancel) com tal código,então ele pega o 2° valor,que seria a storage,e seta um texto na nossa label,com o valor da storage.

Se voce tiver feito tudo corretamente vai aparecer a quantidade de pontos que o player tem,caso ocorra erros,poste imagens,caso nao dê erros mas nao aparece os pontos,verifique o código novamente,e no servidor,cole no arquivo login.lua para que envie um sendcancel ao logar,com o mesmo sendcancel da talkactions,só para que atualize logo ao logar,mas lembrando que isso nao é necessário.

 

Sua tarefa agora é:

-Conseguir mudar o .otui para que ajeite do melhor possivel sem dar margins enormes.

-Adicionar os pontos na label conforme foi passado.

-Adicionar as labels com todos nomes dos atributos(nao precisa dar id para essas) e adicionar as labels que ficarão os pontos de cada uma,da mesma forma que ensinei acima.

 

Caso consiga ou não fazer a tarefa me avise.

Abraço e boa sorte.

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

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