Ir para conteúdo
  • 0

duvida match


rohfagundes

Pergunta

Ola, estou fazendo um script aqui e estou tendo um problema com o match
alguem poderia me explicar como ele funciona?
 

o problema q eu tenho é o seguinte

usando ele assim ele funciona

function teste(protocol, opcode, buffer)    local cd = buffer:match('\nCooldown: (.-) ') or 0end

nesse caso ele retorna o valor certo
agora se eu usar assim ele n funciona

function teste(protocol, opcode, buffer)    local teste = string.explode(buffer, "|")    local teste1, teste2, teste3, teste4, teste5, teste6, teste7 = teste[1], teste[2], teste[3], teste[4], teste[5], teste[6], teste[7]    local cd1 = teste1:match('\nCooldown: (.-) ') or 0    local cd2 = teste2:match('\nCooldown: (.-) ') or 0    local cd3 = teste3:match('\nCooldown: (.-) ') or 0    local cd4 = teste4:match('\nCooldown: (.-) ') or 0    local cd5 = teste5:match('\nCooldown: (.-) ') or 0    local cd6 = teste6:match('\nCooldown: (.-) ') or 0    local cd7 = teste7:match('\nCooldown: (.-) ') or 0end

 

alguem saberia me explicar como ele funciona?

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

no print sai isso

Name: Air GustLevel: 8Chi: 20Cooldown: 1 |||||||

 

o servidor envia isso

		doSendPlayerExtendedOpcode(cid, 51, descAtkF1..'|'..descAtkF2..'|'..descAtkF3..'|'..descAtkF4..'|'..descAtkF5..'|'..descAtkF6..'|'..descAtkF7..'|'..descPassive)

onde cada um desses desc só envia a desc certa se tiver item no slot caso contrario vai enviar ''

 

mas nesse caso

    local look = string.explode(buffer, "|")    local lookAtkF1, lookAtkF2, lookAtkF3, lookAtkF4, lookAtkF5, lookAtkF6, lookAtkF7, lookPassive = look[1], look[2], look[3], look[4], look[5], look[6], look[7], look[8]    local cdAtkF1 = lookAtkF1:match('\nCooldown: (.-) ') or 0

 n era para ele dar match só no look[1]
q seria a desc só do primeiro item?

 

 

edit: consegui resolver de um outro jeito
onde o servidor ja envia o cd separado

		doSendPlayerExtendedOpcode(cid, 51, descAtkF1..'|'..descAtkF2..'|'..descAtkF3..'|'..descAtkF4..'|'..descAtkF5..'|'..descAtkF6..'|'..descAtkF7..'|'..descPassive..'|'..cdAtkF1..'|'..cdAtkF2..'|'..cdAtkF3..'|'..cdAtkF4..'|'..cdAtkF5..'|'..cdAtkF6..'|'..cdAtkF7)

e o client recebe assim

	local cdAtkF1 = buffer:match('atkf1 (.-) ') or 0	local cdAtkF2 = buffer:match('atkf2 (.-) ') or 0	local cdAtkF3 = buffer:match('atkf3 (.-) ') or 0	local cdAtkF4 = buffer:match('atkf4 (.-) ') or 0	local cdAtkF5 = buffer:match('atkf5 (.-) ') or 0	local cdAtkF6 = buffer:match('atkf6 (.-) ') or 0	local cdAtkF7 = buffer:match('atkf7 (.-) ') or 0	

 

mas msm assim vc poderia me explicar como funciona esse match direito?

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

  • 0

O match usa o mesmo string pattern do C

http://www.cplusplus.com/reference/cstdio/printf/

 

Com uma diferença básica, nele tu quer capturar algum dado e isso é feito usando parênteses onde quer que seja feita a captura

 

Alguns exemplos:
"(.-)" => retorna a primeira substring geral, ele sozinho sempre vai retornar tudo, mas se tiver mais elementos próximos, ele busca por substrings

 

String > "Boot: 12345646\nBoot: 1213546646545465\nBoot: blablabla\n"

"Boot: (.-)\n"  - Isso vai retornar a primeira substring que atenda a esses parâmetros "12345646"

"Boot: (.+)\n" - Já esse vai retornar a maior cadeira possível, que seria isso: "12345646\nBoot: 1213546646545465\nBoot: blablabla"

 

Você nesse caso ai como tem um padrão poderia usar o gsub, que é o mesmo que o match, porem a cada chamada ele passa pra próxima substring

local str =  "Boot: 12345646\nBoot: 1213546646545465\nBoot: blablabla\n"for s1 in str:gsub("Boost: (.-)\n") do   print(s1)end

 

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...