Ir para conteúdo

Posts Recomendados

Como e sabido de muitos, dificilmente se faz scripts para ot serve em simulação poo em lua.

 

Eu estava entediado jogando ot e resolvi jogar xadrez com aquelas peças de xadres que tem no jogo. Então me veio a ideia de por ordem nas peças,  fazer com que elas só se movimentem caso seja o movimento correta dela. Eis a oportunidade para eu aprender simulação de poo em lua.

 

 

Bem o script não está terminado, falta muita coisa, mas já é um começo. Gostaria da ajuda de vocês para me orientar na melhor forma de fazer o script.

Eu ainda estou aprendendo simulação de poo em lua,  então orientações nessa área são bem vindas.

Sugestões e críticas construtivas são bem vindas também. 

 

Xadrez.lua

  Mostrar conteúdo oculto

 

 

Motor do sistema:

movements.xml adicione:

  Mostrar conteúdo oculto

 

movements/scripts/xadrez_poo.lua, adicione:

  Mostrar conteúdo oculto

 

Editado por Poccnn
Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/
Compartilhar em outros sites

Implantei uma função para o pawn (peão). Quando ele chegava ao final da área inimiga, ele ficava lá parado - pois os peões não podem se movimentar para trás, então fiz com que ao chegarem lá, eles se tornariam outra peça; a peça no caso seria a da posição em que o pawn chegou - menos no caso do rei.

 

Adicionei essa sentença ao código do pawn.

  Citar

if(pawn:getAtualPos().y == (det < 0 and 1 or 8))then GAME:upDateItem(item.actionid) end

Expand  

 

Criei essas duas funções para que ela possa mudar de tipo de peça.

  Citar

