MA
pedido

Verificar se tem parceiro - Partner System do LuckOake

Por Mateusoo, 16 de abr. de 2014 em Scripts

resolvido
otserv
tibia
8
969
MateusooM
16 de abril de 2014 às 23:16

Olá,
Boa noite a todos, estou usando o Partner System do LuckOake e senti falta de uma função, verificar se o Player X tem algum partner.
Eu tentei olhar onde ele armazena se o player tem parceiro, mas não consegui descobri, não entendi muito bem o código pra ser sincero...
Queria uma LUZ, lembrando que eu não quero saber a quantidade de parceiros que o Player X tem, isso eu sei, quero conseguir o NOME do parceiro do Player X, ou o UID, ou qualquer coisa que eu possa usar como identificação UNICA do parceiro do Player X.
O meu sistema eu coloquei para poder se ter no minimo 1 parceiro, então só preciso de 1 nome.
Eu olhei o código todo, e acredito que quando o Luck fez, ele não colocou para salvar o nome dos parceiros, apenas a quantidade, se eu estiver correto, favor me avise, que eu implementarei essa função de salvar o nome do parceiro, já que fica bem fácil, pois eu só utilizo um parceiro.
O link do sistema dele é esse aqui:


Boa noite e um grande abraço a todos :]

Editado Abril 16 por Mateusoo

SmiXS
16 de abril de 2014 às 23:23

Uai! Checa se o player tem a storage do sistema.

MateusooM
16 de abril de 2014 às 23:28

Uai! Checa se o player tem a storage do sistema.

Boa noite,

Não não não não não não não. Eu necessito de uma função que me retorne o NOME do parceiro do Player X, eu não quero saber se o Player X ou Y tem parceiros, eu quero o nome dos parceiros. :]

Abraço.

zipter98Z
16 de abril de 2014 às 23:37
Melhor resposta

Pelo que parece, realmente não há nenhuma storage armazenando o nome do partner. Portanto, isso deve ser alterado por você (quando digo você, me refiro à quem vai alterar o código e tal) mesmo.

Você pode, por exemplo, fazer o seguinte:

Adicionar esta variável na lib do sistema:

partner_storage = 918371

E, abaixo de:

