SE

[OTCliente] Atributos

Por Seagull, 25 de nov. de 2013 em Clients

36
7.7k
OriGMO
09 de dezembro de 2013 às 13:23

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.

1 mês depois...
WatersonW
02 de janeiro de 2014 às 03:57

Olá, já que a conversa alternou para esse assunto, gostaria de acrescentar se existe algum modo de esconder esse sendCancel?

Rapaz, comece com coisas menores como por exemplo uma tela e tente fazer aparecer seu nome nela, utilizando as funções Locais do OtClient, e dps que vc ja estiver manjando das identações ai vc começa a partir para o OpCode/sendCancel

OriGMO
02 de janeiro de 2014 às 14:36

Olá, já que a conversa alternou para esse assunto, gostaria de acrescentar se existe algum modo de esconder esse sendCancel?

Rapaz, comece com coisas menores como por exemplo uma tela e tente fazer aparecer seu nome nela, utilizando as funções Locais do OtClient, e dps que vc ja estiver manjando das identações ai vc começa a partir para o OpCode/sendCancel

Pra esconder sendCancel. Se voce usa um caracter por exemplo # em todas as sendCancel,basta voce fazer quando aparecer um sendcancel com esse simbolo,envia um novo sendcancel em branco,simples assim. =]

SeagullS
09 de janeiro de 2014 às 06:50

Olá OriGM, desculpe a demora. Imagine uma pessoa sem tempo e com muitos problemas. Esse sou eu, estou voltando aos poucos fiz tudo que tu me mandou, porém aconteceu dois problemas... Um foi de que não aparece o número, e o outro e que o char entra falando #getpoints#.

Foto

 

Sem_t_tulo.jpg

 

 

.lua

 

 


function init()
connect(g_game, {
onGameStart = refresh,
onGameEnd = offline
})
connect(g_game, 'onTextMessage', getPoints)
refresh()
testWindow = g_ui.displayUI('atributos')
testWindow:hide()
testButton = modules.client_topmenu.addRightGameButton('atributosButton', tr('Atributos Button'), '/images/topbuttons/options', toggle)
testButton:setWidth(32)
end
function terminate()
testWindow:destroy()
testButton:destroy()
end
-----------------------------------------------------------------------
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 = atributosWindow:recursiveGetChildById("Label4")
level:setText(tonumber(t[2]))
end
end
end
-----------------------------------------------------------------------
function toggle()
if testWindow:isVisible() then
hide()
else
show()
end
end
function show()
testWindow:show()
testWindow:raise()
testWindow:focus()
addEvent(function() g_effects.fadeIn(testWindow, 250) end)
end
function hide()
addEvent(function() g_effects.fadeOut(testWindow, 250) end)
scheduleEvent(function() testWindow:hide() end, 250)
end

 

 

.otmod

 

 

Module
  name: game_atributos
  description: atributos Window.
  author: Matheus
  website: none
  autoload: true
  autoload-priority: 1000
  sandboxed: true
  scripts: [ atributos ]
  @onLoad: init()
  @onUnload: terminate()
 

 

 

.otui

 

 


MainWindow
id: atributosWindow
!text: tr('Atributos')
size: 250 250
&save: true
Label
id: Label1
!text: tr('Habilidades')
anchors.top: parent.top
anchors.left: parent.left
Label
id: Label2
!text: tr('Pontos')
anchors.top: parent.top
anchors.right: parent.right
Label
id: Label3
!text: tr('Pontos:')
anchors.bottom: parent.bottom
anchors.left: parent.left
Label
id: Label4
anchors.bottom: parent.bottom
anchors.left: Label3.right

 

 

 

-------------------------------------------------

@Edit: Consegui arrumar, agora quando loga só aparece no roda pé do game: #getpoints# 1, mas não aparece no "atributosWindow", arrumei

Sem_t_tulo.jpg

 

Editado Janeiro 9 por Seagull

OriGMO
09 de janeiro de 2014 às 23:30

Aparentemente era pra funcionar já.

Não dá nenhum erro no console? Troque seu .otui por isso e verifique as identações caso dê erro.

 

 

MainWindow

id: atributosWindow
!text: tr('Atributos')
size: 250 250
&save: true
Label
id: Label1
!text: tr('Habilidades')
anchors.top: parent.top
anchors.left: parent.left
Label
id: Label2
!text: tr('Pontos')
anchors.top: parent.top
anchors.right: parent.right
Label
id: Label3
!text: tr('Pontos:')
anchors.bottom: parent.bottom
anchors.left: parent.left
Label
id: Label4
size: 50 15
anchors.bottom: parent.bottom
anchors.left: Label3.right

 

Qualquer coisa só falar.

SeagullS
10 de janeiro de 2014 às 02:06

Imagem do erro.

 

Sem_t_tulo.png

 

 

 

.lua

 

 

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


  testWindow = g_ui.displayUI('atributos')
  testWindow:hide()
  testButton = modules.client_topmenu.addRightGameButton('atributosButton', tr('Atributos Button'), '/images/topbuttons/options', toggle)
  testButton:setWidth(32)
end

function terminate()
  testWindow:destroy()
  testButton:destroy()
end

-----------------------------------------------------------------------
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 = Atributos:recursiveGetChildById("Label4")
        level:setText('Attributes Points:  '..  tonumber(t[2]))
  end
  end
end

-----------------------------------------------------------------------



function toggle()
  if testWindow:isVisible() then
    hide()
  else
    show()
  end
end

