da print no buffer
print(buffer)
E deixa eu ver a saida, dai te digo como tem que ser a pattern do match
da print no buffer
print(buffer)
E deixa eu ver a saida, dai te digo como tem que ser a pattern do match
info
Grupo: Visconde
Registrado: 10/02/11
Posts: 377
Reputação: +78

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 Setembro 7 por rohfagundes
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
info
Grupo: Visconde
Registrado: 10/02/11
Posts: 377
Reputação: +78

vlw ai ![]()
deu para entender melhor como ele funciona
info
Grupo: Visconde
Registrado: 10/02/11
Posts: 377
Reputação: +78
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 0endnesse 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 0endalguem saberia me explicar como ele funciona?