function GAME:getPieceIdInPosByItemId(id,x) 
local items = { 
   [2632] = {2633,2634,2635,2636,2637,2635,2634,2633},-- black 
   [2626] = {2627,2628,2629,2630,2631,2629,2628,2627}, -- white 

   return items[id][x] 
end 

function GAME:upDateItem(aid) 
local item = XADREZ:getPiece(aid) 
local pos = item:getAtualPos() 
local newid = GAME:getPieceIdInPosByItemId(item:getId(),pos.x) 
local nome = { 
   _castle = {2627,2633}, 
   _knight = {2628,2634}, 
   _bispo = {2629,2635}, 
   _queen = {2630,2636} 

   doTransformItem(getThingFromPos({x=pos_tabulero.x+pos.x,y=pos_tabulero.y+pos.y,z=pos_tabulero.z, stackpos = 1}).uid,newid) 
   for k,v in pairs(nome) do 
      if(isInArray(v,newid))then 
      local move = k == '_castle' and _castle or k == '_knight' and _knight or k == '_bispo' and _bispo or _queen 
         item:setMoveFunc(move.move) 
         item:setType(0) 
         item:setAntPos(pos.x,pos.y) 
         item:setAtualPos(pos.x,pos.y) 
         item:setId(newid) 
         break 
      end 
   end 
end 

Expand  

 

E desmenbrei as estruturas das peças, menos o do rei e do pawn que não são necessários. 

 

  Mostrar conteúdo oculto

 

Pretendo atualizar esse sistema, fazendo com que o player possa escolher a peça. 

Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1694894
Compartilhar em outros sites

Eu fiz algo parecido com isso a um bom tempo atras, não cheguei a completar, acho que tinha ficado faltando o check ou check mate nao sei, vou ver se acho o code aqui

 

#edit

achei

http://pastebin.com/xw2YTWuT

 

O movimento era por arrasto, tu da look na peça e ele mostra as possiveis jogadas pra peça, ve se ajuda em algo

Editado por dalvorsn
Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1694997
Compartilhar em outros sites

Estou fazendo diversas mudanças que são necessários; substituindo, eliminando e adaptando funções, além de ter que re-ordenar o script. Mas, tudo isso é necessário, para esse novo método que estou fazendo. O script ficará mais simples, eficiente e com mais funções. Seria a base certa para criar um motor, na qual o player poderá jogar contra a maquina.

 

Uma prévia de como está ficando o sistema. 

xadrez_demonstracao_posicoes_validas_do_knight2.png

 

xadrez_demonstracao_posicoes_validas_do_knight.png

 

Obrigado Dalvorsn por sua ajuda.

xadrez_demonstracao_posicoes_validas_do_knight2.thumb.png.35de6f81d98bf693f534727516c03570.png

xadrez_demonstracao_posicoes_validas_do_knight.thumb.png.9a9538f855e8a396fe85d45c8b451369.png

Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1696184
Compartilhar em outros sites

Ainda não é a versão final - ainda falta terminar o motor, mas a lib já está pronta e testada, espero não ter mais que modificar nada na lib enquanto termino de ajustar o motor.

 

  Mostrar conteúdo oculto

 

Ps: está formatado em utf8, converta ele para ansi antes de usá-lo.

Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1696823
Compartilhar em outros sites

  • 2 weeks later...

Depois de um bom tempo sem dedicar a esse script, voltei e fiz algumas funções.

 

Essa é a função principal que gerencia tudo.

Futuramente, pretendo fazer um modo com que o player jogue contra a maquina.

 

O que foi feito?

- foi criado uma forma de cadastrar jogadores.

- foi criado um modo de ordenar a vez de jogar de cada grupo.

- foi criado um modo de bloquear a jogada indevida de um jogador.

 

  Citar

 
-- FUNÇÕES REQUERIDAS 
function doComparePositions(position, positionEx) 
   return position.x == positionEx.x and position.y == positionEx.y 
end 

local function sendEffect(tab) 
--tab, seria uma tabela de posições onde serão postos o efeito. 
if type(tab) ~= 'table' then return end 
   for _,pos in pairs(tab) do 
      doSendMagicEffect(pos, 56) 
   end 
end 

 

-- EXECUÇÃO DO  SISTEMA IN-GAME 
local next_group = '' 
local player_solo = false 

local function main(item,pos,cid) 
local piece,check = XADREZ:getPiece(item.actionid),false 

   if(piece)then 
   local group = GAME:getGroupNameById(item.itemid) 
   local nome_do_proximo_da_vez = GAME:getPlayerNameByGroup(next_group) 
      if not(nome_do_proximo_da_vez)then 
      -- faz uma verificação se ja existe um grupo para tal jogador; se existir, então ele está jogando solo. 
         if(GAME:getGroupByPlayerName(getCreatureName(cid)))then 
            player_solo = true 
         end 
         -- mesmo ele jogando solo, se faz necessario setar o grupo opositor a ele. 
         GAME:addPlayerGroupByName(getCreatureName(cid),group) 
      elseif not(nome_do_proximo_da_vez == getCreatureName(cid))then 
         doPlayerSendCancel(cid,"Não é sua vez de jogar.") 
         GAME:backMove(piece,item) 
         return 
      elseif not(GAME:getGroupByPlayerName(getCreatureName(cid)) == group) and not player_solo then 
         doPlayerSendCancel(cid,"Voce não pode jogar as pecas do seu adversario.") 
         GAME:backMove(piece,item) 
         return 
      elseif not(group == tostring(next_group))then 
         doPlayerSendCancel(cid,"Não é a vez desse grupo jogar.") 
         GAME:backMove(piece,item) 
         return 
      end 
      next_group = group == 'white' and 'black' or 'white' 
      piece:setAtualPos(pos.x,pos.y) 
      local positions = piece:getMoveFunc(item) 
      for _, posi in pairs(positions) do 
         if(doComparePositions(pos,posi))then 
         local get = getThingFromPos({x=posi.x,y=posi.y,z=pos_tabulero.z, stackpos = 2}) 
            if(isInArray(GAME:getPiecesEnemy(item.itemid),get.itemid)) and get.itemid > 0 then 
               GAME:killEnemy(pos,item.itemid) 
            end 
            if(piece:getId() == 2626 or piece:getId() == 2632)then 
            -- verifica se o pawn chegou ao final do lado inimigo, fazendo com que seja transformado em outra peça do mesmo grupo dele. 
               if(pos.y-pos_tabulero.y == (piece:getType() < 0 and 1 or 8))then GAME:upDateItem(piece) end 
            end 
            check = true 
            piece:setType(piece:getType() < 0 and -1 or 1) 
         end 
      end 
      if not(check)then 
         doPlayerSendCancel(cid,"movimento invalido.") 
         GAME:backMove(piece,item) 
         -- caso haja meios para ele se mover, envia os efeitos nas posições validas. 
         if(#positions > 0 )then sendEffect(positions) end 
      else 
         piece:setAntPos(pos.x,pos.y) 
         GAME:getCheck(piece,item) -- verifica se há algum rei em check. 
      end 
   end 
end 

Expand  

 

 

Aqui estão as funções implementadas.

  Citar

-- adiciona um jogador ao grupo com o nome dele. 
function GAME:addPlayerGroupByName(nome,grupo) 
   self[grupo] = nome 
end 

-- pega o nome do jogador pelo grupo (black ou white). 
function GAME:getPlayerNameByGroup(grupo) 
   return self[grupo] 
end 

-- pega o nome do grupo (black ou white) pelo nome do jogador, desde que esteja cadastrado. 
function GAME:getGroupByPlayerName(nome) 
   for k,v in pairs(self) do 
      if(type(v) == 'string' and v == nome)then 
         return k 
      end 
   end 
end 

-- pega o nome do grupo da peça pelo id dela. 
function GAME:getGroupNameById(id) 
   if(isInArray({2632,2633,2634,2635,2636,2637},id))then 
      return 'black' 
   elseif(isInArray({2626,2627,2628,2629,2630,2631},id))then 
      return 'white' 
   end 
end 

-- remove o nome do player do grupo

function GAME:removePlayerName(nome)

   for k,v in pairs(self) do

       if type(v) == 'string' and v == nome then

          self[k] = nil

       end

   end

end

Expand  

 

Segue algumas imagens da execução do sistema in-game.

tentou jogar denovo.png

 

o god tentou jogar a peca do adversario.png

 

578229f2e314a_ogodtentoujogarapecadoadversario.thumb.png.b49737257a5b11e07dfd64069faaf28d.png

57822a4c7d4b1_tentoujogardenovo.thumb.png.7803a0de490eee119372f69dfd2d526b.png

Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1699034
Compartilhar em outros sites

  • 2 months later...

Cara que maneiro! eu ja joguei xadrez com um amigo meu no tibia, estavamos cansados de caçar e tudo mais, mas é raro eu ver alguém jogando algo nos tabuleiros tibianos, com esse sistema, um xadrez (melhor) correto da até mais vontade de jogar, atraindo os players... até podendo dar uma bonificação para quem ganhar a partida...

Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1704763
Compartilhar em outros sites

  • 7 months later...
  Em 06/06/2016 em 13:27, Poccnn disse:

Como e sabido de muitos, dificilmente se faz scripts para ot serve em simulação poo em lua.

 

Eu estava entediado jogando ot e resolvi jogar xadrez com aquelas peças de xadres que tem no jogo. Então me veio a ideia de por ordem nas peças,  fazer com que elas só movimento caso seja o movimento correta dela. Eis a oportunidade para eu aprender simulação de poo em lua.

 

 

Bem o script não está terminado, falta muita coisa, mas já é um começo. Gostaria da ajuda de vocês para me orientar na melhor forma de fazer o script.

Eu ainda estou aprendendo simulação de poo em lua,  então orientações nessa área são bem vindas.

Sugestões e críticas construtivas são bem vindas também. 

 

Xadrez.lua

  Mostrar conteúdo oculto

 

Xadrez_lib.lua

  Mostrar conteúdo oculto

 

Expand  

desculpa reviver mas esse sistema esta 100% ou ainda esta em desenvolvimento?

 

se tiver 100% essa parte que citei que esta 100%?

ou tenho q complementar com as outras partes?? se tiver com as partes picadas seria muito pedir pra atualizar o topco??

parabéns man vc é foda mesmo rep+

Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1716730
Compartilhar em outros sites

  Em 26/04/2017 em 21:27, wevertonvrb disse:

desculpa reviver mas esse sistema esta 100% ou ainda esta em desenvolvimento?

 

se tiver 100% essa parte que citei que esta 100%?

ou tenho q complementar com as outras partes?? se tiver com as partes picadas seria muito pedir pra atualizar o topco??

parabéns man vc é foda mesmo rep+

Expand  

Atualizei o código do tópico. 

Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1716758
Compartilhar em outros sites

  Em 27/04/2017 em 11:48, Poccnn disse:

Atualizei o código do tópico. 

Expand  

desculpe mas essa livraria ja é o sistema completo?

é apenas um arquivo mesmo? se sim onde eu deixo ela?

na pasta lib?

Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1716793
Compartilhar em outros sites

  Em 28/04/2017 em 00:27, wevertonvrb disse:

desculpe mas essa livraria ja é o sistema completo?

é apenas um arquivo mesmo? se sim onde eu deixo ela?

na pasta lib?

Expand  

Sim, sim e sim.

Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1716801
Compartilhar em outros sites

  Em 28/04/2017 em 12:10, Poccnn disse:

Sim, sim e sim.

Expand  

man poderia passar um tutorial do systema? to com dificuldade de adiciona-lo 

fiz o logal no remeres mas n sei onde configuro tudo

print http://prntscr.com/f227l0

Link para o comentário
https://xtibia.com/forum/topic/241004-tfs-xadrez-in-game/#findComment-1716810
Compartilhar em outros sites

×
×
  • Criar Novo...