function show()
  testWindow:show()
  testWindow:raise()
  testWindow:focus()
  addEvent(function() g_effects.fadeIn(testWindow, 250) end)
end

function hide()
  addEvent(function() g_effects.fadeOut(testWindow, 250) end)
  scheduleEvent(function() testWindow:hide() end, 250)
end
 

 

 

.otui

 

 

MainWindow
  id: Atributos
  !text: tr('Atributos')
  size: 250 250
  &save: true

  Label
    id: Label1
    !text: tr('Habilidades')
    anchors.top: parent.top
    anchors.left: parent.left

  Label
    id: Label2
    !text: tr('Pontos')
    anchors.top: parent.top
    anchors.right: parent.right

  Label
    id: Label3
    !text: tr('Pontos:')
    anchors.bottom: parent.bottom
    anchors.left: parent.left

  Label
    id: Label4
    size: 50 15
    anchors.bottom: parent.bottom
    anchors.left: Label3.right 

 

 

.otmod

 

 

Module
  name: game_atributos
  description: Atributos.
  author: Matheus
  website: none
  autoload: true
  autoload-priority: 1000
  sandboxed: true
  scripts: [ atributos ]
  @onLoad: init()
  @onUnload: terminate()
 

 

 

OriGMO
10 de janeiro de 2014 às 12:36

Tente tirar o espaço entre o ID: e o Atributos no .otui e faça o teste se vai se não.

Faça.

Troque o nome Atributos na MainWindow no .otui por: atribWindow

E no .lua tambem.

SeagullS
10 de janeiro de 2014 às 13:29

Mesmo erro:

 

 

 

ERROR: protected lua call failed: LUA ERROR:

/game_atributes/atributos.lua:43: attempt to index global 'atribWindow' (a nil value)
stack traceback:
[C]: ?
/game_atributes/atributos.lua:43: in function </game_atributes/atributos.lua:38>

 

-------------------

 

Tentando ver outros códigos aqui e arrumar faz um tempão mas ta difícil.

Editado Janeiro 10 por Seagull

RikutachimotoR
10 de janeiro de 2014 às 13:33
MainWindow
  id: testWindow
  !text: tr('Atributos')
  size: 250 250
  &save: true
 
  Label
    id: Label1
    !text: tr('Habilidades')
    anchors.top: parent.top
    anchors.left: parent.left
 
  Label
    id: Label2
    !text: tr('Pontos')
    anchors.top: parent.top
    anchors.right: parent.right
 
  Label
    id: Label3
    !text: tr('Pontos:')
    anchors.bottom: parent.bottom
    anchors.left: parent.left
 
  Label
    id: Label4
    size: 50 15
    anchors.bottom: parent.bottom
    anchors.left: Label3.right

Testa essa aqui, não sei mecher muito com OtClient... mas não custa nada eu tentar lhe ajudar.

SeagullS
10 de janeiro de 2014 às 13:40

Milagrosamente funcionou, cara não entendi nada agora. HAHAHAH.

 

Além de mudar para test e dar um espaçamento o que tu fez mais?

Editado Janeiro 10 por Seagull

RikutachimotoR
10 de janeiro de 2014 às 14:08

;), oque acontece cara (Eu não sei mexer em OtClient) to aprendendo.

id: testWindow

Este eo ID: de sua Window

 testWindow = g_ui.displayUI('atributos')
 testWindow:hide()
 testButton = modules.client_topmenu.addRightGameButton('atributosButton', tr('Atributos Button'), '/images/topbuttons/options',  toggle)
 testButton:setWidth(32)

Se reparar todas as linhas tem o nome "testWindow" que seria o nome da janela principal =), se eu estiver certo o nome que estiver no .otui tem que ser o mesmo do .lua

SeagullS
10 de janeiro de 2014 às 14:32

Verdade! Eu não tinha reparado, mega fail da minha parte.

 

--------------------------------------------------------

 

@Riku: Sabe como faço pra fazer a parte de dentro do MainWindow mais escura?

Editado Janeiro 10 por Seagull

RikutachimotoR
10 de janeiro de 2014 às 15:20
Seagull, em 10 Jan 2014 - 14:32, disse:

Verdade! Eu não tinha reparado, mega fail da minha parte.

--------------------------------------------------------

@Riku: Sabe como faço pra fazer a parte de dentro do MainWindow mais escura?

Você esta se referindo a background ?

Meu Resultado:

akv6.png

Se For isso

Data/Images/Ui

Window (Use o Photoshop para Escurecer ela)

Se quiser que eu poste a minha para você so pedir não irei usar foi so um exemplo.

SeagullS
11 de janeiro de 2014 às 07:19

Seria isso:

 

h8hc.jpg

 

Esta vendo que tem uma parte mais clara no caso? tipo um quadrado mais claro... Queria fazer isso, e outra dúvida é o botão em forma de X não sei o código dele.

E mudar a cor das letras, sei que tem como.


Queria agradecer a todo mundo que meu ajudou, nesta madrugada consegui fazer. Que venham novos desafios. Queria agradecer muito ao OriGM, muito mesmo! e por fim ao Rikutachimoto que me ajudou um pouco na finaleira.

 

Este é o resultado final.

 

 

Sem_t_tulo.png

 

Editado Janeiro 10 por Seagull

RikutachimotoR
11 de janeiro de 2014 às 08:08

Ficou muito bom, agora preciso da tua ajuda kkkk,

 

aqei.png

 

La no My Points: eu queria por o número de pontos que tenho como faço isso ?