setPlayerStorageValue(cid, 9158, 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você agora é partner de "..invname..". Você será deslogado em 5 segundos.")
addEvent(doRemoveCreature, 5000, cid)
setPlayerStorageValue(cid, invstatus, -1)
Adicionar:
setPlayerStorageValue(cid, partner_storage, invname)
setPlayerStorageValue(getPlayerByName(invname), partner_storage, getCreatureName(cid))
E abaixo de:
doPlayerSetExperienceRate(cid, 1.0)
doPlayerPopupFYI(cid, "Seu bônus de partner acabou por você ter atingido o level "..maxlevel..".")
setPlayerStorageValue(cid, 9158, 3)
Adicionar:
setOfflinePlayerStorageValue(getPlayerStorageValue(cid, partner_storage), partner_storage, -1)
setPlayerStorageValue(cid, partner_storage, -1)
A key/storage 918371 armazena o nome do partner.

Editado Abril 16 por zipter98

MateusooM
16 de abril de 2014 às 23:46

 

Pelo que parece, realmente não há nenhuma storage armazenando o nome do partner. Portanto, isso deve ser alterado por você (quando digo você, me refiro à quem vai alterar o código e tal) mesmo.

Você pode, por exemplo, fazer o seguinte:

Adicionar esta variável na lib do sistema:

partner_storage = 918371

E, abaixo de:

setPlayerStorageValue(cid, 9158, 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você agora é partner de "..invname..". Você será deslogado em 5 segundos.")
addEvent(doRemoveCreature, 5000, cid)
setPlayerStorageValue(cid, invstatus, -1)
Adicionar:
setPlayerStorageValue(cid, partner_storage, invname)
setPlayerStorageValue(getPlayerByName(invname), partner_storage, getCreatureName(cid))
E abaixo de:
doPlayerSetExperienceRate(cid, 1.0)
doPlayerPopupFYI(cid, "Seu bônus de partner acabou por você ter atingido o level "..maxlevel..".")
setPlayerStorageValue(cid, 9158, 3)
Adicionar:
setOfflinePlayerStorageValue(getPlayerStorageValue(cid, partner_storage), partner_storage, -1)
setPlayerStorageValue(cid, partner_storage, -1)
A key/storage 918371 armazena o nome do partner.

 

Olá,

Ê Zipter, acho que não preciso te falar mais nada né? A messagem que te enviei já disse tudo, agora eu exalto aquelas palavras.

Vou arrumar tudo aqui e posto o resultado, seu REP fica pra amanha.

Grande abraço.

dalvorsnD
16 de abril de 2014 às 23:47

Boa noite,

Não não não não não não não. Eu necessito de uma função que me retorne o NOME do parceiro do Player X, eu não quero saber se o Player X ou Y tem parceiros, eu quero o nome dos parceiros. :]

Abraço.

Do modo que foi feito nao da, ele nao salva quem esta na party, somente o numero

A unica hora que ele salva um creatureId em storage é quando está enviando convite

Linha 66:

setPlayerStorageValue(pid, 9155, getCreatureName(cid)

Um modo de salvar sem ocupar muito espaço seria por meio de string, e salvando o guid.

 

function removePartner(name)
    local listPartner = getOfflinePlayerStorageValue(name, listPartnerStorage)
    if listPartner == -1 then
        return false
    end
    
    local guid = getPlayerGUIDByName(name)
    listPartner = listPartner:gsub(string.format("%d|", guid), "")
    setOfflinePlayerStorageValue(name, listPartnerStorage, listPartner)
    return true
end

function addPartner(name)
    local listPartner = getOfflinePlayerStorageValue(name, listPartnerStorage)
    if listPartner == -1 then
        listPartner = ""
    end
    
    local guid = getPlayerGUIDByName(name)
    if not (listPartner:match(string.format("%d|", guid))) then
        listPartner = listPartner .. string.format("%d|", guid)
        setOfflinePlayerStorageValue(name, listPartnerStorage, listPartner)
        return true
    end
    
    return false
end

function getPartners(name)
    local players = {}
    
    local listPartner = getOfflinePlayerStorageValue(name, listPartnerStorage)
    if listPartner == -1 then
        return players
    end
    
    for guid in listPartner:gmatch("(%d+)|") do
        table.insert(players, guid)
    end
    
    return players
end

Dai tu implementa isso no code

Editado Abril 17 por dalvorsn

MateusooM
17 de abril de 2014 às 00:19

Do modo que foi feito nao da, ele nao salva quem esta na party, somente o numero

A unica hora que ele salva um creatureId em storage é quando está enviando convite

Linha 66:

setPlayerStorageValue(pid, 9155, getCreatureName(cid)

Um modo de salvar sem ocupar muito espaço seria por meio de string, e salvando o guid.

function removePartner(name)
    local listPartner = getOfflinePlayerStorageValue(name, listPartnerStorage)
    if listPartner == -1 then
        return false
    end
    
    local guid = getPlayerGUIDByName(name)
    listPartner = listPartner:gsub(string.format("%d|", guid), "")
    setOfflinePlayerStorageValue(name, listPartnerStorage, listPartner)
    return true
end

function addPartner(name)
    local listPartner = getOfflinePlayerStorageValue(name, listPartnerStorage)
    if listPartner == -1 then
        listPartner = ""
    end
    
    local guid = getPlayerGUIDByName(name)
    if not (listPartner:match(string.format("%d|", guid))) then
        listPartner = listPartner .. string.format("%d|", guid)
        setOfflinePlayerStorageValue(name, listPartnerStorage, listPartner)
        return true
    end
    
    return false
end

function getPartners(name)
    local players = {}
    
    local listPartner = getOfflinePlayerStorageValue(name, listPartnerStorage)
    if listPartner == -1 then
        return players
    end
    
    for guid in listPartner:gmatch("(%d+)|") do
        table.insert(players, guid)
    end
    
    return players
end

Dai tu implementa isso no code

Olá,

Muito bom também! Vou adicionar aqui no Mod do Luck, se precisar, já tenho feito!

Amanha lhe reputarei também, um grande abraço e obrigado por sempre está ajudando.

Boa noite :]

 

~Edit:

Testado e tudo funciona, obrigado Zipter e Dalvo.

Pode fechar e mover. Abraços.

Editado Abril 17 por Mateusoo

zipter98Z
17 de abril de 2014 às 01:53

Tópico movido para a seção de dúvidas e pedidos resolvidos.